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