这个问题也让我很头疼。我想UpdateRequest
由ElementGroup
对象和ElementTriplesBlock
对象组成。这是用于构造查询的两个主要类。例如:
ElementGroup queryPattern = ...
ElementTriplesBlock constructTriples = ...
Query query = new Query();
query.setQueryConstructType();
// set CONSTRUCT clause
query.setConstructTemplate(new Template(constructTriples.getPattern()));
// set WHERE clause
query.setQueryPattern(queryPattern);
我尝试了 Jena 邮件列表并收到了这个答案:
更新 API 旨在处理任意大的无界 INSERT 和 DELETE 数据流,因此在更新的 INSERT/DELETE 部分使用 QuadAcc 而不是 Element。
最终我使用一个ParametrizedSparqlString
:
ElementGroup queryPattern = ...
ElementTriplesBlock deleteTriples = ...
ElementTriplesBlock insertTriples = ...
ParameterizedSparqlString qstring = new ParameterizedSparqlString();
// Set DELETE clause
qstring.append("DELETE {");
qstring.append(deleteTriples.toString());
qstring.append("}");
// Set INSERT clause
qstring.append("INSERT {");
qstring.append(insertTriples.toString());
qstring.append("}");
// Set WHERE clause
qstring.append("WHERE {");
qstring.append(queryPattern.toString());
qstring.append("}");
// Construct an update query
UpdateRequest request = qstring.asUpdate();