logo

Формат YAML (YAML Ain’t Markup Language) — это удобочитаемый формат сериализации данных, который часто используется в приложениях для конфигурационных файлов, передачи данных между системами и хранения структурированных данных. Он был разработан для того, чтобы быть простым для чтения человеком и легко парситься компьютером. YAML поддерживает различные типы данных, включая массивы, хэши (ассоциативные массивы), строки и числа. Формат основывается на отступах для указания вложенности данных, что делает его особенно удобным для представления сложных структур. YAML часто используется в разработке программного обеспечения, особенно в проектах, где важна читаемость и легкость редактирования конфигураций и данных.

YAML, JSON и XML

YAML, JSON и XML – это популярные форматы для сериализации данных, и каждый из них имеет свои преимущества и недостатки в зависимости от контекста использования.

YAML (YAML Ain’t Markup Language)

Преимущества:

  • Читаемость: YAML максимально приближен к естественному языку, благодаря чему файлы легко читаются и редактируются человеком.
  • Синтаксис: использует отступы для обозначения вложенности, что упрощает визуальное восприятие структуры данных.
  • Гибкость: поддерживает сложные структуры данных, такие как списки, карты (словарь) и множества.
  • Комментарии: позволяет добавлять комментарии, что полезно для пояснения конфигураций.

Недостатки:

  • Чувствительность к пробелам: неправильные отступы могут привести к ошибкам.
  • Меньшая распространенность: меньше стандартных библиотек и инструментов для работы с YAML по сравнению с JSON и XML.
person:

  name: John Doe

  age: 30

  children:

    - name: Jane

      age: 10

    - name: Mark

      age: 5

JSON (JavaScript Object Notation)

Преимущества:

  • Популярность: широко используется в веб-разработке, особенно для обмена данными между клиентом и сервером.
  • Легкость парсинга: большинство языков программирования имеют встроенные библиотеки для работы с JSON.
  • Универсальность: поддерживает простую и легко читаемую структуру данных.

Недостатки:

  • Нет поддержки комментариев: в JSON нет возможности добавлять комментарии.
  • Менее читабельно для человека: структура данных может быть менее наглядной по сравнению с YAML.
{

  "person": {

    "name": "John Doe",

    "age": 30,

    "children": [

      {

        "name": "Jane",

        "age": 10

      },

      {

        "name": "Mark",

        "age": 5

      }

    ]

  }

}

XML (eXtensible Markup Language)

Преимущества:

  • Мощность и гибкость: может представлять очень сложные и разнообразные структуры данных.
  • Расширяемость: возможность создавать собственные теги и атрибуты.
  • Поддержка схем: XML позволяет использовать схемы для валидации структуры и содержания данных.

Недостатки:

  • Объемность: XML-файлы могут быть довольно объемными и трудночитаемыми из-за обилия тегов.
  • Сложность: более сложный синтаксис делает файлы труднее для ручного редактирования.
<person>

  <name>John Doe</name>

  <age>30</age>

  <children>

    <child>

      <name>Jane</name>

      <age>10</age>

    </child>

    <child>

      <name>Mark</name>

      <age>5</age>

    </child>

  </children>

</person>

Основные отличия и сравнение

Читаемость:

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

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

  • YAML: поддерживает комментарии.
  • JSON: не поддерживает комментарии.
  • XML: поддерживает комментарии.

Простота парсинга:

  • YAML: меньше стандартных библиотек, сложнее парсить из-за чувствительности к отступам.
  • JSON: легко парсится, много встроенных библиотек.
  • XML: более сложное парсирование, но поддержка схем и валидации.

Использование:

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

Выбор между YAML, JSON и XML зависит от конкретных требований проекта и предпочтений разработчиков.

