Python与rdflib:解析问题

4 投票
1 回答
2098 浏览
提问于 2025-04-18 05:55

我在使用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似乎会把图中的所有内容都删除,这种行为在文档中并没有描述

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 个回答

3

在调用解析(parse)的时候,你需要使用格式(format)这个关键词:

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

正如你所注意到的,解析默认会使用RDF/XML格式。

我还建议你把rdflib从2.4.2-3升级到最新的版本4.1.2。你可以通过easy_install或者pip来获取这个更新。你提到的文档是针对4.0及以上版本的。

撰写回答