SPARQL:如何获取所选类的owl:onProperty列表

时间:2014-09-16 15:34:58

标签: rdf sparql owl

如何获取所选类的所有属性列表?例如:

<!-- http://www.xxx.xx/ontologies/abcd.owl#selected -->

<owl:Class rdf:about="&selected;Selected">
    <owl:equivalentClass>
        <owl:Restriction>
            <owl:onProperty rdf:resource="&selected;a_xxyy"/>
            <owl:allValuesFrom rdf:resource="&selected;aaaaa"/>
        </owl:Restriction>
    </owl:equivalentClass>
    <owl:equivalentClass>
        <owl:Restriction>
            <owl:onProperty rdf:resource="&selected;a_yyzz"/>
            <owl:allValuesFrom rdf:resource="&selected;bbbb"/>
        </owl:Restriction>
    </owl:equivalentClass>
    <owl:equivalentClass>
        <owl:Restriction>
            <owl:onProperty rdf:resource="&selected;a_gggrrr"/>
            <owl:allValuesFrom>
                <rdfs:Datatype>
                    <owl:onDatatype rdf:resource="&xsd;integer"/>
                    <owl:withRestrictions rdf:parseType="Collection">
                        <rdf:Description>
                            <xsd:minInclusive rdf:datatype="&xsd;integer">18</xsd:minInclusive>
                        </rdf:Description>
                    </owl:withRestrictions>
                </rdfs:Datatype>
            </owl:allValuesFrom>
        </owl:Restriction>
    </owl:equivalentClass>

我想要类<http://www.xxx.xx/ontologies/abcd.owl#selected>的所有属性(甚至是值),比如

|property|value|
|a_xxyy  |aaaaa|
|a_yyzz  |bbbb |
|a_gggrrr|<18  |

1 个答案:

答案 0 :(得分:1)

  

所选类的所有属性

您展示的RDF序列化是一堆等价的类公理,其中一个类是匿名限制类。例如,

<owl:Class rdf:about="&selected;Selected">
    <owl:equivalentClass>
        <owl:Restriction>
            <owl:onProperty rdf:resource="&selected;a_xxyy"/>
            <owl:allValuesFrom rdf:resource="&selected;aaaaa"/>
        </owl:Restriction>
    </owl:equivalentClass>

  

选择≡∀a_xxyy.aaaaa

表示已选择的实例对属性 a_xxyy 的每个值必须为 aaaaa 。但这并不意味着 a_xxyy 是“该类的属性”。之后,类似结构的公理是

  

人类⊑⊑hasExoskeleton.Nothing

表示没有人有外骨骼。因此, hasExoskeleton 不会被视为“人类的财产”。但是,公理的形式是相同的。

无论如何,SPARQL查询并不复杂。它只会是:

prefix owl:  <http://www.w3.org/2002/07/owl#>

select ?class ?property where {
  ?class owl:equivalentClass/owl:onProperty ?property
}

实际上,你可能不仅需要owl:equivalentClasses,还需要rdfs:subClasses,所以你可以这样做:

prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
prefix owl:  <http://www.w3.org/2002/07/owl#>

select ?class ?property where {
  ?class (rdfs:subClassOf|owl:equivalentClass)/owl:onProperty ?property
}