Возможности YAML

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

  • Простота чтения и написания: YAML разработан с упором на человеко-читаемость и естественный язык. Он использует пробелы и отступы для обозначения вложенных структур, что делает файлы легко воспринимаемыми и редактируемыми.
  • Поддержка различных типов данных: формат поддерживает разнообразные типы данных, включая строки, числа, списки, ассоциативные массивы (маппинги), а также вложенные структуры данных. Это позволяет представлять сложные структуры и связи между данными.
  • Комментарии: YAML позволяет добавлять комментарии, которые помогают разработчикам объяснять или описывать части конфигураций или структур данных.
  • Возможность ссылок и якорей: формат поддерживает якоря и ссылки, что позволяет делать ссылки на другие части документа или повторно использовать части данных. Это особенно полезно для управления конфигурационными файлами или данных с общими элементами.
  • Интеграция с различными языками программирования: существуют библиотеки и инструменты для работы с YAML практически для всех популярных языков программирования, что обеспечивает легкость парсинга и создания YAML-структур из кода.
  • Поддержка многострочных строк: формат позволяет определять многострочные строки, что полезно для вставки больших блоков текста или данных без необходимости использовать много кавычек или экранирования спецсимволов.
  • Конфигурационные возможности: YAML часто используется для написания конфигурационных файлов в различных приложениях и системах, благодаря своей читабельности и гибкости.

Приведем пример YAML-документа:

# Пример YAML-документа

person:

  name: John Doe

  age: 30

  address:

    city: New York

    street: 123 Elm Street

  interests:

    - Programming

    - Hiking

    - Photography

Синтаксис YAML

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

  • Отступы и вложенность: YAML использует отступы пробелами для обозначения вложенных элементов. Это значит, что вложенные элементы должны начинаться с большего количества пробелов или символов табуляции, чем их родительские элементы. Например:
person:

  name: John Doe

  age: 30

  address:

    city: New York

    street: 123 Elm Street
  • Типы данных: YAML поддерживает различные типы данных, такие как строки, числа, списки и ассоциативные массивы (маппинги). Он автоматически определяет тип данных в зависимости от контекста.
name: John Doe         # строка

age: 30                # число

interests:             # список

  - Programming

  - Hiking

  - Photography
  • Ассоциативные массивы (маппинги): для создания ассоциативных массивов (ключ-значение) используется двоеточие : для разделения ключа и значения. Приведем пример:
person:

  name: John Doe

  age: 30

  address:

    city: New York

    street: 123 Elm Street
  • Многострочные строки: YAML позволяет определять многострочные строки с помощью символов | или > в конце строки. Это полезно для вставки больших блоков текста без необходимости использовать экранирование спецсимволов или много кавычек. Пример с символом | (с сохранением переносов строк):
description: |

  This is a long description

  that spans multiple lines

  in YAML format.
  • Комментарии: YAML поддерживает однострочные комментарии, которые начинаются с символа #. Это полезно для добавления пояснений или заметок в файлы конфигурации.
# Это комментарий

person:

  name: John Doe

  age: 30
  • Якоря и ссылки: YAML поддерживает якоря (&) и ссылки (*), которые позволяют повторно использовать части данных в рамках одного документа. Это особенно полезно для избегания дублирования информации.
defaults: &defaults

  name: John Doe

  age: 30

person1:

  <<: *defaults

  address:

    city: New York

    street: 123 Elm Street

person2:

  <<: *defaults

  address:

    city: Los Angeles

    street: 456 Oak Avenue

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

Якоря (anchors)

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

Определение якорей

Якорь в YAML определяется с использованием символа & перед именем якоря, за которым следует уникальное имя якоря. Например:

defaults: &person_defaults

  name: John Doe

  age: 30

В этом примере &person_defaults – это якорь, который ссылается на структуру данных с именем defaults.

Использование якорей

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

person1:

  <<: *person_defaults

  address:

    city: New York

    street: 123 Elm Street

Здесь <<: *person_defaults означает, что person1 наследует все ключи и значения, определенные в структуре данных, на которую ссылается якорь person_defaults.

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

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

Рассмотрим полный пример использования якорей в YAML-документе:

defaults: &person_defaults

  name: John Doe

  age: 30

person1:

  <<: *person_defaults

  address:

    city: New York

    street: 123 Elm Street

person2:

  <<: *person_defaults

  address:

    city: Los Angeles

    street: 456 Oak Avenue

Здесь defaults: &person_defaults определяет якорь person_defaults, который содержит общие данные для person1 и person2. С использованием <<: *person_defaults мы наследуем эти данные в структурах person1 и person2, а затем добавляем уникальные адреса для каждого человека.

