Wikidata + SPARQL: получите тикеры всех компаний, котирующихся на биржах - PullRequest
0 голосов
/ 05 февраля 2019

Я хочу написать SPARQL-запрос, который дает мне символ wikidata_id, label, биржу и тикер для всех случаев, когда компания зарегистрирована на фондовой бирже.

Мой запрос пока выглядит как

SELECT DISTINCT ?id ?idLabel ?exchangeLabel ?tickerLabel
WHERE {
  ?id wdt:P31/wdt:P279* wd:Q783794 ;
      wdt:P414 ?exchange ;
      p:P414 [pq:P249 ?ticker].
  SERVICE wikibase:label { bd:serviceParam wikibase:language "en" }
}

Хотя это дает результаты, которые почти кажутся правильными, существует проблема, когда компании перечислены на нескольких биржах - вот пример проблемы в результатах: enter image description here Обратите внимание, что в приведенном выше списке Credit Suisse указан три раза с тремя разными тикерами.Несмотря на то, что Credit Suisse котируется на трех фондовых биржах, проблема заключается в том, что NYSE указывается в качестве биржи во всех трех случаях.Еще хуже то, что на самом деле для Credit Suisse есть девять строк, связывающих каждый листинг с каждой фондовой биржей.Правильная информация о листинге будет содержать только три листинга и указана на странице wikidata Credit Suisse : enter image description here

Что я делаю неправильно?Как я могу получить правильный обмен, который будет связан с каждой строкой тикера?

1 Ответ

0 голосов
/ 05 февраля 2019

Благодаря @StansilavKralin (в комментарии к моему вопросу) я могу дать ответ:

SELECT DISTINCT ?id ?idLabel ?exchangeLabel ?tickerLabel
WHERE {
  ?id wdt:P31/wdt:P279* wd:Q783794 ; p:P414 [pq:P249 ?ticker; ps:P414 ?exchange ] .
  SERVICE wikibase:label { bd:serviceParam wikibase:language "en" }
}
...