我通过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,这是不正确的。我只是想知道我的代码哪里错了。
如果需要,我很乐意提供更多的细节。
发布于 2019-02-22 20:25:32
因为您想引入变量的值,所以它必须在字符串之外。而不是使用?,而是字符串的开头+ 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'])发布于 2019-02-22 20:30:20
如果你使用Python字符串,你可以使用f- 3.6+:
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)产生相同的输出。
发布于 2019-02-25 05:42:50
这段代码应该可以解决您的问题,请检查它。
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"
" ")https://stackoverflow.com/questions/54827065
复制相似问题