我正在编写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行都可用吗?
答案 0 :(得分:4)
DBPedia在这里足够聪明,不会使用大型查询重载其服务器,并将匹配限制为10000.由于您要对结果进行排序,因此可以使用LIMIT
和OFFSET
来获取结果集例如,要获得第二组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
并非真正必要。