Jena UpdateFactory



我想知道是否可以使用ARQ Op对象在Jena中创建SPARQL UpdateRequest。我有兴趣创建这样的程序更新:

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

通过在ARQ API的DELETE、INSERT和WHERE子句中创建模式。到目前为止,我找到的创建SPARQL更新请求的唯一方法需要解析SPARQL字符串或创建com.hpl.jena.Update.Update对象(它使用QuadAcc对象,我找不到使用示例。

我担心的是,SPARQLUPDATE请求的管理和SPARQLSELECT查询的管理是分开的,ARQ不能用于动态"组装"查询。

提前感谢

这个问题也让我很头疼。我想用ElementGroup对象和ElementTriplesBlock对象组成一个UpdateRequest。这是用于构造查询的两个主要类。例如:

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);

我尝试了耶拿邮件列表,收到了这个答案:

更新API旨在处理任意大的流无限的INSERT和DELETE数据,因此使用QuadAcc而不是更新的INSERT/DELETE部分的元素。

最终,我使用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();

我自己还没有尝试过,但看起来创建Update对象并将它们组装成UpdateRequest确实是可行的。

简单看一下,QuadAcc似乎并不特别困难,只需将addTriple()与包含变量的三元组一起使用即可。

UpdateUpdateModify子类看起来特别有趣,它对应于示例中的DELETE … INSERT … WHERE模式。不幸的是,WHERE子句是用Element(查询部分的句法表示)而不是Op(代数表示)初始化的。

相关内容

  • 没有找到相关文章

最新更新