SPARQL "ASK"查询以检查两个类之间是否存在对象属性(不是黑白个体)

标签 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 文件中是否存在某些事实( bool 答案)

例如:OWL 片段

<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) 是否存在。

最佳答案

我认为我链接的可能重复项 ( How to query Classes with Object Property in Sparql ) 可能足以回答您的问题,但没有必要将 select 查询包装在 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 .
    :isManagedBy rdfs:range  :SymposiumPlanner2013 .
}

你甚至可以使用一些缩写来使它更简洁:

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

关于SPARQL "ASK"查询以检查两个类之间是否存在对象属性(不是黑白个体),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23086219/

相关文章:

sparql - Sparql 中的字符串

sparql - 查询多个 TDB 数据集

owl - 如何看dbpedia owl之类的yago2s本体?

xml - 在 Protege-OWL 编辑器中显示关系

rdf - 如何从不同的未知结构化rdf图中查询数据?

iphone - 如何使用 sparql 端点 - 例如 iPhone 应用程序中的 DBPedia

java - 将 System.out 返回到字符串

sparql - 如何查询 OWL 模式以获取实例之间的路径

java - 错误: cannot find symbol resultset

sparql - 如何解析 Sparql 代数中的元素