请参阅Factforge 端点执行此查询。子查询不返回任何结果。?myVar
将被投影到包含查询,然后与三元组模式连接?myVar ?p ?o.
。但由于内部选择没有结果,因此联接应该不会产生任何结果。但是,执行查询时情况并非如此。这不是一个bug吗?
SELECT
?myVar ?p ?o
WHERE
{
{
SELECT ?myVar
WHERE {
?myVar <http://www.example.com/arbitraryNonExistent> ?xx.
}
GROUP BY ?myVar
}
?myVar ?p ?o.
}
LIMIT 10
这是预期的行为。根据https://www.w3.org/TR/sparql11-query/#aggregateAlgebra如果有一个 GROUP BY:
Group(exprlist, Ω) = { ... | μ in Ω }
并且我们没有匹配项,那么 Ω 为空,所以:
Group(exprlist, {}) = {}
效果是子查询返回单个解决方案,其中 ?myVar 未绑定,并且与下一个语句模式的连接与 ?myVar 的所有内容相匹配。最后你会得到整个查询的很多解决方案。
甚至还有一个 W3C SPARQL 一致性测试用例涵盖了确切的场景:
还有一个古老的讨论http://answers.semanticweb.com/questions/17410/semantics-of-sparql-aggregates.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)