Recover the “original” order

2019-06-12 07:54发布

I am trying to recover the cast list for movies from wikidata. My sparql query for Dr. No is as follows:

SELECT ?actor ?actorLabel WHERE {
  ?movie wdt:P161 ?actor .
  SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
  FILTER(?movie = wd:Q102754)
}
LIMIT 1000

I can try it out at query.wikidata.org but the results are not in the order that I want. It gives 'Sean Connery', 'Zena Marshall', 'Ursula Andress'.

The database has the data in the required order as you can see from https://www.wikidata.org/wiki/Q102754 includes the cast list in order (Sean Connery, Ursula Andress, Joseph Wiseman). Generally the cast list is given in billing order and it is that that I want to recover.

1条回答
地球回转人心会变
2楼-- · 2019-06-12 08:31

SPARQL provides ordering of results by using ORDER BY, see here

The ordering in your example is based on the number of references of a statement. Here is a non-optimized version that does what you want:

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
查看更多
登录 后发表回答