SPARQL插入未插入

时间:2019-05-06 12:19:05

标签: sparql jena

我想插入以下内容:如果存在从s到o的路径通过谓词p且长度至少为2个边,则插入一个三元组(s,p,o)。 我的查询如下:

insert { ?s <http://n1> ?o }
WHERE { 
?s <http://n1>/<http://n1>+ ?o .
FILTER (NOT EXISTS {?s <http://n1> ?o })
}

我的模型是这样的

<http://0> <http://n1> <http://1> .
<http://1> <http://n1> <http://2> .

因此它应该插入三元组<http://0> <http://n1> <http://2> .,但不插入任何内容。

我使用Jena API执行我的sparql代码。

Model model = null;
        try {
            model = ModelFactory.createDefaultModel().read(filePath);
        } catch (Exception e) {
            e.printStackTrace();
        }
String pred = "http://n1";
sparql = "insert { ?s <" + pred + "> ?o }\n" +
    "WHERE { \n" +
    "?s <" + pred + ">/<" + pred + ">+ ?o .\n" +
    "FILTER (NOT EXISTS {?s <" + pred + "> ?o })\n" +
    "}";
ParameterizedSparqlString parameterizedSparql = new ParameterizedSparqlString(model);
parameterizedSparql.setCommandText(sparql);
UpdateAction.parseExecute(parameterizedSparql.asUpdate().toString(), model);

0 个答案:

没有答案