耶拿数据集监听器

标签 jena tdb

感谢 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 DeltaDatasetGraphChanges,其中更改是通过事务边界传递的。

关于耶拿数据集监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51950233/

相关文章:

rdf - 在 apache jena SPARQL 中使用 GROUP BY、COUNT 和 SAMPLE

java - 如何将规则的结果写入模型(在耶拿)?

rdf - Fuseki 可以同时使用 OWL 推理器和规则推理器吗

java - 导致空字段的 Jena TDB 插入语句

SPARQL 查询在 Fuseki 中有效,但在 Jena TDB 中无效

java - xsd :dateTime in SPARQL query with Jena? 的数据类型格式异常

java - Maven 中的 Jena schemagen 处理多个本体

sparql - 本体研究 EquivalentTo 来自多个单一类的类

glassfish - Apache JENA TDB 文件在使用 Web 应用程序创建后被锁定

jena - 如何在 TDB 中存储多个本体