: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 .
你可以得到这样的结果:
