Рассуждения в Apache Jena Fuseki: перезагрузить набор данных или инициировать вывод

У нас есть сервер Apache-Fuseki со следующей конфигурацией:

@prefix :      <http://base/#> .
@prefix tdb:   <http://jena.hpl.hp.com/2008/tdb#> .
@prefix tdb2:  <http://jena.apache.org/2016/tdb#> .
@prefix rdf:   <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix ja:    <http://jena.hpl.hp.com/2005/11/Assembler#> .
@prefix rdfs:  <http://www.w3.org/2000/01/rdf-schema#> .
@prefix fuseki: <http://jena.apache.org/fuseki#> .

# TDB
tdb2:DatasetTDB  rdfs:subClassOf  ja:RDFDataset .
tdb2:GraphTDB    rdfs:subClassOf  ja:Model .

# Service 1: Dataset endpoint (no reasoning)
:dataService a fuseki:Service ;
  fuseki:name           "wotTdb" ;
  fuseki:serviceQuery   "sparql", "query" ;
  fuseki:serviceUpdate  "update" ;
  fuseki:serviceReadWriteGraphStore "data" ;
  fuseki:dataset        :tdbDataset ;
.

# Service 2: Reasoning endpoint
:reasoningService a fuseki:Service ;
  fuseki:dataset                 :infDataset ;
  fuseki:name                    "wotReasoning" ;
  fuseki:serviceQuery            "query", "sparql" ;
  fuseki:serviceReadGraphStore   "get" ;
.

# Inference dataset
:infDataset rdf:type ja:RDFDataset ;
            ja:defaultGraph :infModel ;
.

# Inference model
:infModel a ja:InfModel ;
           ja:baseModel :g ;

           ja:reasoner [
              ja:reasonerClass "openllet.jena.PelletReasonerFactory" ;
            ] ;
.

# Intermediate graph referencing the default union graph
:g rdf:type tdb2:GraphTDB2 ;
   tdb2:dataset :tdbDataset ;
   tdb2:graphName <urn:x-arq:UnionGraph> ;
.

# The location of the TDB dataset
:tdbDataset rdf:type tdb2:DatasetTDB2 ;
            tdb2:location "/fuseki/databases/wot" ;
            tdb2:unionDefaultGraph true ; 
.

Объяснение:

Он имеет 2 конечных точки, одну для необработанных данных и одну для выведенных данных.

Набор необработанных данных имеет 2 графика:

  • данные мы читаем и отправляем в фьюзки
  • ограничения, которые мы используем для рассуждений

Набор данных вывода состоит из графа объединения по умолчанию из набора данных (необработанные + ограничения) и модели вывода.

Мы делаем это, чтобы у нас была 1 конечная точка для чтения/записи наших данных и ограничений и 1 конечная точка для вывода.

Проблема в том, что конечная точка рассуждения не будет «обновляться», например. делать рассуждения, если поступают новые данные. Как мы можем «запустить» механизм рассуждений для обновления своего графика, если поступают новые данные (или вообще)?

Запрос набора данных не работает, единственное решение, которое мы нашли до сих пор, — это перезапуск сервера, что нецелесообразно.

Я нашел эту конфигурацию в этом ответе с примечанием

Обратите внимание, что служба рассуждений не увидит никаких изменений в наборе данных, пока он не будет перезагружен, поскольку все рассуждения выполняются в памяти.

Это как раз наша проблема.

Также: если у вас есть идея получше для этого подхода в целом, сообщите мне об этом. Мы подумали, что было бы неплохо разделить фактические данные и данные, полученные путем вывода, и это был единственный способ добиться этого.


person hsteinmueller    schedule 28.01.2020    source источник