2

假设我有一个包含 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 中的工作方式,那么获得我需要的东西的方法是什么?

4

1 回答 1

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 的了解不够,无法告诉您一种或另一种方式。

于 2011-08-17T15:05:37.737 回答