如何描述一个ontology来推断两个人是否相同

How to describe an ontology to infer wheather two individuals are the same or not

我想推断两个人是否相同。 我给你看三个案例。在第一种情况下,我描述了一个 ontology 来获得推理结果,这意味着“如果两个个体具有相同的 属性 值,那么两个个体是相同的”。案例描述如下。

Person rdf:type owl:Class .
ID rdf:type owl:Class .
hasID rdf:type owl:ObjectProperty ,
               owl:InverseFunctionalProperty .
person1 rdf:type owl:NamedIndividual ,
                 Person ;
        hasID id1 .
person2 rdf:type owl:NamedIndividual ,
                 Person;
        hasID id1 .
id1 rdf:type owl:NamedIndividual ,
             ID .

推理结果为“person1 owl: sameAs person2”,因为person1和person2的hasID值相同,为id1。获得预期结果的关键点是我将 hasID 描述为 owl:InverseFunctionalProperty。没问题。

在第二种情况下,两个个体具有相同的两个属性。一个 属性 是 hasName。另一个是 mailTo。我想得到推断的结果,这意味着“如果两个人具有相同的 hasName 相同的 mailTo 值,那么两个人是相同的”。但是我不知道如何描述ontology。 我该如何描述它?

第三种情况比较复杂。如何在ontology上描述"the same value of hasID or the conjunction that means "具有相同值的hasName 具有相同值的mailTo"?

第三种情况的答案如下。

#  Data properties

hasID rdf:type owl:DatatypeProperty .
hasName rdf:type owl:DatatypeProperty .
mailTo rdf:type owl:DatatypeProperty .

#  Class
Person rdf:type owl:Class ;
       owl:hasKey ( hasID
                  ) ,
                  ( hasName
                    mailTo
                  ) .

#  Individuals
person1 rdf:type owl:NamedIndividual ,
                 Person ;
        hasID 12 ;
        hasName "Donald" ;
        mailTo "D_Trump@ex.com" .
person2 rdf:type owl:NamedIndividual ,
                 Person ;
        hasID 12 ;
        hasName "Don" ;
        mailTo "D_Trump@ex.com" .
person3 rdf:type owl:NamedIndividual ,
                 Person ;
        hasID 34 ;
        hasName "Bill" ;
        mailTo "B_Clinton@ex.com" .
person4 rdf:type owl:NamedIndividual ,
                 Person ;
        hasID 56 ;
        hasName "Bill" ;
        mailTo "B_Clinton@ex.com" .
person5 rdf:type owl:NamedIndividual ,
                 Person ;
        hasID 78 ;
        hasName "Don" ;
        mailTo "D_Trump@ex.com" .
person6 rdf:type owl:NamedIndividual ,
                 Person ;
        hasID 90 ;
        hasName "Barack" ;
        mailTo "B_Obama@ex.com" .

查看上面 class 表达式中的 "owl:hasKey"。一对括号中的属性是键的组成部分。因此 owl:hasKey (hasName mailTo) 意味着 "hasName and mailTo"。一对括号表示独立密钥。具体来说,"hasID" 和 "hasName and mailTo" 独立地作为密钥工作。意思是“”。 我试过上面的代码,在Protege5.5.0上使用Pellet,可以得到预期的result.Specifically,person1,person2和person5相同,person3和person4相同,person6没有任何相同的个体。