所以我想用 Jena 库中的 SPARQL QueryBuilder 重写一些旧代码(不是我的代码)的 SPARQL 查询。查询如下所示:
SELECT ?s ?p ?o {
{
?s ?p ?o.
<http://www.test.org/node1> ?p ?o.
FILTER (str(?s) = "http://www.test.org/node1").
}
UNION {
?s ?p ?o.
?s ?p <http://www.test.org/node1>.
FILTER (str(?o) = "http://www.test.org/node1").
FILTER(!regex(str(?p),"http://www.test.org/vocab#someProperty", "i"))
}
}
我现在的问题是,如果你想在这个库中添加一个“Union”或“Subquery”,你必须传递另一个SelectBuilder
会使子查询开始的“SELECT”而不是 ?s ?p ?o 语句像上面一样。我是否遗漏了一些隐含的 SPARQL 概念,或者这基本上是SELECT *
子查询/联合中的一个,使查询看起来像:
SELECT ?s ?p ?o {
{
SELECT * {
?s ?p ?o.
<http://www.test.org/node1> ?p ?o.
FILTER (str(?s) = "http://www.test.org/node1").
}
}
UNION {
SELECT * {
?s ?p ?o.
?s ?p <http://www.test.org/node1>.
FILTER (str(?o) = "http://www.test.org/node1").
FILTER(!regex(str(?p),"http://www.test.org/vocab#someProperty", "i"))
}
}
}