在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 - 推断域结果:A
、B
和 owl:Thing
<DataPropertyDomain>
<DataProperty IRI="#hasName"/>
<Class IRI="#A"/>
</DataPropertyDomain>
<DataPropertyDomain>
<DataProperty IRI="#hasName"/>
<Class IRI="#B"/>
</DataPropertyDomain>
选项 2 - 推断域结果:owl:Thing
<DataPropertyDomain>
<DataProperty IRI="#hasName"/>
<ObjectUnionOf>
<Class IRI="#A"/>
<Class IRI="#B"/>
</ObjectUnionOf>
</DataPropertyDomain>
选项 3 - 推断域结果:owl:Thing
<EquivalentClasses>
<Class IRI="#A"/>
<DataExactCardinality cardinality="1">
<DataProperty IRI="#hasName"/>
<Datatype abbreviatedIRI="xsd:string"/>
</DataExactCardinality>
</EquivalentClasses>
<EquivalentClasses>
<Class IRI="#B"/>
<DataExactCardinality cardinality="1">
<DataProperty IRI="#hasName"/>
<Datatype abbreviatedIRI="xsd:string"/>
</DataExactCardinality>
</EquivalentClasses>
从选项 1 中,我从 HermiT reasoner 得到了 3 个结果:A
、B
和 owl:Thing
,但是当我读到 this post 他说我写了语义错误,应该使用 owl:unionOf
.
然后我尝试像选项2中那样表达classes,但是当我再次推断时,我只得到class owl:Thing
,而不是A
或B
.
对于选项 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
在 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 - 推断域结果:
A
、B
和owl:Thing
<DataPropertyDomain> <DataProperty IRI="#hasName"/> <Class IRI="#A"/> </DataPropertyDomain> <DataPropertyDomain> <DataProperty IRI="#hasName"/> <Class IRI="#B"/> </DataPropertyDomain>
选项 2 - 推断域结果:
owl:Thing
<DataPropertyDomain> <DataProperty IRI="#hasName"/> <ObjectUnionOf> <Class IRI="#A"/> <Class IRI="#B"/> </ObjectUnionOf> </DataPropertyDomain>
选项 3 - 推断域结果:
owl:Thing
<EquivalentClasses> <Class IRI="#A"/> <DataExactCardinality cardinality="1"> <DataProperty IRI="#hasName"/> <Datatype abbreviatedIRI="xsd:string"/> </DataExactCardinality> </EquivalentClasses> <EquivalentClasses> <Class IRI="#B"/> <DataExactCardinality cardinality="1"> <DataProperty IRI="#hasName"/> <Datatype abbreviatedIRI="xsd:string"/> </DataExactCardinality> </EquivalentClasses>
从选项 1 中,我从 HermiT reasoner 得到了 3 个结果:A
、B
和 owl:Thing
,但是当我读到 this post 他说我写了语义错误,应该使用 owl:unionOf
.
然后我尝试像选项2中那样表达classes,但是当我再次推断时,我只得到class owl:Thing
,而不是A
或B
.
对于选项 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