我认为向DBPedia询问哪些资源是最具谓词丰富的内容会很有趣。
我尝试运行以下查询:
SELECT DISTINCT ?s (count(?p) AS ?info)
WHERE {
?s ?p ?o .
}
GROUP BY ?s ?p
ORDER BY desc(?info)
LIMIT 50
它超时了,所以我无法验证它是否是正确的查询。
所以,我留下了以下两个问题:
答案 0 :(得分:3)
假设你有这样的数据:
@prefix : <http://stackoverflow.com/q/22391927/1281433/> .
:a :p 1, 2, 3 ;
:q 4, 5 .
:b :p 1, 2 ;
:q 3, 4 ;
:r 5, 6 .
:c :p 1 ;
:q 2 ;
:r 3 .
然后你可以通过这样的查询询问每个资源有多少三元组:
prefix : <http://stackoverflow.com/q/22391927/1281433/>
select ?s (count(*) as ?n) where {
?s ?p ?o
}
group by ?s
order by desc(?n)
----------
| s | n |
==========
| :b | 6 |
| :a | 5 |
| :c | 3 |
----------
请注意,如果您对每个资源的主题数量感兴趣,您只想group by ?s
。在原始查询中,您group by ?s ?p
,您将根据它们具有的值来排序(主题,谓词)对。例如,
prefix : <http://stackoverflow.com/q/22391927/1281433/>
select ?s ?p (count(*) as ?n) where {
?s ?p ?o
}
group by ?s ?p
order by desc(?n)
---------------
| s | p | n |
===============
| :a | :p | 3 |
| :b | :p | 2 |
| :a | :q | 2 |
| :b | :q | 2 |
| :b | :r | 2 |
| :c | :p | 1 |
| :c | :q | 1 |
| :c | :r | 1 |
---------------
我不希望你能在DBpedia上运行这样的查询。它需要触摸数据中的每个三元组,然后按照它们所涉及的三元组来排序资源。这听起来像是很多工作。您可以下载数据,将其加载到本地端点并运行查询,从而避免超时,但如果仍需要一段时间,我不会感到惊讶。