簡體   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