使用聚合子查询进行错误的查询评估

时间:2018-05-01 12:11:40

标签: sparql graphdb

请参阅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

1 个答案:

答案 0 :(得分:4)

这是预期的行为。根据{{​​3}},如果有GROUP BY:

Group(exprlist, Ω) = { ... | μ in Ω }

我们没有匹配,然后Ω为空,所以:

Group(exprlist, {}) = {}

效果是子查询返回一个解决方案,其中?myVar未绑定,而下一个语句模式的连接匹配?myVar的所有内容。最后,您将获得整个查询的大量解决方案。

甚至还有一个涵盖确切场景的W3C SPARQL一致性测试用例:

还有https://www.w3.org/2009/sparql/docs/tests/data-sparql11/aggregates/agg-empty-group.srx的旧讨论。