请引用Factforge Endpoint执行此查询。子查询不返回任何结果。 ?myVar
将被转换到包含的查询中,然后与三重模式 ?myVar ?p ?o.
连接。但是由于内部选择没有结果,因此连接应该没有结果。但是,执行查询时情况并非如此。这不是一个错误吗?
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 未绑定(bind)且与下一个语句模式的连接匹配 ?myVar 的所有内容。最后,您将获得整个查询的大量解决方案。
甚至还有一个涵盖确切场景的 W3C SPARQL 一致性测试用例:
https://www.w3.org/2009/sparql/docs/tests/data-sparql11/aggregates/agg-empty-group.rq
https://www.w3.org/2009/sparql/docs/tests/data-sparql11/aggregates/agg-empty-group.srx
还有一个旧讨论 http://answers.semanticweb.com/questions/17410/semantics-of-sparql-aggregates .
关于sparql - 使用聚合子查询的错误查询评估,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50698892/