2011-08-17 44 views
2

假设我有一个包含4个三元组一个RDF基:4store中奇怪的SPARQL模式匹配?

"John" "loves" "sushi" 
"John" "loves" "Mary" 
"Frank" "hates" "sushi" 
"John" "hates" "olives" 

,让我们说,我认为“寿司”这样的,我想知道到底是什么人可以用它做更一个奇怪的事情还有什么他们可以使用同样的动作=)

所以我写了SPARQL查询似乎是合乎逻辑对我说:

SELECT ?s ?o WHERE 
{ 
    ?s ?p "sushi". 
    ?s ?p ?o 
} 

自然期待得到以下结果

"John" "sushi" 
"John" "Mary" 
"Frank" "sushi" 

因为对于每一个第一3个三元组存在一个满意的双(αS,?P)的值,使接合图案评估为TRUE。

但在现实中(我使用本地4store引擎& DB)的答案是这样的:

"John" "sushi" 
"John" "Mary" 
"Frank" "sushi" 
"John" "olives" 

有人能解释这种现象给我吗?

如果这确实是它应该如何在SPARQL中工作,那么获得我需要的是什么方式?

+0

没有使用过sparql,这对我来说似乎非常随意。 “约翰讨厌橄榄”有什么特别的地方让你觉得它应该被拒绝? – Blindy

+1

你会发现,如果s =“John”并且p =“hates”,那么在数据库中就不存在满足查询第一部分的三元组。我期望这部分**定义**我感兴趣的领域。我想找出约翰如果喜欢寿司可能喜欢的其他东西,或者如果他讨厌寿司,他可能会讨厌什么其他的东西。但我得到的是一种混合 - 弗兰克讨厌寿司,因此我注定要被告知约翰讨厌什么。 –

+0

有多奇怪。再次,我不能帮你,我只是好奇:) – Blindy

回答

1

嗯,这看起来可能是4store一个错误,因为我刚刚测试这四个不同的独立SPARQL实现 - 耶拿ARQ,dotNetRDF利维坦,OpenLink公司的Virtuoso和克拉克&帕希娅的Stardog - 他们都返回答案你在期待。

而作为一个自认SPARQL坚果,我认为你所期望的答案是正确的。

我建议使用他们的支持邮件列表获得与4store家伙触摸 - http://groups.google.com/group/4store-support?pli=1

注意这可能不是直接在4store一个错误,但在底层rasqal查询库中的错误,但我不足够了解4store以这种或那种方式告诉你。

+2

4store有它自己的查询引擎,所以如果一个错误,它会在那。我可以想象这个错误是什么,优化器可能会忽略它,因为它显然对查询并不重要,但实际上它需要这个值。 –

+0

非常感谢RobV。我将检查你提到的其中一个实现。很高兴知道我没有生气=) –

+0

是的,你说得对。必须是4store中的一个bug。 –