我正在提供一个包含10-20个命名图的数据集,它来自于Fuseki 2中的TDB数据集。我想使用一个推理机对我的数据进行推理。我希望看到的行为是,在每个图中推断的三元组应该出现在这些图中(尽管如果三元组也出现在默认图中也是很好的)。有没有简单的方法来配置它?我还没有找到任何与我想要做的事情相匹配的配置示例。
我尝试的配置与下面的标准示例非常相似。
DatasetTDB -> GraphTDB -> InfModel -> RDFDataset
我看到的数据的最终视图只是数据的一个非常小的子集(似乎所有命名的图都被放在这个管道的某个地方,只剩下很小的默认图)。使用tdb:unionDefaultGraph似乎对此没有影响。
prefix : <#> .
@prefix fuseki: <http://jena.apache.org/fuseki#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix tdb: <http://jena.hpl.hp.com/2008/tdb#> .
@prefix ja: <http://jena.hpl.hp.com/2005/11/Assembler#> .
# Example of a data service with SPARQL query and update on an
# inference model. Data is taken from TDB.
## ---------------------------------------------------------------
## Service with only SPARQL query on an inference model.
## Inference model base data is in TDB.
<#service2> rdf:type fuseki:Service ;
fuseki:name "inf" ; # http://host/inf
fuseki:serviceQuery "sparql" ; # SPARQL query service
fuseki:serviceUpdate "update" ;
fuseki:dataset <#dataset> ;
.
<#dataset> rdf:type ja:RDFDataset ;
ja:defaultGraph <#model_inf> ;
.
<#model_inf> a ja:InfModel ;
ja:baseModel <#tdbGraph> ;
ja:reasoner [
ja:reasonerURL <http://jena.hpl.hp.com/2003/OWLFBRuleReasoner>
] .
## Base data in TDB.
<#tdbDataset> rdf:type tdb:DatasetTDB ;
tdb:location "DB" ;
# If the unionDefaultGraph is used, then the "update" service should be removed.
# tdb:unionDefaultGraph true ;
.
<#tdbGraph> rdf:type tdb:GraphTDB ;
tdb:dataset <#tdbDataset> .
</code>有人对此有什么想法吗?
此外,如果有一种方法可以使数据集可写,还可以加分。(在某种程度上,我试图做的是接近Owlim/GraphDB的默认行为,它保留持久的命名图,进行推理,并允许更新。)
提前谢谢。
发布于 2016-06-29 15:03:56
我在我的代码中面临(或面临)相同的问题,但我有一个部分的解决方案。不幸的是,评论中提供的链接并没有真正帮助我仍然面临的问题,但这解决了问题的一部分。
我看到的数据的最终视图只是数据的一个非常小的子集(似乎所有命名的图都被放在这个管道的某个地方,只剩下很小的默认图)。使用tdb:unionDefaultGraph似乎对此没有影响。
我找到的解决方法是在配置文件中显式“注册”您的命名图。我真的不知道这是不是最好的方法(也没有找到任何与此相关的文档或示例)。我的设置(Fuseki 2.4)上的一个工作示例:
[usual configuration start]
# TDB Dataset
:tdb_dataset_readwrite
a tdb:DatasetTDB ;
tdb:unionDefaultGraph true ;
#if you want all data to available in the default graph
#without 'FROM-NAMing them' in the SPARQL query
tdb:location "your/dataset/path" .
# Underlying RDF Dataset
<#dataset>
rdf:type ja:RDFDataset ;
ja:defaultGraph <#model> ;
ja:namedGraph [
ja:graphName <your/graph/URI> ;
ja:graph <#graphVar>
] ;
[repeat for other named graphs]
.
######
# Default Model : Inference rules (OWL, here)
<#model> a ja:InfModel;
ja:baseModel <#tdbGraph>;
ja:reasoner
[ ja:reasonerURL
<http://jena.hpl.hp.com/2003/OWLFBRuleReasoner>
]
.
# Graph for the default Model
<#tdbGraph> rdf:type tdb:GraphTDB;
tdb:dataset :tdb_dataset_readwrite .
######
# Named Graph
<#graphVar> rdf:type tdb:GraphTDB ;
tdb:dataset :tdb_dataset_readwrite ;
tdb:graphName <your/graph/URI>
.然后,您可以运行如下所示的查询
[prefixes]
SELECT ?graph ?predicate ?object
WHERE {
GRAPH ?graph {[a specific entity identifier] ?predicate ?object}
}
LIMIT 50它将显示(在本例中)属性和值,以及找到它们的源图。
但是:在这个例子中,即使缺省图假设导入了推理规则(应该全局应用,特别是因为启用了unionDefaultGraph参数),它们也不是以“交叉图”的方式应用的,这是我仍然面临的问题。
通常,根据Andy Seaborne的帖子here,如果您将推理引擎添加到每个图中,这应该可以工作,但它在我的情况下不起作用。
尽管如此,希望这能有所帮助。
发布于 2017-03-20 07:28:14
我自己已经遇到过这个问题很多次了,但实际上我从来没有看到过解决方案。然而,在阅读了文档中关于TDB数据集中的“特殊图形名称”的this之后,我设法弄明白了这一点。据我所知,在汇编程序文件中为TDB数据集设置联合缺省图只会更改查询该特定数据集时返回的内容。但是,有一个特殊的图名可以用来引用联合图:<urn:x-arq:UnionGraph>。因此,只需创建GraphTDB,引用TDB数据集并将其指向这个特殊的图形。
下面的配置文件执行问题中要求的操作:推理在默认的联合图上执行,结果在TDB数据集中作为可写服务公开。(请注意,推理服务在重新加载之前不会看到数据集中的任何更改,因为推理都是在内存中完成的)。
@prefix : <http://base/#> .
@prefix tdb: <http://jena.hpl.hp.com/2008/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
tdb:DatasetTDB rdfs:subClassOf ja:RDFDataset .
tdb:GraphTDB rdfs:subClassOf ja:Model .
# Service 1: Dataset endpoint (no reasoning)
:dataService a fuseki:Service ;
fuseki:name "tdbEnpoint" ;
fuseki:serviceQuery "sparql", "query" ;
fuseki:serviceUpdate "update" ;
fuseki:dataset :tdbDataset ;
.
# Service 2: Reasoning endpoint
:reasoningService a fuseki:Service ;
fuseki:dataset :infDataset ;
fuseki:name "reasoningEndpoint" ;
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:reasonerURL <http://jena.hpl.hp.com/2003/OWLFBRuleReasoner> ;
] ;
.
# Intermediate graph referencing the default union graph
:g rdf:type tdb:GraphTDB ;
tdb:dataset :tdbDataset ;
tdb:graphName <urn:x-arq:UnionGraph> ;
.
# The location of the TDB dataset
:tdbDataset rdf:type tdb:DatasetTDB ;
tdb:location "/fuseki/databases/db" ;
tdb:unionDefaultGraph true ;
.https://stackoverflow.com/questions/35428064
复制相似问题