4

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.

EmJ
  • 4,398
  • 9
  • 44
  • 105
  • 1
    https://www.programiz.com/python-programming/string-interpolation, https://realpython.com/python-string-formatting/#which-string-formatting-method-should-you-use – Stanislav Kralin Feb 22 '19 at 15:44
  • @StanislavKralin Could you please let me know if you know an answer for this: https://stackoverflow.com/questions/55206966/how-to-add-special-categories-in-sparqlwrapper-in-python – EmJ Mar 17 '19 at 13:18

3 Answers3

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.

Cleb
  • 25,102
  • 20
  • 116
  • 151
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'])
luis.galdo
  • 543
  • 5
  • 20
1

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"
                    "                   ")
kosist
  • 2,868
  • 2
  • 17
  • 30
Saad Khan
  • 31
  • 6