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

Join 4store中奇怪的SPARQL模式匹配?,join,sparql,4store,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 } 自然期望得到以下结果

假设我有一个包含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)值,使连接模式的计算结果为真

但实际上(我使用本地4store engine&DB),答案是这样的:

"John"  "sushi"
"John"  "Mary"
"Frank" "sushi"
"John"  "olives"
有人能给我解释一下这种行为吗


如果这真的是SPARQL中的工作方式,那么怎样才能得到我所需要的呢?

嗯,这看起来可能是4store中的一个bug,因为我刚刚在四个不同的独立SPARQL实现中测试了这一点-Jena ARQ、dotNetRDF Leviathan、,OpenLink Virtuoso和Clark&Parsia的Stardog——它们都会返回您期望的答案

作为一个自认的斯巴克疯子,我认为你期待的答案是正确的

我建议使用他们的支持邮件列表与4store的人员联系-


请注意,这可能不是4store中的一个bug,而是底层rasqal查询库中的一个bug,但我对4store的了解还不够,无法以这样或那样的方式告诉您。

没有使用sparql,这对我来说似乎非常随意。
John haves olives
有什么特别之处让你觉得应该拒绝它?你看,如果s=“John”和p=“haves”在数据库中没有满足查询第一部分的三元组。我希望这一部分能够界定我感兴趣的领域。如果约翰喜欢寿司,我想知道他还喜欢什么,如果他讨厌寿司,他还可能讨厌什么。但我得到的是一种混合——弗兰克讨厌寿司,正因为如此,我注定要被告知约翰也讨厌什么。真奇怪。再说一次,我帮不了你,我只是好奇:)4store有自己的查询引擎,所以如果出现bug,它就会出现在其中。我可以想象缺陷是什么,乐观主义者可能忽略了?p,因为它显然对查询不重要,但实际上它需要值。非常感谢,RobV。我将检查您提到的一个实现。很高兴知道我没有疯=)更新:4store中的Bug已经修复。修复程序应出现在版本1.1.4中。