Rdf 在OWL的同一属性中定义多个域/范围
在OWL中设置数据/对象属性的域/范围的正确方法是什么 如果我有两个类Rdf 在OWL的同一属性中定义多个域/范围,rdf,semantic-web,owl,owl-api,rdfs,Rdf,Semantic Web,Owl,Owl Api,Rdfs,在OWL中设置数据/对象属性的域/范围的正确方法是什么 如果我有两个类A,B和一个数据属性hasName: <Declaration><Class IRI="#A"/></Declaration> <Declaration><Class IRI="#B"/></Declaration> <Declaration><DataProperty IRI="#hasName"/></Declaratio
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>
owl:Thing
<DataPropertyDomain>
<DataProperty IRI="#hasName"/>
<Class IRI="#A"/>
</DataPropertyDomain>
<DataPropertyDomain>
<DataProperty IRI="#hasName"/>
<Class IRI="#B"/>
</DataPropertyDomain>
<DataPropertyDomain>
<DataProperty IRI="#hasName"/>
<ObjectUnionOf>
<Class IRI="#A"/>
<Class IRI="#B"/>
</ObjectUnionOf>
</DataPropertyDomain>
<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>
A
、B
和owl:Thing
,但当我读到时,他说我写错了语义,应该使用owl:unionOf
然后我尝试像选项2中那样表示类,但是当我再次推断时,我只得到类owl:Thing
,而不是A
或B
使用选项3,我将类设置为等效类公理中的域。它可以工作,但我不能使用强大的推理工具来推断:
Set<OWLClass> classes = reasoner.getDataPropertyDomains(hasNameProperty, false).getFlattened();
Set classes=reasoner.getDataPropertyDomains(hasNameProperty,false).getFlatten();
第一点也是最重要的一点:OWL语义中属性hasName
的域和范围不受hasName
的限制!相反,这些公理用于推断通过属性hasName
相关的个人类型
选择1
关于您的示例,它为属性hasName
声明了多个域,这意味着这些类的交集,即A和B
选择2
这确实是最常见的方式
选择3
我不明白你在这里干什么。但在OWL中,开放世界假设(OWA)成立,这意味着未知信息不会被认为是错误的。只是不知道而已。因此,如果您的个人a
仅通过属性hasName
与个人x
相关,则标准OWL推理机不能(也不能)得出结论认为a
属于类a
注意,OWL中领域公理的语义等价子类axiom是(伪曼彻斯特语法)
hasName域:A
(hasName some owl:Thing)子类A
有没有办法让reasoner推断第二个选项中的域?