【问题标题】:RDF/XML PropertiesRDF/XML 属性
【发布时间】:2014-04-01 10:09:59
【问题描述】:

我需要帮助

我使用 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  ?????

提前感谢您的帮助。

【问题讨论】:

    标签: xml rdf rdfs


    【解决方案1】:

    首先,请注意您已将属性 Know 声明为 &lt;rdf:Property rdf:about="Know"&gt;…&lt;/rdf:Property&gt;,但您在其余代码中使用了 Knows。

    如果您需要手动编写 RDF,使用一种人类可读和可写的语法会更容易,例如 Turtle(as suggested by Michael in an answer 回答您的上一个问题)。在 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 等)与上面完全相同。你不需要声明一个属性来使用它,所以我不会在这里包含新属性的声明。此外,您之前的问题When i declare property how to use it 的答案显示了如何声明属性。)如果您有狗的 IRI,并且“它的名字是 Peter”,您的意思是它的 IRI 是 &lt;…Peter&gt;,那么您可以做这样的事情:

    @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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多