以下查询计算商店中的所有三元组
SELECT count(*) where { ?s ?p <http://dbpedia.org/resource/Cat> }
并返回预期的结果
但是,当我第一次尝试它时,我不小心留下了ORDER BY语句,例如,
select count(*) { ?s ?p <http://dbpedia.org/resource/Cat> } order by ?s
然后我得到一个很长的结果列表
任何人都可以解释为什么会出现这种结果及其含义?它可能是Virtuoso SPARQL实现的错误吗?
3 回答
如果你在不同的商店运行相同类型的查询,即http://api.talis.com/stores/bbc-backstage/services/sparql(不运行virtuoso),它看起来像一个bug
第一个查询有效......
第二个......
...给出相同的结果 .
实际上,计数排序在这里没有多大意义,因为未选择
?s
来检索 . 但正如你所说,你不小心尝试了......它确实看起来像一个bug .我的建议是发送电子邮件至virtuoso-user mailing list以通知此问题 .
我们(= OpenLink)在这里遇到麻烦 . 这个ORDER BY?s正式是查询中的一个错误:没有分组的聚合意味着“聚合一切”,在查询的输出端不应该有聚合外的变量 . 但是现在没有报告此错误:违反此规则的次数太多,以至于SQL编译器进行自动分组,并且如果可能,我们的SPARQL-to-SQL预处理器也会忽略此错误 .
我们可能会保持当前的行为 . 如果添加“严格”编译模式,则会在这种情况下触发错误报告 .
这可能是Virtuoso的一个错误,它似乎将具有聚合的查询和
ORDER BY
子句视为具有隐式GROUP BY
子句 . 除了DBPedia之外,我在其他Virtuoso endpoints 上注意到了这一点 .IMO这是一个错误,您应该按照msalvadores的建议将其报告给Virutoso用户邮件列表