用于获取 DBpedia 中所有可用人员的 SPARQL 查询仅显示部分人员数据,而不是全部

SPARQL query to get all Person available in DBpedia is showing only some Person data, not all

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

 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/spreadsheet 格式时,它给出了大约 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')
 }

它正在给予 -> 1783404

任何人都可以提出一个解决方案来让 Person 在 DBpedia 中可用的所有行吗?

DBPedia 在这里足够聪明,不会因大量查询而使服务器过载,并且匹配的上限为 10000。由于您要对结果进行排序,因此可以使用 LIMITOFFSET 来获取结果以 10000 为一组。例如,要获得第二组 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 并不是真正必要的。