How to create a parameterised query in SPARQLWrapper in python

∥☆過路亽.° 提交于 2019-12-24 00:44:32

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!