Формат переноса библиотеки#
Baseline#
- Экспорт/импорт библиотеки ДОЛЖЕН использовать расширение
*.rkl. - Контейнер
*.rkl ДОЛЖЕН использовать tar.zst. - Текстовые датасеты внутри
*.rkl ДОЛЖНЫ использовать кодировку UTF-8. - Базовый scope экспорта библиотеки включает только данные уровня библиотеки.
- Данные
Raw исключаются из baseline scope экспорта/импорта библиотеки. - Пакет переноса ДОЛЖЕН включать manifest-метаданные, версию формата и данные целостности.
Baseline структуры пакета#
manifest.json (required)library.json (required)taxonomy.json (required)content.ndjson (required)tags.json (required)tag_links.ndjson (required)attachments.ndjson (required)progress.ndjson (optional)notes.ndjson (optional)
Baseline manifest#
manifest.json ДОЛЖЕН включать: format, version, encoding, container, exported_at, library, datasets, integrity.format ДОЛЖЕН быть rkl.encoding ДОЛЖЕН быть utf-8.container ДОЛЖЕН быть tar.zst.library ДОЛЖЕН включать id и name.datasets ДОЛЖЕН включать путь и checksum для каждого включенного датасета.integrity ДОЛЖЕН включать алгоритм checksum и checksum manifest.
Baseline датасетов#
library.json ДОЛЖЕН включать id, name, icon.taxonomy.json ДОЛЖЕН включать таксономию типов/подтипов и определения схем полей.- Строки
content.ndjson ДОЛЖНЫ включать id, type, status, created_at, updated_at, status_changed_at. tags.json ДОЛЖЕН включать метаданные тегов.- Строки
tag_links.ndjson ДОЛЖНЫ включать content_id, tag_id.
Правило переноса таксономии#
- Таксономия ДОЛЖНА переноситься вместе с библиотекой при export/import.
- В scope таксономии входят: типы контента, подтипы контента, схемы полей, теги и связи тег-контент.
- Импорт ДОЛЖЕН восстанавливать таксономию до или одновременно с контентными датасетами, чтобы ссылки контента оставались валидными.
Примечание по датасетам#
- Формат переноса библиотеки ДОЛЖЕН поддерживать датасеты вложений (метаданные вложений и связи с контентом).
Baseline датасета вложений#
- Имя файла датасета метаданных вложений:
attachments.ndjson. - Каждая строка вложения ДОЛЖНА включать:
id, content_id, uri. - Опциональные поля строки вложения:
name, mime, size, created_at. content_id в attachments.ndjson ДОЛЖЕН ссылаться на существующую запись контента.
Правила валидации и безопасности#
- Импорт ДОЛЖЕН отклонять пакет при отсутствии любого required датасета.
- Импорт ДОЛЖЕН отклонять пакет при ошибке checksum любого датасета.
- Импорт ДОЛЖЕН отклонять небезопасные пути в архиве (
../, абсолютные пути и эквиваленты path traversal). - Импорт ДОЛЖЕН валидировать схему и ссылки до финального commit.
- Импорт ДОЛЖЕН быть атомарным: при критической ошибке валидации частичное финальное состояние не фиксируется.
Baseline порядка импорта#
- Сначала выполняется проверка контейнера пакета и целостности
manifest. - Затем восстанавливаются метаданные библиотеки (
library.json). - Таксономия восстанавливается до контентных датасетов.
- Затем восстанавливаются контентные датасеты.
- Затем восстанавливаются теги и связи тег-контент.
attachments.ndjson восстанавливается после контентных датасетов.- После этого выполняется финальная проверка ссылочной целостности и атомарный commit импорта.