2017-02-22 136 views
0

我試圖從wikidata中恢復電影的演員表。 我對諾博士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但結果不是我想要的順序。它給了「肖恩康納利」,「澤娜馬歇爾」,「厄休拉安德斯」。

該數據庫具有所需順序的數據,因爲您可以從https://www.wikidata.org/wiki/Q102754中看到包含演員名單(Sean Connery,Ursula Andress,Joseph Wiseman)。一般來說,演員名單是按帳單順序給出的,而且我想要恢復。

回答

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 
+0

是的,這可以讓我按字母順序排列的演員 - 但我想他們的重要性順序 - 這大概是它們出現在原來的順序數據。 –

+0

如何知道結果按「重要性」排序?這是什麼樣的措施? – AKSW

+0

查看我的更新回答 – AKSW