我试图从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,我们可以逃脱这个。 这不是真的吗?没有办法获取所有数据(即使我们使用某种循环)?
答案 0 :(得分:3)
您当前的查询是合法的,但是没有指定的顺序,因此偏移量不会将您带到结果中的可预测位置。 (懒惰的实现可能会一次又一次地返回相同的结果。)当您使用限制和偏移时,您需要也使用< strong>按排序。 SPARQL 1.1规范说(重点补充):
15.4 OFFSET
OFFSET会导致生成的解决方案在指定后启动 解决方案的数量。 OFFSET为零无效。
使用LIMIT和OFFSET选择查询的不同子集 除非订单可以预测,否则解决方案将无用 使用ORDER BY。