Jena UpdateFactory - PullRequest
       24

Jena UpdateFactory

1 голос
/ 02 апреля 2012

Мне было интересно, возможно ли создать SPARQL UpdateRequest в Йене, используя объекты ARQ Op.Мне было бы интересно создавать программные обновления, такие как:

DELETE {?s :predicate <http://example.org#old> }    
INSERT {?s :predicate <http://example.org#toAdd>} 
WHERE  {?s :predicate <http://example.org#old> } 

, создавая шаблоны в предложениях DELETE, INSERT и WHERE из ARQ API.До настоящего времени единственные способы создания запросов на обновление SPARQL, которые я нашел, требуют синтаксического анализа строки SPARQL или создания объекта com.hp.hpl.jena.update.Update (который использует объекты QuadAcc, для которых я не смогя не могу найти примеры использования.

Я боюсь, что управление запросами SPARQL UPDATE и одним из запросов SPARQL SELECT разделены и что ARQ нельзя использовать для «сборки» запросов на лету.

Заранее спасибо

Ответы [ 2 ]

1 голос
/ 21 мая 2015

Этот вопрос также сжег меня.Я хотел составить 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();
0 голосов
/ 03 апреля 2012

Я сам не пробовал, но похоже, что создание Update объектов и сборка их в UpdateRequest - это действительно правильный путь.

После краткого обзора QuadAcc не кажется особенно сложным, просто используйте addTriple() с тройками, которые содержат переменные.

Подкласс UpdateModify в Update выглядит особенно интересно, он соответствует шаблону DELETE … INSERT … WHERE в вашем примере. К сожалению, предложение WHERE инициализируется Element (синтаксическим представлением части запроса), а не Op (алгебраическим представлением).

...