Yaml что это
Перейти к содержимому

Yaml что это

  • автор:

YAML

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

Что такое YAML?

YAML – это язык, спроектированный для хранения информации в доступном для понимания человеком формате. Его название расшифровывается как «Ещё один язык разметки». Впрочем, позже это определение было изменено на «YAML не является языком разметки», чтобы четко отделить его от принадлежащих к этой категории языков.

Данный язык подобен XML и JSON, однако использует более утонченный синтаксис, сохраняя при этом аналогичные возможности. YAML обычно применяется для формирования конфигурационных файлов в рамках подхода «Инфраструктура как код» (IaC), а также для управления контейнерами в контексте DevOps.

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

Постоянно растущее количество компаний активно применяет методики DevOps и виртуализацию в своей деятельности. Именно по этой причине владение YAML становится неотъемлемой необходимостью для современного разработчика. Особенно ценно то, что интеграция языка существенно облегчается благодаря его совместимости с Python (включая использование библиотеки PyYAML), а также с популярными технологиями вроде Docker и Ansible.

Сравнение YAML, JSON и XML

YAML (.yml)

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

  • Обладает человекопонимаемым кодом;
  • Имеет минималистичный синтаксис;
  • Ориентирован на работу с данными;
  • Включает в себя структуру, напоминающую JSON (YAML находится в расширенной версии JSON);
  • Позволяет добавлять комментарии;
  • Поддерживает использование строк без кавычек;
  • Считается более «чистым» в сравнении с JSON;
  • Предоставляет дополнительные возможности, такие как расширяемые типы данных, относительные якоря и сохранение порядка ключей.

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

JSON

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

  • Требует больше усилий для чтения;
  • Синтаксис имеет жесткие и четкие требования;
  • Подобен встроенному стилю YAML (некоторые парсеры YAML могут интерпретировать JSON-файлы);
  • Отсутствует возможность добавления комментариев;
  • Строки должны быть обрамлены двойными кавычками.

Применение: JSON применяется в веб-разработке, представляя наилучший формат для сериализации и передачи данных через HTTP-соединение.

XML

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

  • Требует больше усилий для чтения;
  • Обладает более сложной структурой;
  • Выполняет функцию языка разметки, в то время как YAML используется для форматирования данных;
  • Предоставляет больший спектр возможностей, например, использование атрибутов тегов;
  • Обладает более жёсткой схемой документа.

Применение: XML идеально подходит для сложных проектов, требующих тщательного контроля над валидацией, схемой и пространством имен. XML имеет низкую читаемость, потребляет больше пропускной способности и требует больше места для хранения данных, но при этом предоставляет непревзойдённый уровень контроля.

Уникальные черты

Поддержка множественных документов

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

Документы разделяются тройным дефисом (-):

--- shop: shopOne shop: open (20) --- shop: shopTwo action: open (18) ---

Возможность добавления комментариев

YAML допускает вставку комментариев после символа #, аналогично тому, как это применяется в языке Python:

# Это однострочный комментарий фрукты: - название: яблоко цвет: красный количество: 10 # А это пример # многострочного комментария

Понятный синтаксис

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

Такой подход устраняет избыточное использование символов, которые характерны для JSON и XML (такие как кавычки, скобки и фигурные скобки). Как результат, файл становится намного более читаемым.

YAML:

Imaro: author: Charles R. Saunders language: English publication-year: 1981 pages: 224

JSON:

Явная и неявная типизация

В YAML реализована как явная, так и неявная типизация данных. Он предоставляет возможность как автоматически определить типы, так и явно указать их. Чтобы использовать конкретный тип данных, достаточно добавить !![тип] перед значением.

date: !!timestamp 2023-08-22 # Используется тег !!timestamp для явной типизации даты

Примеры неявной типизации:

person: name: John # Значение "John" может быть интерпретировано как строка age: 30 # Значение "30" может быть интерпретировано как целое число is_student: true # Значение "true" может быть интерпретировано как булево значение

Отсутствие встроенных исполняемых файлов

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

Для работы с исполняемыми файлами, вам потребуется интеграция YAML с другими языками, такими как Perl или Java.

Синтаксис YAML

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

Пары «ключ-значение»

Основная часть данных в файле yml представлена в форме пар «ключ-значение», где ключ представляет имя, а значение — соответствующие данные.

Скаляры и маппинг

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

В языке YAML поддерживаются стандартные типы: int и float, boolean, string и null.

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

# Примеры различных скалярных типов данных в YAML # Целое число (int) в десятичном формате age: 25 # Число с плавающей точкой (float) temperature: 25.5 # Булево значение (boolean) is_student: true # Строка (string) name: "John Doe" # Значение null address: null # Шестнадцатеричное число hex_value: 0xA1F # Восьмеричное число octal_value: 0754 # Экспоненциальное число scientific_notation: 1.23e+4 # Бесконечность positive_infinity: .inf # Минус бесконечность negative_infinity: -.inf # Не числовое значение (NaN) not_a_number: .nan

