繁体   English   中英

使用COUNT和ORDER的SPARQL查询返回奇数结果

[英]SPARQL query with COUNT and ORDER returns odd result

以下查询计算商店中的所有三元组

SELECT count(*) where { ?s ?p <http://dbpedia.org/resource/Cat> }

并返回预期的结果

http://dbpedia.org/sparql?default-graph-uri=http://dbpedia.org&query=select+count(*)+{+%3Fs+%3Fp+%3Chttp://dbpedia.org/resource/Cat% 3E +} +&调试= ON&超时=&格式= text / html的&保存=显示&FNAME =

但是,当我第一次尝试它时,我不小心留下了ORDER BY语句,例如,

select count(*) { ?s ?p <http://dbpedia.org/resource/Cat> } order by ?s

然后我得到一个很长的结果列表

http://dbpedia.org/sparql?default-graph-uri=http://dbpedia.org&query=select+count(*)+{+%3Fs+%3Fp+%3Chttp://dbpedia.org/resource/Cat% 3E +} +顺序通过+ +%3FS&调试= ON&超时=&格式= text / html的&保存=显示&FNAME =

任何人都可以解释为什么会出现这种结果及其含义? 它可能是Virtuoso SPARQL实现的错误吗?

如果你在不同的商店运行相同类型的查询,例如http://api.talis.com/stores/bbc-backstage/services/sparql (不运行virtuoso),它看起来就像一个bug

第一个查询有效......

SELECT (count(?s) as ?c)
WHERE {
?s ?p <http://purl.org/ontology/po/Version> .
}

第二个......

SELECT (count(?s) as ?c)
WHERE {
?s ?p <http://purl.org/ontology/po/Version> .
} order by ?s

...给出相同的结果。

实际上,计数+排序在这里没有多大意义,因为没有选择要检索?s 但正如你所说,你不小心尝试了......它确实看起来像一个bug。

我的建议是向virtuoso-user邮件列表发送一封电子邮件,以通知此问题。

我们(= OpenLink)在这里遇到麻烦。 这个ORDER BY?s正式是查询中的一个错误:没有分组的聚合意味着“在所有内容上聚合”,在查询的输出端不应该有聚合外的变量。 但是现在没有报告此错误:违反此规则的次数太多,以至于SQL编译器进行自动分组,并且如果可能,我们的SPARQL-to-SQL预处理器也会忽略此错误。

我们可能会保持当前的行为。 如果添加“严格”编译模式,则会在这种情况下触发错误报告。

这可能是Virtuoso的一个错误,它似乎将带有聚合的查询和ORDER BY子句视为具有隐式GROUP BY子句。 除了DBPedia之外,我在其他Virtuoso端点上注意到了这一点。

IMO这是一个错误,您应该将其报告给Virutoso用户邮件列表,如msalvadores所示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM