Реестр как данные
Первоисточник результата инвентаризации — файл с данными, а не отчёт и не картинка. Отчёт нельзя проверить скриптом, сравнить с прошлой версией, отфильтровать по владельцу или выгрузить в каталог. Файл можно. Поэтому реестр хранят в таблице или в файлах YAML и JSON, а страницы, отчёты, интеллект-карты и файлы для печати строят из него. Так устроен атлас этой книги — четыре карты данных, хранящиеся как данные.
Что хранить
Сведения реестра — на примере карты данных — укладываются в две сущности и связь между ними:
- источники — каждый один раз: название, тип, адрес, владелец, другие названия;
- вопросы — номер и текст;
- связи «вопрос — источник» — с доступностью: один источник бывает доступен для одного вопроса и закрыт для другого.
Источники удобно держать в общем списке для всех карт, а карты — ссылаться на них по короткому идентификатору. Тогда источник, который встречается на нескольких картах, описан один раз, и при обновлении его правят в одном месте. В атласе книги четыре источника встречаются на всех четырёх картах: clearspending.ru, fedstat.ru, gks.ru и zakupki.gov.ru.
Формат атласа
Данные атласа лежат в папке data/ репозитория книги:
data/
sources.yaml # общий список источников
maps/oil-and-gas.yaml
maps/public-finance.yaml
maps/health.yaml
maps/education.yaml
Источник в sources.yaml:
- id: egrul-nalog-ru
name: egrul.nalog.ru
type: site
url: https://egrul.nalog.ru
owner: ФНС России
Карта в maps/oil-and-gas.yaml — паспорт и вопросы:
id: oil-and-gas
title: Нефть и газ
kind: [questions, availability]
checked: 2019-12
author: Иван Бегтин
questions:
- n: 2
text: Где найти информацию о ценах на нефть и газ?
sources:
- {source: bloomberg-com, availability: restricted}
- {source: cbr-ru, availability: available}
Полное описание полей — в data/README.md.
YAML выбран потому, что его удобно читать и править человеку, а программы читают его так же легко, как JSON. Для карты, которую ведут не программисты, подойдёт и обычная таблица: лист источников, лист вопросов и лист связей. Главное — чтобы источник был одной строкой, а не повторялся в каждой ячейке.
Что из этого строится
Скрипт scripts/atlas.mjs читает данные и строит:
- таблицу вопросов и источников с кружками доступности для каждой страницы атласа;
- таблицу источников карты — каждый источник один раз, с владельцем и номерами вопросов;
- паспорт карты и список изменений;
- CSV для скачивания — строка на каждую пару «вопрос — источник»;
- сводку по атласу и список источников, которые встречаются хотя бы на трёх картах.
Сайт книги перед сборкой запускает скрипт сам, поэтому таблицы на страницах всегда совпадают с данными.
Проверки
Прежде чем что-то строить, скрипт проверяет данные и останавливает сборку при ошибке:
- у каждого источника есть идентификатор, название и тип из списка;
- идентификаторы не повторяются;
- каждый источник, на который ссылается карта, описан в общем списке;
- в одном вопросе источник не указан дважды;
- доступность — одно из допустимых значений;
- вопросы пронумерованы по порядку;
- в общем списке нет источников, которые не используются ни на одной карте.
Это те же пункты, что в проверке перед публикацией, только их проверяет программа. Проверку можно запустить отдельно: npm run atlas:check.
Проверка адресов
Второй скрипт, scripts/check-sources.mjs, проходит по адресам всех источников: есть ли домен и что отвечает сайт. Результат с датой и описанием сети он записывает в data/source-checks.yaml, а таблицы атласа показывают его в колонке «Адрес». Так шаг «Поддержка» для адресов становится одной командой: npm run check-sources.
Скрипт не решает, доступны ли данные, — только жив ли адрес. И его результат зависит от сети: «домена нет» верно везде, а «не ответил» из-за рубежа может значить «открыт» в России. Поэтому в файле записано, откуда шла проверка.
Как перенести карту с картинки в данные
Карты атласа 2018–2019 годов существовали только как картинки. При переносе:
- Вопросы и источники взяты с интеллект-карты — на ней полные формулировки вопросов.
- Доступность взята с карты для печати: только на ней есть легенда.
- Расхождения между двумя картинками записаны в поле
notesи показаны на странице карты в разделе «Что изменилось». Пары, которых нет на карте для печати, оставлены без доступности. - Дубли убраны: если источник на картинке указан в вопросе дважды, в данных он один раз, а в
notesэто отмечено. - Одинаковые группы под разными названиями объединены: «порталы открытых бюджетов регионов» и «сайты открытых бюджетов субъектов федерации» — один источник с синонимами.
Владельцев на исходных картах не было. В данных они заполнены по домену сайта и помечены как не сверенные — их проверка входит в обновление атласа.
Источники
- Глава «Реестр данных» — какие поля нужны записи.
- Глава «Результат и поддержка» — версии и обновление.
- Данные и скрипт атласа — в репозитории книги.