Открыть сервис

YAML

YAML (рекурсивный акроним от YAML Ain’t Markup Language, «YAML — не язык разметки») — это формат сериализации данных, предназначенный для представления структурированной информации в виде, удобном для чтения человеком. YAML часто используется для написания конфигурационных файлов, в системах непрерывной интеграции и развёртывания (CI/CD), в инструментах оркестрации (например, Ansible, Kubernetes, Docker Compose), а также для обмена данными между компонентами программного обеспечения. Ключевыми характеристиками YAML являются минималистичный синтаксис, основанный на отступах (пробелах), и поддержка сложных структур данных, таких как списки, словари и скалярные типы.

История

YAML был впервые предложен в 2001 году как упрощённая альтернатива XML для задач конфигурации и обмена данными. Первоначальная спецификация (YAML 1.0) была разработана Кларком Эвансом, Инго Мёллером-Нильссоном и Брайаном Ингерсоном. Название изначально расшифровывалось как Yet Another Markup Language («Ещё один язык разметки»), но позже, чтобы подчеркнуть отличие от языков разметки (таких как HTML или XML), было изменено на рекурсивный вариант YAML Ain’t Markup Language.

В 2004 году вышла версия YAML 1.1, которая стала наиболее распространённой и поддерживаемой большинством реализаций. В 2009 году была опубликована версия YAML 1.2, которая устранила некоторые неоднозначности и несовместимости предыдущей версии, в частности, стандартизировала представление чисел и типов данных. Несмотря на это, многие популярные инструменты (например, Ansible и Docker Compose) до сих пор используют синтаксис, основанный на YAML 1.1.

Структура и синтаксис

Основной принцип YAML — использование отступов (пробелов, но не табуляций) для обозначения вложенности. Количество пробелов должно быть одинаковым для элементов одного уровня. Синтаксис YAML включает три основных типа узлов: скаляры, последовательности (списки) и отображения (словари).

Скаляры

Скаляры представляют собой простые значения: строки, числа, логические значения (true/false), даты и null. Строки могут быть записаны без кавычек (если не содержат специальных символов), в одинарных или двойных кавычках. Для многострочных строк используются блоковые литералы (|) и складные блоки (>).

``yaml строка: Пример текста число: 42 логическое: true дата: 2023-10-01 пусто: null ``

Последовательности (списки)

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

```yaml список:

```

Отображения (словари)

Отображения представляют собой пары «ключ: значение», разделённые двоеточием и пробелом. Ключи могут быть строками (часто без кавычек) или другими скалярами.

``yaml словарь: имя: Иван возраст: 30 город: Москва ``

Вложенные структуры

YAML позволяет создавать произвольно глубокие вложенные структуры, комбинируя списки и словари.

```yaml человек: имя: Анна навыки:

адрес: улица: Ленина дом: 10 ```

Якоря и алиасы

YAML поддерживает механизм якорей (&) и алиасов (*), который позволяет повторно использовать одни и те же данные в разных частях документа. Это особенно полезно для уменьшения дублирования в больших конфигурационных файлах.

```yaml общие_настройки: &defaults лог_уровень: info порт: 8080

сервер1: <<: *defaults хост: example.com ```

Типы данных

YAML 1.2 поддерживает следующие встроенные типы данных:

Применение

YAML получил широкое распространение в различных областях разработки программного обеспечения и системного администрирования.

Конфигурационные файлы

YAML является основным форматом конфигурации для многих инструментов:

Обмен данными

Хотя YAML реже используется для передачи данных по сети (где доминирует JSON), он применяется во внутренних системах, где важна читаемость, например, в файлах локализации, описаниях тестовых сценариев или метаданных.

Документация

Некоторые системы документирования, такие как MkDocs и Jekyll, используют YAML для задания метаданных (front matter) в начале Markdown-файлов.

Преимущества и недостатки

Преимущества

Недостатки

Критика и ограничения

Основная критика YAML связана с его неоднозначностью и сложностью спецификации. Например, в YAML 1.1 строка "yes" интерпретируется как логическое true, а "no" — как false, что может вызывать ошибки. В YAML 1.2 это поведение было изменено, но не все реализации обновились. Также критикуется использование отступов как единственного способа обозначения вложенности: при редактировании файла в разных редакторах (с разными настройками табуляции) структура может быть нарушена.

Другим ограничением является отсутствие стандартного способа комментирования внутри структур (комментарии возможны только на уровне строк). Кроме того, YAML не поддерживает ссылки на внешние файлы или импорт по умолчанию, хотя некоторые инструменты (например, Ansible) добавляют эту функциональность расширениями.

Сравнение с альтернативами

ХарактеристикаYAMLJSONXMLTOML
ЧитаемостьВысокаяСредняяНизкаяВысокая
Размер файлаМалыйСреднийБольшойМалый
Поддержка комментариевДаНетДаДа
Чувствительность к отступамДаНетНетНет
Поддержка сложных типовДа (даты, якоря)ОграниченнаяДа (схемы)Ограниченная
Скорость парсингаСредняяВысокаяНизкаяВысокая

Интересные факты

Источники

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →