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 .