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

Sus*_*dhu 2 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)
Run Code Online (Sandbox Code Playgroud)

当我以 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')
 }
Run Code Online (Sandbox Code Playgroud)

它正在给予 -> 1783404

任何人都可以建议一个解决方案来获取 DBpedia 中可用的所有 Person 行吗?

sco*_*ger 5

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
Run Code Online (Sandbox Code Playgroud)

实际上,由于 DBPedia 将结果限制为 10000 个匹配项,因此LIMIT实际上没有必要。