Задержка оценки подзапроса SPARQL - PullRequest
0 голосов
/ 04 июля 2019

Мне интересно, как отложить оценку подзапросов, когда это имеет смысл в SPARQL. Я использую wikidata SPARQL .

Давайте возьмем этот пример, который пытается получить американские фильмы и дату их первой публикации. Так будет выглядеть подзапрос, основанный на здравом смысле. Тем не менее, этот запрос будет задержан, потому что он попытается получить минимальную дату публикации для всех фильмов, не зная, что фильмы ограничены за пределами американских.

select *
where{
  #films
  ?film wdt:P31 wd:Q11424. 
  #films with America as country of origin
  ?film wdt:P495 wd:Q30.
  {
    #minimum publication date
    select ?film (min (?pubDate) as ?minPubDate)
    where{
      ?film wdt:P577 ?pubDate.
    }
    group by ?film
  }
}

Тем не менее, следующий запрос с добавлением внешних ограничений сделает это.

select *
where{
  #films
  ?film wdt:P31 wd:Q11424. 
  #films with America as country of origin
  ?film wdt:P495 wd:Q30.
  {
    #minimum publication date
    select ?film (min (?pubDate) as ?minPubDate)
    where{
      #films
      ?film wdt:P31 wd:Q11424. 
      #films with America as country of origin
      ?film wdt:P495 wd:Q30.
      ?film wdt:P577 ?pubDate.
    }
    group by ?film
  }

Вопрос: Я знаю, что изменение структуры запроса может решить проблему производительности в этом случае. Тем не менее, есть ли более систематический способ реструктурировать запрос или сказать: Эй, подзапрос! Не беспокойтесь о получении всех результатов, вам может хватить той доли, которая будет снаружи!

...