单四线组+;最基本的SPARQL查询=1个结果是Jena,2个结果是Sesame-谁是对的?

单四线组+;最基本的SPARQL查询=1个结果是Jena,2个结果是Sesame-谁是对的?,sparql,rdf,jena,sesame,named-graphs,Sparql,Rdf,Jena,Sesame,Named Graphs,仅将此四元组添加到空存储: <http://x.com/s> <http://x.com/p> 2 <http://x.com/g> . 但杰娜和芝麻的回答却不同!!?我看到的是: Tomcat 6.0.37上的Jena Fuseki控制台(2.10.0版-开箱即用,无配置更改!)(据我所知,这是正确的答案): -------------------------------------------------------------- |g | s | p

仅将此四元组添加到空存储:

<http://x.com/s> <http://x.com/p> 2 <http://x.com/g> .
但杰娜和芝麻的回答却不同!!?我看到的是:

Tomcat 6.0.37上的Jena Fuseki控制台(2.10.0版-开箱即用,无配置更改!)(据我所知,这是正确的答案):

--------------------------------------------------------------
|g | s | p | o|
==============================================================
|  |  |  | 2 |
--------------------------------------------------------------
Tomcat 6.0.37上的Sesame Workbench(2.7.3版-开箱即用,无配置更改!):只需使用Workbench中的“添加”功能,在“数据格式”下拉框中选择“N-quad”,在“输入您希望上载的RDF数据”编辑框中手动添加上述四元组,然后运行上述查询:

--------------------------------------------------------------
| g                | s                | p                | o |
==============================================================
|                  | <http://x.com/s> | <http://x.com/p> | 2 |
| <http://x.com/g> | <http://x.com/s> | <http://x.com/p> | 2 |
--------------------------------------------------------------
--------------------------------------------------------------
|g | s | p | o|
==============================================================
|                  |  |  | 2 |
|  |  |  | 2 |
--------------------------------------------------------------

所以,对于一个开始关注RDF的人来说,这有点可怕——我在这里遗漏了什么?我认为Sesame不会是“错误的”——所以我认为它一定是我的“解释”(或者Bob的查询不是“标准SPARQL”,因此不同的实现可以自由返回不同的结果)——任何启示都是非常受欢迎的:)

正如@Joshua Taylor在他的评论中指出的,原因是Sesame和Jena对默认图形使用了不同的解释

在Sesame中,整个存储库被视为默认图:所有命名图中的所有语句以及没有命名图的所有语句。因此,union查询默认图形的第一个参数将成功并绑定
?s
?p
?o
(但不是
?g
)。你的并集的第二个参数显然也成功了,因为原来的四边形当然在一个命名图中,因此你得到了两个答案

Jena默认使用“独占”默认图:默认图中只有未显式添加到任何特定命名图的语句。因此,在Jena中,联合的第一部分失败(Jena的默认图中没有匹配语句),第二部分成功,因此只得到1个结果

虽然听起来很奇怪,但这两种说法都是正确的。区别仅仅在于如何设置执行查询的数据集


当然,有办法解决这个问题。在Jena和Sesame中,您都可以添加
FROM(NAMED)
子句来明确查询的数据集是什么(Sesame提供
Sesame:nil
图形名称来明确查询那些没有关联命名图形的语句)。或者,您可以通过编程方式修改执行查询的数据集定义。Jena和Sesame中的精确机制有点不同,但它们都有一个选项(在Sesame中,您可以在执行查询之前创建并提供一个
Dataset
对象,在Jena中,我相信您可以重新配置执行查询的实际存储或模型,使其表现不同)

联合的左侧
查询默认图形。我怀疑差异是由这两个系统的默认图中包含的内容引起的。例如,也许在Jena中,除非添加三元组,否则默认图是空的,而在Sesame中,默认图是命名图的并集?在发布了前面的评论之后,我研究了在Jena中获取默认图和并集图的方法。描述两个特殊图,
urn:x-arq:UnionGraph
urn:x-arq:DefaultGraph
。如果通过上下文TDB.getContext().set(TDB.symUnionDefaultGraph,true)设置,则不必在查询中;然后,查询默认图是命名图的并集。看见
--------------------------------------------------------------
| g                | s                | p                | o |
==============================================================
| <http://x.com/g> | <http://x.com/s> | <http://x.com/p> | 2 |
--------------------------------------------------------------
--------------------------------------------------------------
| g                | s                | p                | o |
==============================================================
|                  | <http://x.com/s> | <http://x.com/p> | 2 |
| <http://x.com/g> | <http://x.com/s> | <http://x.com/p> | 2 |
--------------------------------------------------------------