Как создать параметризованный запрос в SPARQLWrapper в python
Я использую следующий запрос sparql с использованием SPARQLWrapper следующим образом.
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 ответа
Поскольку вы хотите ввести значение переменной, оно должно быть вне строки. И вы не делаете это с ?
, вы делаете это с конкатенацией начала строки + 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-строки:
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"
" ")