0

所以我想用 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"))
            }   
        }
}
4

0 回答 0