Строки

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

Важно отметить, что в YAML кавычки не требуются.

# Пример строки с использованием символа | для отдельной строки single_line_text: | Это строка, которая может содержать одно или несколько предложений. Она будет охватывать несколько строк, но форматирование сохранится. # Пример строки с использованием символа > для параграфа paragraph_text: > Это также строка, которая может включать одно или несколько предложений. Однако она будет обработана как один абзац, и переносы строк будут удалены. # Строки без использования кавычек unquoted_text: Пример строки без использования кавычек.

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

Последовательности — это структуры данных похожие на списки или массивы, которые хранят несколько значений под одним ключом. Они определяются с помощью отступов или [].

# Многострочная последовательность fruits_multiline: - apple - banana - orange

Однострочные последовательности выглядят более компактно, но их читаемость страдает:

# Однострочная последовательность fruits_oneline: [apple, banana, orange, grape, pineapple]

Словари

Словари представляют собой собрания пар «ключ-значение», которые группируются под одним ключом. Они позволяют структурировать данные по логическим категориям.

# Пример использования словаря для описания персоны person1: name: John Doe age: 30 is_student: false contact: email: john@example.com phone: "+1234567890" person2: name: Bob Smith age: 22 is_student: true contact: email: bob@example.com phone: "+9876543210"

Якоря (Anchors)

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

Принцип работы якорей довольно прост: вы определяете элемент данных с использованием якоря, и затем вы можете ссылаться на этот якорь в других частях документа. Это позволяет сохранить данные в одном месте и ссылаться на них по мере необходимости.

Пример использования якорей:

person: &details name: John Doe age: 30 city: Exampleville # Использование якоря для создания двух разных записей с одинаковыми данными employee1: 

Шаблоны (Templates)

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

Пример использования шаблонов:

# Шаблон для описания сервера server_template: &server name: Example Server cpu: 4 cores memory: 8 GB # Конфигурация для двух серверов на основе шаблона server1: 

Интеграция с Docker, Ansible и другими инструментами

Язык YAML активно используется для интеграции с различными инструментами автоматизации, развертывания и управления, такими как Docker, Ansible и многими другими. Эта интеграция обеспечивает более эффективное управление конфигурациями, развертыванием и автоматизацией задач.

Интеграция с Docker:

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

Пример определения сервиса в Docker Compose:

version: '3' services: web: image: nginx:latest ports: - "80:80" db: image: postgres:latest environment: POSTGRES_PASSWORD: example_password

Интеграция с Ansible:

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

Пример Ansible playbook:

- name: Установка и настройка веб-сервера hosts: webservers tasks: - name: Установка Nginx apt: name: nginx state: present

Расширенные формы последовательностей и маппинга

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

Формы последовательностей:

  1. Многострочные строки внутри последовательности:
fruits: - apple - | This is a long description for a banana. - orange

В данном примере, второй элемент «banana» представлен многострочной строкой, что позволяет включать более длинные и описательные данные.

  1. Вложенные последовательности:
menu: - dish: pasta ingredients: - tomatoes - cheese - dish: salad ingredients: - lettuce - cucumber

Формы маппинга:

  1. Блочный стиль маппинга:
person: name: John Doe age: 30 contact: email: john@example.com phone: "+1234567890"
  1. Вложенные маппинги:
company: name: Example Corp address: street: 123 Main St city: Exampleville Сложные ключи: "complex key": value: some value

Расширенные типы данных (timestamp, null и другие)

В языке YAML поддерживаются расширенные типы данных, помимо стандартных типов (строка, число, булево значение и т.д.). Эти расширенные типы данных позволяют более точно и компактно описывать разнообразные сущности.

Примеры расширенных типов данных в YAML:

  • Timestamp (Временные метки):
timestamp_example: 2023-08-22T15:30:00Z

Здесь timestamp_example представляет собой временную метку в формате ISO 8601.

  • Null (Пустое значение):
nullable_value: null

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

  • NaN (Not a Number):
nan_example: .nan

Значение .nan представляет «не число», что может использоваться для обозначения неопределенных числовых значений.

  • Infinity (Бесконечность):
infinity_example: .inf

Значение .inf представляет положительную бесконечность.

  • Отрицательная бесконечность:
negative_infinity_example: -.inf

Значение -.inf представляет отрицательную бесконечность.

YAML за 5 минут: синтаксис и основные возможности

YAML — это язык для сериализации данных, который используют DevOps и дата-сайентисты. Рассказываем про синтаксис YAML-файлов.

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

  • Что такое YAML?
  • YAML vs JSON vs XML
  • Характерные особенности YAML
  • Синтаксис YAML
  • Что ещё может YAML?

