如何在SPARQL中计算统计模式

时间:2015-07-19 19:46:08

标签: subquery max 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>

我尝试在子查询中绑定?o并将?o添加到外部SELECT但两者都给我语法错误。

我还能尝试什么?

感谢阅读。

1 个答案:

答案 0 :(得分:3)

ORDER - LIMIT,也称为&#34; top n&#34;,应该能为您提供所需的答案。

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