我正在编写 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 行吗?
DBPedia 在这里足够聪明,不会因大型查询而使其服务器过载,并将匹配上限限制为 10000。由于您正在对结果进行排序,因此您可以使用LIMIT和OFFSET来获取 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实际上没有必要。