Перейти к основному содержимому

Статические сайты

Статический сайт — это готовые страницы. Генератор собирает их из файлов, чаще всего из Git-репозитория, а хостинг только отдаёт результат: GitHub Pages, GitLab Pages и другие. Базы и круглосуточного приложения нет. Уже собранный сайт переживает паузу в разработке генератора, а забрать каталог к себе — значит скопировать файлы.

Этого хватает, когда наборы публикует небольшая группа, а читателю и сборщику нужны страница набора и один файл описаний. Так устроен opendata.scot: 14 октября 2026 года в его файле описаний было 2596 наборов. Роли, очередь заявок на закрытый файл и API поиска — повод сменить способ публикации. Сервер, поставленный рядом с генератором, этих задач не решает: получится самодельный портал, который некому сопровождать.

Порядок «репозиторий, разметка, DOI, запись в чужом каталоге» — в главе «Как сделать публикацию находимой». Здесь — из чего собирают сам сайт и где у готовых инструментов кончается поставка.

Когда его хватает​

СитуацияКуда
Десятки или несколько тысяч открытых наборов, правят файлами один-двоестатический каталог: JKAN или свой генератор
Наборов мало, сайт ведомства уже есть, сборщику нужен один файлфайл описаний на этом сайте. См. «Когда портал не нужен»
Показатели целей устойчивого развития, людям нужна витринаOpenSDG
Снимки и другие пространственные файлы, их читает программастатический каталог STAC в хранилище. См. геопорталы и облако
Одна большая таблица, по ней нужны страница и запросDatasette. Это уже маленький сервер, не папка файлов
Много публикаторов без Git, закрытые файлы, API поискапортал или чужой каталог

Как он собирается​

Исходники лежат в Git: по файлу на набор, шаблон страницы, лицензии. Генератор на каждом изменении собирает HTML, общий файл описаний и sitemap.xml. Хостинг кладёт эту папку на адрес сайта. Читатель получает обычные страницы. Сборщик забирает один файл, а не ходит по кнопкам.

Сбор чужих каталогов в такой схеме возможен, но это скрипт рядом с сайтом, а не функция генератора. Скрипт по расписанию скачивает описания, кладёт их файлами в репозиторий, генератор собирает страницы заново. Так сделан opendata.scot. Готовый сайт по-прежнему ничего не обходит и никого не модерирует: в нём лежат те файлы, которые скрипт успел положить.

На GitHub Pages у этой схемы есть потолок. Документация на 14 октября 2026 года говорит: опубликованный сайт не больше 1 ГБ, сборка обрывается после 10 минут, у репозитория-источника рекомендуемый предел тоже 1 ГБ, мягкий предел трафика — 100 ГБ в месяц. На opendata.scot файлы данных лежат у публикаторов, а в репозитории — описания, поэтому сайт в этот предел помещается. Каталог, в который положили сами таблицы, упрётся в гигабайт раньше, чем в число наборов. У другого хостинга пределы свои; перед публикацией их читают у этого хостинга.

Страница должна содержать текст описания в HTML. Сайт, который рисует карточку только скриптом в браузере, для сборщика и поисковика пуст. Как это проверяют — в главе о находимости портала.

Чем собирать​

ИнструментКогда его берутЧего в поставке нет
JKANоткрытые наборы, от десятков до нескольких тысячAPI поиска, ролей, schema.org; файл описаний короче схемы, которую он называет
Обычный генератор (Hugo, Jekyll, Astro)наборов мало, шаблон сайта уже естьготового каталога: страницу, разметку и файл описаний пишут сами
PortalJSсвой интерфейс поверх файлов или уже существующего каталогаролей и API поиска в свободной сборке из файлов
OpenSDGвитрина показателей целей устойчивого развитияживого сервиса SDMX и общего каталога произвольных файлов
Статический каталог STACпространственные файлы, которые читает программаответа на запрос «все файлы этой территории за эти даты»
Datasetteодна база SQLiteстатики: страница жива, пока запущен процесс

В реестре dataportals-registry выпуска 1.27.0 от 15 октября 2026 года — 48 порталов открытых данных на JKAN, 72 каталога на OpenSDG и 44 портала открытых данных на Datasette. Это те же числа, что в главах о порталах открытых данных, показателях и в карточке JKAN.

Обычному генератору хватает шаблона страницы, блока schema.org из готового файла и файла data.json или datapackage.json рядом. Один набор в Git подробнее разобран в главе о репозиториях. Генератор берут, когда наборов мало и JKAN со своей схемой только мешает. Когда наборов десятки, готовый каталог экономит шаблон.

JKAN​

JKAN — каталог на Jekyll, лицензия MIT. Набор — файл Markdown в каталоге _datasets. Адрес страницы берётся из пути этого файла: правка заголовка адрес не меняет, переименование файла меняет. Рядом собираются страница организации и общий data.json.

Файл объявляет схему DCAT-US 1.1 строкой conformsTo. Шаблон заполняет фиксированный список полей: название, описание, категорию, контакт, лицензию и ссылки на файлы. Поле, добавленное в схему сайта, видно на странице. В data.json оно попадает, только если его отдельно вписали в шаблон этого файла. Схема DCAT-US 1.1 требует у набора ещё ключевые слова, дату изменения, издателя, идентификатор, уровень доступа и, для федеральных органов США, коды бюро и программы. Шаблон их не выводит. Издателя он пытается взять и теряет: в шаблоне на ветке main переменная, куда издателя записали, и переменная, откуда его читают, названы по-разному. Строка conformsTo при этом ставится всегда. Сборщику, которому нужен DCAT-AP, этот файл не отдают, пока шаблон не переделают. Так же сказано в сценарии муниципалитета.

Разметки schema.org в шаблоне страницы нет. Есть RDFa: у блока страницы стоит dcat:Dataset. Документация Google говорит, что читает и такой DCAT на странице, но проверка расширенных результатов пример с DCAT не принимает. В шаблон добавляют schema.org из файла книги: эту разметку тест проверяет до индексации. Как устроены поля — в главе о находимости без портала.

Поиск на сайте — фильтр в браузере по файлу datasets.json. Отдельного API у этого поиска нет. Общий файл для сборщика — data.json.

Форма редактора есть: это Decap CMS, страница /editor. Человек входит учётной записью GitHub, правка становится коммитом. Ролей и очереди заявок форма не даёт. На Netlify вход настраивается у хостинга. На GitHub Pages инструкция JKAN просит отдельный маленький сервер входа. Это уже процесс, который кто-то должен держать: ради формы на бесплатных страницах GitHub статика перестаёт быть только файлами. Кто готов править Markdown, этот сервер не включает.

Выпуск с номером — 2.0.0 от 30 марта 2023 года. Следующего номера к 14 октября 2026 года нет. Ветка main жила и после выпуска. Карта сайта, плагин jekyll-sitemap, добавлена 29 июля 2026 года и в тег 2.0.0 не входит. Последний push ветки — 7 сентября 2026 года. В 2018–2020 годах коммиты были, в основном по оформлению. В 2021 году их не было. В конце 2022 года встроенный редактор заменили на Decap. Уже собранный сайт от такой паузы не падает. Устаревает шаблон: копия с тега 2.0.0 карты сайта не получит, пока её не обновят.

PortalJS​

PortalJS — средства на Next.js, лицензия MIT. Свободная сборка по документации на 14 октября 2026 года по умолчанию читает CSV и JSON из файлов проекта и умеет выгрузить статический сайт в папку. Тот же интерфейс на этапе сборки может заранее забрать страницы из уже работающего CKAN. Пока сборка статическая, хостинг снова отдаёт файлы, а новые наборы появляются после следующей сборки. Режим, в котором страница каждый раз спрашивает сервер, требует хост с Node, а не папку файлов.

Платный хостинг — отдельный продукт. Тарифы на тот же день: 1188, 3588 и 14 990 долларов в год. Роли есть уже на первом платном тарифе. Поиск по API и управляемый CKAN — со второго, за 3588 долларов в год. Это портал с подпиской, а не способ обойтись файлами. Сравнение цен — в главе о способе создания. Схема «готовый каталог и свой сайт поверх него» — там же, в разделе о готовом ядре.

OpenSDG​

OpenSDG — статический сайт показателей целей устойчивого развития, лицензия MIT. Выпуск 2.4.0 вышел 19 августа 2025 года. Данные и тексты показателей лежат в отдельном репозитории, программа сборки готовит из них файлы, Jekyll собирает страницы. Так устроены показатели ЦУР Великобритании: 14 октября 2026 года в коде страницы был плагин jekyll-open-sdg-plugins.

SDMX здесь — источник, который сборка может прочитать, и файлы SDMX-ML, которые она может положить на сайт, если это включили. Живого сервиса SDMX, к которому обращается Евростат или МВФ, сайт не поднимает. Национальной службе для обмена нужен PxWeb или .Stat, а OpenSDG — для публичной витрины. Выбор расписан в главе о каталогах показателей.

Статический каталог STAC​

