有没有办法参数化 sparql 过滤条件?
is there a way to parameterize a sparql filter condition?
我正在尝试找出以浮点值作为输入来参数化过滤条件的最佳方法。
count=25.67
FILTER(?price < count)
而不是:
FILTER ( ?price < 25.67 )
"count"的值将作为输入。
我想知道在 FILTER 命令中包含对象计数的语法。
提前致谢。
没有神奇的 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-strings(个人口味),所以我必须在查询中使用双括号“{{”
这是一个 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"))
(改编自 https://sparqlwrapper.readthedocs.io/en/latest/main.html 的 SPARQLWrapper 文档)
我正在尝试找出以浮点值作为输入来参数化过滤条件的最佳方法。
count=25.67
FILTER(?price < count)
而不是:
FILTER ( ?price < 25.67 )
"count"的值将作为输入。
我想知道在 FILTER 命令中包含对象计数的语法。
提前致谢。
没有神奇的 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-strings(个人口味),所以我必须在查询中使用双括号“{{”
这是一个 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"))
(改编自 https://sparqlwrapper.readthedocs.io/en/latest/main.html 的 SPARQLWrapper 文档)