通过 SPARQL 计算大型数据集中的属性

Count properties in a large data set via SPARQL

我想要一个 SPARQL 端点中最常用属性的列表。最直接的查询是:

select ?p ( count ( distinct * ) as ?ct )
{
  ?s ?p ?o. 
}
group by ?p
order by desc ( ?ct )
limit 1000

问题是三元组太多(16亿个)导致服务器超时。所以,在谷歌搜索之后,我也试过这个,至少得到一个样本统计数据(是的,它是特定于 Virtuoso 的,对我来说很好):

select ?p ( count ( distinct * ) as ?ct )
{
  ?s ?p ?o. 
  FILTER ( 1 > <SHORT_OR_LONG::bif:rnd> (0.0001, ?s, ?p, ?o) )
}
group by ?p
order by desc ( ?ct )
limit 1000

但无论如何它都会超时,我猜是因为它仍然需要 groupcount 然后 order。那么,我该怎么做呢?我可以访问 Virtuoso 关系数据库(即 iSQL),但我找不到关于 SQL 语法以及如何从 table [=] 中 select 随机三元组的文档15=].

编辑:我已经修复了查询,最初它们是错误的,感谢您的评论。上面的版本还是不行。

好的,我找到了一种方法,至少是部分方法:Virtuoso 有一个命令行管理工具,isql。这也接受 SPARQL 查询,格式为:SPARQL <query>;。而且它们的执行没有超时或结果大小限制。

如果您只能通过 HTTP 访问端点,这仍然不好,我不太清楚那样是否可行。