我正构建一个本体来对数据库中的记录进行分类。它将迭代更新版本的数据库。因此,它需要考虑潜在的变化。
这是我的用例:
一个人服用3剂药物A(每种事件表示为药物A1,剂量1为剂量1,药物A2为剂量2,剂量为2,以此类推)。描述了类和条件:
CompletePerson
:如果有人服用了全部3剂
IncompletePerson
:如果患者已服用剂量1和/或剂量2
如果我代表不完整的'作为:
((dose1 or dose2) and (not dose3))
,即使数据库记录显示我应该,我也没有为该课程推断个人。
这可能是因为Open World Assumption。在本体论中,我说一个人已经接受过这样的剂量,而不是这个人没有得到的剂量。
如果我为班级创建这个公理:
dose1 or dose2
该类成为CompletePerson
的超类(后者又是dose1Person,dose2Person和dose3Person的子类)。我应该如何表示IncompletePerson
的axoim,以便它不被推断为CompletePerson
的超类。
答案 0 :(得分:1)
在本体论中,我说一个人已经接受过这样的剂量,而不是这个人没有得到的剂量。
这就是问题所在。如果你没有说他们没有收到什么,那么你就没有办法知道他们没有收到给定的剂量。例如,如果我告诉你约翰服用剂量1和剂量2,并且不告诉你他是否服用剂量3,你无法知道约翰实际上是完全人还是不完全人。
你需要做出一个断言,说出约翰所拥有和没有采取的行动。例如,
约翰服用剂量1 约翰服用剂量2。
你也断言
约翰:(只服用{dose1 dose2})
然后,只要您知道剂量1≠剂量3且剂量2≠剂量3,您就可以推断约翰是一个不完整的人,因为约翰没有服用剂量3。
现在,你已经把这个想法称为有条件的“如果一个人服用了全部三剂,那么他们是CompletePerson”,但我认为你真的想要这是一个定义,即一个等价:“一个人把所有三个doeses id,只有他们是一个CompletePerson”。你需要这种等价,因为否则一个人可能因其他原因而完整,你想要排除这种可能性。
一旦你完成了,你可以说Person是CompletePerson和IncompletePerson的不相交联盟。
这是一个带有类层次结构的OWL本体:
Person (disjoint union of Incomplete and Complete)
Incomplete
Complete == (took value dose1) and (took value dose2) and (took value dose3)
和个人:
John : Person, (took only {dose1, dose2}), took dose1, took dose2
Mary : Person, took dose1, dose2, dose3
dose1 : ≠ dose2, ≠ dose3
dose2 : ≠ dose1, ≠ dose3
dose3 : ≠ dose1, ≠ dose2
你将能够推断玛丽是完整的,约翰是不完整的。
这是在Turtle序列化中,您可以下载它并在Protege中打开它。
@prefix : <http://www.semanticweb.org/user/ontologies/2016/2/untitled-ontology-58#> .
@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 untitled-ontology-58: <http://www.semanticweb.org/taylorj/ontologies/2016/2/untitled-ontology-58#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
_:b0 a owl:Restriction ;
owl:hasValue untitled-ontology-58:dose2 ;
owl:onProperty untitled-ontology-58:took .
<http://www.semanticweb.org/taylorj/ontologies/2016/2/untitled-ontology-58>
a owl:Ontology .
[ a owl:AllDifferent ;
owl:distinctMembers ( untitled-ontology-58:dose1 untitled-ontology-58:dose2 untitled-ontology-58:dose3 )
] .
untitled-ontology-58:took
a owl:ObjectProperty .
untitled-ontology-58:Incomplete
a owl:Class ;
rdfs:subClassOf untitled-ontology-58:Person .
_:b1 a owl:Restriction ;
owl:hasValue untitled-ontology-58:dose3 ;
owl:onProperty untitled-ontology-58:took .
untitled-ontology-58:dose3
a owl:Thing , owl:NamedIndividual .
untitled-ontology-58:Mary
a owl:Thing , untitled-ontology-58:Person , owl:NamedIndividual ;
untitled-ontology-58:took untitled-ontology-58:dose1 , untitled-ontology-58:dose2 , untitled-ontology-58:dose3 .
untitled-ontology-58:Complete
a owl:Class ;
rdfs:subClassOf untitled-ontology-58:Person ;
owl:equivalentClass [ a owl:Class ;
owl:intersectionOf ( _:b2 _:b0 _:b1 )
] .
untitled-ontology-58:Person
a owl:Class ;
owl:disjointUnionOf ( untitled-ontology-58:Complete untitled-ontology-58:Incomplete ) .
untitled-ontology-58:dose2
a owl:Thing , owl:NamedIndividual .
untitled-ontology-58:John
a owl:Thing , untitled-ontology-58:Person , owl:NamedIndividual ;
a [ a owl:Restriction ;
owl:allValuesFrom [ a owl:Class ;
owl:oneOf ( untitled-ontology-58:dose2 untitled-ontology-58:dose1 )
] ;
owl:onProperty untitled-ontology-58:took
] ;
untitled-ontology-58:took untitled-ontology-58:dose1 , untitled-ontology-58:dose2 .
_:b2 a owl:Restriction ;
owl:hasValue untitled-ontology-58:dose1 ;
owl:onProperty untitled-ontology-58:took .
untitled-ontology-58:dose1
a owl:Thing , owl:NamedIndividual .