Конфігурація TOML (.toml)
Специфікація СтандартTom's Obvious Minimal Language (TOML): це однозначний формат конфігурації, орієнтований на людину. Його створив співзасновник GitHub Том Престон-Вернер; формат широко використовують у сучасних екосистемах програмування, зокрема в Rust (Cargo) та Python (pyproject.toml).
Конвертувати з TOML у JSON
Безкоштовний конвертер з TOML у JSON у браузері. Миттєво конвертуйте файли на своєму пристрої.
Аналіз та метадані
Операційні системи та аналізатори файлів ідентифікують файли TOML, перевіряючи початкову послідовність бінарних байтів:
Сигнатура заголовка на байтовому рівні (Magic Bytes)
Операційні системи та аналізатори файлів ідентифікують файли TOML, перевіряючи початкову послідовність бінарних байтів:
ШІСТНАДЦЯТКОВА СИГНАТУРА (ЗСУВ 0):
5B ... 5DПОДАННЯ В ASCII: [...]
Стандартизація: Специфікація TOML v1.0.0
Технічні характеристики
| Архітектура контейнера | Зрозумілий для людини файл конфігурації, який однозначно зіставляється з хеш-таблицею, структурованою за допомогою [tables] та пар ключ = значення |
| Стиснення | Нестиснений текстовий потік |
| Порядок байтів (Endianness) | Текстовий потік UTF-8 |
| Колірні простори | Не застосовується (Файл конфігурації) |
| Канали та структура | Таблиці, масиви таблиць, вбудовані таблиці, рядки, цілі числа, числа з плаваючою комою, логічні значення та дати й час за стандартом RFC 3339 |
| Максимальні розміри | Необмежена довжина тексту |
| Прозорість | Відсутня |
| Потокове та прогресивне завантаження | Послідовний розбір конфігурації рядок за рядком |
Технічна матриця порівняння: TOML проти конкурентів
| Технічний атрибут | TOML (Поточний) | YAML | JSON | INI |
|---|---|---|---|---|
| Ризик неоднозначності | Нульовий (суворо однозначна специфікація) | Високий (помилки булевих значень через «проблему Норвегії» у YAML) | Нульовий (суворі типи даних) | Помірний (немає офіційного стандарту) |
| Вбудовані типи дати й часу | Вбудована підтримка дати й часу за RFC 3339 | Неявний розбір рядків / дат | Відсутні (тільки рядки) | Відсутні (тільки рядки) |
| Підтримка коментарів | Вбудована підтримка коментарів (через #) | Вбудована підтримка коментарів (через #) | Коментарі заборонені | Вбудована підтримка коментарів (через ; та #) |
| Основна екосистема | Rust (Cargo), Python (PEP 518), Go | Kubernetes, Ansible, CI/CD конвеєри | Веб-API, зв'язок із браузером | Застарілі системи Windows, конфігурація Git |
Типові режими пошкодження та посібник з відновлення в шістнадцятковому форматі
Помилка синтаксичного аналізатора: 'Duplicate key in table' або 'Invalid table header'.
Першопричина: Спроба перевизначити наявний ключ або простір імен таблиці в документі.
Відновлення: Перевірте та відформатуйте синтаксис TOML за допомогою форматувальника TOML у File2File.app.
Аналіз безпеки та векторів атак на парсери
Аналізатори TOML повинні захищатися від забруднення прототипу (prototype pollution) та вичерпання ЦП через патологічну вкладеність масивів таблиць.
Відомі вектори атак
- Забруднення прототипу в аналізаторах TOML на JavaScript шляхом ін'єкції властивостей у Object.prototype.
- Відмова в обслуговуванні через глибоко вкладені оголошення масивів таблиць.
- Необмежене виділення пам'яті під час розбору великих вбудованих масивів.
Рекомендації щодо захисту: Перевіряйте обмеження глибини вкладеності таблиць і використовуйте об’єкти-словники, захищені від забруднення прототипу.
Історичне походження та віхи
Основні переваги
- Повністю однозначний: чітко й передбачувано відображається в хеш-таблицю без несподіваного перетворення типів.
- Повноцінна вбудована підтримка дати й часу (мітки часу RFC 3339, дати, час) без екранування рядків.
- Прийнятий як офіційний стандартний формат конфігурації для сучасних інструментів розробки мов програмування (Rust Cargo.toml, Python pyproject.toml).
Технічні обмеження та недоліки
- Глибоко вкладені багаторівневі дерева об'єктів можуть бути занадто багатослівними порівняно з YAML.
- Синтаксис для масивів таблиць ([[table.array]]) може бути неінтуїтивним для початківців.
- Менш компактний, ніж JSON, для високопродуктивного обміну даними через API між машинами.
Цікаві технічні факти
- TOML був створений Томом Престоном-Вернером, який також є співзасновником GitHub і автором Gravatar та SemVer (семантичного версіонування).
- Пакети Cargo використовують Cargo.toml для опису метаданих, залежностей і цілей; проєкти Rust з іншими системами збирання можуть використовувати інші файли.
- На відміну від JSON, TOML нативно підтримує коментарі (з використанням символу '#') та багаторядкові рядки.
Поширені технічні запитання
Для чого використовується TOML?
TOML використовується для конфігурації програмного забезпечення, зокрема в Cargo.toml для Rust, pyproject.toml для Python, конфігураціях Go та Hugo та інструментах для контейнерів.
Чому TOML кращий за YAML для конфігурації?
TOML дозволяє уникнути відомих граничних помилок розбору в YAML (таких як перетворення не взятого в лапки 'NO' на логічне значення false), залишаючись при цьому зручним для читання людиною завдяки коментарям і чітким таблицям.
Як я можу конвертувати TOML у JSON або YAML?
Ви можете миттєво конвертувати файли TOML у JSON або YAML за допомогою File2File.app безпосередньо у своєму веббраузері.
Пов'язані пари конвертації TOML
Конвертація файлів конфігурації TOML у формат JSON перетворює зручні для людини налаштування властивостей на суворий об'єкт даних, який веб-додатки можуть миттєво розібрати.
Перетворення файлів конфігурації JSON у формат TOML спрощує редагування людиною, зберігаючи всі ієрархії структурованих пар ключ-значення.