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

标签 java sparql jena semantic-web

(1) 我有some ontology具有下一个结构:enter image description here 每个人都有一个名为“value_of_individual”和文字的“数据属性”。
例如,individualA1 具有 value_of_individualliteral valueA1individualB2 具有 value_of_individualliteral 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”。

最佳答案

(我仍然不确定我是否正确理解你的问题,特别是因为你写了“在所有类的所有对象中查找字面匹配”“所有对象” 令人困惑...)

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

“是否有一个类不包含至少一个以 “MyLiteral” 作为属性 :value_of_individual 值的个体?” :

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 ,如果问题更多的是检查是否存在“任何具有给定值的个体的类”,那么问题将正是 @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 
}

关于java - 如何使用 Jena 编写 SPARQL 查询以在所有类的所有对象中查找文字匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46992661/

相关文章:

java - VSCode : disable Java linting

sql - 将具有 self JOIN 的 SQL 转换为 SPARQL

sparql - 如何将变量绑定(bind)到 SPARQL 中的查询项

pattern-matching - sparql模式匹配

java - 使用 dbpedia 作为终点向 jena(对于 sparql)添加超时?

java - 从 URI 检索 RDF 时如何设置 HTTP 超时?

java - 泛型混淆 : deceiving the compiler

Java创建没有SQL内容的PreparedStatement

java - 错误 : cannot access LifecycleObserver

sparql - dotNetRDF VS Jena.NEt VS 其他使用 Dotnet 的人?