有没有一种方法可以参数化sparql过滤条件?

时间:2020-05-05 15:19:54

标签: python filter sparql rdf

我试图找出以浮点值作为输入来参数化过滤条件的最佳方法是什么。

count=25.67
FILTER(?price < count)

代替:

FILTER ( ?price < 25.67 )

“ count”的值将作为输入。

我想知道在FILTER命令中包括对象计数的语法。

谢谢。

2 个答案:

答案 0 :(得分:1)

没有神奇的SPARQL语法可以做到这一点:与SQL一样,至少在Python中,您必须从字符串中进行SPARQL查询。因此,您想要的任何用户输入都必须输入随后作为查询发送的字符串。假设您想使所有价格都大于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字符串(个人喜好),因此我必须在查询中使用双括号“ {{””

答案 1 :(得分:1)

以下是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文档)