我最近创建了一个小本体来练习。在我的本体中,有一个类是EmployedPerson,由一个SWRL规则定义:Person(?x),(worksin min1 Place)(?x。
我还有另一个类,UnEmployedPerson,由类表达式定义:等价于(Person和(not(EmployedPerson)),这意味着UnEmploymedPerson是Employed Person的补码。
上面提到的两个类(EmployedPerse和UnEmployetPerse)都是Person的子类,Person被设置为"EmployedPerson或UnEmploymedPerson"。人物类有三个人:伊万、伦卡和马丁。所有的个体都是不同的个体。
另一个类Place,有一个单独的"WorksApplication"。对象属性"worksin"链接类"Person"和类"Place"。
在我的本体论中,有两个公理:Lenka工作在WorksapplicationMartin工作于Worksapplication经过Pellet和HermiT的推理,Lenka和Martin可以根据SWRL规则推断为EmployedPerson的成员。
因为Ivan不属于EmployedPerson,而UnEmployetPerson是EmployeePerson的补码,所以Evan应该被推断为类UnEmploymedPerson的成员。
但事实上,经过佩莱和埃尔米特的推理,伊凡在《无业者》一类中是无法推理的。结果没有达到我的预期。是我的ONTOLOGY出了问题,还是我忽视了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规则
CCD_ 1。
这将允许您使用不支持SWRL的推理器,也适用于类(不仅适用于命名的个人),并且总体上提供更好的性能。
1) 这确实是OWA的结果。我们不知道Ivan
是否有工作的地方。由于我们不知道他有工作地点,我们无法推断他是EmployedPerson
。由于我们不知道它是否没有工作场所,我们无法推断他是UnEmployedPerson
。Person完全被EmployedPerson
和UnEmployedPerson
覆盖这一事实在这里并不重要:我们仍然不知道(由于OWA,我们无法推断)他是哪种Person
,也无法拒绝任何选择。