0

我在网上找到了一个关于 RDF 的例子:

<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#   xmlns:ns="http://www.example.org/#">
  <ns:Person rdf:about="http://www.example.org/#john">
    <ns:hasMother rdf:resource="http://www.example.org/#susan" />
    <ns:hasBrother rdf:resouce="http://www.example.org/#luke" />
  </ns:Person>
</rdf:RDF>

如果约翰有两个兄弟,我们将如何修改文档?

4

1 回答 1

4

RDF 是基于的数据表示,您所展示的是RDF/XML 语法中的 RDF 图的序列化。RDF/XML 不是一种特别适合人类阅读的序列化,也不适合手写。但是,在这种情况下,您可以添加另一个兄弟:

<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
         xmlns:ns="http://www.example.org/#">
  <ns:Person rdf:about="http://www.example.org/#john">
    <ns:hasBrother rdf:resource="http://www.example.org/#billy" />
    <ns:hasMother rdf:resource="http://www.example.org/#susan" />
    <ns:hasBrother rdf:resource="http://www.example.org/#luke" />
  </ns:Person>
</rdf:RDF>

但是,同一个 RDF 图可以通过多种不同的方式进行序列化,因此您无法可靠且轻松地操作 RDF/XML 来更新图。例如,上图可以表示为

<rdf:RDF
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:ns="http://www.example.org/#" > 
  <rdf:Description rdf:about="http://www.example.org/#john">
    <rdf:type rdf:resource="http://www.example.org/#Person"/>
    <ns:hasMother rdf:resource="http://www.example.org/#susan"/>
    <ns:hasBrother rdf:resource="http://www.example.org/#billy"/>
    <ns:hasBrother rdf:resource="http://www.example.org/#luke"/>
  </rdf:Description>
</rdf:RDF>

就像您不应该使用 XPath 查询 RDF/XML一样,您也不应该真正尝试手动修改 RDF/XML(尽管它没有那么糟糕)。您应该获得一个 RDF 库,加载模型,使用库的 API 对其进行修改,然后再次将其写回。

如果您确实想手动编写,我建议您使用 Turtle 序列化,您的原始图形在哪里:

@prefix ns:    <http://www.example.org/#> .
@prefix rdf:   <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .

ns:john  a             ns:Person ;
        ns:hasBrother  ns:luke ;
        ns:hasMother   ns:susan .

添加另一个兄弟很简单:

@prefix ns:    <http://www.example.org/#> .
@prefix rdf:   <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .

ns:john  a             ns:Person ;
        ns:hasBrother  ns:billy , ns:luke ;
        ns:hasMother   ns:susan .
于 2013-10-03T19:03:18.147 回答