есть ли способ параметризовать условие фильтра sparql? - PullRequest
0 голосов
/ 05 мая 2020

Я пытаюсь выяснить, как лучше всего параметризовать условие фильтра с помощью значения с плавающей запятой, взятого в качестве входного.

count=25.67
FILTER(?price < count)

вместо:

FILTER ( ?price < 25.67 )

Значение of "count" будет приниматься в качестве входных данных.

Я хотел бы знать синтаксис для включения счетчика объектов в команду FILTER.

Заранее благодарю

Ответы [ 2 ]

1 голос
/ 12 мая 2020

Вот пример использования setQuery с параметром, добавленным через `.format ():

from SPARQLWrapper import SPARQLWrapper, JSON


def query_dbpedia(my_uri)
    sparql = SPARQLWrapper("http://dbpedia.org/sparql")
    q = """
        PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>

        SELECT ?label
        WHERE {{
            {} rdfs:label ?label .
        }}
    """.format(my_uri)
    sparql.setQuery(q)
    sparql.setReturnFormat(JSON)
    results = sparql.query().convert()

    results_to_return = []
    for result in results["results"]["bindings"]:
        results_to_return.append(result["label"]["value"])

    return results_to_return

print(query_dbpedia("http://dbpedia.org/resource/Asturias"))

(адаптировано из документации SPARQLWrapper в https://sparqlwrapper.readthedocs.io/en/latest/main.html)

1 голос
/ 06 мая 2020

Для этого не существует синтаксиса magi c SPARQL: как и SQL, вы должны сделать запрос SPARQL из строки, по крайней мере, в Python. Следовательно, любой пользовательский ввод, который вы хотите, должен составлять строку, которую вы затем отправляете в качестве запроса. Допустим, вы хотите получить все цены больше price_to_be_less_than, вы должны сделать это в RDFlib Python:

def get_prices(g, price_to_be_less_than):
    q = """
        SELECT ?item 
        WHERE {{
            ?item ex:hasPrice ?price .

            FILTER (?price < {})
        }}
        """.format(price_to_be_less_than)

       items = []
       for r in g.query(q):
           items.append(r["item"])

       return items

Я использую .format(), а не f-строки (личные вкус), поэтому мне нужно использовать двойные фигурные скобки, "{{", в запросе

...