EmJ
EmJ

Reputation: 4608

How to create a parameterised query in SPARQLWrapper in python

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.

Upvotes: 5

Views: 2034

Answers (3)

Saad Khan
Saad Khan

Reputation: 31

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"
                    "                   ")

Upvotes: 1

Cleb
Cleb

Reputation: 25997

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.

Upvotes: 2

luis.galdo
luis.galdo

Reputation: 593

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'])

Upvotes: 1

Related Questions