我是新来的查询DBPedia.如何从http://dbpedia.org/sparql获取所有公司?
此查询仅返回50'000个组织:
SELECT DISTINCT * WHERE {?company a dbpedia-owl:Company}
Run Code Online (Sandbox Code Playgroud)
Jos*_*lor 25
你的查询没有归还所有公司,你说得对.但是,模式是正确的.请注意,此查询仅对公司计数返回88054:
prefix dbpedia-owl: <http://dbpedia.org/ontology/>
select (count(distinct ?company) as ?count)
where {
?company a dbpedia-owl:Company
}
Run Code Online (Sandbox Code Playgroud)
我认为这是DBpedia SPARQL端点因性能原因而施加的限制.您可以做的一件事是下载数据并在本地运行您的查询,但这可能比您想要的工作多一点.相反,你可以订购的结果(它并不真正的问题是如何,只要你总是做同样的方式),并使用limit与offset这些结果中进行选择.例如:
prefix dbpedia-owl: <http://dbpedia.org/ontology/>
select ?company
where {
?company a dbpedia-owl:Company
}
order by ?company
limit 10
Run Code Online (Sandbox Code Playgroud)
prefix dbpedia-owl: <http://dbpedia.org/ontology/>
select ?company
where {
?company a dbpedia-owl:Company
}
order by ?company
limit 10
offset 5823
Run Code Online (Sandbox Code Playgroud)
这是一般方法.但是,由于对40000结果的严格限制,它在DBpedia上仍然存在问题.有一篇文档文章提到了这一点:
使用约束DBpedia的SPARQL端点MaxSortedTopRows限制通过LIMIT和OFFSET
DBpedia SPARQL端点配置了以下INI设置:
Run Code Online (Sandbox Code Playgroud)MaxSortedTopRows = 40000上面的设置为已排序的行设置阈值.
该文章提出的解决方案是使用子查询:
为了防止上述问题,您可以利用子查询来更好地利用与此类任务相关联的临时存储.一个例子将采取以下形式:
Run Code Online (Sandbox Code Playgroud)SELECT ?p ?s WHERE { { SELECT DISTINCT ?p ?s FROM <http://dbpedia.org> WHERE { ?s ?p <http://dbpedia.org/resource/Germany> } ORDER BY ASC(?p) } } OFFSET 50000 LIMIT 1000
我不完全确定为什么这可以解决问题,也许是端点可以排序超过40000行,只要它不必全部返回它们.无论如何,它确实有效.您的查询将变为:
prefix dbpedia-owl: <http://dbpedia.org/ontology/>
select ?company {{
select ?company {
?company a dbpedia-owl:Company
}
order by ?company
}}
offset 88000
LIMIT 1000
Run Code Online (Sandbox Code Playgroud)