Skip to main content
CheckTown
Инструменты разработчика

Валидация TOML: синтаксические правила, ошибки и лучшие практики

Опубликовано 6 мин чтения
В этой статье

Что такое TOML?

TOML (Tom's Obvious, Minimal Language) — это формат конфигурационного файла, разработанный для удобного чтения и записи. Созданный Томом Престоном-Вернером (соучредителем GitHub), TOML явно отображается на хэш-таблицу и задуман как однозначный — каждый документ TOML имеет ровно одну корректную интерпретацию.

TOML является предпочтительным форматом конфигурации для Rust (Cargo.toml), Python (pyproject.toml) и многих генераторов статических сайтов. Он поддерживает комментарии, литералы даты и времени и вложенные таблицы, оставаясь проще YAML и удобнее для человека, чем JSON.

Правила синтаксиса TOML

Синтаксис TOML разработан минимальным и однозначным. Вот основные элементы языка.

  • Пары ключ/значение — основной строительный блок, записываемый как ключ = значение на каждой строке. Ключи могут быть голыми (без кавычек), в кавычках или с точками для вложенного доступа.
  • Таблицы — разделы, определяемые заголовками [table_name], которые группируют связанные пары ключ/значение. Таблицы можно вкладывать с помощью ключей с точками или синтаксиса [[array_of_tables]].
  • Массивы — упорядоченные списки, определяемые квадратными скобками [1, 2, 3]. Все элементы должны быть одного типа. Разрешены многострочные массивы с завершающими запятыми.
  • Литералы даты и времени — TOML нативно поддерживает даты RFC 3339, например 2026-03-15T14:30:00Z, локальные даты (2026-03-15), локальное время (14:30:00) и смещения даты-времени.
  • Многострочные строки — строки с тройными кавычками ("""текст""") сохраняют переносы строк и позволяют длинное содержимое без escape-последовательностей. Литеральные строки используют одинарные кавычки ('no\escape').

Распространённые шаблоны TOML

TOML широко используется в конфигурационных файлах проектов в различных экосистемах.

  • Cargo.toml — менеджер пакетов Rust использует TOML для метаданных проекта, зависимостей, профилей сборки и конфигурации рабочего пространства
  • pyproject.toml — современная конфигурация системы сборки Python, определённая в PEP 517/518, заменяет setup.py и setup.cfg стандартизированным файлом TOML
  • Конфигурация Hugo — генератор статических сайтов Hugo использует TOML (или YAML/JSON) для конфигурации сайта, включая темы, меню, таксономии и настройки сборки
  • Конфигурация Netlify — netlify.toml настраивает команды сборки, правила перенаправления, переменные среды и контексты развёртывания для сайтов Netlify

Попробуйте бесплатно — без регистрации

Валидировать TOML онлайн →

Распространённые ошибки валидации

TOML строг по своей природе — многие ошибки, которые YAML молча принял бы, приведут к сбою в TOML. Вот наиболее распространённые проблемы валидации.

  • Дублирующиеся ключи — TOML запрещает определять один и тот же ключ дважды в одной таблице. Это включает ключи, заданные через точечную нотацию и обычные заголовки таблиц.
  • Неверный формат даты — TOML требует даты RFC 3339. Распространённые ошибки: отсутствующий разделитель T (2026-03-15 14:30:00 вместо 2026-03-15T14:30:00) или использование косой черты вместо дефиса.
  • Смешанные типы массивов — все элементы в массиве TOML должны быть одного типа. [1, "два", 3] недопустимо, так как смешивает целые числа и строки.
  • Незакрытые строки — забытое закрытие строки в кавычках или использование неправильного типа кавычек вызывает ошибки парсинга. Следите за несовпадающими тройными кавычками в многострочных строках.

TOML против YAML против JSON

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

  • Читаемость — TOML и YAML оба хорошо читаются людьми. TOML использует явный синтаксис (скобки, знаки равенства), тогда как YAML опирается на отступы. JSON менее читаем для конфигурации из-за обязательных кавычек и отсутствия комментариев.
  • Строгость — TOML является наиболее строгим из трёх форматов. Он отвергает неоднозначные конструкции и не имеет неявного приведения типов. Гибкость YAML (yes/no как булевы значения, голые строки) часто вызывает неожиданное поведение.
  • Комментарии — и TOML, и YAML поддерживают комментарии (TOML использует #, YAML использует #). JSON вообще не поддерживает комментарии, что делает его менее подходящим для конфигурационных файлов, требующих документации.

Часто задаваемые вопросы

Как работают вложенные таблицы в TOML?

TOML поддерживает вложенные таблицы через два механизма: ключи с точками (a.b.c = значение) и заголовки таблиц ([parent.child]). Оба создают одинаковую вложенную структуру. Для массивов таблиц (например, нескольких зависимостей пакета) используйте двойные скобки ([[array_name]]). Каждый блок [[array_name]] добавляет новый элемент в массив.

В чём различия между TOML v1.0 и более ранними версиями?

TOML v1.0 (выпущен в январе 2021 года) — первый стабильный релиз. Ключевые изменения по сравнению с черновиками до 1.0 включают уточнённую обработку даты и времени, формализованную семантику встроенных таблиц и улучшенное поведение массивов таблиц. Большинство современных инструментов используют TOML v1.0 — если вы пишете новые конфигурационные файлы, ориентируйтесь на v1.0.

Как преобразовать YAML в TOML?

YAML и TOML имеют разные модели данных, поэтому преобразование не всегда однозначно. Простые структуры ключ-значение и вложенные объекты конвертируются напрямую. Возможности YAML, такие как якоря, псевдонимы и сложные ключи, не имеют эквивалентов в TOML. Для большинства конфигурационных файлов конвертация проста — отображайте словари YAML на таблицы TOML, а списки YAML — на массивы TOML.

Похожие инструменты