Перейти к содержанию

Программирование Викиданных/SPARQL

Материал из Викиверситета
Факультет компьютерных технологий
Иконка программы Pywikibot

Программирование Викиданных

Главы (2021):

Алгоритм работы (для авторов):

Разберём на примере, как нужно оформлять SPARQL-скрипты.

Рассмотрим скрипт из статьи нашего курса «Населённые пункты». Этот скрипт строит список стран, упорядоченный по суммарному количеству людей, проживающих в «населённых пунктах».

Плохое оформление скрипта
# 26.10.2017
SELECT ?countryLabel (SUM(?population) as ?sumPopulation)
WHERE
{
    ?hum wdt:P31 wd:Q486972;    # instances of human settlement
         wdt:P17 ?country;      
         wdt:P1082 ?population. 
  
   SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
 }
  GROUP BY ?country ?countryLabel 
  ORDER BY DESC (?sumPopulation)

SPARQL-запрос, 161 запись на 2017 год и 213 записей на 2021 год.

Недостатки плохого скрипта:

  1. В первой строчке должен быть комментарий на английском языке. Дата имеет смысл при оценке результатов, а не оценке листинга программы.
  2. В строке "SELECT..." следует указывать не только текстовую метку ?countryLabel, но и сам объект ?country. Этот объект в итоговом списке будет ссылкой на объект Викиданных, что часто оказывается удобно.
  3. Пусть мы выполнили рекомендацию в предыдущем пункте и добавили в SELECT переменную ?country. Не забудьте добавить её же в конструкцию GROUP BY.
  4. Есть неожиданные отступы. Положим внутри цикла или условия отступ равный двум пробелам. Если в LaTeX какой-либо код не помещается по ширине, то ищем способы сделать конкретный листинг более узким.
  5. В строчке "SERVICE..." на первом месте указываем русский язык (ru), на втором — английский, это для листингов в Русском Викиверситете. Точка в этой строчке лишняя. В Английском Викиверситете указываем только английский язык "en". Иногда нужно указать язык, на котором больше информации, например, японский (ja) для статьи про аниме.
  6. Полагаем, что переменная ?hum соответствует одному объекту, тогда в комментарии пишем "instance" в единственном числе.
  7. Добавим комментариев к строкам со свойствами P17 и P1082.
  8. Если открыть ссылку на онлайн-скрипт после листинга, то мы увидим, что скрипты в листинге и онлайн-скрипте не совпадают. То есть при изменении листинга следует обновлять ссылку на скрипт. Для удобства переноса листингов в LaTeX следует использовать короткую ссылку на онлайн-скрипт (см. сервис укорачивания ссылок m:URL Shortener для статей вики-проектов).

Получим такой скрипт.

Хороший скрипт
# List of countries by population in settlements
SELECT ?country ?countryLabel (SUM(?population) as ?sumPopulation)
WHERE
{
  ?hum wdt:P31 wd:Q486972; # instance of human settlement
       wdt:P17 ?country;   # settlement in the ?country
       wdt:P1082 ?population. # settlement has ?population
  
  SERVICE wikibase:label { bd:serviceParam wikibase:language "ru,en"}
}
GROUP BY ?country ?countryLabel 
ORDER BY DESC (?sumPopulation)

SPARQL-запрос, 161 запись на 2017 год и 213 записей на 2021 год.

Задание

[править]

Обойти свои скрипты в Русском Викиверситете и в Английском Викиверситете, оформить скрипты по правилам, описанным выше.

Помните, что SPARQL-скрипты должны давать в Русском Викиверситете результаты на русском языке, в Английском Викиверситете — на английском. Это относится ко всем результатам: спискам, таблицам и рисункам (графам, картам и так далее).