【发布时间】:2014-01-23 02:59:03
【问题描述】:
我是查询 DBPedia 的新手。如何从http://dbpedia.org/sparql 获得所有 家公司?
此查询仅返回 50'000 个组织:
SELECT DISTINCT * WHERE {?company a dbpedia-owl:Company}
【问题讨论】:
我是查询 DBPedia 的新手。如何从http://dbpedia.org/sparql 获得所有 家公司?
此查询仅返回 50'000 个组织:
SELECT DISTINCT * WHERE {?company a dbpedia-owl:Company}
【问题讨论】:
从 DBpedia 获取所有公司的另一种方法是简单地使用RDFSlice 运行以下查询:
SELECT *
WHERE {
{?s a <http://dbpedia.org/ontology/Person>.?s ?p ?o.}
UNION
{?s1 a <http://dbpedia.org/ontology/Person>.?o1 ?p1 ?s1.}
}
这具有为您提供所有三元组的额外优势。这需要几分钟到几小时不等,具体取决于您的 RAM 和 CPU 能力。
【讨论】:
您是对的,您的查询并未返回所有公司。不过,模式是正确的。请注意,这个只计算公司的查询返回 88054:
prefix dbpedia-owl: <http://dbpedia.org/ontology/>
select (count(distinct ?company) as ?count)
where {
?company a dbpedia-owl:Company
}
我认为这是 DBpedia SPARQL 端点出于性能原因施加的限制。您可以做的一件事是下载数据并在本地运行查询,但这可能比您想要的要多一些工作。相反,您可以对结果进行排序(如何 并不重要,只要您始终以相同的方式进行)并使用limit 和offset 在这些结果中进行选择。例如:
prefix dbpedia-owl: <http://dbpedia.org/ontology/>
select ?company
where {
?company a dbpedia-owl:Company
}
order by ?company
limit 10
prefix dbpedia-owl: <http://dbpedia.org/ontology/>
select ?company
where {
?company a dbpedia-owl:Company
}
order by ?company
limit 10
offset 5823
这是一般方法。但是,由于对 40000 个结果的硬限制,它在 DBpedia 上仍然存在问题。有一篇文档文章提到了这一点:
Working with constraints DBpedia's SPARQL endpoint MaxSortedTopRows Limits via LIMIT & OFFSET
DBpedia SPARQL 端点配置了以下 INI 设置:
MaxSortedTopRows = 40000上述设置为已排序的行设置了阈值。
那篇文章提出的解决方案是使用子查询:
为防止出现上述问题,您可以利用 子查询可以更好地利用与关联的临时存储 这种追求。一个示例将采用以下形式:
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
【讨论】:
select ?company where { ?company a dbpedia-owl:Company } order by ?company limit 10 offset 40000
Virtuoso 22023 Error SR353: Sorted TOP clause specifies more then 40010 rows to sort. Only 40000 are allowed. Either decrease the offset and/or row count or use a scrollable cursor