繁体   English   中英

rdflib中的ASK SPARQL查询

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM