我们有一台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个Endpoint来读写我们的数据和限制,1个Endpoint来做推理。
问题是,推理端点不会 "更新",比如说,如果有新数据进来,就做推理。如果有新的数据到来(或一般情况下),我们如何 "触发 "推理引擎更新其图?
查询数据集是行不通的,目前我们找到的唯一解决方案是重启服务器,这是不合理的。
我在这个上找到了这样的配置 回答 附注
请注意,推理服务在重新加载之前不会看到数据集的任何变化,因为推理都是在内存中完成的。
这正是我们的问题所在。
另外。 如果你对这种方法有更好的想法,请告诉我。我们认为将事实数据和推理数据分开是个好主意,这是我们能够实现这个目标的唯一方法。