如何在 OWL 中表示关系 'grandfather'?
How to represent relation 'grandfather' in OWL?
1. Alex is Beck's father.
2. Beck is Carl's father.
根据1和2,我们可以推断:
3. Alex is Carl's grandfather.
对于 OWL 实现,我在 Protege 上设置了三个 OWL 类 和一个名为 'isFatherOf' 的对象 属性。作为 Reasoner 推理的结果,我怎样才能得到 3 的结果?
<!--
///////////////////////////////////////////////////////////////////////////////////////
//
// 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"/>
你说的场景很容易用property chains实现,其实这个link已经完全解释了同样的场景。但简而言之,您需要创建 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) .
现在可以推断:
为了清楚起见,我在这个例子中也添加了 isFatherOf
的逆运算,这样每个阶段的推理器都会告诉你谁是谁的父亲:
onto:hasFather rdf:type owl:ObjectProperty ;
owl:inverseOf onto:isFatherOf .
但是一定要阅读 link 的内容,解释得很好。
1. Alex is Beck's father.
2. Beck is Carl's father.
根据1和2,我们可以推断:
3. Alex is Carl's grandfather.
对于 OWL 实现,我在 Protege 上设置了三个 OWL 类 和一个名为 'isFatherOf' 的对象 属性。作为 Reasoner 推理的结果,我怎样才能得到 3 的结果?
<!--
///////////////////////////////////////////////////////////////////////////////////////
//
// 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"/>
你说的场景很容易用property chains实现,其实这个link已经完全解释了同样的场景。但简而言之,您需要创建 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) .
现在可以推断:
为了清楚起见,我在这个例子中也添加了 isFatherOf
的逆运算,这样每个阶段的推理器都会告诉你谁是谁的父亲:
onto:hasFather rdf:type owl:ObjectProperty ;
owl:inverseOf onto:isFatherOf .
但是一定要阅读 link 的内容,解释得很好。