我非常沮丧地使用 rdflib(包 python-rdflib 2.4.2-3,Python 2.7.5+,Ubuntu 13.10)。
我只是想将两个 NT 文件加载到本地三元组存储中。这是代码:
from rdflib import Graph
graph = Graph('Sleepycat')
rt = graph.open(fn)
# everything is fine, triplestore open.
# try to parse some files
ex = "http://dbpedia.org/data3/Place.ntriples"
# ex = "http://dbpedia.org/data3/Place.n3" # another option
# none of the following works
g.parse( ex )
g.parse( ex, "n3" )
g.parse( ex, "nt" )
g.parse( ex, "ntriple" )
g.parse( ex, "thisisrubbish" )
此代码总是引发
xml.sax._exceptions.SAXParseException: http://dbpedia.org/data3/Place.ntriples:1:6: not well-formed (invalid token)
。很明显
parse
默认为 RDF 格式,试图将文本解析为 XML(并且失败)。如最后一行所示,代码不会检查格式是否存在。它只是忽略它。另一个令人恼火的方面是
parse
似乎从图中删除了所有内容,这不是 in the documentation 描述的行为:graph = Graph('Sleepycat')
graph.open("somewhere.db")
graph.parse(input1) # graph contains input1
graph.parse(input2) # graph contains only input2, but should contain input1+input2.
我不得不承认该库看起来太笨拙而无法使用。
关于如何在 Python 中调试这个和/或替代方案的任何想法?
穆隆
最佳答案
调用 parse 时需要使用 format 关键字:
g.parse( ex, format="nt" )
正如您所注意到的,解析将默认为 RDF/XML
我还建议从 rdflib 2.4.2-3 升级到最新版本 4.1.2。您可以使用 easy_install 或 pip 来获得它。您引用的文档适用于版本 4+。
关于Python 和 rdflib : parsing issues,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23555143/