SPARQL-запрос для поиска фильмов, созданных и выпущенных в США.
У меня есть следующий запрос SPARQL, который, по-видимому, правильно производит фильмы, произведенные в США (страна происхождения) и выпущенные в США (место публикации) в 2018 году. У меня проблема в том, что для каждого выпуска создается одна строка хотя другие релизы находятся за пределами США. Я добавил ограничение, чтобы уменьшить размер ответа.
Вот запрос:
SELECT ?item ?name ?publication_date ?placeLabel WHERE {
SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en". }
?item rdfs:label ?name;
wdt:P31 wd:Q11424;
wdt:P495 wd:Q30; # -> country of origin US
wdt:P577 ?publication_date.
?item p:P577 ?publication_statement.
?publication_statement pq:P291 ?place.
FILTER(xsd:date(?publication_date) > "2018-01-01"^^xsd:date)
FILTER(
(LANG(?name)) = "en"
&& ?place=wd:Q30) # -> place of publication
}
ORDER BY ?name
LIMIT 10
Я хотел бы изменить это так, чтобы он производил по одной строке на фильм, если он был выпущен в США в 2018 году.
Спасибо за вашу помощь. Также приветствуются комментарии по использованию FILTER или другого не идиоматического SPARQL.
1 ответ
Ты можешь использовать GROUP BY
:
SELECT ?item (SAMPLE(?name) as ?Name) (SAMPLE(?publication_date) as ?Date) WHERE {
SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en". }
?item rdfs:label ?name;
wdt:P31 wd:Q11424;
wdt:P495 wd:Q30; # -> country of origin US
wdt:P577 ?publication_date.
?item p:P577 ?publication_statement.
?publication_statement pq:P291 ?place.
FILTER(xsd:date(?publication_date) > "2018-01-01"^^xsd:date)
FILTER(
(LANG(?name)) = "en"
&& ?place=wd:Q30) # -> place of publication
}
GROUP BY ?item
ORDER BY ?Name
LIMIT 10
Смотрите этот запрос на Wikidata.
И вам нужно исправить строку SELECT, поскольку вы не можете раздать неопределенные ключи, не относящиеся к группе, без явного указания. Смотрите аналогичный вопрос.