奇怪的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引擎&DB)的答案是这样的:

"John"  "sushi"
"John"  "Mary"
"Frank" "sushi"
"John"  "olives"
谁能给我解释一下这种行为?

如果在SPARQL中确实应该这样工作,那么如何获得我需要的东西呢?

嗯,这看起来可能是4store中的一个bug,因为我刚刚在四个不同的独立SPARQL实现中测试了它——Jena ARQ, dotNetRDF Leviathan, OpenLink Virtuoso和Clark &帕西亚的星狗-他们都返回你期待的答案。

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

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

请注意,这可能不是4store的直接错误,而是底层rasqal查询库的错误,但我对4store的了解不够,无法告诉你。

相关内容

  • 没有找到相关文章

最新更新