[英]Using Python rdflib: how to include literals in sparql queries?
[英]ASK SPARQL queries in rdflib
我正在尝试学习SPARQL,并且正在使用python的rdflib进行训练。 我已经做了几次尝试,但是任何ASK查询似乎总是会给我返回True结果。 例如,我尝试了以下方法:
#!/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)
即使'try.ttl'中没有false.com类型的主题,结果也为true。 谁能解释我为什么? 预先感谢您的帮助!
更新:阅读rdflib手册后,我发现结果的类型为list,并且(在我的情况下)应该包含单个布尔值以及来自Ask查询的返回值。 我尝试了以下操作:对于x中的结果:print x我得到了“无”。 我猜我没有以正确的方式使用查询方法。
该文档实际上并没有说它是列表类型,但是您可以对其进行迭代,也可以将其转换为布尔值:
如果类型为“ ASK”,则迭代将产生一个布尔值(或bool(result)将返回相同的布尔值)
这意味着您已经完成了print bool(results)
工作。 实际上,您的代码确实对我有用:
$ 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
如果将一些数据添加到文件中,使查询返回true,则得到true:
$ cat > try.ttl
<http://example.org> a <http://false.com> .
$ cat try.ttl
<http://example.org> a <http://false.com> .
$ ./test.py
True
也许您正在使用该库的旧版本? 还是引入了新版本并引入了错误? 我正在使用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'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.