2
votes

Comment créer une requête paramétrée dans SPARQLWrapper en python

J'utilise la requête sparql suivante en utilisant SPARQLWrapper comme suit.

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

Cette requête renvoie False qui est la sortie correcte.

J'essaie de modifier le code susmentionné en convertissant la requête en une requête paramétrée (en utilisant une variable pour le nom de catégorie comme suit).

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

Après avoir effectué cette modification, le code renvoie maintenant True , ce qui est incorrect. Je me demande simplement où j'ai mal commis mon code.

Je serai ravi de fournir plus de détails si nécessaire.


3 Réponses :


1
votes

Parce que vous souhaitez introduire la valeur de la variable, elle doit être en dehors de la chaîne. Et vous ne faites pas ça avec un ? , vous le faites avec une concaténation du début de la chaîne + votre_variable + fin de la chaîne.

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


0 commentaires

2
votes

Si vous utilisez Python 3.6+, vous pouvez utiliser des f-strings:

" ASK {{ {}  skos:broader{{1,7}} dbc:Medicine }} ".format(my_variable)

sera

' ASK { dbc:Meteorological_concepts  skos:broader{1,7} dbc:Medicine } '

pour les anciennes versions, vous peut utiliser format:

f" ASK {{ {my_variable}  skos:broader{{1,7}} dbc:Medicine }} "

donnant le même résultat.


0 commentaires

1
votes

Ce code devrait résoudre votre problème, vérifiez-le.

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


0 commentaires