Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将RDF文本添加到图形RDFlib_Python_Rdf_Rdflib - Fatal编程技术网

Python 将RDF文本添加到图形RDFlib

Python 将RDF文本添加到图形RDFlib,python,rdf,rdflib,Python,Rdf,Rdflib,如何将分配给变量的RDF文本(该文本也经过验证,是正确的RDF)添加到RDFlib中的图形中 我将一个变量分配给一组RDf格式的文本,如下所示: block='' ....................... ....................... ''' 我知道我可以将其写入一个文件,然后将该文件读取到图形中,但我想知道是否有一种方法可以将其添加到同一文件中的图形中(就像您对三元组所做的那样),类似于: graph.add(block) 游戏的最终目的是使用以下方式以N3格式显示

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

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

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

graph.add(block)
游戏的最终目的是使用以下方式以N3格式显示它们:

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

在Java中,使用Jena,我使用从RDF文本创建一个输入流,然后将其传递给解析函数(通常接受URI和InputStreams)

解析(source=None,publicID=None,format=None,location=None,file=None,data=None,**参数)

参数

  • 源:InputSource、类似文件的对象或字符串。对于字符串,字符串是源的位置
更新:lawlesst指出Graph.parse的数据参数可以是包含RDF内容的字符串。文档现在提到了这一点,但我认为我最初回答时没有提到。在我看来,应该首选lawlesst的答案

因此,要应用相同的习惯用法,您只需要从字符串创建一个
InputSource
或“类似文件的对象”。我不是什么Pythonista,所以我最初认为您希望采用
InputSource
路线,但这似乎是一个SAX解析器。您可能想要的是Python:

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

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

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

block=''
…
'''
图g;
g、 解析(StringIO.StringIO(块),format='xml')
更新:基于此,无需StringIO即可简化为:


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

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


更新:我更新了我的答案,以包含下面每条评论的正确示例。在主控更改的情况下使用了4.1.2版本的标签。

parse()中的“data”关键字选项允许您直接指向字符串,而无需使用StringIO(请参阅下面@lawlest的答案)。您链接到的行只有
stream.close()
。我认为这是一个更好的例子。这是一个更好的答案。我希望文档(我在回答中引用的文档)解释了data关键字参数的用途。(更新:现在看起来是这样。也许在我编写原始答案时不是这样?),这样会省去一些麻烦。
#Where g is your graph.
g.parse(data=block, format="application/rdf+xml")