pythonsparqlsparqlwrapper

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.


Solution

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