Joh*_*rom 5 jena reasoning fuseki tdb named-graphs
我正在为Fuseki 2中的TDB数据集提供一个包含10-20个命名图的数据集。我想使用推理程序对我的数据进行推断。我想看到的行为是,在每个图中推断出的三元组应该出现在这些图中(尽管如果三元组也出现在默认图中也可以)。有没有简单的配置方法?我还没有找到与我要尝试匹配的任何配置示例。
我尝试过的配置与以下标准示例非常相似。
数据集TDB-> 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的默认行为,该行为保留持久的命名图,进行推断并还允许更新。)
提前致谢。
我的代码面临(或面临)同样的问题,但我有部分解决方案。不幸的是,评论中提供的链接并没有真正帮助我仍然面临的问题,但这回答了部分问题。
我看到的数据的最终视图只是数据的一个非常小的子集(似乎所有命名图都被放置在该管道的某个位置,并且只留下了微小的默认图)。使用 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 的帖子,这应该可以工作,但在我的情况下它不起作用。
希望这仍然有帮助。
| 归档时间: | 
 | 
| 查看次数: | 1117 次 | 
| 最近记录: |