我希望在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
但它无论如何都会超时,我想因为它仍然需要group
,count
然后order
。那么,我该怎么做呢?我可以访问Virtuoso关系数据库(即iSQL),但我找不到有关SQL语法的文档以及如何从表db.dba.rdf_quad
中选择随机三元组。
编辑:我已修复了查询,最初他们错了,感谢您的评论。上面的版本仍然不起作用。
答案 0 :(得分:1)
好的,我找到了一种方法,至少是一种方式:Virtuoso有一个命令行管理工具isql
。这也接受SPARQL
个查询,格式为:SPARQL <query>;
。并且它们在没有超时或结果大小限制的情况下执行。
如果您只能通过HTTP访问端点,这仍然不是很好,我不太清楚这种方式是否可行。