【发布时间】:2017-07-24 13:33:17
【问题描述】:
在 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();
【问题讨论】:
标签: rdf semantic-web owl owl-api rdfs