用于查找源自美国和在美国发行的电影的 SPARQL 查询

SPARQL query for finding films originating from and released in the United States

我有以下 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 的使用发表评论。

您可以使用 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