Этот вопрос также сжег меня.Я хотел составить 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, следовательно,использование QuadAcc вместо элемента для вставки / удаления части обновления.
В конце концов я реализовал это, используя 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();