Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rdf 在OWL的同一属性中定义多个域/范围_Rdf_Semantic Web_Owl_Owl Api_Rdfs - Fatal编程技术网

Rdf 在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

在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>
  • 选项2-推断域结果:
    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>
    
  • 从选项1中,我从HermiT reasoner那里得到了3个结果:
    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推断第二个选项中的域?