Слушатель набора данных Jena

Благодаря ModelChangedListener я могу отслеживать изменения в Model, как описано в документации 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);

person infomehdi    schedule 21.08.2018    source источник


Ответы (1)


Взгляните на DatasetGraphMonitor, который принимает DatasetChanges для обработки изменений.

Прослушивание моделей ненадежно, если оно вообще работает, потому что изменения могут поступать прямо в набор данных. Данные DatasetFactory.createGeneral должны работать для моделей, добавленных приложением, но в вашем примере d:g1 могут не работать. Вам нужно будет добавить способ создания модели. Движок для этого DatasetGraphMapLink.

Но DatasetGraphMonitor/DatasetChanges проще.

Альтернативой является RDF Delta и DatasetGraphChanges, где изменения доставляются с границами транзакций.

person AndyS    schedule 22.08.2018
comment
Спасибо за ответ. Использование DatasetChangesCapture решило проблему. - person infomehdi; 22.10.2018