Rdf 使用最多谓词计算DBPedia资源
我想问问DBPedia,它的哪些资源是最丰富的谓词,这会很有趣 我尝试运行以下查询:Rdf 使用最多谓词计算DBPedia资源,rdf,sparql,dbpedia,Rdf,Sparql,Dbpedia,我想问问DBPedia,它的哪些资源是最丰富的谓词,这会很有趣 我尝试运行以下查询: SELECT DISTINCT ?s (count(?p) AS ?info) WHERE { ?s ?p ?o . } GROUP BY ?s ?p ORDER BY desc(?info) LIMIT 50 它超时了,所以我无法验证它是否是正确的查询 因此,我还有以下两个问题: 这是问这个问题的正确方法吗 查询的计算成本是否太高而无法运行(即使在较小的数据集上?DBP是2.46b的三倍) 问这个问题的
SELECT DISTINCT ?s (count(?p) AS ?info)
WHERE {
?s ?p ?o .
}
GROUP BY ?s ?p
ORDER BY desc(?info)
LIMIT 50
它超时了,所以我无法验证它是否是正确的查询
因此,我还有以下两个问题:
@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进行分组。在原始查询中,按?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)
为DBpedia这样做
我不希望您能够在DBpedia上运行这样的查询。它需要触摸数据中的每一个三元组,然后根据它们所涉及的三元组的数量对资源进行排序。这听起来像是很多工作。您可以下载数据,将其加载到本地端点并运行查询,从而避免超时,但如果仍然需要一段时间,我也不会感到惊讶。如果您按?s?p
分组,那么您会询问哪个主语和谓语对的值最大。如果您想知道哪一个是三元组中最多的主题,您只需要按?s分组
。不过,我认为您仍然可能会超时,因为查询必须查看数据中的每个三元组,按主题组织它们,然后计数。这是一个很大的工作。
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 |
---------------