在OWL中设置数据/对象属性的域/范围的正确方法是什么?
如果我有两个课程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>
我想将课程A
和课程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推理器的3个结果:A
,B
和owl:Thing
,但当我读到this post时,他说我写了错误的语义并且应该使用owl:unionOf
。
然后我尝试在选项2中表达类,但是当我再次感染时,我只获得了课程owl:Thing
,而不是A
或B
。
使用选项3,我将类设置为等效类公理中的域。它可以工作,但我不能使用强大的推理工具来推断:
Set<OWLClass> classes = reasoner.getDataPropertyDomains(hasNameProperty, false).getFlattened();
答案 0 :(得分:3)
首先也是最重要的一点:OWL语义中属性hasName
的域和范围是{strong> 对hasName
的限制!相反,这些公理用于推断通过属性hasName
相关的个体类型。
关于您的示例,它为属性hasName
声明了多个域,这意味着这些类的交集,即A and B
。
这确实是最常见的方式。
我不知道你在这里做了什么。但是在OWL中,开放世界假设(OWA)成立,这意味着未知的信息不被认为是错误的。它只是未知数。因此,如果您的个人a
仅通过属性x
与个人hasName
相关联,则标准OWL推理者不能(并且必须)得出a
所属的结论班A
。
注意,OWL中域公理的语义等价subClassOf公理是(伪曼彻斯特语法中)
hasName Domain: A
(hasName some owl:Thing) SubClassOf: A