【问题标题】:Wrong query evaluation with aggregation subquery聚合子查询的错误查询评估
【发布时间】:2018-05-01 12:11:40
【问题描述】:

请参考Factforge Endpoint 执行此查询。子查询不返回任何结果。 ?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

【问题讨论】:

  • 这肯定是一个错误。您是否正在使用子查询进行实验,或者为什么您总是运行任意查询?顺便说一句,您上次已经认识到 wikidata 的东西也不适用于您的本地 GraphDB 实例 - FactForge 也由 GraphDB 支持......像往常一样,联系 GraphDB 开发人员以便修复它(如果还没有done - 不知道 FactForge 使用的 GraphDB 版本)
  • 我联系了 GraphDB。我发布的查询看起来很随意,因为它们是对我在本地使用的数据的原始查询中发生的问题的简化再现。是的,基本上聚合子查询是我正在使用的东西。
  • 尝试从子查询中删除GROUP BY ?myVar,改用DISTINCT
  • 顺便说一句,内部子查询的结果在 GraphDB 中也不同,例如闪耀图。 HAVING (bound(?myVar)) 会比 HAVING (COUNT(*) &gt; 0) 更自然:-)。
  • 老实说,我想知道三联商店出了什么问题。 2018 年,我们至少有两个三联商店因简单的子查询而失败

标签: sparql graphdb


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-11
    • 1970-01-01
    • 1970-01-01
    • 2016-12-12
    相关资源
    最近更新 更多