如何将已分配给变量的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'))
答案 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以防主机更改。