Sparql Apache Jena Fuseki中的推理:;“重新加载”;数据集或;“触发”;推论

Sparql Apache Jena Fuseki中的推理:;“重新加载”;数据集或;“触发”;推论,sparql,jena,inference,fuseki,reasoning,Sparql,Jena,Inference,Fuseki,Reasoning,我们有一台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#&g

我们有一台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 ; 
.
@前缀:。
@前缀tdb:。
@前缀tdb2:。
@前缀rdf:。
@前缀ja:。
@前缀rdfs:。
@前缀fuseki:。
#TDB
tdb2:datasetdb-rdfs:ja的子类:RDFDataset。
tdb2:GraphTDB-rdfs:ja的子类:Model。
#服务1:数据集终结点(无推理)
:dataService a fuseki:Service;
fuseki:名称“wotTdb”;
fuseki:serviceQuery“sparql”、“query”;
fuseki:serviceUpdate“更新”;
fuseki:serviceReadWriteGraphStore“数据”;
fuseki:dataset:tdbDataset;
.
#服务2:推理端点
:推理服务fuseki:服务;
fuseki:dataset:infDataset;
fuseki:名称“wotReasoning”;
fuseki:serviceQuery“查询”、“sparql”;
fuseki:serviceReadGraphStore“获取”;
.
#推理数据集
:infDataset rdf:type ja:RDFDataset;
ja:defaultGraph:infModel;
.
#推理模型
:infModel a ja:infModel;
ja:baseModel:g;
ja:推理机[
ja:reasonerClass“openllet.jena.PelletReasonerFactory”;
] ;
.
#引用默认联合图的中间图
:g rdf:type tdb2:grapht2;
tdb2:数据集:tdbDataset;
tdb2:图形名称;
.
#TDB数据集的位置
:tdbDataset rdf:type tdb2:datasetdb2;
tdb2:位置“/fuseki/databases/wot”;
tdb2:unionDefaultGraph true;
.
说明:

它有两个端点,一个用于原始数据,一个用于推断数据

原始数据集有两个图形:

  • 我们读取并推送到fuseki的数据
  • 我们用于推理的限制
推理数据集由来自数据集(原始+限制)的联合默认图和推理模型组成

我们这样做是为了有一个端点来读/写数据和限制,还有一个端点来进行推断

问题是推理端点不会“更新”,例如,如果有新数据进入,则进行推理。如果新数据到达(或一般情况下),我们如何“触发”推理引擎更新其图表

查询数据集不起作用,到目前为止,我们找到的唯一解决方案是重新启动服务器,这是不合理的

我在这张便条上找到了这个配置

请注意,在重新加载数据集之前,推理服务不会看到数据集中的任何更改,因为推理都是在内存中完成的

这正是我们的问题

另外:如果您对这种方法有更好的想法,请告诉我。我们认为将事实数据和推断数据分开是个好主意,这是我们实现这一目标的唯一途径