2

如何将已分配给变量的 RDF 文本(该文本也已经过验证并且是正确的 RDF)添加到 RDFlib 中的图形?

我有一个变量分配给一堆 RDf 格式的文本,如下所示:

block = '''<?xml version="1.0"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:lem="http://www.example.eu/lem#" xmlns:lexinfo="http://www.sample.net/2.0/info#">
    <lem:Lexicon rdf:about="http://myserver/myns#lex">
.......................
.......................
</rdf:RDF>'''

我知道我可以将它写入一个文件,然后将该文件读入图表,但我想知道是否有一种方法可以将它添加到同一个文件中的图表中(就像你对三元组所做的那样),类似于:

graph.add(block)

最终游戏是使用以下命令以 N3 格式显示它们:

print (wordnet.graph.serialize(format='n3'))
4

2 回答 2

3

在 Java 中,使用 Jena,我使用 aByteArrayInputStream从 RDF 文本创建输入流,然后我可以将其传递给解析函数(通常同时接受 URI 和 InputStreams。文档Graph.parse

解析(源=无,publicID=无,格式=无,位置=无,文件=无,数据=无,**args)

参数

  • source:一个 InputSource、类似文件的对象或字符串。在字符串的情况下,字符串是源的位置。

更新: lawlesst 提供了一个答案,指出 Graph.parse 的数据参数可以是包含 RDF 内容的字符串。文档现在提到了这一点,但我认为我最初回答时并没有这样做。在我看来,lawlesst 的回答应该是首选。

因此,要应用相同的习惯用法,您只需InputSource要从您的字符串创建一个或“类似文件的对象”。我不是一个 Pythonista,所以我原本以为你会想走这InputSource条路,但看起来那是 SAX 解析器的事情。你可能想要的是 Python 的StringIO

7.5。StringIO — 以文件形式读取和写入字符串

该模块实现了一个类文件类 StringIO,它读取和写入字符串缓冲区(也称为内存文件)。有关操作,请参阅文件对象的描述(文件对象部分)。(对于标准字符串,请参阅 str 和 unicode。)

class StringIO.StringIO([buffer])
创建 StringIO 对象时,可以通过将字符串传递给构造函数将其初始化为现有字符串。如果没有给出字符串,StringIO 将开始为空。在这两种情况下,初始文件位置都从零开始。

所以看起来如果你StringIO用给定的文本创建一个,那么你可以将它作为第一个参数传递给Graph.parse. 正如我所说,我并不是真正的 Python 用户,但我认为它看起来像这样:

block = '''<?xml version="1.0"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
 …
</rdf:RDF>'''
Graph g;
g.parse( StringIO.StringIO(block), format='xml')

更新: 根据lawlesst 的回答,这可以在没有 StringIO 的情况下简化为:

g.parse( data=block, format='xml' )
于 2013-07-15T13:46:59.480 回答
3

RDFLib Graph.parse 方法将接受一个字符串形式的“数据”关键字参数。

#Where g is your graph.
g.parse(data=block, format="application/rdf+xml")

RDFLib Graph docstrings 中有一个示例。

更新:我更新了我的答案,以在下面的评论中包含正确的示例。使用标记的版本 4.1.2 以防主更改。

于 2013-07-31T15:17:08.563 回答