问题
I am using the following sparql query using SPARQLWrapper as follows.
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'])
This query returns False
which is the correct output.
I try to modify the aforementioned code by convering the query to a parameterised query (by using a variable for the category name
as follows).
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'])
After doing this modification, now the code returns True
, which is incorrect. Just wondering where I have made my code wrong.
I am happy to provide more details if needed.
回答1:
Because you want to introduce the value of the variable, it must be out of the string. And you do not do that with a ?
, you do it with a concatenation of beginning of the string + your_variable
+ end of the string.
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'])
回答2:
If you use Python 3.6+, you can use f-strings:
f" ASK {{ {my_variable} skos:broader{{1,7}} dbc:Medicine }} "
will be
' ASK { dbc:Meteorological_concepts skos:broader{1,7} dbc:Medicine } '
for older versions, you can use format
:
" ASK {{ {} skos:broader{{1,7}} dbc:Medicine }} ".format(my_variable)
yielding the same output.
回答3:
This code should solve your problem, check it out.
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/how-to-create-a-parameterised-query-in-sparqlwrapper-in-python