Что такое YAML?

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

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

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

Всё больше и больше компаний используют DevOps и виртуализацию, поэтому YAML — это must have для современного разработчика. Кроме того, YAML легко интегрировать, благодаря поддержке Python (используя PyYAML библиотеку, Docker или Ansible) и других популярных технологий.

YAML vs JSON vs XML

YAML (.yml)

  • понятный человеку код;
  • минималистичный синтаксис;
  • заточен под работу с данными;
  • встроенный стиль, похожий на JSON (YAML является его надмножеством);
  • поддерживает комментарии;
  • поддерживает строки без кавычек;
  • считается «чище», чем JSON;
  • дополнительные возможности (расширяемые типы данных, относительные якоря и маппинг типов с сохранением порядка ключей).

Применение: YAML лучше всего подходит для приложений с большим объемом данных, которые используют DevOps конвейеры или виртуальные машины. Кроме того, улучшение читаемости данных пригодится в командах, где разработчики часто с ними взаимодействуют.

JSON

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

Применение: JSON используется в веб-разработке — это лучший формат для сериализации и передачи данных через HTTP-соединение.

XML

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

Применение: XML идеален для сложных проектов, которым требуется тонкий контроль над валидацией, схемой и пространством имён. Язык обладает плохой читаемостью, требует большей пропускной способности и ёмкости хранилища, но обеспечивает беспрецедентный контроль.

Характерные особенности YAML

Поддержка мультидокументов

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

Документы разделяются тремя дефисами (—):

--- player: playerOne action: attack (miss) --- player: playerTwo action: attack (hit) --- 

Поддержка комментариев

YAML позволяет добавлять комментарии после символа #, как в Python:

key: #Это однострочный комментарий - value line 5 #Это #многострочный комментарий - value line 13 

Легко читаемый синтаксис

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

Это избавляет от лишних символов, которые есть в JSON и XML (кавычки, скобки, фигурные скобки).

В итоге читаемость файла значительно повышается.

YAML

#YAML Imaro: author: Charles R. Saunders language: English publication-year: 1981 pages: 224 

JSON

Явная и неявная типизация

YAML предлагает как автоопределение типов, так и возможность явно указать тип данных. Чтобы использовать конкретный тип, нужно написать !![тип] перед значением.

# Это значение преобразуется в int: is-an-int: !!int 14.10 # Превращает любое значение в строку: is-a-str: !!str 67.43 # Значение должно быть boolean: is-a-bool: !!bool yes 

Отсутствие исполняемых файлов

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

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

Синтаксис YAML

В языке есть несколько базовых концепций, которые позволяют обрабатывать большинство данных.

Пары ключ-значение

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

Скаляры и маппинг

Скаляр представляет собой одно значение, которому соответствует имя.

YAML поддерживает стандартные типы: int и float, boolean, string и null.

Они могут быть представлены в разных видах: шестнадцатеричном, восьмеричном или экспоненциальном. Также существуют специальные типы для математических сущностей, такие как: бесконечность, -бесконечность и NAN.

integer: 25 hex: 0x12d4 #равно 4820 octal: 023332 #равно 9946 float: 25.0 exponent: 12.3015e+05 #равно 1230150.0 boolean: Yes string: "25" infinity: .inf # преобразуется в бесконечность neginf: -.Inf #преобразуется в минус бесконечность not: .NAN #Not a Number null: ~ 

Строки

Строка — это коллекция символов, которая может содержать слово или предложение. Можно использовать либо |, для отдельных строк, либо >, для параграфов.

Кавычки в YAML не нужны.

str: Hello World data: | Это Отдельные Строки data: > Это один параграф текста 

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

Последовательности — это структуры данных похожие на списки или массивы, которые хранят несколько значений под одним ключом. Они определяются с помощью отступов или [].

shopping: - milk - eggs - juice 

Однострочные последовательности выглядят лаконичнее, но хуже читаются.

shopping: [milk, eggs, juice] 

Словари

Словари — это коллекции пар ключ-значение, которые хранятся под одним ключом. Они позволяют разделить данные на логические категории.

Employees: - dan: name: Dan D. Veloper job: Developer team: DevOps - dora: name: Dora D. Veloper job: Project Manager team: Web Subscriptions 

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

Что ещё может YAML?

  • Anchors (якоря)
  • Templates (шаблоны)
  • Взаимодействие с Docker, Ansible и т. д.
  • Расширенные последовательности и маппинг.
  • Расширенные типы данных (timestamp, null и т. д.)

Следите за новыми постами по любимым темам

Подпишитесь на интересующие вас теги, чтобы следить за новыми постами и быть в курсе событий.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *