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