3

我们试图让推理器(例如 Protege 中的 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 得出这个结论并推断出三元组。

我们缺少什么?条件不是它推断该知识的必要和充分条件吗?

4

1 回答 1

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 的并集,然后声明包含和排除不相交。那么发现的每个实例都必须是一个或另一个,你可以做出你的推断。

由于您不能这样做,因此您需要某种替代方法。如果您使用个人作为个人诊断,那么您可以说每个发现要么是负面发现,要么是带有公理的正面发现

        (inverse(hasFinding) some Patient) subClass ((inverse(hasNegativeFinding) some Patient) 或 (inverse(hasPositiveFinding) some Patient))

以及使 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 .

你可以得到这样的结果:

结果推断

于 2015-06-17T22:29:58.010 回答