在 OWL 和 Protege 中补充推理

Complement reasoning in OWL and Protege

我最近创建了一些 ontology 来练习。 在我的 ontology 中,存在一个 class,它是 EmployedPerson,由一个 SWRL 规则定义:Person(?x), (worksin min 1 Place)(?x) -> EmployedPerson(?x)。

我还有另一个 class,它是 UnEmployedPerson,由 class 表达式定义:等价于 (Person and (not (EmployedPerson))),这意味着 UnEmployedPerson 是 EmployedPerson 的补充。

提到的classes(EmployedPerson 和UnEmployedPerson)都是Person 的子classes,person 设置为"EmployedPerson or UnEmployedPerson"。 人 class 有三个人:Ivan、Lenka 和 Martin。所有个体都是不同的个体。

另一个class地方,有个人"WorksApplication"。对象 属性 'worksin' 链接 class 'Person' 和 class 'Place'.

在我的ontology中,有两个公理: Lenka worksin Work应用程序 Martin worksin Work应用程序 经过Pellet和HermiT的推理,根据SWRL规则可以推断出Lenka和Martin是EmployedPerson的成员。

因为 Ivan 不属于 EmployedPerson,而 UnEmployedPerson 是 EmployedPerson 的补充,所以 Evan 应该被推断为 class UnEmployedPerson 的成员。

但实际上,经过Pellet和Hermit的推理,在classUnEmployedPerson中无法推断出Ivan。结果没有达到我的预期。 是我的ONTOLOGY有问题还是我忽略了OWA的作用? 请帮我解决这个问题,我想在 class UnEmployedPerson!!

中推断出 Ivan

这是我的 ontology 演示此行为:

<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 完全被 EmployedPersonUnEmployedPerson 覆盖的事实在这里无关紧要:我们仍然不知道(由于 OWA 而无法推断)他是哪种 Person是并且不能拒绝任何选项。