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

2022-03-26 00:00:00 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,这是不正确的。我只是想知道我的代码哪里错了。

如果需要,我很乐意提供更多详细信息。


解决方案

因为您要引入变量的值,所以它必须在字符串之外。而不是?,而是字符串开头+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'])

相关文章