Статический каталог STAC — дерево JSON-файлов. В корне лежит catalog.json, дальше — коллекции и объекты со ссылками на снимки, растры и другие пространственные файлы. Рекомендация спецификации прямая: это файлы на веб-сервере, часто в объектном хранилище; каталог можно обойти по ссылкам, на запрос он не отвечает. Имена файлов — catalog.json и collection.json. Ссылки внутри дерева делают относительными, если каталог должны суметь перенести.

Пока каталог читает программа, отдельный сервер каталога не нужен. STAC Browser открывает и такое дерево, и STAC API. Запрос «все объекты в этом прямоугольнике за эти даты» дерево само не выполняет: для него файлы загружают в API. Живой пример дерева — публичный каталог Google Earth Engine, файл catalog.json. 14 октября 2026 года это был документ типа Catalog с 133 дочерними ссылками, 25 841 байт. Рядом есть HTML-страница тех же наборов; JSON нужен программе.

Datasette​

Datasette публикует базу SQLite: веб-страница и JSON API появляются одной командой. Лицензия Apache-2.0. Это сосед статики, а не она сама: процесс должен работать, иначе страницы нет. Сопровождение проще портала и всё же это сопровождение процесса.

Рядом есть Datasette Lite: та же программа в браузере, через WebAssembly. Хостинг отдаёт страницу и файл базы, читатель загружает базу к себе. Так публикуют одну таблицу, которую реально открыть целиком. Каталог из тысяч файлов в браузер не кладут.

Два живых каталога​

Два работающих примера показывают, что статический каталог годится не только для небольшой коллекции: один из них — национальный портал, другой собран сообществом без государственного бюджета.

Национальный портал Чехии​

У data.gov.cz на одном адресе два разных изделия. Информационная часть — статьи, инструкции, стандарты — по репозиторию сайта собрана Jekyll и опубликована через GitHub Pages. README на 14 октября 2026 года говорит то же. Правку текста предлагают запросом на изменение, как в любом открытом проекте.

Каталог наборов — отдельное приложение. README отсылает к нему явно: интерфейс национального каталога живёт в другом репозитории, LinkedPipes DCAT-AP Viewer. Описания лежат в хранилище связанных данных, к хранилищу открыта точка запросов SPARQL. Связанные данные — способ публиковать описания так, чтобы у записи и у значения был свой адрес и на них можно было сослаться из другой системы.

Файлы наборов портал не хранит. 14 октября 2026 года SPARQL насчитал 31 272 набора из 133 каталогов и 39 624 разных адреса скачивания. На сам data.gov.cz из этих адресов вели 16. Это собственные материалы каталога: списки школ, библиотек и спортплощадок, выгрузка каталога, отчёты о качестве ссылок. Остальные адреса — сайты публикаторов. Плата за такую лёгкость в том, что портал не сохранит копию, если ведомство удалит файл. Почему это важно — в главе о хранилище.

Число наборов меняется сильнее, чем устройство. 24 февраля 2023 года их было около 142 тысяч, из них около 137 тысяч давала одна кадастровая служба. К октябрю 2026 года в точке SPARQL осталось 31 272. Каталог по-прежнему указатель, а не архив.

Каталог, который собрало сообщество​

В Шотландии долго не было общего государственного портала открытых данных, хотя свои порталы были у городов, ведомств и университетов. Волонтёры сделали opendata.scot: сайт на JKAN, описания и сборщики лежат на GitHub. Скрипты забирают описания с порталов на CKAN, ArcGIS и других платформах и складывают их файлами в репозиторий. С июля по 9 октября 2026 года синхронизация шла примерно раз в неделю. Последний такой коммит — 9 октября, в ту же минуту обновлён файл на сайте.

В data.json в тот день, 14 октября, было 2596 наборов. Файл весит 5 878 536 байт и объявляет схему DCAT-US 1.1. У каждой записи шесть полей: название, описание, категория, контакт, лицензия, ссылки. Издателя нет ни у одной. Ключевых слов, даты изменения, идентификатора и уровня доступа тоже нет. На странице набора организация при этом есть: у блока стоит издатель в RDFa. Сборщик, который читает только data.json, её не увидит.

Лицензия в файле заполнена и не всегда пригодна. У 1407 из 2596 это ссылка на Open Government Licence 3.0. У 462 в поле записано No licence: ячейка не пустая, пользоваться данными по ней нельзя. У 232 наборов нет ни одной ссылки на файл. Сами файлы лежат на сайтах городов и ведомств. Среди самых частых адресов — порталы на ArcGIS Hub.

