SPARQL查询以查找源自美国并在美国发行的电影

时间:2018-12-20 14:45:25

标签: sparql wikidata

我有以下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 个答案:

答案 0 :(得分:0)

您可以使用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行,因为您不能不明确地说出不确定的非组键。参见similar question