Схемы JSON
Portable Docara использует JSON Schema Draft 2020-12 и fail closed отклоняет unknown fields, неверные типы и unsafe paths.
| Schema ID | Source/output | Назначение |
|---|---|---|
docara.site.v1 |
docara.json |
Site contract |
docara.section.v1 |
section.json |
Наследуемый section contract |
docara.page.v1 |
<page>.page.json |
Page contract |
docara.redirects.v1 |
Файл из redirects_file |
Декларативные внутренние redirects |
docara.redirect_receipt.v1 |
.docara/redirects.json |
Проверяемый результат публикации redirects |
docara.component_call.v1 |
Нормализованный вызов | Форма ID/props; admission определяет runtime |
docara.framework_lock.v1 |
simai-framework.lock.json |
Immutable runtime/manifests/assets |
https://schemas.simai.io/docara/component-catalog-entry/v1 |
Package source record | Одна запись component catalog |
https://schemas.simai.io/docara/typed-component-definition/v1 |
resources/component-catalog/typed/*.json |
Typed owner record |
docara.effective_component_catalog.v1 |
_docara/component-catalog.json |
Производный catalog exact build |
docara.search_index.v1 |
_docara/search-index.json |
Локальный search index |
docara.lang.v1 |
content/<locale>/lang.json |
Только общие UI-подписи локали |
docara.translation_lock.v1 |
translations.lock.json |
Принятые hashes переводов, уровень проверки и исключения |
docara.translation_status.v1 |
.docara/translation-status.json |
Детерминированный отчёт о страницах и ключах локали |
docara.documentation_source.v1 |
Source-owned JSON или встроенный provider | Нейтральный публичный контракт документируемых сущностей |
docara.documentation_lock.v1 |
documentation.lock.json |
Принятые связи страниц, примеров и отпечатков исходного API |
docara.documentation_status.v1 |
.docara/documentation-status.json |
Производный отчёт актуальности документации по исходному коду |
Исполняемые примеры schema
Valid minimal site:
{
"schema": "docara.site.v1",
"preset": "docs",
"framework_lock": "simai-framework.lock.json"
}
Invalid site с unknown field:
{
"schema": "docara.site.v1",
"preset": "docs",
"framework_lock": "simai-framework.lock.json",
"unknown_setting": true
}
Invalid-пример документирует ожидаемую ошибку; не копируйте его в проект.
Scope
| Поле | Site | Section | Page |
|---|---|---|---|
preset, title, locale |
✓ | ✓ | ✓ |
branding, layout, settings |
✓ | ✓ | ✓ |
navigation, search, reading |
✓ | ✓ | ✓ |
reader_preferences |
✓ | — | — |
framework_lock, content_root, base_url, default_locale, locales, locale_routing, translation_tracking, documentation_tracking |
✓ | — | — |
documentation_version, redirects_file |
✓ | — | — |
description, slug |
— | — | ✓ |
schema обязателен. Optional version, если присутствует, равен 1 и
обозначает версию schema, а не версию документации.
Presentation branches
branding: непустые title/label,mode(full,compact,logo,text),size(small,medium,large) и относительные пути brand assets;layout.key: registered valuedocara.docs;layout.container.max: integer1..8, mapped to SIMAI Frameworkmax-container-1..8;layout.regions.<name>.enabled: boolean;layout.regions.<name>.sections: ordered registered Section -> Block -> Smart calls;settings.theme:system,light,dark;settings.modal_blur:none,small,medium,large;settings.ui_radius:default,medium,large;reader_preferences.enabled: boolean;reader_preferences.view:side-panel;reader_preferences.hidden_fields: необязательный список встроенных полей, которые не нужно показывать;reader_preferences.groups: непустой список зарегистрированных групп и полей; runtime дополнительно проверяет неизвестные ID, повторы, принадлежность группе и безопасный effect contract;navigation.hidden: boolean;navigation.order: integer0..2147483647;search.enabled,search.indexed: boolean;reading.breadcrumbs,reading.toc,reading.previous_next: boolean;reading.mobile_toc:auto,always,never;reading.toc_depth: integer2..6.
Branch должен содержать хотя бы одно поле. {} и [] отклоняются. Явная
очистка записывается как {"$reset": true}; reset можно совместить с новыми
ключами этой же ветки.
Defaults
Resolver устанавливает:
{
"content_root": "content",
"layout": {
"key": "docara.docs",
"regions": {
"header": { "enabled": true },
"sidebar": { "enabled": true },
"main": { "enabled": true },
"outline": { "enabled": true },
"footer": { "enabled": false }
}
},
"search": {
"enabled": false,
"indexed": true
},
"reading": {
"breadcrumbs": true,
"toc": true,
"mobile_toc": "auto",
"toc_depth": 3,
"previous_next": true
}
}
Структурные defaults областей восстанавливаются после branch reset. main
является обязательной областью и не может быть выключен. Допустимые
section/block/Smart IDs и фиксированные data bindings дополнительно
проверяются runtime resolver.
Значения starter, например включённый search UI, приходят из поставляемого
docara.json, а не из скрытого default.
Effective component catalog
Machine-readable catalog объединяет native Markdown, typed Docara и Smart-компоненты, допущенные exact Framework lock. Requirement records фиксируют недоступные потребности, но не callable syntax.
Root содержит immutable framework/provider identity, sorted entries,
content_sha256 и bounded nonclaims. Exact параметры, states, limitations и
examples принадлежат source records/fixtures и показываются в
справочнике компонентов, а не повторяются здесь.
_docara/component-catalog.json является output. Автор не редактирует его и не
может через него, Markdown или presentation JSON расширить Smart surface.
Runtime checks beyond schema
Schema подтверждает форму, но builder дополнительно проверяет:
- существование и confinement paths;
- symlink и reserved destinations;
- brand asset type/size/hash;
- Framework lock semantics и immutable references;
- manifest, props, dependencies и asset projection;
- принадлежность каждой страницы объявленному locale, BCP 47 tags,
непересекающиеся content roots, fallback-циклы,
locales.missing_page_policyи отдельнуюdocumentation_version; - redirect target existence, collision, chain/cycle и confinement внутри
base_url; - output collisions.
Поэтому schema-valid JSON ещё не гарантирует успешную сборку, если внешний файл или runtime contract нарушен.