延迟评估SPARQL子查询

时间:2019-07-04 09:20:05

标签: sparql wikidata

我想知道在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
  }

问题: 我知道在这种情况下,更改查询的结构可能会解决性能问题。但是,有没有更系统的方法来重组查询或告诉:嘿,子查询!不必担心获得所有结果,您可以满足需要的部分!

0 个答案:

没有答案