Шаблоны (templates)

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

Использование шаблонов в YAML

Шаблоны в YAML часто реализуются с помощью якорей и ссылок (anchors and aliases), а также при помощи механизмов наследования или включения данных.

Использование якорей и ссылок

Простейший способ создания шаблонов в YAML – использование якорей и ссылок для повторного использования структур данных. Например:

# Определение шаблона с якорем

base_template: &base_template

  name: John Doe

  age: 30

# Использование шаблона с помощью ссылки

person1:

  <<: *base_template

  address:

    city: New York

    street: 123 Elm Street

person2:

  <<: *base_template

  address:

    city: Los Angeles

    street: 456 Oak Avenue

Здесь base_template содержит общие данные (имя и возраст), которые наследуются person1 и person2. Использование <<: *base_template позволяет включить все ключи и значения из base_template в структуру данных person1 и person2.

Использование переменных и подстановок

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

# Пример использования переменных

variables:

  default_name: John Doe

  default_age: 30

person1:

  name: ${default_name}

  age: ${default_age}

  address:

    city: New York

    street: 123 Elm Street

person2:

  name: ${default_name}

  age: ${default_age}

  address:

    city: Los Angeles

    street: 456 Oak Avenue

Здесь переменные default_name и default_age используются для определения общих значений имени и возраста, которые затем используются в person1 и person2.

Использование наследования и включения

Некоторые форматы YAML или инструменты поддерживают механизмы наследования или включения шаблонов.

# Пример использования наследования

base_template:

  name: John Doe

  age: 30

person1:

  <<: *base_template

  address:

    city: New York

    street: 123 Elm Street

person2:

  <<: *base_template

  address:

    city: Los Angeles

    street: 456 Oak Avenue

Здесь base_template определяет общие данные, которые наследуют person1 и person2.

Преимущества использования шаблонов в YAML

  • Повторное использование данных: шаблоны позволяют избежать дублирования информации, что улучшает читаемость и обслуживаемость YAML-документов.
  • Удобство в обновлении: если вам нужно изменить или обновить часть данных, вы можете сделать это только в одном месте (шаблоне), что автоматически применится к местам, где используется этот шаблон.
  • Чистота кода: использование шаблонов делает код YAML более чистым и структурированным, улучшая его читаемость и поддерживаемость.

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

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

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

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

  • Docker – это платформа для разработки, развертывания и выполнения приложений в контейнерах.
  • Docker Compose использует YAML для определения различных сервисов, их конфигураций, сетей и других параметров.
version: '3.8'

services:

  web:

    image: nginx:latest

    ports:

      - "8080:80"

    volumes:

      - ./html:/usr/share/nginx/html

  db:

    image: mysql:5.7

    environment:

      MYSQL_ROOT_PASSWORD: example

Этот файл определяет два сервиса: web (с использованием образа nginx) и db (с использованием образа MySQL), а также их конфигурации.

YAML также используется для определения стеков в Docker Swarm или манифестов в Kubernetes. Это позволяет описывать конфигурации подов, сервисов, сетей и других аспектов инфраструктуры в виде декларативных файлов.

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

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

- name: Install Apache

  hosts: webservers

  tasks:

    - name: Install Apache

      yum:

        name: httpd

        state: present

    - name: Start Apache

      service:

        name: httpd

        state: started

В этом примере плейбук описывает задачи по установке и запуску Apache на группе хостов webservers.

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

Другие инструменты

YAML широко используется и в других инструментах и системах, таких как:

  • CI/CD системы (например, GitLab CI/CD, Jenkins): YAML используется для описания пайплайнов сборки, тестирования и развертывания приложений.
  • Тестирование и сборка (например, Travis CI): формат используется для настройки и описания сценариев тестирования и сборки проектов.
  • Настройка и интеграция с облачными сервисами (например, AWS CloudFormation): YAML используется для описания инфраструктуры как кода (Infrastructure as Code, IaC) для развертывания и управления облачными ресурсами.

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

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

Расширенные формы для последовательностей (списков)

