Рассуждение в Apache Jena Fuseki: набор данных "Обновить" или "триггерный" вывод - PullRequest
2 голосов
/ 28 января 2020

У нас есть сервер 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 графика:

  • данные, которые мы читаем, и pu sh для fuseki
  • ограничения, которые мы используем для рассуждение

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

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

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

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

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

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

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

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

...