Выберите одну дату публикации, соответствующую данному месту публикации, используя wikidata + SPARQL для данного фильма. - PullRequest
0 голосов
/ 21 декабря 2018

Я пытаюсь понять, как выбрать одну дату публикации из списка мест публикаций из викиданных с помощью SPARQL.У меня есть запрос, который я считаю близким, но мне нужна помощь в его сокращении.Пока что у меня есть следующее:

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 выпусков.Я хочу выбрать дату выхода в США (15 декабря 2017 года).Это случается сначала, но я хочу обобщить это, чтобы я мог вытащить дату выпуска США для любого фильма.Отсюда я хочу обобщить это, чтобы соответствовать дате выпуска США для всех фильмов.

Я думаю , что я делаю выше, это подзапрос, который пытается соответствовать дате выпуска США, ноэто приводит к одной строке для каждого выпуска (всего 5).

1 Ответ

0 голосов
/ 26 декабря 2018

С помощью @ AKSW я получил следующее.Я использовал OPTIONAL, GROUP BY и GROUP_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
...