YAML (YAML Ain't Markup Language) - это формат сериализации [1] данных, который используется для представления структурированных данных в человекочитаемом формате. Считается, что в отличие от таких форматов, как JSON или XML, YAML - это более простая и интуитивно понятная структура. Также важно отметить, что YAML в отличие от многих других форматов не является языком разметки, а предназначен для предоставления данных в структурированном виде.
[1]: Cериализация - это процесс преобразования сложных структур данных в форму, пригодную для сохранения или передачи.
Одной из ключевых особенностей YAML является использование пробелов вместо специальных символов для формирования структур данных.
В YAML ключи и значения разделяются двоеточием, сами пары ключ-значение отделяются переносом строки. Списки представляются с использованием дефиса, а вложенные структуры данных создаются с помощью отступов.
Комментарии в YAML начинаются с символа решетки #
и могут использоваться для пояснения структуры данных или для временного исключения части информации.
Формат YAML в основном использует 3 типа узлов:
Maps/Dictionaries - называют отображениями (mappings) Содержимое узла отображения представляет собой неупорядоченный набор пар ключ/значение, с одним ограничением, что каждый из ключей является уникальным.
Arrays/Lists - называют последовательностями (sequences) Содержимое узла последовательности представляет собой упорядоченную серию узлов. Тут последовательность может содержать один и тот же узел более одного раза, и даже саму себя.
Literals - содержат данные типа строки, числа, булевы значения и т.д
Например, курсы программирования Code-basics используют описанные выше узлы для описания структуры урока следующим образом:
name: Название урока
theory: |
Здесь текст урока
instructions: описание практического задания
tips:
- cсылка 1
- ссылка 2
defintions:
- name: определение 1
description: описание определения 1
- name: определение 2
description: описание определения 2
Рассмотрим более подробно эту структуру и остановимся на каждом виде узла:
Для создания вложенной структуры используются пробелы, каждый следующий уровень содержит отступ на 2 пробела больше, чем предыдущий. Очень важно понимать, что tab
использовать нельзя, это должны быть именно пробелы.
defintions: # уровень вложенности 1
- name: определение 1 # уровень вложенности 2, 2 пробела в качестве
description: описание определения 1 # уровень вложенности 2, 2 пробела в качестве
Отображения используются, чтобы соединить пары ключ-значение.
name: Условная конструкция (if) # mapping
theory: Условные конструкции позволяют... # mapping
Последовательности формируются с использованием дефиса -
и пробела. Здесь важно помнить, что они упорядоченные и могут быть вложены с использованием отступов.
name: Название урока
theory: |
Здесь текст урока
instructions: описание практического задания
tips:
# последовательность
- cсылка 1
- ссылка 2
defintions:
# последовательность
- name: определение 1
description: описание определения 1
- name: определение 2
description: описание определения 2
В качестве литералов могут использоваться такие типы данных как строки, цифры, и булевы значения.
name: John Doe # string
age: 25 # number
isStudent: True # bolean
Обратите внимание, что строковые литералы не требуют наличия кавычек. Но они могут пригодиться в случае, если текст содержит какие-либо специальные символы, которые могут быть интерпретированы неверно. Например:
message1: Hexlet & partners # возникает ошибка, так как & является спец символом
message2: "Hexlet & partners" # здесь все в порядке, потому что есть кавычки
Если значением ключа является текстовый блок, например, из нескольких строк, то можно воспользоваться |
(pipe character), который сообщает, что следующий текст надо интерпретировать как блок строк:
message: |
это сообщение
состоит
из нескольких
строк
Благодаря своей простоте и гибкости YAML находит применение в различных областях разработки программного обеспечения и интеграции систем:
YAML - мощный и удобный инструмент для представления структурированных данных. Благодаря своей простоте и интуитивно понятном синтаксисе его можно легко читать и писать, что делает его подходящим для различных случаев использования.
В контексте IaC (Инфраструктура как код) YAML позволяет декларативно определять ресурсы инфраструктуры и их конфигурации, что упрощает управление инфраструктурой и автоматизирует развертывание.