将RDF文本添加到图形RDFlib

时间:2013-07-15 13:33:24

标签: python rdf rdflib

如何将已分配给变量的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'))

2 个答案:

答案 0 :(得分:3)

在Java中,使用Jena,我使用ByteArrayInputStream来做这样的事情来创建RDF文本的输入流,然后我可以将其传递给解析函数(通常接受URI和InputStreams。文档Graph.parse

  

parse(source = None,publicID = None,format = None,location = None,file = None,data = None,** args)

     

参数

     
      
  • source:InputSource,类文件对象或字符串。对于字符串,字符串是源的位置。
  •   

  

更新: lawlesst提供an answer,指出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's answer,可以简化而不使用StringIO,只需:

g.parse( data=block, format='xml' )

答案 1 :(得分:2)

RDFLib Graph.parse方法将接受作为字符串的'data'关键字参数。

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

有一个example in the RDFLib Graph docstrings

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