Программирование Викиданных/SPARQL
Факультет компьютерных технологий |
Главы (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 год.
Недостатки плохого скрипта:
- В первой строчке должен быть комментарий на английском языке. Дата имеет смысл при оценке результатов, а не оценке листинга программы.
- В строке "SELECT..." следует указывать не только текстовую метку ?countryLabel, но и сам объект ?country. Этот объект в итоговом списке будет ссылкой на объект Викиданных, что часто оказывается удобно.
- Пусть мы выполнили рекомендацию в предыдущем пункте и добавили в SELECT переменную ?country. Не забудьте добавить её же в конструкцию GROUP BY.
- Есть неожиданные отступы. Положим внутри цикла или условия отступ равный двум пробелам. Если в LaTeX какой-либо код не помещается по ширине, то ищем способы сделать конкретный листинг более узким.
- В строчке "SERVICE..." на первом месте указываем русский язык (ru), на втором — английский, это для листингов в Русском Викиверситете. Точка в этой строчке лишняя. В Английском Викиверситете указываем только английский язык "en". Иногда нужно указать язык, на котором больше информации, например, японский (ja) для статьи про аниме.
- Полагаем, что переменная ?hum соответствует одному объекту, тогда в комментарии пишем "instance" в единственном числе.
- Добавим комментариев к строкам со свойствами P17 и P1082.
- Если открыть ссылку на онлайн-скрипт после листинга, то мы увидим, что скрипты в листинге и онлайн-скрипте не совпадают. То есть при изменении листинга следует обновлять ссылку на скрипт. Для удобства переноса листингов в 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-скрипты должны давать в Русском Викиверситете результаты на русском языке, в Английском Викиверситете — на английском. Это относится ко всем результатам: спискам, таблицам и рисункам (графам, картам и так далее).