我想插入以下内容:如果存在从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);