耶拿数据集监听器

Jena Dataset Listener

感谢 ModelChangedListener,我可以监控 Model 中的变化,如 Jena 文档 (Event handling in Jena) 中所述。

Model m = ModelFactory.createDefaultModel(); 
ModelChangedListener L = new MyListener();
m.register(L);

但是,在我的项目中,我想监视 Dataset 在默认图形或 [=14= 的命名图形之一发生某些事情后对 运行 代码的更改].

我想做的只是在针对 Dataset:

执行此类查询后触发事件
PREFIX d: <http://learningsparql.com/ns/data#>
PREFIX dm: <http://learningsparql.com/ns/demo#>
INSERT DATA
{
    d:x dm:tag "one" .
    d:x dm:tag "two" .
    GRAPH d:g1
    {
        d:x dm:tag "three" .
        d:x dm:tag "four" .
    }
}

检测 "one" "two" 被添加到默认图形,"three" "four" 添加到 g1。

使用此代码,我什至无法检测 Dataset 的默认图表中发生的变化,更不用说检测命名图表中的变化了。

Dataset ds = RDFDataMgr.loadDataset(ONTOLOGY_PATH);
Model defaultModel = ds.getDefaultModel();
ModelChangedListener modelChangedListener = new MyListener();
defaultModel.register(modelChangedListener);

看看 DatasetGraphMonitor,它需要 DatasetChanges 来处理更改。

即使模型有效,聆听模型也是不可靠的,因为更改可能会直接进入数据集。 DatasetFactory.createGeneral 数据应该适用于应用程序添加的模型,但在您的示例中 d:g1 可能无效。您将不得不添加一种创建模型的方法。这个引擎是 DatasetGraphMapLink.

但是 DatasetGraphMonitor / DatasetChanges 更容易。

另一种选择是 RDF Delta,并且 DatasetGraphChanges 更改是通过事务边界交付的。