如何在python中的SPARQLWrapper中创建参数化查询

时间:2019-02-22 12:21:18

标签: python sparql sparqlwrapper

我正在通过SPARQLWrapper使用以下sparql查询,如下所示。

from SPARQLWrapper import SPARQLWrapper, JSON
sparql = SPARQLWrapper("http://live.dbpedia.org/sparql")
sparql.setReturnFormat(JSON)
sparql.setQuery(" ASK { dbc:Meteorological_concepts skos:broader{1,7} dbc:Medicine } ")
results = sparql.query().convert()
print(results['boolean'])

此查询返回False,这是正确的输出。

我尝试通过将查询转换为参数化查询来修改上述代码(通过使用category name的变量,如下所示)。

from SPARQLWrapper import SPARQLWrapper, JSON
sparql = SPARQLWrapper("http://live.dbpedia.org/sparql")
sparql.setReturnFormat(JSON)

my_variable = 'dbc:Meteorological_concepts'

sparql.setQuery(" ASK { ?my_variable skos:broader{1,7} dbc:Medicine } ")
results = sparql.query().convert()
print(results['boolean'])

执行此修改后,现在代码返回True,这是不正确的。只是想知道我在哪里把我的代码弄错了。

很高兴在需要时提供更多详细信息。

3 个答案:

答案 0 :(得分:1)

因为要引入变量的值,所以它必须不在字符串中。而且您不使用?来执行此操作,而是使用字符串的开头+ your_variable +字符串的结尾进行连接。

from SPARQLWrapper import SPARQLWrapper, JSON
sparql = SPARQLWrapper("http://live.dbpedia.org/sparql")
sparql.setReturnFormat(JSON)

my_variable = 'dbc:Meteorological_concepts'

sparql.setQuery(" ASK { "+my_variable+" skos:broader{1,7} dbc:Medicine } ")
results = sparql.query().convert()
print(results['boolean'])

答案 1 :(得分:1)

如果您使用Python 3.6+,则可以使用f字符串:

f" ASK {{ {my_variable}  skos:broader{{1,7}} dbc:Medicine }} "

将是

' ASK { dbc:Meteorological_concepts  skos:broader{1,7} dbc:Medicine } '

对于较早的版本,您可以使用format

" ASK {{ {}  skos:broader{{1,7}} dbc:Medicine }} ".format(my_variable)

产生相同的输出。

答案 2 :(得分:1)

此代码应该可以解决您的问题,请检查一下。

from SPARQLWrapper import SPARQLWrapper, JSON
sparql = SPARQLWrapper("http://dbpedia.org/sparql")
sparql.setQuery("\n"
                    "    PREFIX dbpedia: <http://dbpedia.org/resource/>"
                    " PREFIX dbo: <http://dbpedia.org/ontology/>"
                    "PREFIX dbp: <http://dbpedia.org/property/>\n"
                    "PREFIX foaf: <http://xmlns.com/foaf/0.1/>\n"
                    "PREFIX rdfs:   <http://www.w3.org/2000/01/rdf-schema#>\n"
                    "PREFIX dct:    <http://purl.org/dc/terms/>\n"
                    "SELECT DISTINCT ?name  ?birthDate   WHERE {\n"
                   "dbpedia:"+d+" foaf:name ?name\n"
                    "}\n"
                    "                   ")