[英]Complement reasoning in OWL and Protege
我最近创建了一个小本体来练习。 在我的本体中,存在一个由EmployedPerson定义的类,该类由一个SWRL规则定义:Person(?x),(在1个位置内最小工作)(?x)-> EmployedPerson(?x)。
我还有另一个类,它是UnEmployedPerson,由一个类表达式定义:等效于(Person和(not(EmployedPerson))),这意味着UnEmployedPerson是EmployedPerson的补充。
提到的两个类(EmployedPerson和UnEmployedPerson)都是Person的子类,并且person被设置为“ EmployedPerson或UnEmployedPerson”。 人物课有三个人:伊万,伦卡和马丁。 所有个人都是不同的个人。
另一个类Place,具有单独的“ WorksApplication”。 对象属性“ worksin”链接类“ Person”和类“ Place”。
在我的本体中,有两个公理:Lenka worksin在Worksapplication中Martin工作在Worksapplication中在经过Pellet和HermiT的推理后,可以根据SWRL规则将Lenka和Martin推断为EmployedPerson的成员。
因为Ivan不属于EmployedPerson,并且UnEmployedPerson是EmployedPerson的补充,所以应将Evan推断为UnEmployedPerson类的成员。
但是实际上,经过Pellet和Hermit的推理,不能将Ivan归类为UnEmployedPerson。 结果没有达到我的期望。 我的本体论是否有问题,或者我忽略了OWA的影响? 请帮助我解决这个问题,我想看看Ivan是在UnEmployedPerson类中推断出来的!!
这是我的本体,演示了此行为:
<Declaration>
<Class IRI="#Adult"/>
</Declaration>
<Declaration>
<Class IRI="#EmployedPerson"/>
</Declaration>
<Declaration>
<Class IRI="#Parent"/>
</Declaration>
<Declaration>
<Class IRI="#Person"/>
</Declaration>
<Declaration>
<Class IRI="#Place"/>
</Declaration>
<Declaration>
<Class IRI="#UnemployedPerson"/>
</Declaration>
<Declaration>
<ObjectProperty IRI="#wokrsin"/>
</Declaration>
<Declaration>
<NamedIndividual IRI="#Ivan"/>
</Declaration>
<Declaration>
<NamedIndividual IRI="#Lenka"/>
</Declaration>
<Declaration>
<NamedIndividual IRI="#Martin"/>
</Declaration>
<Declaration>
<NamedIndividual IRI="#TreatHighBloodSugar"/>
</Declaration>
<Declaration>
<NamedIndividual IRI="#worksapplication"/>
</Declaration>
<EquivalentClasses>
<Class IRI="#Person"/>
<ObjectUnionOf>
<Class IRI="#EmployedPerson"/>
<Class IRI="#UnemployedPerson"/>
</ObjectUnionOf>
</EquivalentClasses>
<EquivalentClasses>
<Class IRI="#UnemployedPerson"/>
<ObjectIntersectionOf>
<Class IRI="#Person"/>
<ObjectComplementOf>
<Class IRI="#EmployedPerson"/>
</ObjectComplementOf>
</ObjectIntersectionOf>
</EquivalentClasses>
<SubClassOf>
<Class IRI="#Adult"/>
<Class IRI="#Person"/>
</SubClassOf>
<SubClassOf>
<Class IRI="#EmployedPerson"/>
<Class IRI="#Person"/>
</SubClassOf>
<SubClassOf>
<Class IRI="#Parent"/>
<Class IRI="#Person"/>
</SubClassOf>
<SubClassOf>
<Class IRI="#UnemployedPerson"/>
<Class IRI="#Person"/>
</SubClassOf>
<DisjointClasses>
<Class IRI="#Person"/>
<Class IRI="#Place"/>
</DisjointClasses>
<ClassAssertion>
<Class IRI="#Person"/>
<NamedIndividual IRI="#Ivan"/>
</ClassAssertion>
<ClassAssertion>
<Class IRI="#Person"/>
<NamedIndividual IRI="#Lenka"/>
</ClassAssertion>
<ClassAssertion>
<Class IRI="#Person"/>
<NamedIndividual IRI="#Martin"/>
</ClassAssertion>
<ClassAssertion>
<Class IRI="#Place"/>
<NamedIndividual IRI="#worksapplication"/>
</ClassAssertion>
<DifferentIndividuals>
<NamedIndividual IRI="#Ivan"/>
<NamedIndividual IRI="#Lenka"/>
</DifferentIndividuals>
<DifferentIndividuals>
<NamedIndividual IRI="#Ivan"/>
<NamedIndividual IRI="#Martin"/>
</DifferentIndividuals>
<DifferentIndividuals>
<NamedIndividual IRI="#Ivan"/>
<NamedIndividual IRI="#worksapplication"/>
</DifferentIndividuals>
<DifferentIndividuals>
<NamedIndividual IRI="#Lenka"/>
<NamedIndividual IRI="#Martin"/>
</DifferentIndividuals>
<DifferentIndividuals>
<NamedIndividual IRI="#Lenka"/>
<NamedIndividual IRI="#worksapplication"/>
</DifferentIndividuals>
<DifferentIndividuals>
<NamedIndividual IRI="#Martin"/>
<NamedIndividual IRI="#worksapplication"/>
</DifferentIndividuals>
<ObjectPropertyAssertion>
<ObjectProperty IRI="#wokrsin"/>
<NamedIndividual IRI="#Lenka"/>
<NamedIndividual IRI="#worksapplication"/>
</ObjectPropertyAssertion>
<ObjectPropertyAssertion>
<ObjectProperty IRI="#wokrsin"/>
<NamedIndividual IRI="#Martin"/>
<NamedIndividual IRI="#worksapplication"/>
</ObjectPropertyAssertion>
<DLSafeRule>
<Body>
<ClassAtom>
<Class IRI="#Person"/>
<Variable abbreviatedIRI="var:x"/>
</ClassAtom>
<ClassAtom>
<ObjectMinCardinality cardinality="1">
<ObjectProperty IRI="#wokrsin"/>
<Class IRI="#Place"/>
</ObjectMinCardinality>
<Variable abbreviatedIRI="var:x"/>
</ClassAtom>
</Body>
<Head>
<ClassAtom>
<Class IRI="#EmployedPerson"/>
<Variable abbreviatedIRI="var:x"/>
</ClassAtom>
</Head>
</DLSafeRule>
0)您可以使用GCI代替SWRL规则
Person and (works min 1 Place) subClassOf EmployedPerson
。
这样一来,您就可以使用不支持SWRL的推理机,该推理机也可以在类上工作(不仅限于命名的个人),并且总体上可以提供更好的性能。
1)这确实是OWA的结果。 我们不知道Ivan
是否有工作场所。 由于我们不知道它有工作场所,因此我们无法推断出他是EmployedPerson
。 由于我们不知道它是否没有工作场所,因此我们无法推断出他是UnEmployedPerson
。 这里的Person完全由EmployedPerson
和UnEmployedPerson
覆盖这一事实并不重要:我们仍然不知道(由于OWA而无法推断)他是哪种Person
,也不能拒绝任何选择。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.