Python和rdflib:解析问题

时间:2014-05-09 01:10:56

标签: python rdf rdflib

我正在使用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中调试此和/或替代方案?

Mulone

1 个答案:

答案 0 :(得分:3)

调用parse时需要使用format关键字:

g.parse( ex, format="nt" )

正如您所注意到的,解析将默认为RDF / XML

我还建议从rdflib 2.4.2-3升级到最新版本4.1.2。你可以通过easy_install或pip来获得这个。您引用的文档适用于版本4+。