借助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);
答案 0 :(得分:1)
看看DatasetGraphMonitor
,它需要DatasetChanges
来处理更改。
听模型是完全不可靠的,因为更改可能直接进入数据集。 DatasetFactory.createGeneral
数据应适用于应用程序添加的模型,但在您的示例中d:g1
可能无效。您将必须添加一种创建模型的方法。引擎是DatasetGraphMapLink
。
但是DatasetGraphMonitor
/ DatasetChanges
更容易。
另一种选择是RDF Delta和DatasetGraphChanges
,其中的更改随交易边界传递。