# Формат данных v1

Корневая директория содержит произвольное число наборов:

```text
datasets/
  archive-en/
    manifest.json
    documents/
      entry-001.json
```

`manifest.json`:

```json
{
  "schema_version": 1,
  "id": "archive-en",
  "title": "Example archive",
  "description": "A text collection",
  "language": "en",
  "license": "CC-BY-SA-3.0",
  "license_url": "https://creativecommons.org/licenses/by-sa/3.0/",
  "source_url": "https://example.org/"
}
```

`documents/entry-001.json`:

```json
{
  "id": "entry-001",
  "title": "An example record",
  "language": "en",
  "aliases": ["001"],
  "tags": ["archive"],
  "sections": [{"heading": "Description", "text": "Example text."}],
  "links": ["entry-002"],
  "source": {
    "url": "https://example.org/entry-001",
    "license": "CC-BY-SA-3.0",
    "license_url": "https://creativecommons.org/licenses/by-sa/3.0/",
    "credits": [{"name": "Example Author", "role": "author"}],
    "revision": "source-version-if-known",
    "changes": "Converted to plain text.",
    "notices": ["Original attribution and other required notices."]
  }
}
```

ID: 1–160 символов, первый — латинская буква или цифра, остальные — буквы,
цифры, `.`, `_`, `:`, `-`. Название директории набора и имя JSON совпадают с ID.
Языки первой версии: `en`, `ru`; язык документа совпадает с языком набора.
Текст, название и источники обязательны; неизвестные поля и дубликаты ID
отклоняются. Максимальный размер одного JSON — 16 MiB.

Связи направленные, внутри одного набора. Порядок ссылок сохраняется.
Несуществующие цели, повторы и ссылка на себя исключаются при выдаче списка
связей. Это позволяет использовать неполные снимки. Связи не достраиваются
семантическими догадками или вымышленными данными.

Поле `links` существует только в JSON-хранилище. HTTP-ответ полного документа
его не содержит: граф выдаётся отдельно через `/documents/{id}/links`.
Обычные упоминания других документов в тексте сохраняются. Коллекции с
пустыми links допустимы.

JSON — источник истины в отдельном Git-репозитории. Бинарный индекс и кэш HTTP
в Git не сохраняются. В digest входят manifest и все документы в стабильном
порядке после декодирования/нормализации; пробелы JSON на digest не влияют.

Сервер проверяет структуру и обязательную атрибуцию. Он не устанавливает
юридическую достоверность лицензии — ответственность за происхождение и
разрешённость данных лежит на подготовившем набор импортёре.
