首先,请注意您已使用 声明了该属性Know
,<rdf:Property rdf:about="Know">…</rdf:Property>
但您Knows
在其余代码中使用了该属性。
如果您需要手动编写 RDF,使用一种人类可读和可写的语法会更容易,例如 Turtle(正如 Michael 在对您上一个问题的回答中所建议的那样)。在 Turtle 中,我们可以为您目前所拥有的内容编写:
@prefix : <https://stackoverflow.com/q/22782748/1281433/>
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
:Knows a rdfs:Property ;
rdfs:domain :Person ;
rdfs:range :Person .
:Mark :Knows :Katrin .
:Katrin :Knows :John .
如果您出于某种原因在 RDF/XML 中确实需要它,您可以使用 Jena 之类的转换器rdfcat
来获得如下输出:
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns="https://stackoverflow.com/q/22782748/1281433/"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#">
<rdfs:Property rdf:about="https://stackoverflow.com/q/22782748/1281433/Knows">
<rdfs:domain rdf:resource="https://stackoverflow.com/q/22782748/1281433/Person"/>
<rdfs:range rdf:resource="https://stackoverflow.com/q/22782748/1281433/Person"/>
</rdfs:Property>
<rdf:Description rdf:about="https://stackoverflow.com/q/22782748/1281433/Mark">
<Knows>
<rdf:Description rdf:about="https://stackoverflow.com/q/22782748/1281433/Katrin">
<Knows rdf:resource="https://stackoverflow.com/q/22782748/1281433/John"/>
</rdf:Description>
</Knows>
</rdf:Description>
</rdf:RDF>
现在,要说类似
katrin 拥有一条 ID 为 10 的狗,这条狗的颜色为黑色,它的名字叫 Peter。
声明新属性(owns、hasColor、hasId 等)与上面完全相同。你不需要声明一个属性来使用它,所以我不会在这里包含新属性的声明。此外,您上一个问题的答案,当我声明属性时如何使用它时,显示了如何声明属性。)如果您有狗的 IRI,并且“它的名字是 Peter”,您的意思是它的 IRI 是<…Peter>
,那么你可以这样做:
@prefix : <https://stackoverflow.com/q/22782748/1281433/>
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
:Katrin :owns :Peter .
:Peter a :Dog ;
:hasId 10 ;
:hasColor "black" .
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns="https://stackoverflow.com/q/22782748/1281433/"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#">
<rdf:Description rdf:about="https://stackoverflow.com/q/22782748/1281433/Katrin">
<owns>
<Dog rdf:about="https://stackoverflow.com/q/22782748/1281433/Peter">
<hasId rdf:datatype="http://www.w3.org/2001/XMLSchema#integer"
>10</hasId>
<hasColor>black</hasColor>
</Dog>
</owns>
</rdf:Description>
</rdf:RDF>
如果您没有狗的 IRI,则可以使用空白节点:
@prefix : <https://stackoverflow.com/q/22782748/1281433/>
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
:Katrin :owns _:dog .
_:dog a :Dog ;
:hasName "Peter" ;
:hasId 10 ;
:hasColor "black" .
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns="https://stackoverflow.com/q/22782748/1281433/"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#">
<rdf:Description rdf:about="https://stackoverflow.com/q/22782748/1281433/Katrin">
<owns>
<Dog>
<hasName>Peter</hasName>
<hasId rdf:datatype="http://www.w3.org/2001/XMLSchema#integer"
>10</hasId>
<hasColor>black</hasColor>
</Dog>
</owns>
</rdf:Description>
</rdf:RDF>
而不是_:dog
空白节点的符号,我通常会在这里使用更紧凑的缩写符号:
@prefix : <https://stackoverflow.com/q/22782748/1281433/>
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
:Katrin :owns [ a :Dog ;
:hasName "Peter" ;
:hasId 10 ;
:hasColor "black" ] .
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns="https://stackoverflow.com/q/22782748/1281433/"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#">
<rdf:Description rdf:about="https://stackoverflow.com/q/22782748/1281433/Katrin">
<owns>
<Dog>
<hasName>Peter</hasName>
<hasId rdf:datatype="http://www.w3.org/2001/XMLSchema#integer"
>10</hasId>
<hasColor>black</hasColor>
</Dog>
</owns>
</rdf:Description>
</rdf:RDF>