1

请参考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
4

1 回答 1

4

这是预期的行为。根据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的旧讨论。

于 2018-05-02T10:30:18.813 回答