1

我最近创建了一个小本体来练习。在我的本体中,存在一个名为 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>

4

1 回答 1

1

0) 不使用 SWRL 规则,你可以使用 GCI

Person and (works min 1 Place) subClassOf EmployedPerson.

这将允许您使用不支持 SWRL 的推理器,也适用于类(不仅适用于指定的个人),并且总体上提供更好的性能。

1)这确实是OWA的结果。我们不知道是否Ivan有工作的地方。由于我们不知道它工作的地方,我们不能推断他是EmployedPerson。由于我们不知道它是否没有工作地点,我们无法推断他是UnEmployedPerson。Person 完全被覆盖EmployedPerson并且UnEmployedPerson在这里无关紧要的事实:我们仍然不知道(并且由于 OWA 无法推断)Person他是哪种类型并且不能拒绝任何选项。

于 2015-02-28T20:12:15.647 回答