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