Конфігурація TOML (.toml)
Специфікація СтандартTom's Obvious Minimal Language (TOML) - це однозначний, орієнтований на людину формат конфігурації, створений співзасновником GitHub Томом Престоном-Вернером, який широко використовується в сучасних екосистемах програмування, зокрема в Rust (Cargo) та Python (pyproject.toml).
Конвертувати з TOML у JSON
Безкоштовний конвертер з TOML у JSON у браузері. Миттєво конвертуйте файли на своєму пристрої.
Аналіз та метадані
Операційні системи та аналізатори файлів ідентифікують файли TOML, перевіряючи початкову послідовність бінарних байтів:
Сигнатура заголовка на байтовому рівні (Magic Bytes)
Операційні системи та аналізатори файлів ідентифікують файли TOML, перевіряючи початкову послідовність бінарних байтів:
ШІСТНАДЦЯТКОВА СИГНАТУРА (ЗСУВ 0):
5B ... 5DASCII-УЯВЛЕННЯ: [...]
Стандартизація: Специфікація 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.
Аналіз безпеки та векторів атак на парсери
Аналізатори 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.toml' у кожному проєкті на Rust визначає всі залежності пакета та прапорці компілятора у форматі TOML.
- На відміну від 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 переносить дані з перевантаженої дужками вебструктури у чистий, зручний для читання людиною формат, створений спеціально для налаштувань.