СМЕЩЕНИЕ в sparql - PullRequest
       15

СМЕЩЕНИЕ в sparql

0 голосов
/ 13 марта 2019

У меня есть запрос на подсчет количества записей; запрос возвращает 129980 записей

SELECT count distinct ?url
  WHERE {
  ?url a dbo:Film.
  } 

потому что каждый раз SPARQL возвращает только 10000 записей; Поэтому я должен использовать «смещение».

SELECT distinct ?url
  WHERE {
  ?url a dbo:Film.
  }limit 10000 offset 1000

Вопрос: если я хочу взять все записи, мне нужно установить смещение = 12; Но почему, когда я установил смещение = 1000, я все равно получил 1000 записей. Спасибо за ваш ответ так много. Я ценю вашу помощь.

1 Ответ

0 голосов
/ 14 марта 2019

Обратите внимание, что ваш первый запрос использует недопустимый синтаксис SPARQL.Вы получаете результат только потому, что запрашиваемый вами движок (если вы запрашиваете DBpedia, как оказалось, это Virtuoso) очень прощает многие ошибки.Правильный и полный синтаксис будет -

PREFIX dbo: <http://dbpedia.org/ontology/>
SELECT ( COUNT ( DISTINCT ?url ) AS ?HowManyFilms )
  WHERE {
  ?url a dbo:Film .
  } 

Что нужно знать, для вашего второго запроса -

  1. OFFSET означает "пропустить столько строк из общего набора результатов«
  2. LIMIT означает« дать мне только столько строк (начиная с любого OFFSET) »
  3. Строки могут быть доставлены в любом порядке, и этот порядок может меняться от запроса к-просите, если вы не включите ORDER BY.Это может означать, что несколько запросов с разными OFFSET могут не получить все строки и могут доставлять дубликаты строк, когда все частичные наборы результатов объединены.Итак, в любое время, когда вы используете OFFSET и / или LIMIT, рекомендуется также использовать ORDER BY.

Все вместе, добавьте это в первый запрос, чтобы получитьпервые 10000 строк -

ORDER BY ?url LIMIT 10000 OFFSET 0

- и это для получения последних 9 980 строк -

ORDER BY ?url LIMIT 10000 OFFSET 120000

Я оставляю промежуточные запросы для вас ...

...