YAML (YAML – Ain’t Markup Language, что можно перевести как "YAML – это не язык разметки"") считается языком сериализации по типу XML и JSON. Он представляет собой расширенную версию JSON, которая используется, в основном, для файлов конфигурации. Вы можете сохранить YAML-файл с расширением .yaml
или .yml
. Это удобочитаемый файловый формат, состоящий из пар «ключ-значение» и делающий акцент на отступы и отбивку строк. YAML активно используется в файлах конфигурации многих хорошо известных инструментов/технологий, по типу docker-compose, Kubernetes, Ansible и т.д.
Ниже приведено сравнение YAML с XML и JSON.
Теперь давайте обсудим синтаксис, типы данных и особенности YAML-файлов.
Пары «ключ-значение»
Пара «ключ-значение» – это базовая составляющая YAML. Каждый элемент в YAML-документе является членом как минимум одного словаря. Ключами чаще всего являются строки, а значением могут быть данные любого типа: число, логическое значение, строка, пустое значение, массив и объект.
name: John age: 25 city: LA
Числа
Числа – это одни из скаляров, которые могут использоваться в качестве значения YAML-файлов. Числа бывают десятичными, с плавающей запятой, экспоненциальными, восьмеричными и шестнадцатеричными. Если добавлять их без одинарных или двойных кавычек, то они обрабатываются как строки.
decimal : 10 float : 2.5 exponential : 5.0e+12 infinity : .inf octal : 0o12 hexadecimal : 0xF
Примечание: Будьте осторожны при представлении некоторых стандартных типов чисел (время, восьмеричные и шестнадцатеричные коды и т.д.). Они могут быть некорректно интерпретированы. Вот несколько примеров.
time : 6:00 hexval: 0x12 octval: 0o25
В этом примере время преобразуется в минуты, поэтому 6:00
интерпретируется как 360
. 0x12
обрабатывается как шестнадцатеричный код, поэтому оно переводится в десятеричное значение 18
, а 0o25
интерпретируется в десятеричное значение 21
. Так что если вы не собираетесь использовать их в таком виде, то добавляйте эти значения в кавычках.
Примечание: Начиная со спецификации YAML 1.2,0o
представляет восьмеричные значения. В более ранних версиях для этих целей использовался0
.
Логические значения
Логические значения похожи на другие языки программирования/представления с двумя состояниями: true
или false
. Логическими значениями в YAML-файлах считаются не только стандартные true/false, но также yes/no
и on/off
(исключение: если они добавлены в кавычках).
Примечание: Следите за тем, как вы используете значения yes/no и on/off. Если добавлять их не в одинарных кавычках, то они будут интерпретироваться как логические значения true/false.
Комментарии
Вы можете комментировать содержимое YAML-файла с помощью символа#
. Пример ниже:
# This a comment on the first. # And this a commented second line.
Строки
В YAML-файле вы можете прописывать строки без кавычек. Либо добавлять их в одинарные или двойные кавычки. Можно даже пользоваться всеми тремя способами.
Если в строке содержатся специальные символы, которые нужно экранировать с помощью , то добавлять такую строку нужно в двойных кавычках. Пример:
signature: "John Williams Sales Executive XYZ Company LA."
Но при использовании любого из специальных символов ниже:
:, {, }, [, ], ,, &, *, #, ?, |, -, <, >, =, !, %, @, `
не нужно ничего экранировать. Воспользуйтесь одинарными кавычками – с ними строка будет интерпретироваться как нужно.
Одиночная строка
Если вы хотите разбить одну строку на несколько строчек, но синтаксический анализатор должен будет интерпретировать их как одиночную строку, то сделайте следующее:
message: > this is a normal string which spans more than multiple lines but needs to be treated as a single line.
Начните код с символа >
, а затем впишите содержимое строки в виде блока с отступами. В конце проанализированного содержимого добавляется
. Если вам не нужен символ новой строки, то воспользуйтесь символом >-
.
Многострочное значение
При добавлении строки, которая разделяется на несколько строк и анализируется так же, как написана, воспользуйтесь схемой ниже.
message: | this is a multi-line string which spans across multiple lines and needs to be treated as a multi-line string.
|
добавляет в конце проанализированного содержимого символ перехода на новую строку. Если вы не хотите видеть в конце проанализированного содержимого символ
, то лучше воспользуйтесь |-
.
Нулевые значения
Вы можете представить нулевое значение с помощью ~
или null
. Такие значения добавляются без кавычек.
foo: ~ bar: null
Массивы
В YAML значения можно представить в форме массивов/списков. Пример массива данных:
teams: - name: Australia rank: 3 - name: New Zealand rank: 4 - name: England rank: 1 - name: India rank: 2
В примере выше представлен массив объектов с названием и рангом команды. Обязательно проверьте, что отбивка строк и отступы заданы единообразно. В противном случае, файл будет некорректным.
Каждый элемент массива обозначается через дефис -
. Все элементы должны находиться на одном уровне с одинаковыми отступами.
Если вместо объектов в массиве используются примитивные элементы, то их можно представить следующим образом:
teams: [ Australia, New Zealand, England, India ]
Объекты
Объекты в YAML представляются так:
student: name: John age: 22 city: NY college: NYU gpa: 3.5
Все атрибуты внутри объекта должны находиться на одном уровне и с одинаковым отступом. Именно это условие указывает на принадлежность к одному объекту и гарантирует корректность YAML-документа.
Заключение
В данной статье вы познакомились с базовыми концепциями при работе с YAML-файлами. Разобравшись в них, вы поймете, как правильно прописывать файлы для своих собственных инструментов и технологий.