使用给定电影的Wikidata + SPARQL选择一个与给定发布地点匹配的发布日期

时间:2018-12-21 05:15:53

标签: sparql wikidata

我正在尝试了解如何使用SPARQL从Wikidata的发布位置列表中选择一个发布日期。我有一个查询,我认为它很接近,但是我正在寻找一些帮助来缩小它的范围。到目前为止,我的工作是:

SELECT ?item ?itemLabel ?publication_date WHERE {
  SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en". }
  VALUES (?item) {(wd:Q18486021)}

  {SELECT ?item ?publication_date WHERE {
     ?item p:P577 ?publication_date_entry.
     ?publication_date_entry pq:P291 wd:Q30.
     ?item wdt:P577 ?publication_date.
  }}
}

我正试图从https://www.wikidata.org/wiki/Q18486021(《星球大战:最后的绝地武士》)中获取与美国相符的发行日期。如果向下滚动到发布日期部分,您会注意到有5个发行版本。我想选择美国发行日期(2017年12月15日)。碰巧是第一个,但我想对此进行概括,以便我可以得出任何电影在美国的发行日期。从这里开始,我想将其概括为与所有电影的美国发行日期相匹配。

认为我在上面做的是一个子查询,它试图匹配美国的发行日期,但每次发行都会导致一行(共5个)。

1 个答案:

答案 0 :(得分:0)

在@AKSW的帮助下,我得出了以下结论。我使用了OPTIONALGROUP BYGROUP_CONCAT,因为有些电影在美国发行的日期不止一次。

SELECT ?item ?itemLabel 
       (GROUP_CONCAT(DISTINCT ?publication_date;separator=',') as ?publication_date)
  WHERE {
  SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en". }
  VALUES (?item) {(wd:Q23780734) (wd:Q18486021) (wd:Q23780914) (wd:Q22000542)}
  ?item wdt:P31 wd:Q11424;


  OPTIONAL {
     ?item p:P577 ?publication_date_entry.
     ?publication_date_entry ps:P577 ?publication_date. # publication date statement
     ?publication_date_entry pq:P291 wd:Q30.            # qualifier on the release date
  }

  FILTER(xsd:date(?publication_date) > "2017-01-01"^^xsd:date)
}
GROUP BY ?item ?itemLabel
LIMIT 10