2014-07-15 2 views
2

J'essaie d'apprendre SPARQL et j'utilise rdflib de python pour s'entraîner. J'ai fait quelques essais, mais toute requête ASK semble toujours me donner un résultat vrai. Par exemple, j'ai essayé les suivantes:ASK requêtes SPARQL dans rdflib

#!/usr/bin/python 
# -*- coding: utf-8 -*- 
import rdflib 
mygraph=rdflib.Graph(); 
mygraph.parse('try.ttl',format='n3'); 
results=mygraph.query(""" 
ASK {?p1 a <http://false.com>} 
""") 
print bool(results) 

Le résultat est vrai, même s'il n'y a pas de sujet de type false.com dans « try.ttl ». Quelqu'un peut-il m'expliquer pourquoi? Merci d'avance pour votre aide! MISE À JOUR: En lisant le manuel de rdflib, j'ai découvert que les résultats sont de type liste et (dans mon cas) devraient contenir un seul booléen avec la valeur de retour de la requête ask. J'ai essayé ce qui suit: pour x dans les résultats: impression x Et j'ai "Aucun". Je suppose que je n'utilise pas la méthode de requête de la bonne manière.

+0

Quelle version de rdflib utilisez-vous? –

Répondre

4

Le documentation ne fonctionne pas dit en fait qu'il est de la liste de type, mais que vous pouvez parcourir, ou vous pouvez le convertir en un booléen:

Si le type est « ask », itérer sera donner un seul bool (ou bool (résultat) retournera la même bool)

Cela signifie que print bool(results), comme vous l'avez fait, devrait fonctionner. En fait, votre code ne travail pour moi:

$ touch try.ttl 
$ cat try.ttl # it's empty 
$ cat test.py # same code 
#!/usr/bin/python 
# -*- coding: utf-8 -*- 
import rdflib 
mygraph=rdflib.Graph(); 
mygraph.parse('try.ttl',format='n3'); 
results=mygraph.query(""" 
ASK {?p1 a <http://false.com>} 
""") 
print bool(results) 
$ ./test.py # the data is empty, so there's no match 
False 

Si l'on ajoute des données au fichier qui rendrait le retour de requête vrai, nous obtenons vrai:

$ cat > try.ttl 
<http://example.org> a <http://false.com> . 
$ cat try.ttl 
<http://example.org> a <http://false.com> . 
$ ./test.py 
True 

Peut-être que vous utilisez une ancienne version de la bibliothèque? Ou une version plus récente et un bug a été introduit? J'utilise 4.0.1:

$ python 
Python 2.7.3 (default, Feb 27 2014, 19:58:35) 
[GCC 4.6.3] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import pkg_resources 
>>> pkg_resources.get_distribution("rdflib").version 
'4.0.1' 
+0

C'était mon problème! J'ai vérifié et ma version de rdflib était très ancienne (2.1 alors que la nouvelle version est 4.2). Merci beaucoup! – user3523375