【问题标题】:OWL reasoning: Necessary and sufficient conditions for inferring a propertyOWL 推理:推断属性的充要条件
【发布时间】:2015-06-17 21:45:08
【问题描述】:

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

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

【问题讨论】:

    标签: properties owl protege inference reasoning


    【解决方案1】:
    :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) 子类 ((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 .
    

    你可以得到这样的结果:

    【讨论】:

    • 这看起来很有希望,但我们在重现您的屏幕截图时遇到了困难。乌龟 sn-p 是 Protege 的转储吗?我们将其复制/粘贴到一个文件中并将其加载到 Protege 中。但我们无法获得您在屏幕截图中显示的推断陈述。你能解释一下为什么你把排除/包含作为发现的子类吗?在我们的场景中,呼吸困难将是 Find 的子类。
    • 在您的场景中,您的 hasNegative 和 hasPositive 域分别为 Exclusion 和 Inclusion。但是 hasNegative 和 hasPositive 是 hasFinding 的子属性。因此,只要您有“x hasNegative y”,您就会推断出“x hasFinding y”。从那些你可以推断出“y a Exclusion”和“y a Finding”。因此,您的大多数排除和包含实例似乎最终都会成为发现。通过查找排除和包含的不相交并集,推理器可以推断任何结果必须是包含或排除。
    • @Wolfgang 我所做的唯一推理器配置是在推理器 > 配置下。在那里,您可以配置 Protege 以显示更多推理者的结论,但我不认为这与这种情况相关(但您可以尝试)。
    • 只是为了确保:您是说您帖子中的turtle sn-p 是Protege 的直接转储?很抱歉再次询问,但我们无法重现屏幕截图。同样在屏幕截图中,成员列表中没有个人。
    • @Wolfgang 我通过 Jena 的 rdfcat 运行 Protege 的输出,只是为了使 Turtle 文本更短一些,但它是相同的本体。再看截图,可能有点误导。打开个人选项卡,然后单击“事物”,因为患者 1 是事物的一个实例。这就是你应该看到声明和推断的属性断言的地方。我不确定为什么屏幕截图中突出显示了“包含”。
    猜你喜欢
    • 2017-04-23
    • 2013-09-04
    • 1970-01-01
    • 1970-01-01
    • 2011-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多