Rdf 使用最多谓词计算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的三倍) 问这个问题的

我想问问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的三倍)
  • 问这个问题的正确方法 假设您有如下数据:

    @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 |
    ---------------