2015-07-19 51 views
1

我正在嘗試使用SPARQL計算數據集的統計模式(以最高頻率出現的值)。如何計算SPARQL中的統計模式

我可以生成像這樣的數據值及其頻率的列表:

SELECT (COUNT(?o) AS ?no) ?o 
WHERE {?s ?p ?o 
FILTER isLiteral(?o) 
} 
GROUP BY ?o ORDER by DESC(?no) 

結果像這樣:

| 410 | "yes"^^<http://www.w3.org/2001/XMLSchema#string> 
| 19 | "true"^^<http://www.w3.org/2001/XMLSchema#string> 
| 12 | "Offical"^^<http://www.w3.org/2001/XMLSchema#string> ... 

不過,我只想數據的第一行,即價值和數據集中最常見的對象值的頻率。

我一直在使用MAX像這樣嘗試:

SELECT (MAX(?no) AS ?maxNo) 
{ 
SELECT (COUNT(?o) AS ?no) ?o 
WHERE {?s ?p ?o 
FILTER isLiteral(?o) 
} 
GROUP BY ?o ORDER by DESC(?no) 
} 

,並可以得到計數回像這樣:

--------- 
| maxNo | 
========= 
| 410 | 
--------- 

但我想回去是最常見的兩種計發生數據值和那個數據值是這樣的:

| 410 | "yes"^^<http://www.w3.org/2001/XMLSchema#string> 

我已經嘗試綁定?q在子q uery並將?o添加到外部SELECT,但都給我語法錯誤。

我還能試試嗎?

感謝您的閱讀。

回答

3

ORDER - LIMIT,也被稱爲「top n」,應該爲您提供您正在尋找的答案。

SELECT (COUNT(?o) AS ?no) ?o 
WHERE { 
    ?s ?p ?o 
    FILTER isLiteral(?o) 
} 
GROUP BY ?o 
ORDER by DESC(?no) 
LIMIT 1 
+1

非常簡單的解決方案。作品一種享受。非常感謝你安迪。沒有任何一點橫向思維,我肯定是過度複雜的那一個! – Hilary