OWL推理:推断财产的必要和充分条件

时间:2015-06-17 21:45:09

标签: properties owl protege inference reasoning

我们试图找到一个推理器(例如Protemi中的HermiT)来推断可以使用更具体的子属性来代替断言的一般属性。

类:

- Patient
- Finding
    - Dyspnea
- ObservationStatus
     - Inclusion
     - Exclusion

属性:

- has_finding (domain: Patient, range: Finding) 
    - has_positive_finding (domain: Patient, range: Finding, Inclusion)
    - has_negative_finding (domain: Patient, range: Finding, Exclusion)

如果我们断言以下三元组:

:Patient1 a :Patient .
:Patient1 :has_negative_finding :Dyspnea1 .

推理人可以推断(除其他事项外):

:Dyspnea1 a :Finding .
:Dyspnea1 a :Exclusion.

但是,当我们以相反的方式看待它并断言:

:Patient1 a :Patient .
:Dyspnea1 a :Dyspnea .
:Dyspnea1 a :Exclusion .
:Patient1 :has_finding :Dyspnea1. 

我们希望推理者推断:

:Patient1 :has_negative_finding :Dyspnea1 .

我们似乎无法让Protege和HermiT得出这个结论并推断出三元组。

我们缺少什么?这些条件不是必要的,也不足以推断出这些知识吗?

1 个答案:

答案 0 :(得分:2)

:Patient1 a :Patient .
:Dyspnea1 a :Dyspnea .
:Dyspnea1 a :Exclusion .
:Patient1 :has_finding :Dyspnea1. 
     

我们希望推理者推断:

:Patient1 :has_negative_finding :Dyspnea1 .
     

......我们缺少什么?这些条件是不必要和充分的   它能推断出那些知识吗?

这里有一些问题。

首先,您没有说过每个has_finding实际上都对应一个子属性。也就是说,仅仅因为某些东西有发现,你不知道它也有一个消极或积极的发现。这个发现可能只是一个普遍的发现,而不是一个更具体的发现。

其次,对象的更具体类型并不意味着您必须使用更具体的属性。

第三,即使您声明该发现是排除的,如果您不知道排除与包含不相符,您仍然可以将该发现同时作为正面和负面发现。

现在,真正好的做法是声明has_finding是has_negative_finding和has_positive_finding的并集,然后声明包含和排除不相交。然后,每个发现的实例都必须是一个或另一个,你可以做出推断。

既然你不能这样做,你需要某种替代方案。如果你使用个人作为每个人的诊断,那么你可以说每个发现都是一个消极的发现或一个正面的发现,如

(反向(hasFinding)某些患者)subClass((反向(hasNegativeFinding)某些患者)或(反向(hasPositiveFinding)某些患者))

同时使hasFinding反函数,以便每个发现与至多一个患者相关联。然后你会有这样的本体论:

@prefix :      <http://stackoverflow.com/a/30903552/1281433/> .
@prefix a:     <http://stackoverflow.com/a/30903552/1281433/> .
@prefix rdf:   <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix owl:   <http://www.w3.org/2002/07/owl#> .
@prefix xsd:   <http://www.w3.org/2001/XMLSchema#> .
@prefix rdfs:  <http://www.w3.org/2000/01/rdf-schema#> .

a:Exclusion  a           owl:Class ;
        rdfs:subClassOf  a:Finding .

a:hasNegativeFinding  a     owl:ObjectProperty ;
        rdfs:range          a:Exclusion ;
        rdfs:subPropertyOf  a:hasFinding .

_:b0    a                   owl:Restriction ;
        owl:onProperty      a:hasPositiveFinding ;
        owl:someValuesFrom  a:Inclusion .

a:      a       owl:Ontology .

[ a                   owl:Restriction ;
  rdfs:subClassOf     [ a            owl:Class ;
                        owl:unionOf  ( _:b1 _:b0 )
                      ] ;
  owl:onProperty      a:hasFinding ;
  owl:someValuesFrom  a:Finding
] .

a:Finding  a                 owl:Class ;
        owl:disjointUnionOf  ( a:Finding a:Inclusion ) .

a:patient1  a         owl:Thing , owl:NamedIndividual ;
        a:hasFinding  a:dyspnea1 .

_:b1    a                   owl:Restriction ;
        owl:onProperty      a:hasNegativeFinding ;
        owl:someValuesFrom  a:Exclusion .

a:hasFinding  a  owl:ObjectProperty .

a:Inclusion  a           owl:Class ;
        rdfs:subClassOf  a:Finding .

a:hasPositiveFinding  a     owl:ObjectProperty ;
        rdfs:range          a:Inclusion ;
        rdfs:subPropertyOf  a:hasFinding .

a:dyspnea1  a   owl:NamedIndividual , a:Exclusion .

你可以得到这样的结果:

findings inference