【问题标题】:Get affected triples from SPARQL update query从 SPARQL 更新查询中获取受影响的三元组
【发布时间】:2021-02-06 14:13:24
【问题描述】:

我有一个如下所示的 SPARQL 更新查询

DELETE { ?s <http://ex#> <http://ex#OLD> }
INSERT { ?s <http://ex#> <http://ex#NEW> }
WHERE { ?s <http://ex#> <http://ex#OLD> }

我想在我的模型上运行此查询。这将导致在模型中删除一些三元组并添加一些其他三元组。我正在寻找一种在 Apache Jena 中获取这些受影响的三元组的方法。

到目前为止,我已经制作了一个ModelChangedListner (https://jena.apache.org/documentation/notes/event-handler-howto.html) 来获得这些三元组。即使它工作正常,但问题是我想要受影响的三元组在它们被提交到数据集之前。但是模型更改的侦听器不提供任何此类保证。

编辑:如果在当前版本的 Jena 中没有解决方案,如果有人可以指出应该进行此修改的位置,我愿意修改并重新编译 Jena 代码。 p>

【问题讨论】:

  • 该更新与您描述的不符。 ?o 不在 WHERE 部分。你是说DELETE { ?s &lt;http://ex#&gt; &lt;http://ex#OLD&gt; }

标签: java sparql jena


【解决方案1】:

参见RDF Delta - 特别是DatasetGraphChanges - 记录对数据集的更改。它记录执行的“添加”和“删除”操作,记录三元组(四元组)的变化。使用包装器比ModelChangedListener 更可靠、更通用,因为它捕获了对基本存储(数据集)的更改操作。

【讨论】:

  • 我需要检查更多关于 RDF Delta 的信息,但乍一看,它似乎与我的用例不匹配,因为我无法运行另一台服务器。我尝试了使用 DatasetGraphMonitor 的其他选项,但问题是使用 UpdateAction.parseExecute(..) 没有发送通知。也许在内部它没有使用传递的包装数据集对象。
  • RDF Delta 的一部分是“rdf-patch”模块,它是一个库,不依赖于服务器。 DatasetGraphChanges 在那个模块中。
  • 好的,谢谢,我会探索它!但我仍然觉得获得更改的原生且可靠的方式会很好,因为在回调方面具有更大的灵活性。如果 UpdateAction.parseExecute(..) 没有使用包装的数据集对象,您认为应该进一步检查根本原因吗?
  • 顺便说一句,非常感谢您对社区的帮助!
猜你喜欢
  • 2013-02-16
  • 2011-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多