3

我试图从 Linkedmdb 中提取所有电影。我使用 OFFSET 来确保我不会达到每个查询的最大结果数。我在python中使用了以下脚本

"""
 PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
 PREFIX movie: <http://data.linkedmdb.org/resource/movie/>
 SELECT distinct ?film
 WHERE {
 ?film a movie:film .
 } LIMIT 1000 OFFSET %s """ %i

我循环了5次,偏移量为0,1000,2000,3000,4000并记录了结果的数量。它是 (1000,1000,500,0,0)。我已经知道限制是 2500,但我认为通过使用 OFFSET,我们可以摆脱这个问题。这不是真的吗?没有办法获取所有数据(即使我们使用某种循环)?

4

1 回答 1

3

您当前的查询是合法的,但没有指定的顺序,因此偏移量不会将您带到结果中可预测的位置。(惰性实现可能只是一遍又一遍地返回相同的结果。)当您使用limitoffset时,您需要使用order by。SPARQL 1.1 规范说(强调):

15.4 偏移量

OFFSET 使生成的解决方案在指定数量的解决方案之后开始。零偏移量无效。

除非使用 ORDER BY 使顺序可预测,否则使用 LIMIT 和 OFFSET 来选择查询解决方案的不同子集将没有用处。

于 2014-08-05T20:22:44.747 回答