2017-02-22 13 views
0

Я пытаюсь восстановить список роликов для фильмов из викидата. Мой 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

 Смежные вопросы

  • Нет связанных вопросов^_^