耶拿数据集监听器

时间:2018-08-21 13:48:49

标签: jena tdb

借助ModelChangedListener,我可以按照Jena文档(Event handling in Jena)中的说明监视Model中的更改。

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

但是,在我的项目中,我想监视Dataset的更改,以便在默认图形或Dataset的其中一个命名图形中发生某些情况后运行代码。

我想做的只是在针对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" .
    }
}

检测到在默认图形中添加了“一个”,“两个”,在g1中添加了“三个”,“四个”。

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

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

1 个答案:

答案 0 :(得分:1)

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

听模型是完全不可靠的,因为更改可能直接进入数据集。 DatasetFactory.createGeneral数据应适用于应用程序添加的模型,但在您的示例中d:g1可能无效。您将必须添加一种创建模型的方法。引擎是DatasetGraphMapLink

但是DatasetGraphMonitor / DatasetChanges更容易。

另一种选择是RDF DeltaDatasetGraphChanges,其中的更改随交易边界传递。