获取DBpedia中所有可用Person的SPARQL查询仅显示一些Person数据,而不是全部

时间:2016-07-12 15:15:07

标签: sparql dbpedia

我正在编写SPARQL查询以获取DBpedia中的所有Person。我的查询是 - >

 PREFIX  rdf:  <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
 PREFIX  dbo: <http://dbpedia.org/ontology/>
 PREFIX  dbp: <http://dbpedia.org/property/>

SELECT ?resource ?name
WHERE {
    ?resource  rdf:type  dbo:Person;
               dbp:name ?name.  
    FILTER (lang(?name) = 'en')
  }
ORDER BY ASC(?name)

当我将输出作为HTML / csv /电子表格格式时,它会提供大约10000行。 但是当我提出查询以获得总计数时

PREFIX  rdf:  <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX  dbo: <http://dbpedia.org/ontology/>
PREFIX  dbp: <http://dbpedia.org/property/>

SELECT COUNT(*)
WHERE{
    ?resource  rdf:type  dbo:Person;
               dbp:name ?name.  
    FILTER (lang(?name) = 'en')
 }

它正在给予 - &gt; 1783404

有人可以建议一个解决方案,让DBpedia中的所有Person行都可用吗?

1 个答案:

答案 0 :(得分:4)

DBPedia在这里足够聪明,不会使用大型查询重载其服务器,并将匹配限制为10000.由于您要对结果进行排序,因此可以使用LIMITOFFSET来获取结果集例如,要获得第二组10000个结果,请使用:

PREFIX  rdf:  <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX  dbo: <http://dbpedia.org/ontology/>
PREFIX  dbp: <http://dbpedia.org/property/>

SELECT ?resource ?name
WHERE {
  ?resource  rdf:type  dbo:Person;
             dbp:name ?name.  
  FILTER (lang(?name) = 'en')
}
ORDER BY ASC(?name)
LIMIT 10000 OFFSET 10000

实际上,由于DBPedia将结果限制为10000次匹配,LIMIT并非真正必要。