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 :
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'])
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.
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" " ")
programiz.com/python-programming/string-interpolation , realpython.com/python-string-formatting/… a>
@StanislavKralin Pourriez-vous me faire savoir si vous connaissez une réponse à ce sujet: stackoverflow.com/questions/55206966/...