В стандартном YAML можно представлять последовательности элементов, разделенных переносами строк. В расширенных формах можно представить элементы списка с использованием разделения на несколько строк, а не только с одним элементом на строку.

Например:

items:

  - This is a single-line item

  - This is a multi-line item,

    which spans across multiple lines in the YAML document.

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

items:

  1: First item

  2: Second item

  3: Third item

Расширенные формы для маппингов (ассоциативных массивов)

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

Например:

person: {name: John Doe, age: 30, city: New York}

Поддержка многострочных маппингов

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

person:

  name: John Doe

  age: 30

  address:

    city: New York

    street: |

      123 Elm Street

      Apt 2B

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

'key with spaces': value

'special_key!': another_value

Преимущества расширенных форм YAML

  • Гибкость и читаемость: расширенные формы YAML делают код более гибким и читаемым за счет поддержки многострочных элементов и маппингов.
  • Компактность: краткие формы записи для маппингов позволяют сократить количество лишних символов и сделать код более компактным.
  • Явная нумерация: возможность явно указать порядок элементов в последовательности улучшает понимание и поддержку кода.

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

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

Расширенные типы данных в YAML предоставляют дополнительные возможности для представления различных типов информации, таких как временные метки (timestamp), специальные значения (например, null) и другие.

Timestamp (временные метки)

YAML поддерживает представление временных меток в формате ISO 8601. Это позволяет явно указывать дату и время в YAML-документах. Временные метки могут быть представлены в нескольких форматах:

timestamp: 2024-06-17T14:30:00Z  # UTC временная метка

Поддержка локального времени:

timestamp_local: 2024-06-17T14:30:00-04:00  # Локальное время с учетом часового пояса (в данном случае, UTC-4)

Null (пустое значение)

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

null_value: null

Логические значения (true и false)

YAML поддерживает стандартные логические значения true и false для представления булевых данных.

is_active: true

is_enabled: false

Бинарные данные (Base64)

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

binary_data: !!binary |

  R0lGODdhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7

Пользовательские типы данных

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

custom_type: !<tag:example.com,2024:custom_type>

  property1: value1

  property2: value2

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

Заключение

YAML (YAML Ain’t Markup Language) является удобным и читаемым форматом для представления данных. Он используется для конфигурационных файлов, передачи данных между приложениями и других ситуаций, где важна простота взаимодействия между человеком и компьютером.

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

# Пример YAML файла

name: John Doe

age: 30

employed: true

skills:

  - Python

  - JavaScript

  - YAML

education:

  degree: Masters

  university: Example University

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

  • Простота и читаемость: YAML использует отступы для организации данных в иерархическую структуру, что делает его легко читаемым людьми.
  • Типы данных: формат поддерживает различные типы данных, такие как строки (можно использовать как кавычки, так и без), числа (целые и с плавающей точкой), логические значения (true/false), null и списки значений.
  • Комментарии: YAML позволяет вставлять комментарии с использованием символа #, что улучшает документацию и понимание данных.
  • Ссылка на другие документы: YAML позволяет ссылаться на другие YAML документы, что полезно для организации больших объемов данных.

Где использовать YAML?

YAML активно используется в различных областях, включая:

  • Конфигурационные файлы: например, в проектах на GitHub или в Ansible для определения задач и настроек.
  • Передача данных между приложениями: YAML может быть использован для передачи структурированных данных между различными языками программирования.
  • Документация: использование YAML для описания структуры данных делает документацию более понятной и доступной.

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

В нашем блоге вы можете прочитать и другие интересные статьи: например, о том, что такое HTML, SQL, Bash и т. д.

Читайте также:

Кадровое 
IT агентство
Персональные подборки IT-вакансий

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

BG

Преимущества работы с SELECT-DEV.RU

Icon
Icon

Проверенные кандидаты

Мы пополняем базу только проверенными кандидатами

alarm-outline (1)
alarm-outline (1)

Экономия времени

SELECT-DEV.RU покажет только подходящих кандидатов сразу и сэкономит ваше время!

Icon3
Icon (1)

Персональный менеджер

На протяжении всего периода сотрудничества

Давайте обсудим ваши задачи
и приступим к поиску кандидатов

Оттетьте на несколько вопросов для лучшего результата!