1

我正在尝试使用 rdflib 以 xml 格式加载和解析一个非常简单的 rdf 文件。我不认为,它解析正确。这是我的 rdf/xml 文件,

<rdf:RDF xmlns:rdf="http://w3.org/1999/02/22-rdf-syntax-ns#" 
         xmlns:foaf="http://xmlns.com/foaf/0.1/"
>

  <foaf:Person>
    <foaf:name>Peter Parker</foaf:name>
  </foaf:Person>

</rdf:RDF>

我的python脚本在这里,

from rdflib import Graph

g = Graph()
g.parse("person_1.rdf", format="xml")

print(len(g))

print(g.serialize(format="xml").decode("u8"))

print("Test - 2")

而且,这是程序输出,

3
<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF
   xmlns:foaf="http://xmlns.com/foaf/0.1/"
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
>
  <rdf:Description rdf:nodeID="Nababb97ad88341329a7cf22cec65c00c">
    <rdf:type rdf:resource="http://w3.org/1999/02/22-rdf-syntax-ns#RDF"/>
    <foaf:Person rdf:nodeID="Nfa7b9ab24fae4bcd9ffbaa13aeb733db"/>
  </rdf:Description>
  <rdf:Description rdf:nodeID="Nfa7b9ab24fae4bcd9ffbaa13aeb733db">
    <rdf:type rdf:resource="http://xmlns.com/foaf/0.1/name"/>
  </rdf:Description>
</rdf:RDF>

Test - 2

我在输出中没有看到“Peter Parker”这个名字。难道我做错了什么。提前致谢。

4

3 回答 3

1

您将使用 foafpersonal profile 文档属性包围文档,如下所示

<foaf:PersonalProfileDocument>
  <foaf:Person>
    <foaf:family_name>Peter Parker</foaf:family_name>
  </foaf:Person>
</foaf:PersonalProfileDocument>
</rdf:RDF>

然后导入foaf命名空间如下

from rdflib.namespace import FOAF , XSD
于 2020-12-17T21:04:12.217 回答
0

如果您只想检索数据,请尝试以下方法。

from simplified_scrapy import utils, SimplifiedDoc, req
xml = '''
<rdf:RDF xmlns:rdf="http://w3.org/1999/02/22-rdf-syntax-ns#" 
         xmlns:foaf="http://xmlns.com/foaf/0.1/"
>

  <foaf:Person>
    <foaf:name>Peter Parker</foaf:name>
  </foaf:Person>

</rdf:RDF>
'''
# xml = utils.getFileContent('person_1.rdf')
doc = SimplifiedDoc(xml)
print(doc.select('foaf:Person>foaf:name>text()'))
# Or
print(doc.select('foaf:name>text()'))
# Or
print(doc.select('foaf:name'))

结果:

Peter Parker
Peter Parker
{'tag': 'foaf:name', 'html': 'Peter Parker'}
于 2020-12-17T05:41:20.133 回答
0

我在解析这个 RDF 时没有看到任何问题——它是有效的 RDF——但是在重新序列化时你没有看到好的结果的原因是它是没有意义的糟糕 RDF!您需要标识人员节点。如果你知道 Peter Parker 的 URI 是 http://example.com/person/pp那么你可以使用:

<?xml version="1.0" encoding="utf-8"?>
<rdf:RDF
  xmlns:foaf="http://xmlns.com/foaf/0.1/"
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
>
  <foaf:Person rdf:about="http://example.com/person/pp">
    <foaf:name>Peter Parker</foaf:name>
  </foaf:Person>
</rdf:RDF>

如果你不知道 Peter Parker 的 URI,你可以使用一个空白节点:

<?xml version="1.0" encoding="utf-8"?>
<rdf:RDF
  xmlns:foaf="http://xmlns.com/foaf/0.1/"
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
>
  <foaf:Person rdf:nodeID="ub2bL2C1">
    <foaf:name>Peter Parker</foaf:name>
  </foaf:Person>
</rdf:RDF>

但是到目前为止,RDF 的所有内容都是为了更好地为人员分配 URI。

于 2021-02-09T06:07:19.283 回答