我想知道是否可以使用ARQ对象在Jena中创建SPARQL UpdateRequest。我有兴趣以编程方式创建这样的更新:
DELETE {?s :predicate <http://example.org#old> }
INSERT {?s :predicate <http://example.org#toAdd>}
WHERE {?s :predicate <http://example.org#old> } 通过从API中创建DELETE、INSERT和WHERE子句中的模式。到目前为止,我找到的创建SPARQL请求的唯一方法需要解析SPARQL字符串或创建com.hp.hpl.jena.update.Update对象(它使用的是我无法找到使用示例的QuadAcc对象)。
我担心SPARQL更新请求的管理和SPARQL SELECT查询的管理是分开的,并且ARQ不能用于动态地“组装”查询。
提前感谢
发布于 2012-04-03 05:48:11
我自己还没有尝试过这种方法,但是看起来创建Update对象并将它们组装成一个UpdateRequest确实是可行的。
简单地看一下,QuadAcc似乎并不特别困难,只需在包含变量的三元组中使用addTriple()。
UpdateModify子类Update看起来特别有趣,它对应于示例中的DELETE … INSERT … WHERE模式。不幸的是,WHERE子句被初始化为Element (查询部分的语法表示),而不是Op (代数表示)。
发布于 2015-05-21 10:03:27
这个问题也让我心烦。我想从UpdateRequest对象和ElementTriplesBlock对象组成一个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);我试了一下耶拿邮件列表,得到了这样的答案:
update用于处理流、任意大、无限制的插入和删除数据,因此使用了
,而不是用于更新的插入/删除部分的元素。
最后,我使用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();https://stackoverflow.com/questions/9979931
复制相似问题