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

Рекурсивная аббревиатура YAML расшифровывается как Ямал — это не язык разметки, что означает его гибкость и ориентированность на данные. По сути, его можно интегрировать практически в любой сервис, связанный с хранением или передачей данных. Адаптивность YAML отчасти связана с тем, что он представляет собой мешанину из нескольких языков. Некоторые из параллелей включают следующее:

  • Скаляры, списки и ассоциативные массивы основаны на Perl.
  • Разделитель документов «—-» основан на MIME.
  • Escape-последовательности основаны на C.
  • Обтекание пробелами основано на HTML.

Особенности YAML

Сопротивление столкновению разделителя

YAML использует отступы для структуры, что делает его устойчивым к коллизиям разделителей. В некоторых языках требуются escape-символы или последовательности, кавычки с заполнением и другие обходные пути для обработки специальных символов. YAML естественно нечувствителен к кавычкам и фигурным скобкам, что упрощает определение специальных символов, особенно в строках.

Безопасность

Сам по себе YAML не имеет исполняемых команд. Это просто язык представления данных. Однако его интеграция с другими языками позволяет анализаторам Perl, например, выполнять код Perl. PyYAML, синтаксический анализатор и эмиттер для Python, включает документацию, специально предупреждающую об этой уязвимости безопасности, и имеет встроенную функцию для защиты от опасных объектов Python, известную как YAML.safe_load.

Как работает YAML

Полную документацию по YAML можно найти на его официальном сайте. Однако вот несколько основных идей, которые помогут вам начать работу с YAML.

Базовый синтаксис

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

  • Отступ используется для обозначения структуры. Вкладки не допускаются, и количество пробелов не имеет значения, если дочерний узел имеет больший отступ, чем родительский.
  • Допустимы кодировки UTF-8, UTF-16 и UTF-32.

Струны

Приведенный выше код будет переведен в JSON как:

Числа

логический

Нулевые значения

Даты и временные метки

Можно использовать даты в формате ISO, например:

Последовательности

Последовательности позволяют нам определять списки в YAML:

Обе приведенные выше последовательности будут преобразованы в JSON как:

Вложенные значения

Мы можем использовать все вышеперечисленные типы для создания объекта с вложенными значениями, например:

Что будет переведено в JSON как:

Список объектов

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

Отличительные черты

Ниже приведены некоторые более сложные функции, которые привлекли мое внимание и которые также отличают YAML от JSON.

Комментарии

Как вы, наверное, уже заметили в моих предыдущих примерах, YAML разрешает комментарии, начинающиеся с "#".

# Это действительно полезный комментарий.

Возможность повторного использования с привязками к узлам

Якоря узла отмечают узел для дальнейшего использования, что позволяет нам повторно использовать узел. Чтобы пометить узел, мы используем символ &, а чтобы сослаться на него, мы используем *:

В следующем примере мы определим список книг и повторно используем данные автора, поэтому нам нужно определить его только один раз:

Приведенный выше код будет выглядеть так после парсинга в JSON:

Явные типы данных с тегами

Как мы видели в предыдущих примерах, YAML автоматически определяет тип наших значений, но можно указать, какой тип нам нужен.
Мы указываем тип с помощью включая его перед значением, которому предшествует «!!».

Вот некоторые примеры:

Это будет переведено в JSON как:

Читать и писать о YAML, а также экспериментировать с ним было очень интересно.

Если вам нужно больше о YAML, вот мой репозиторий GitHub Yaml, вы можете обратиться к нему.

Подпишитесь на меня на GitHub: MadhushaPrasad