Jena命名图与联合图查询异常:Fuseki配置错误致无结果
[编辑] 是我的问题:我配置Jena-Fuseki时出错,
tdb2:unionDefaultGraph参数未设置为true。难怪Jena未返回预期结果。另外,我不得不承认,我之前没用简单的全三元组查询检查配置。抱歉打扰大家!
Jena查询依赖联合默认图的矛盾问题
我正试图让一个查询在Jena中正常运行。该查询由两部分组成:
- 子查询通过
:in关系,检查指定图被虚拟“嵌套”在哪些其他图中 - 主查询针对子查询返回的每个嵌套图,检查该指定图在嵌套图中是否存在属性
该查询在部分RDF存储中可正常运行,在另一些存储中返回略超预期的结果,还有部分存储完全无法运行,Jena便属于后者,但我不确定原因,也不清楚是否是自己操作有误。
该查询依赖于默认图为所有命名图的并集。Jena的TDB2可通过tdb2:unionDefaultGraph true参数配置实现此功能,我已在Jena-Fuseki的Docker容器中进行了配置。
示例数据
PREFIX : <http://ex.org> . GRAPH :A { :A :pA :DS .} GRAPH :B { :A :in :B . :A :pB :DN .} GRAPH :C { :B :in :C .} GRAPH :D { :C :in :D . :A :pD :DN .}
完整查询语句
PREFIX : <http://ex.org> SELECT DISTINCT ?graph ?prop ?val ?nesting # FROM <urn:x-arq:UnionGraph> WHERE { BIND ( :A AS ?graph ) . # 子查询:收集?graph被嵌套的图 { SELECT ?graph ?nesting WHERE { ?graph :in* ?path . ?path :in+ ?nesting . } } # 嵌套图中?graph的属性信息 GRAPH ?nesting { ?graph ?prop ?val } FILTER ( ?prop != :in ) } ORDER BY ?prop # 预期结果 # graph prop val nesting # :A :pB :DN :B # :A :pD :DN :D
在Jena中,无论是否添加FROM子句,该查询均无结果返回。
分部分测试结果
子查询测试
PREFIX : <http://ex.org> SELECT DISTINCT ?graph ?nesting FROM <urn:x-arq:UnionGraph> WHERE { BIND ( :A AS ?graph ) . ?graph :in* ?path . ?path :in+ ?nesting . } ORDER BY ?nesting # 预期结果 # graph nesting # :A :B # :A :C # :A :D
添加FROM <urn:x-arq:UnionGraph>子句时,子查询可正常返回预期结果;无该子句则无结果。
主查询测试
PREFIX : <http://ex.org> SELECT DISTINCT ?graph ?prop ?val ?nesting # FROM <urn:x-arq:UnionGraph> WHERE { BIND ( :A AS ?graph ) . GRAPH ?nesting { ?graph ?prop ?val } FILTER ( ?prop != :in ) } ORDER BY ?graph ?nesting # 预期结果 # graph prop val nesting # :A :pA :DS :A # :A :pB :DN :B # :A :pD :DN :D
添加FROM <urn:x-arq:UnionGraph>子句时主查询无结果;无该子句则正常返回预期结果。
如此看来,子查询依赖FROM子句引用联合默认图,而主查询仅在无该引用时生效。情况是否如此?若是,该如何解决此矛盾?
内容的提问来源于stack exchange,提问作者tom lurge
相关产品推荐
相关产品推荐