Страница набора, открытая в тот же день, не содержит schema.org. В ней есть dcat:Dataset, как в шаблоне JKAN. Карта сайта открывается. Поиск на сайте читает datasets.json размером 5 775 288 байт. Отдельного API поиска нет.

На сайте есть раздел аналитики: какие организации публикуют данные и на каких платформах работают их порталы. Хостинг страниц — GitHub Pages. Сервер каталога не нужен, пока устраивают файл описаний и страницы. Позже правительство Шотландии сделало свой поисковик по данным. Он разобран в главе о поисковиках и агрегаторах.

Что сделать на сайте​

  • Адрес страницы набора не меняется при правке опечатки. В JKAN для этого не переименовывают файл.
  • В HTML страницы есть schema.org/Dataset. RDFa со словом dcat:Dataset это не заменяет.
  • Один файл со всеми описаниями открывается без входа. В записи есть издатель, лицензия, дата изменения и прямая ссылка на файл. Строку conformsTo сверяют с полями.
  • В поле лицензии — ссылка на известную лицензию или явный текст условий. Значение No licence лицензией не считается.
  • Есть sitemap.xml.
  • Текст описания лежит в HTML, а не появляется только после выполнения скрипта.

Без этих пунктов сайт остаётся списком ссылок. С ними он закрывает минимум из чек-листа. Как довести одну публикацию до поисковика и чужого каталога — в главе о находимости.

Когда статического сайта уже мало​

Пора менять способ, когда публикаторов без учётной записи Git становится больше, чем команда успевает принимать запросами на изменение. То же — когда описание открыто, файл закрыт и заявки уже не разбираются почтой. API поиска нужен, когда наборов столько, что общий JSON тяжелеет для каждой программы, или когда сборщик по правилам страны принимает только API. Для наборов высокой ценности ЕС регламент требует и API, и массовую выгрузку: файл описаний закрывает выгрузку метаданных, API данных он не заменяет. Подробнее — в главе об интерфейсах доступа.

Сборка, которая не укладывается в предел хостинга, — тот же порог. На GitHub Pages это сайт больше 1 ГБ или сборка дольше 10 минут. Дальше берут портал или выносят файлы в хранилище, а на сайте оставляют описания.

Пример: каталог, который ведут двое​

Контекст. Городская библиотека публикует около 80 открытых наборов: списки учреждений, расписания, годовые таблицы. Файлы остаются на сайтах ведомств. Региональный портал чужие организации не принимает. Правят двое сотрудников, у обоих есть учётная запись GitHub. Закрытых файлов нет. Описание должно находиться в поисковике. Если позже появится национальный сборщик, ему отдают один файл.

Варианты. Свой CKAN. Облачный PortalJS с ролями. JKAN. Обычный генератор и файл data.json, собранный скриптом.

Критерии. У каждого набора своя страница, адрес которой не меняется от правки заголовка. В файле описаний есть издатель, лицензия, дата и ссылка на файл. На странице есть schema.org. Сопровождение обходится без сервера приложений и без годовой платы. Оба редактора справляются сами.

Решение. JKAN, хостинг файлов — GitHub Pages. До первой публикации в шаблон добавляют schema.org, издателя и дату изменения в data.json. Форму Decap не включают: двоим проще править файлы, чем держать отдельный сервер входа. Если сборщик, когда он появится, ждёт DCAT-AP, шаблон переделывают под этот профиль заранее.

Почему. CKAN добавляет сервер при двух редакторах. Облачный PortalJS на первом платном тарифе даёт роли, которых здесь нет, и стоит от 1188 долларов в год; API поиска у него начинается со следующего тарифа. Обычный генератор тоже соберёт страницы, но страницу набора и data.json придётся писать с нуля. У JKAN они есть. Шаблон при этом не готов к публикации, пока в файле нет издателя: это видно по opendata.scot.

Последствия. Поиск на сайте фильтрует JSON в браузере. Программе отдают весь data.json. Файлы данных библиотека не копирует: пропажа файла на сайте ведомства видна как битая ссылка. Человек без учётной записи GitHub набор не добавит.

Когда пересмотреть. Появился третий публикатор, который не будет работать с GitHub. Понадобилось скрывать файл и оставлять описание открытым, и заявок стало больше, чем разбирает почта. Региональный портал начал принимать организацию библиотеки: два каталога сверяют и оставляют один, если дубли мешают. Сборка упёрлась в 1 ГБ или в 10 минут на GitHub Pages.

Как записать такую карточку у себя — в главе «Как обосновать решение».

Как проверить​

Команды ниже повторяют сверку 14 октября 2026 года. Ожидаемые ответы сняты с живого opendata.scot. После правки шаблона список полей будет другим.

