1

我需要一些帮助

我使用 RDF/XML 来表示一些数据。

首先,我想表明一个人认识其他人,我声明了该属性并使用以下代码指定 mark 认识 katrin 并且 katrin 认识 john

PART 1
<rdf:Property rdf:about="Know">
     <rdfs:domain rdf:resource="#Person"/>
     <rdfs:range rdf:resource="#Person"/>
</rdf:Property>


PART2
<rdf:Description rdf:about="#Mark">
    <dc:Knows rdf:resource="#Katrin"/>
</rdf:Description>  


<rdf:Description rdf:about="#Katrin">
    <dc:Knows rdf:resource="#John"/>
</rdf:Description>

现在我想声明一个属性并代表更多的东西。我的意思是说。例如,我想说 katrin 拥有一只 ID 为 10 的狗,这只狗的颜色为黑色,它的名字是 Peter。上面我只有资源属性和对象。现在我不得不说更多,我怎样才能使它成为第 2 部分?

PART 1

<rdf:Property rdf:ID="Own">
     <rdfs:domain rdf:resource="#Person"/>
     <rdfs:range rdf:resource="#Dog"/>
</rdf:Property>

PART 2  ?????

预先感谢您的帮助。

4

1 回答 1

5

首先,请注意您已使用 声明了该属性Know<rdf:Property rdf:about="Know">…&lt;/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>
于 2014-04-01T13:34:37.440 回答