Документация
/ Описание файла свитка
Описание файла свитка
Файл свитка - это один JSON-объект: данные свитка, его главы с идеями и необязательные переводы. На этой странице описан каждый объект и каждое поле, которое читает импорт.
Файлы для скачивания
- Пример файла: вымышленный свиток, в котором есть все основные поля, с полными версиями на всех 15 языках интерфейса.
- JSON-схема: те же правила в машиночитаемом виде (JSON Schema 2020-12) для редакторов, скриптов и ИИ-агентов. Её ограничения берутся из того же кода, который выполняет импорт.
Структура
Scroll
├── language, title, authors, description, tags,
│ sourceUrl, originalYear, originalPeriod
├── summaries: Chapter[]
│ └── ideas: Idea[]
│ └── examples: string[]
└── translations: { language: Translation }
└── summaries: TranslatedChapter[]
└── ideas: TranslatedIdea[]
Свиток (Scroll)
Корневой объект. Остальные объекты в схеме называются Chapter (глава), Idea (идея), Translation (перевод), TranslatedChapter и TranslatedIdea.
| Поле | Тип | Обязательно | Правила | Описание |
|---|
language | string | да | Код языка, например ru или pt-BR | Язык исходной версии. Подходит любой язык. Не меняется при замене свитка. |
title | string | нет | До 255 символов | Название свитка. Без него свиток называется "Untitled". |
authors | string[] | нет | Все имена вместе до 255 символов | Создатели источника по порядку: авторы, ведущие или докладчики. Можно указать и одну строку. Без имён показывается "Unknown". |
description | string | нет | До 600 символов | Два-три предложения о том, что узнает читатель. |
tags | string[] | нет | До 5, каждый от 1 до 30 символов, без # и запятых | Короткие темы на этом языке. Теги, которые различаются только регистром, диакритикой или шириной символов, считаются одним. Если поля нет, сохранённые теги остаются; пустой список их удаляет. |
sourceUrl | string | нет | Адрес http или https, до 2000 символов | Ссылка на оригинал. |
originalYear | integer | нет | От -3000 до текущего года, кроме 0 | Год выхода оригинала. Отрицательные годы - до н. э. |
originalPeriod | string | нет | До 80 символов | Когда вышел оригинал, если точный год неизвестен, например "V век до н. э.". |
summaries | Chapter[] | да | Хотя бы одна идея; всего до 500 идей | Главы в порядке чтения. |
translations | object | нет | Ключи - коды языков, кроме language | Полные версии на других языках. Каждое значение - Translation. |
Глава (Chapter)
| Поле | Тип | Обязательно | Правила | Описание |
|---|
title | string | нет | До 200 байт | Название главы. Без него глава станет "Chapter N". Ограничение считается в байтах, поэтому в кириллице и других нелатинских алфавитах помещается меньше символов. |
ideas | Idea[] | нет | | Идеи главы в порядке чтения. |
Идея (Idea)
| Поле | Тип | Обязательно | Правила | Описание |
|---|
text | string | да | До 400 символов | Сама идея: законченная мысль, понятная на отдельной карточке. Идея с пустым текстом пропускается. |
tier | string | нет | important, good или common | Насколько идея важна. Важные идеи выделяются на карточке. Если значения нет или оно другое, считается common. |
examples | string[] | нет | До 20, каждый до 400 символов | Видны при свайпе в сторону. Пустые и нетекстовые элементы отбрасываются. |
Перевод (Translation)
Каждая запись в translations - полная версия свитка на этом языке. В ней должны быть те же главы, идеи и примеры, что и в оригинале, в том же порядке и количестве.
| Поле | Тип | Обязательно | Правила | Описание |
|---|
title | string | да | Не пустое, до 255 символов | Название на этом языке. |
authors | string[] | да | Не пустое | Имена создателей так, как их пишут на этом языке. |
description | string | нет | Как в оригинале | Описание на этом языке. |
tags | string[] | нет | Как в оригинале | Теги для читателей на этом языке. Они не обязаны повторять теги оригинала. |
originalPeriod | string | нет | Как в оригинале | Период на этом языке; если его нет, показывается период оригинала. |
summaries | TranslatedChapter[] | да | Столько же, сколько в оригинале | Главы на этом языке. |
У TranslatedChapter есть непустой title и ideas - столько же идей, сколько в исходной главе. У TranslatedIdea есть непустой text и examples - столько же примеров, сколько у исходной идеи, и ни один не пустой. В переведённых идеях tier не указывают: он берётся из оригинала, а другое значение отклоняется.
Как импорт читает значения
- У текста обрезаются пробелы по краям, а длина считается в символах так, как вы их видите.
- Пустое необязательное поле считается отсутствующим.
- Поля, не описанные здесь, игнорируются.
- Читатель видит версию на своём языке, а если её нет, оригинал.
Пример
{
"language": "en",
"title": "Small steps",
"authors": ["Ada Example"],
"description": "How small, repeated actions shape what you notice and do.",
"tags": ["habits", "attention"],
"sourceUrl": "https://example.org/small-steps",
"originalYear": 1841,
"summaries": [
{
"title": "Starting small",
"ideas": [
{
"text": "Make the first step so small that you can take it on a bad day.",
"tier": "important",
"examples": ["Read one page every evening."]
},
{
"text": "You notice more of what you have decided to look for.",
"tier": "common",
"examples": []
}
]
}
],
"translations": {
"de": {
"title": "Kleine Schritte",
"authors": ["Ada Beispiel"],
"description": "Wie kleine, wiederholte Handlungen prägen, was wir bemerken und tun.",
"tags": ["gewohnheiten", "aufmerksamkeit"],
"summaries": [
{
"title": "Klein anfangen",
"ideas": [
{
"text": "Mach den ersten Schritt so klein, dass er dir auch an einem schlechten Tag gelingt.",
"examples": ["Lies jeden Abend eine Seite."]
},
{
"text": "Du bemerkst mehr von dem, wonach du zu suchen beschlossen hast.",
"examples": []
}
]
}
]
}
}
}
Ограничения
| Что | Ограничение |
|---|
| Идея или пример | 400 символов |
| Идей в свитке | 500 |
| Примеров на идею | 20 |
| Название, авторы | 255 символов |
| Название главы | 200 байт |
| Описание | 600 символов |
| Теги | 5 на язык, по 30 символов |
| Содержание одного языка | 1 МБ |
| Загружаемый файл | 8 МБ |
| Ваших свитков | 200 |
Частые ошибки импорта
- Файл - некорректный JSON. Попросите ассистента ответить "только корректным JSON" или найдите пропущенную запятую или кавычку. Удалите текст до и после JSON-объекта.
- Не указан язык. Добавьте
"language" с кодом, например ru. - Идея или пример слишком длинные. Сообщение называет язык, главу, идею и пример; сократите этот текст.
- Перевод не совпадает. В каждой версии должно быть одинаковое число глав, идей и примеров в том же порядке.
- Слишком много идей или слишком большой файл. Разделите источник на два свитка.
- У вас уже максимум свитков. Замените свиток, который больше не нужен; см. Изменение, замена и доступ.