假设我有一个包含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的了解不够,无法告诉你。