恢复"原创"订购

时间:2017-02-22 09:37:32

标签: sparql wikidata

我正在尝试从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)。一般来说,演员名单是以结算顺序给出的,而且我想要恢复。

1 个答案:

答案 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