我最近创建了一个小本体来练习。在我的本体中,存在一个名为 EmployedPerson 的类,由一个 SWRL 规则定义:Person(?x), (worksin min 1 Place)(?x) -> EmployedPerson(?x)。
我还有另一个类是 UnEmployedPerson,由类表达式定义:等效于 (Person and (not (EmployedPerson))),这意味着 UnEmployedPerson 是 EmployedPerson 的补充。
提到的两个类(EmployedPerson 和 UnEmployedPerson)都是 Person 的子类,并且 person 设置为“EmployedPerson 或 UnEmployedPerson”。Person 类有三个人:Ivan、Lenka 和 Martin。所有个体都是不同的个体。
另一个类 Place,有一个单独的“WorksApplication”。对象属性“worksin”链接类“Person”和类“Place”。
在我的本体中,有两个公理: Lenka worksin Worksapplication Martin worksin 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>