4store中奇怪的SPARQL模式匹配?

时间:2011-08-17 14:47:02

标签: join sparql 4store

假设我有一个包含4个三元组的RDF基础:

"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引擎和数据库)答案是这样的:

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

有人可以向我解释这种行为吗?

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

1 个答案:

答案 0 :(得分:1)

嗯,看起来这可能是4store中的一个错误,因为我刚刚在四个不同的独立SPARQL实现中测试了它 - Jena ARQ,dotNetRDF Leviathan,OpenLink Virtuoso和Clark& Parsia的Stardog - 他们都回复了你所期待的答案。

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

我建议使用他们的支持邮件列表与4store人联系 - http://groups.google.com/group/4store-support?pli=1

请注意,这可能不是4store中的直接错误,而是底层rasqal查询库中的错误,但我不太了解4store告诉你这种或那种方式。