Pat*_*ett 5 rdf sesame sparql jena named-graphs
将这个四元组添加到空商店:
<http://x.com/s> <http://x.com/p> 2 <http://x.com/g> .
Run Code Online (Sandbox Code Playgroud)
然后执行这个SPARQL查询(取自Bob DuCharme的书'Learning SPARQL',所以这必须是标准的SPARQL,用于检索数据集中的所有四边形,无论实现如何,对吧!?):
SELECT ?g ?s ?p ?o
WHERE {
{ ?s ?p ?o }
UNION
{ GRAPH ?g { ?s ?p ?o } } }
Run Code Online (Sandbox Code Playgroud)
但耶拿和芝麻回答不同的答案!!?这是我看到的:
Tomcat 6.0.37上的Jena Fuseki控制台(版本2.10.0 - 开箱即用,没有配置更改!) - (正如我所理解的那样正确答案):
--------------------------------------------------------------
| g | s | p | o |
==============================================================
| <http://x.com/g> | <http://x.com/s> | <http://x.com/p> | 2 |
--------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)
Tomcat 6.0.37上的Sesame Workbench(版本2.7.3 - 开箱即用,无需更改配置!):只需使用工作台中的"添加"功能手动添加上述四边形(选择"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 |
--------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)
所以对于那些开始关注RDF的人来说这有点吓人 - 我在这里错过了什么?我认为芝麻不能"错" - 所以它必须是我的'解释'我想(或者Bob的查询不是'标准的SPARQL',因此不同的实现可以自由地返回不同的结果) - 任何启示都会非常欢迎:)!
正如@Joshua Taylor在评论中指出的那样,原因是Sesame和Jena使用了对默认图的不同解释.
在Sesame中,整个存储库被视为默认图:所有命名图中的所有语句以及没有命名图的所有语句.因此,你的工会,其查询默认图形,成功和结合的第一个参数?s,?p和?o(但不是?g).你的联盟的第二个论点显然也是成功的,因为原来的四元组当然是在命名图中,因此你得到两个答案.
默认情况下,Jena使用"独占"默认图:只有未明确添加到任何特定命名图的语句才会出现在默认图中.因此,在Jena中,联合的第一部分失败(在Jena的默认图中没有匹配的语句),第二部分成功,因此您只得到1个结果.
听起来很奇怪,两者都是正确的.不同之处仅在于如何设置执行查询的数据集.
当然,有办法解决这个问题.在Jena和Sesame中,您可以添加FROM (NAMED)子句以使其明确查询所查询的数据集(Sesame提供sesame:nil图形名称以显式查询那些没有关联命名图的语句).或者,您可以以编程方式修改执行查询的数据集定义.Jena和Sesame的精确机制有点不同,但它们都有选项(在芝麻中,你可以Dataset在执行前用查询创建和提供一个对象,在Jena中我相信你可以重新配置你的实际商店或模型执行查询以表现不同).