我正在尝试从wikidata恢复电影的演员表。 我对Dr. No的sparql查询如下:
SELECT ?actor ?actorLabel WHERE {
?movie wdt:P161 ?actor .
SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
FILTER(?movie = wd:Q102754)
}
LIMIT 1000
我可以在query.wikidata.org尝试一下,但结果不是我想要的顺序。它给了Sean Connery' Zena Marshall' Ursula Andress'
数据库具有所需顺序的数据,您可以从https://www.wikidata.org/wiki/Q102754看到按顺序包含演员表(Sean Connery,Ursula Andress,Joseph Wiseman)。一般来说,演员名单是以结算顺序给出的,而且我想要恢复。
答案 0 :(得分:2)
SPARQL使用ORDER BY
提供结果排序,请参阅here
示例中的顺序基于语句的引用数。这是一个非优化版本,可以满足您的需求:
SELECT ?actor ?actorLabel WHERE {
?movie p:P161 ?statement .
?statement ps:P161 ?actor .
OPTIONAL {?statement prov:wasDerivedFrom ?ref . }
SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
FILTER(?movie = wd:Q102754)
}
group by ?movie ?actor ?actorLabel
ORDER BY DESC(count(?ref)) ASC(?actorLabel)
LIMIT 1000