用于查找源自美国和在美国发行的电影的 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。
我有以下 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。