使用 python 将 rdf 转换为 xml
Convert rdf to xml with python
您好,我有这个 RDF 输入,我想用 python 将它变成 xml 样式,现在我该怎么做?
@prefix Person: <http://example.org/> .
Person:Sophie Person:gender "women" ;
Person:likes Person:Peter .
Person:Frank Person:bornIn "1949" ;
Person:gender "Men" ;
Person:married Person:Susie .
Person:Peter Person:father Person:Frank ;
Person:gender "Men" ;
Person:likes Person:Sandra ;
Person:mother Person:Susie .
Person:Sandra Person:bornIn "1980" ;
Person:gender "women" .
Person:Susie Person:bornIn "1956" ;
Person:gender "women" .
您可以安装 rdflib
包并使用它在 RDF 格式之间进行转换。在您的情况下,数据似乎存储在“notation3”语法中。要对此进行解析,您需要在读取图形时指定格式为 'n3'
.
我使用 StringIO
代替下面的实际文件,但概念是一样的。
import rdflib
from io import StringIO, BytesIO
str_in = StringIO('''@prefix Person: <http://example.org/> .
Person:Sophie Person:gender "women" ;
Person:likes Person:Peter .
Person:Frank Person:bornIn "1949" ;
Person:gender "Men" ;
Person:married Person:Susie .
Person:Peter Person:father Person:Frank ;
Person:gender "Men" ;
Person:likes Person:Sandra ;
Person:mother Person:Susie .
Person:Sandra Person:bornIn "1980" ;
Person:gender "women" .
Person:Susie Person:bornIn "1956" ;
Person:gender "women" .'''
)
g = rdflib.Graph()
g.parse(str_in, format='n3')
此时数据已加载到图中。如果你想把它写成一种新的格式,比如 XML,你可以通过下面的方式来实现。要写入文件,只需将文件路径作为 g.serialize()
.
的第一个参数
g.serialize('path/to/file.xml', format='pretty-xml')
with open('path/to/file.xml') as fp:
print(fp.read())
# prints:
<?xml version="1.0" encoding="utf-8"?>
<rdf:RDF xmlns:Person="http://example.org/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<rdf:Description rdf:about="http://example.org/Sophie">
<Person:likes>
<rdf:Description rdf:about="http://example.org/Peter">
<Person:gender>Men</Person:gender>
<Person:likes rdf:resource="http://example.org/Sandra"/>
<Person:father rdf:resource="http://example.org/Frank"/>
<Person:mother rdf:resource="http://example.org/Susie"/>
</rdf:Description>
</Person:likes>
<Person:gender>women</Person:gender>
</rdf:Description>
<rdf:Description rdf:about="http://example.org/Susie">
<Person:gender>women</Person:gender>
<Person:bornIn>1956</Person:bornIn>
</rdf:Description>
<rdf:Description rdf:about="http://example.org/Frank">
<Person:married rdf:resource="http://example.org/Susie"/>
<Person:bornIn>1949</Person:bornIn>
<Person:gender>Men</Person:gender>
</rdf:Description>
<rdf:Description rdf:about="http://example.org/Sandra">
<Person:bornIn>1980</Person:bornIn>
<Person:gender>women</Person:gender>
</rdf:Description>
</rdf:RDF>
您好,我有这个 RDF 输入,我想用 python 将它变成 xml 样式,现在我该怎么做?
@prefix Person: <http://example.org/> .
Person:Sophie Person:gender "women" ;
Person:likes Person:Peter .
Person:Frank Person:bornIn "1949" ;
Person:gender "Men" ;
Person:married Person:Susie .
Person:Peter Person:father Person:Frank ;
Person:gender "Men" ;
Person:likes Person:Sandra ;
Person:mother Person:Susie .
Person:Sandra Person:bornIn "1980" ;
Person:gender "women" .
Person:Susie Person:bornIn "1956" ;
Person:gender "women" .
您可以安装 rdflib
包并使用它在 RDF 格式之间进行转换。在您的情况下,数据似乎存储在“notation3”语法中。要对此进行解析,您需要在读取图形时指定格式为 'n3'
.
我使用 StringIO
代替下面的实际文件,但概念是一样的。
import rdflib
from io import StringIO, BytesIO
str_in = StringIO('''@prefix Person: <http://example.org/> .
Person:Sophie Person:gender "women" ;
Person:likes Person:Peter .
Person:Frank Person:bornIn "1949" ;
Person:gender "Men" ;
Person:married Person:Susie .
Person:Peter Person:father Person:Frank ;
Person:gender "Men" ;
Person:likes Person:Sandra ;
Person:mother Person:Susie .
Person:Sandra Person:bornIn "1980" ;
Person:gender "women" .
Person:Susie Person:bornIn "1956" ;
Person:gender "women" .'''
)
g = rdflib.Graph()
g.parse(str_in, format='n3')
此时数据已加载到图中。如果你想把它写成一种新的格式,比如 XML,你可以通过下面的方式来实现。要写入文件,只需将文件路径作为 g.serialize()
.
g.serialize('path/to/file.xml', format='pretty-xml')
with open('path/to/file.xml') as fp:
print(fp.read())
# prints:
<?xml version="1.0" encoding="utf-8"?>
<rdf:RDF xmlns:Person="http://example.org/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<rdf:Description rdf:about="http://example.org/Sophie">
<Person:likes>
<rdf:Description rdf:about="http://example.org/Peter">
<Person:gender>Men</Person:gender>
<Person:likes rdf:resource="http://example.org/Sandra"/>
<Person:father rdf:resource="http://example.org/Frank"/>
<Person:mother rdf:resource="http://example.org/Susie"/>
</rdf:Description>
</Person:likes>
<Person:gender>women</Person:gender>
</rdf:Description>
<rdf:Description rdf:about="http://example.org/Susie">
<Person:gender>women</Person:gender>
<Person:bornIn>1956</Person:bornIn>
</rdf:Description>
<rdf:Description rdf:about="http://example.org/Frank">
<Person:married rdf:resource="http://example.org/Susie"/>
<Person:bornIn>1949</Person:bornIn>
<Person:gender>Men</Person:gender>
</rdf:Description>
<rdf:Description rdf:about="http://example.org/Sandra">
<Person:bornIn>1980</Person:bornIn>
<Person:gender>women</Person:gender>
</rdf:Description>
</rdf:RDF>