python 如何在 SPARQLWrapper 中创建参数化查询
How to create a parameterised query in SPARQLWrapper in python
我正在使用以下使用 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'])
这个查询 returns 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'])
进行此修改后,现在的代码 returns 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'])
如果你使用Python 3.6+,你可以使用f-strings:
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)
产生相同的输出。
这段代码应该可以解决您的问题,请检查一下。
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"
" ")
我正在使用以下使用 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'])
这个查询 returns 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'])
进行此修改后,现在的代码 returns 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'])
如果你使用Python 3.6+,你可以使用f-strings:
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)
产生相同的输出。
这段代码应该可以解决您的问题,请检查一下。
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"
" ")