如何使用Jena编写SPARQL查询以查找所有类的所有对象中的文字匹配?

时间:2017-10-28 17:44:44

标签: java sparql jena semantic-web

(1)我有some ontology下一个结构:enter image description here 每个人都有一个名为“ value_of_individual ”和 literal 的“数据属性”。
例如, individualA1 value_of_individual literal valueA1 ; individualB2 value_of_individual literal valueB2 等。

(2)我想创建下一个查询:在所有类的所有对象中找到文字匹配。如果有巧合 - 返回 true ,如果没有巧合 - 返回 false

(3)我发现我需要使用 ASK查询。例如:

QueryExecution queryExecution = QueryExecutionFactory.create(""
            + "ASK { GRAPH ?g { ?s ?p ?o } }"
            + "", dataset);
    boolean res = queryExecution.execAsk();
    System.out.println("The result is " + res);

(4)我的问题:
如何编写第2节中描述的查询并将其与第3节中描述的查询相结合?

编辑:
 我输入了单词,例如“MyLiteral”。我想知道ClassA,ClassB,ClassC中是否有个人在数据属性中有一个文字作为“MyLiteral”。

1 个答案:

答案 0 :(得分:2)

(我还不确定我是否理解你的问题,特别是因为你写了&#34;在所有类的所有对象中找到一个文字匹配&#34; 和<强>&#34;所有对象&#34; 令人困惑......)

您必须反转以下查询的结果才能得到原始问题的答案,我只是将其重写为:

&#34;是否有一个类不包含至少一个"MyLiteral"作为属性值:value_of_individual的个人?&#34; :

PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX : <http://www.semanticweb.org/test-ontology#> 
ASK { 
?cls a owl:Class
FILTER NOT EXISTS {
 ?s a ?cls .
 ?s :value_of_individual "MyLiteral"^^xsd:string
}
}

更新

根据comment from @StansilavKralin,如果问题更多的是要检查是否有&#34;任何具有给定值的个人&#34; ,那么问题就是@StansilavKralin在other comment中写道:

PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> 
PREFIX : <http://www.semanticweb.org/test-ontology#> 
ASK {
  ?s :value_of_individual "MyLiteral"^^xsd:string
}

最终解决方案

PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> 
PREFIX test: <http://www.semanticweb.org/test-ontology#> 
ASK {
 VALUES ?cls {test:ClassA test:ClassB test:ClassC} 
 ?s a ?cls .
 ?s test:value_of_individual "valueC3"^^xsd:string 
}