Що таке файл YAML?
Файл YAML складається з мови YAML (YAML не є мовою розмітки), яка є мовою серіалізації даних на основі Unicode; використовується для конфігураційних файлів, інтернет-повідомлень, збереження об’єктів тощо. YAML використовує розширення .yaml для своїх файлів. Його синтаксис не залежить від конкретної мови програмування. В основному, YAML розроблений для взаємодії з людьми та для того, щоб добре працювати з сучасними мовами програмування. Підтримка серіалізації довільних власних структур даних підвищила читабельність файлів YAML, але трохи ускладнила процес аналізу та створення файлів.
Коротка історія
YAML був вперше запропонований у 2001 році та розроблений Кларком Евансом, Інгі дот Нет та Ореном Бен-Кікі. Спочатку було сказано, що YAML означає «Ще одна мова розмітки», щоб вказати на її призначення як мови розмітки. Пізніше її було перепрофільовано як «YAML Aint Markup Language», щоб вказати її призначення як орієнтовану на дані.
Формат файлу YAML
Файл YAML складається з таких типів даних
- Скаляри: скаляри – це такі значення, як рядки, цілі числа, логічні значення тощо.
- Послідовності: послідовності – це списки, кожен елемент яких починається з дефіса (-). Списки також можуть бути вкладеними.
- Зіставлення: зіставлення дає можливість перераховувати ключі зі значеннями.
Синтаксис
- Пробіл: відступ пробілу використовується для позначення вкладеності та загальної структури.
Ім'я: Джон Сміт
контакт:
домашній: 1012355532
офіс: 5002586256
адреса:
вулиця: |
123 Торнадо алея
Люкс 16
місто: East Centerville
штат: КС
- Коментарі: коментарі починаються з символу “#”.
# Це коментар YAML
- Списки: дефіс (-) використовується для позначення членів списку з кожним членом в окремому рядку. Члени списку також можуть бути взяті в квадратні дужки ([…]), розділені комами (,).
- A
- B
- C
[A, B, C]
- Асоціативний масив: асоціативний масив оточений фігурними дужками ({…}). Ключі та значення відокремлюються двокрапкою (:), а кожна пара розділяється комою (,).
{name: John Smith, age: 20}
- Рядки: рядок можна записати з подвійними лапками (") або одинарними лапками (’) або без них.
Зразок рядка
"Зразок рядка"
"Зразок рядка"
- Scalar Block content: скалярний вміст можна записати в блочній нотації за допомогою наступного:
- |: All live breaks are significant.
- >: Each line break is folded to space. It removes the leading whitespace for each line.
дані: |
YAML
(YAML не є мовою розмітки)
це мова серіалізації даних
дані: ?
YAML (YAML не є мовою розмітки)
це мова серіалізації даних
- Кілька документів: кілька документів розділені трьома дефісами (—) в одному потоці. Дефіс позначає початок документа. Дефіси також використовуються для відділення директив від вмісту документа. Кінець документа позначається трьома крапками (…).
---
Документ 1
---
Документ 2
...
- Тип: для визначення типу значення використовуються подвійні знаки оклику (!!).
a: !!float 123
b: !!стор 123
- Тег: щоб призначити тег нотатці, використовується амперсанд (&), а для посилання на цей вузол використовується зірочка (*).
Ім'я: Джон Сміт
одержувач рахунку: &id01
вулиця: |
123 Торнадо алея
Люкс 16
місто: East Centerville
штат: КС
адресат доставки: *id01
- Директиви: документам YAML можуть передувати директиви в потоці. Директиви починаються зі знака відсотка (%), за яким іде назва, а потім параметри, розділені пробілами.
%YAML 1.2
---
Зміст документа
Приклад файлу YAML
Тут ви можете побачити приклад файлу Docker yaml нижче:
topology:
database_node_name: docker_controller
docker_controller_node_name: docker_controller
self_service_portal_node_name: docker_controller
kvm_compute_node_names: kvm_compute1
docker_compute_node_names: docker_compute1
YAML проти JSON
По суті, як JSON, так і YAML розроблено для забезпечення зручного для читання формату обміну даними. YAML реалізовано як надмножину формату JSON. Це означає, що ми можемо аналізувати JSON за допомогою парсера YAML. Хоча практична реалізація цієї теорії трохи складна. Таким чином, деякі основні відмінності між YAML і JSON наведені нижче:
YAML | JSON |
---|---|
Складний і трудомісткий процес синтаксичного аналізу серіалізованих даних | Швидко та легко аналізуйте серіалізовані дані JSON завдяки простішому дизайну |
Менша підтримка громади | Більша підтримка спільноти та популярність |
Підтримує коментарі | Не підтримує коментарі |
Можливість використовувати посилання на інші об’єкти даних | Неможливо серіалізувати складні структури з посиланнями на об’єкти |
Ієрархія позначається за допомогою подвійних пробілів. Символи табуляції не допускаються | Об’єкти та масиви позначаються у дужках і дужках. |
Лапатки рядків необов’язкові, але підтримуються одинарні та подвійні лапки. | Рядки мають бути в подвійних лапках. |
Кореневий вузол може бути будь-яким із допустимих типів даних | Кореневий вузол має бути або масивом, або об’єктом. |