Sparql 使用聚合子查询进行错误的查询计算

Sparql 使用聚合子查询进行错误的查询计算,sparql,graphdb,Sparql,Graphdb,请参阅以执行此查询。子查询不返回任何结果?myVar将投影到包含的查询,然后与三重模式?myVar?p?o.连接。但是由于没有来自内部选择的结果,因此联接应该不会产生任何结果。但是,执行查询时并非如此。这不是一只虫子吗 SELECT ?myVar ?p ?o WHERE { { SELECT ?myVar WHERE { ?myVar <http://www.example.com/arbitraryNonExistent

请参阅以执行此查询。子查询不返回任何结果<代码>?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
选择
?myVar?p?o
哪里
{   
{ 
选择?myVar
何处{
?myVar?xx。
} 
分组依据?myVar
} 
?myVar?p?o。
} 
限制10

这是预期的行为。根据是否有一个分组:

Group(exprlist, Ω) = { ... | μ in Ω }
我们没有匹配项,那么Ω是空的,所以:

Group(exprlist, {}) = {}
其效果是子查询返回一个单一的解决方案,其中?myVar是未绑定的,并且与下一个语句模式的连接匹配?myVar的所有内容。最后,您将获得整个查询的许多解决方案

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


还有一个老话题。

这肯定是一个bug。您是在用子查询做实验,还是总是运行任意查询?顺便说一句,您上次已经认识到wikidata的东西也不适用于您的本地GraphDB实例-FactForge也有GraphDB的支持。。。像往常一样,联系GraphDB开发人员以便修复(如果尚未修复-不知道FactForge使用的GraphDB版本),我联系了GraphDB。我发布的查询看起来是任意的,因为它们是对我在本地使用的数据的原始查询中发生的问题的简化再现。是的,基本上聚合子查询是我正在使用的。尝试从子查询中删除
groupby?myVar
,改为使用
DISTINCT
。顺便说一句,内部子查询的结果在GraphDB和例如Blazegraph中也不同<代码>拥有(绑定(?myVar))比拥有(计数(*)>0):-)更自然。老实说,我想知道三重存储在这里出了什么问题。2018年,我们至少有两个三重存储因一个简单的子查询而失败