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