Как решить пределы выполнения в Linkedmdb

Я пытался извлечь все фильмы из 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, мы можем с этим сойти. Разве это не правда? Нет способа получить все данные (даже если мы используем какой-то цикл)?

1 ответ

Решение

Ваш текущий запрос является допустимым, но нет определенного порядка, поэтому смещение не приведет вас к предсказуемому месту в результатах. (Ленивая реализация может просто возвращать одни и те же результаты снова и снова.) Когда вы используете limit и offset, вам также нужно использовать order by. Спецификация SPARQL 1.1 гласит (выделено):

15.4 СМЕЩЕНИЕ

OFFSET вызывает запуск сгенерированных решений после указанного количества решений. Смещение нуля не имеет никакого эффекта.

Использование LIMIT и OFFSET для выбора разных подмножеств решений запросов не будет полезным, если порядок не будет предсказуемым с помощью ORDER BY.

Другие вопросы по тегам