# Файл описаний открывается без входа. В тот день: 2596 наборов,
# схема DCAT-US 1.1, у первой записи нет ключа publisher
curl -s "https://opendata.scot/data.json" | python3 -c "import json,sys; d=json.load(sys.stdin); print(len(d['dataset']), d['conformsTo']); print(sorted(d['dataset'][0]))"

# На странице есть RDFa DCAT и нет schema.org
curl -s "https://opendata.scot/datasets/aberdeen+city+council-academy+school+catchments/" | python3 -c "import sys; t=sys.stdin.read(); print('schema.org', 'schema.org' in t); print('dcat', 'dcat:Dataset' in t)"

Первая команда печатает 2596, адрес схемы https://project-open-data.cio.gov/v1.1/schema и список из шести ключей без publisher. Вторая печатает schema.org False и dcat True.

Дальше открывают свой сайт. В data.json у записи есть издатель, лицензия, дата изменения и прямая ссылка. Строка conformsTo совпадает с профилем, который ждёт сборщик: её сверяют с полями записи. В HTML страницы есть schema.org/Dataset. Адрес sitemap.xml отвечает. Файл набора, если он лежит у вас, открывается по прямой ссылке без входа.

Число наборов в национальном каталоге Чехии в тот же день считали так. Ответ был 31272.

curl -sG "https://data.gov.cz/sparql" \
--data-urlencode "query=SELECT (COUNT(DISTINCT ?d) AS ?n) WHERE { ?d a <http://www.w3.org/ns/dcat#Dataset> }" \
-H "Accept: application/sparql-results+json"

Источники​

  • JKAN, репозиторий, архитектура, установка и шаблон data.json на ветке main. Выпуск 2.0.0 — 30 марта 2023 года. Карта сайта — коммит b4733fb от 29 июля 2026 года, в тег 2.0.0 не входит. Последний push ветки — 7 сентября 2026 года. Коммиты по годам: пауза 2021 года, замена редактора на Decap в конце 2022 года. Сверено 14 октября 2026 года
  • Схема набора DCAT-US 1.1 — обязательные поля, включая издателя, дату изменения, идентификатор и уровень доступа. Адрес схемы, который пишет JKAN, перенаправляет сюда
  • opendata.scot и репозиторий — 2596 наборов, 5 878 536 байт в data.json, 5 775 288 байт в datasets.json, шесть полей, издатель пуст, 462 значения No licence, 232 набора без ссылки на файл, страница без schema.org. Синхронизация примерно раз в неделю, последний прогон 9 октября 2026 года. Проверено 14 октября 2026 года
  • Репозиторий сайта data.gov.cz — Jekyll и GitHub Pages в README; каталог наборов вынесен в LinkedPipes DCAT-AP Viewer. Точка SPARQL — 31 272 набора, 133 каталога, 39 624 адреса скачивания, из них 16 на data.gov.cz. Запрос 14 октября 2026 года
  • И. Бегтин, Telegram: портал открытых данных Чехии, 24.02.2023 — около 142 тысяч наборов, из них около 137 тысяч у кадастровой службы; opendata.scot на JKAN, 16.07.2022; Open Data Scotland, собранный сообществом, 13.05.2023
  • PortalJS: бэкенды, публикация и тарифы — статический экспорт, сборка страниц из CKAN, тарифы 1188, 3588 и 14 990 долларов в год. Сверено 14 октября 2026 года. Репозиторий datopian/portaljs, лицензия MIT
  • Open SDG, выпуск 2.4.0 от 19 августа 2025 года, лицензия MIT. Источники данных и SDMX, вывод SDMX в конфигурации. sdgdata.gov.uk — на странице есть jekyll-open-sdg-plugins, проверено 14 октября 2026 года
  • Рекомендации STAC о статическом каталоге — файлы, относительные ссылки, каталог не отвечает на запросы. STAC Browser. Каталог Earth Engine: catalog.json, 133 дочерние ссылки, проверено 14 октября 2026 года
  • Datasette, репозиторий simonw/datasette, лицензия Apache-2.0. Datasette Lite — база открывается в браузере, последний push 9 августа 2026 года
  • Пределы GitHub Pages — 1 ГБ на опубликованный сайт, 10 минут на сборку, рекомендуемый 1 ГБ на репозиторий-источник, мягкий предел трафика 100 ГБ в месяц. Сверено 14 октября 2026 года
  • Числа установок JKAN, OpenSDG и Datasette — выгрузка реестра dataportals-registry, выпуск 1.27.0 от 15 октября 2026 года.