感谢 ModelChangedListener,我可以监控 Model
中的变化如 Jena 文档 ( Event handling in Jena ) 中所述。
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);
最佳答案
看看 DatasetGraphMonitor
,它采用 DatasetChanges
来处理更改。
即使模型有效,聆听模型也是不可靠的,因为更改可能会直接进入数据集。 DatasetFactory.createGeneral
数据应该适用于应用程序添加的模型,但在您的示例中 d:g1
可能不适用。您将不得不添加一种创建模型的方法。其引擎是 DatasetGraphMapLink
。
但是 DatasetGraphMonitor
/DatasetChanges
更容易。
另一种选择是 RDF Delta和 DatasetGraphChanges
,其中更改是通过事务边界传递的。
关于耶拿数据集监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51950233/