如何表达关系'祖父'在OWL?

时间:2016-01-23 09:23:28

标签: owl protege

1. Alex is Beck's father.
2. Beck is Carl's father.

基于1和2,我们可以推断:

3. Alex is Carl's grandfather.

对于OWL实现,我设置了三个OWL类和一个名为' isFatherOf'的对象属性。关于Protege。如何推理推理器的结果?     

<!-- 
///////////////////////////////////////////////////////////////////////////////////////
//
// Object Properties
//
///////////////////////////////////////////////////////////////////////////////////////
 -->




<!-- http://www.semanticweb.org/administrator/ontologies/2016/0/untitled-ontology-3#isFatherOf -->

<owl:ObjectProperty rdf:about="http://www.semanticweb.org/administrator/ontologies/2016/0/untitled-ontology-3#isFatherOf"/>



<!-- 
///////////////////////////////////////////////////////////////////////////////////////
//
// Classes
//
///////////////////////////////////////////////////////////////////////////////////////
 -->




<!-- http://www.semanticweb.org/administrator/ontologies/2016/0/untitled-ontology-3#Alex -->

<owl:Class rdf:about="http://www.semanticweb.org/administrator/ontologies/2016/0/untitled-ontology-3#Alex">
    <owl:equivalentClass>
        <owl:Restriction>
            <owl:onProperty rdf:resource="http://www.semanticweb.org/administrator/ontologies/2016/0/untitled-ontology-3#isFatherOf"/>
            <owl:someValuesFrom rdf:resource="http://www.semanticweb.org/administrator/ontologies/2016/0/untitled-ontology-3#Beck"/>
        </owl:Restriction>
    </owl:equivalentClass>
</owl:Class>



<!-- http://www.semanticweb.org/administrator/ontologies/2016/0/untitled-ontology-3#Beck -->

<owl:Class rdf:about="http://www.semanticweb.org/administrator/ontologies/2016/0/untitled-ontology-3#Beck">
    <owl:equivalentClass>
        <owl:Restriction>
            <owl:onProperty rdf:resource="http://www.semanticweb.org/administrator/ontologies/2016/0/untitled-ontology-3#isFatherOf"/>
            <owl:someValuesFrom rdf:resource="http://www.semanticweb.org/administrator/ontologies/2016/0/untitled-ontology-3#Carl"/>
        </owl:Restriction>
    </owl:equivalentClass>
</owl:Class>



<!-- http://www.semanticweb.org/administrator/ontologies/2016/0/untitled-ontology-3#Carl -->

<owl:Class rdf:about="http://www.semanticweb.org/administrator/ontologies/2016/0/untitled-ontology-3#Carl"/>

1 个答案:

答案 0 :(得分:3)

使用property chains可以轻松实现您提到的方案,实际上此链接已完全解释了相同的方案。但简而言之,您需要创建3个人(Carl,Alex和Beck),然后将isFatherOf属性分配给每个人。因此:

onto:Alex rdf:type onto:Person ,
               owl:NamedIndividual ;
      onto:isFatherOf onto:Beck .

onto:Beck rdf:type onto:Person ,
               owl:NamedIndividual ;
      onto:isFatherOf onto:Carl .

onto:Carl rdf:type onto:Person ,
               owl:NamedIndividual .

下一个重要的事情是创建一个属性isGrandFatherOf,提到这是一个由两个isFatherOf组成的链:

onto:isGrandFatherOf rdf:type owl:ObjectProperty ;             
                 owl:propertyChainAxiom ( onto:isFatherOf
                                          onto:isFatherOf) .

现在可以推断出: enter image description here

为了清楚起见,我在这个例子中添加了isFatherOf的倒数,这样每个阶段的推理者都会告诉你谁是谁的父亲:

onto:hasFather rdf:type owl:ObjectProperty ;
           owl:inverseOf onto:isFatherOf .

但是请阅读有关的链接,这是非常好的解释。