我什么时候应该使用rdf:ID代替rdf:about?

时间:2015-11-20 12:05:01

标签: rdf semantic-web owl

我越过books ontology,在文档的底部,我们有:

<!-- Object Properties -->
<owl:ObjectProperty rdf:about="#contains"/>
<owl:ObjectProperty rdf:about="#datePublished"/>
<owl:ObjectProperty rdf:about="#hasGenre"/>
<owl:ObjectProperty rdf:about="#hasGrade"/>
<owl:ObjectProperty rdf:about="#hasName"/>
<owl:ObjectProperty rdf:about="#hasSize"/>
<owl:ObjectProperty rdf:about="#hasType"/>
<owl:ObjectProperty rdf:about="#isTitled"/>
<owl:ObjectProperty rdf:about="#publishedBy"/>
<owl:ObjectProperty rdf:about="#timePublished"/>
<owl:ObjectProperty rdf:about="#writtenBy"/> 
<owl:ObjectProperty rdf:ID="isReserved">
<rdfs:domain rdf:resource="#Book"/>
<rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
>A reservation has been made by a person for a book.</rdfs:comment>
</owl:ObjectProperty>
<owl:ObjectProperty rdf:ID="isNotReserved">
<rdfs:domain rdf:resource="#Book"/>
<rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
>The given book is available in the library.</rdfs:comment>
</owl:ObjectProperty>
</rdf:RDF>

我无法理解为什么这个本体的作者选择在最后两个rdf:IDowl:ObjectPropertyisReserved)中使用isNotReserved而不是只是像其他人一样使用rdf:about

ps :我完整阅读了RDF/XML part,其中指定了xml:baserdf:ID的使用并检查了答案here,我只需要在上述要点中定义的本体语境中进一步澄清。

引自RDF/XML specs

  

节点元素上的rdf:ID属性(不是属性元素,具有   另一种含义)可以用来代替rdf:about并给出一个亲戚   IRI相当于#与rdf:ID属性值连接。所以   例如,如果rdf:ID =&#34; name&#34;,那就相当于   的rdf:about =&#34;#名称&#34 ;. rdf:ID提供了额外的检查,因为相同   name只能在xml:base值的范围内出现一次(或   文档,如果没有给出,那么对定义一组是有用的   相对于同一IRI的不同的相关术语。

1 个答案:

答案 0 :(得分:3)

  

我无法理解为什么这个本体的作者选择在最后两个owl中使用rdf:ID in:ObjectProperty(isReserved和isNotReserved)而不是仅使用rdf:about就像其余的一样?

这不重要。理想情况下,作者无论如何都不是手工操作RDF / XML,而是使用库来编写序列化。 rdf:ID和rdf:about属性实际上并不是RDF图的一部分;它们仅用于RDF的XML序列化,称为RDF / XML。工具不应该依赖于RDF / XML序列化的特定结构,因为可以以各种方式在RDF / XML中编写相同的RDF图。有关示例,请参阅this answerHow to access OWL documents using XPath in Java?

例如,我下载了books.owl文件并使用Jena将其读入并以XML格式将其写回。我的新books.owl显示了结果。根本没有rdf:ID,但它完全相同的RDF图。 RDF处理工具看到完全相同的图形,即三元组的相同集合。使用rdf:ID的其中一个属性现在被序列化为

<owl:ObjectProperty rdf:about="http://127.0.0.1:3001/ontology/books.owl#isNotReserved">
  <rdfs:domain rdf:resource="http://127.0.0.1:3001/ontology/books.owl#Book"/>
  <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
  >The given book is available in the library.</rdfs:comment>
</owl:ObjectProperty>

虽然在实践中,您可能更喜欢使用rdf:about而不是rdf:ID,但它并未正式弃用或其他任何内容。例如,它仍然在RDF / XML 1.1规范中使用,如§2.14 Abbreviating URIs: rdf:ID and xml:base中所述。

在实践中,使用更易于阅读和人类可写的语法(如Turtle)可能更好。同一个Gist显示了在Turtle中重写本体的结果,books.ttl。使用Turtle,您可以直接编写三元组,而不必担心rdf:ID或rdf:about。在Turtle中,该属性声明变为:

:isNotReserved a owl:ObjectProperty ;
    rdfs:comment "The given book is available in the library."^^<http://www.w3.org/2001/XMLSchema#string> ;
    rdfs:domain :Book .