在OWL中的同一个属性中定义多个domains/ranges

Define mutiple domains/ranges in a same propery in OWL

在 OWL 中设置 domains/ranges 个 data/object 个属性的正确方法是什么?

如果我有两个 classes A, B 和一个数据 属性 hasName:

<Declaration><Class IRI="#A"/></Declaration>
<Declaration><Class IRI="#B"/></Declaration>
<Declaration><DataProperty IRI="#hasName"/></Declaration>
<FunctionalDataProperty>
    <DataProperty IRI="#hasName"/>
</FunctionalDataProperty>
<DataPropertyRange>
    <DataProperty IRI="#hasName"/>
    <Datatype abbreviatedIRI="xsd:string"/>
</DataPropertyRange>

我想将 class A 和 class B 设置为 hasName 的唯一域。我尝试了三种方法,下面哪种方法是正确的?

从选项 1 中,我从 HermiT reasoner 得到了 3 个结果:ABowl:Thing,但是当我读到 this post 他说我写了语义错误,应该使用 owl:unionOf.

然后我尝试像选项2中那样表达classes,但是当我再次推断时,我只得到class owl:Thing,而不是AB.

对于选项 3,我将 classes 设置为等效 class 公理中的域。它可以工作,但我不能使用强大的推理工具来推断:

Set<OWLClass> classes = reasoner.getDataPropertyDomains(hasNameProperty, false).getFlattened();

首先也是最重要的一点:OWL 语义中 属性 hasName 的域和范围 而不是 hasName!相反,这些公理用于推断通过 属性 hasName.

相关的个体类型

选项 1

关于您的示例,它为 属性 hasName 声明了多个域,这意味着 class 的交集,即 A and B.

选项 2

这确实是最常见的方式。

选项 3

我不明白你在这里做什么。但在 OWL 中,开放世界假设 (OWA) 成立,这意味着未知信息不被视为虚假信息。这只是未知数。因此,如果你有一个人 a 仅通过 属性 hasName 与个人 x 相关,那么标准的 OWL 推理者不能(也不能)得出结论a 属于 class A.

注意,OWL 中域公理的语义等价 subClassOf 公理是(在伪曼彻斯特语法中)

hasName Domain: A

(hasName some owl:Thing) SubClassOf: A