使用 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>