SPARQL“ASK”查询检查两个类之间是否存在对象属性(非b / w个体)

时间:2014-04-15 14:10:06

标签: sparql jena owl

如果OWL2文件中的两个类之间存在某些ObjectPropery(OP),我想查询。我正在使用JENA API来构建SPARQL查询。

到目前为止我一直在尝试:

首先,我使用SELECT查询来检查给定OP的类:

  " { SELECT ?domain ?range WHERE {\n" +
        ":isManagedBy rdfs:domain ?domain; \n" +
        " rdfs:range ?range. \n } }"  +
                        "}";

然后我用ASK查询包装它

" ASK WHERE { \n" +
     " { SELECT ?domain ?range WHERE {\n" +
        ":isManagedBy rdfs:domain ?domain; \n" +
         " rdfs:range ?range. \n } }"  +
    "}";

它似乎给了我答案,但我想,我在这个问题中混淆了很多东西:

我的目标:是否查询OWL文件中是否存在某些事实(布尔答案)

例如:OWL Snippet

<owl:ObjectProperty rdf:ID="isManagedBy">
          <rdf:type rdf:resource="owl#FunctionalProperty" />
            <rdfs:domain rdf:resource="#FunctionManagement" />
            <rdfs:range rdf:resource="#SymposiumPlanner2013"/>
    </owl:ObjectProperty>   

我想检查一下:isManagedBy(FunctionManagement, SymposiumPlanner2013)是否存在。

2 个答案:

答案 0 :(得分:4)

我认为我链接的可能重复(How to query Classes with Object Property in Sparql)可能足以回答您的问题,但不需要在select查询中包含ask查询。你问的是你的数据是否包含三元组:

:isManagedBy rdfs:domain :FunctionManagement .
:isManagedBy rdfs:range  :SymposiumPlanner2013 .

您只需要查询ask是否存在该数据:

prefix :     <…>
prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
ask {
    :isManagedBy rdfs:domain :FunctionManagement .
    :isManagedBy rdfs:range  :SymposiumPlanner2013 .
}

您甚至可以使用一些缩写来使其更简洁:

prefix :     <…>
prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
ask {
    :isManagedBy rdfs:domain :FunctionManagement ;
                 rdfs:range  :SymposiumPlanner2013 .
}

答案 1 :(得分:2)

在我看来,您想要获取某个属性的域和范围,并且您想要验证它们是否与其他特定值匹配。如果是这种情况,并给出您的样本数据,那么您的第二个查询是正确的。

有一点需要注意的是,在两个类之间保持谓词的想法与在一个类的两个成员之间保持谓词之间似乎存在一点混淆。

您的示例数据表明,如果您看到:isManagedBy的实例,例如在三:steve :isManagedBy :bill中,那么我们可以推断出:steve rdf:type :FunctionManagement:bill rdf:type :SymposiumPlanner2013。这并没有说明类本身,只讨论属性实例的主题和对象。

如果您正在尝试查看某些属性是否适用于该类,例如“:FunctionManagement :isManagedBy :SymposiumPlanner2013 {{}}的所有成员”,那么您将使用owl:minCardinality限制来表达该类在你的数据中。然后,您的查询将更改以反映用于解释它的构造。下面是一个指定该约束的小本体的示例。

<owl:ObjectProperty rdf:about="#isManagedBy"/>


<owl:Class rdf:about="#FunctionManagement">
    <rdfs:subClassOf>
        <owl:Restriction>
            <owl:onProperty rdf:resource="#isManagedBy"/>
            <owl:someValuesFrom rdf:resource="#SymposiumPlanner2013"/>
        </owl:Restriction>
    </rdfs:subClassOf>
</owl:Class>


<owl:Class rdf:about="#SymposiumPlanner2013"/>