YAML
YAML — зручний для читання людиною формат серіалізаціі даних, концептуально близький до мов розмітки, але орієнтований на зручність введення-виведення типових структур даних багатьох мов програмування. YAML в основному використовується як формат для файлів конфігурації.
- файли YAML мають розширення
.yaml
або.yml
- YAML є чутливим до регістру.
- YAML не дозволяє використовувати табуляцію, натомість використовуються пробіли.
Коментарі починаються з октоторпа (його також називають “хеш”, “гострий”, “фунт” або “знак числа” - #
).
Означення початку та кінця документа необов’язково. Початок документа позначається ‘---
’ , що розміщується з самого зверху, а кінець - ‘...
’.
Базові типи даних
YAML має базові типи відображення (mappings) (хеші/словники), послідовності (sequences) (масиви / списки) та скаляри (рядки/числа). Хоча його можна використовувати з більшістю мов програмування, він найкраще працює з мовами, побудованими навколо цих типів структури даних. Сюди входять: PHP, Python, Perl, JavaScript та Ruby.
Скаляри (Scalars)
Скаляри часто називають змінними в програмуванні. Скаляри представляють собою рядки та числа, які складають дані на сторінці. Скаляр може бути:
- булевою властивістю, наприклад
Так
, - цілим (числом), наприклад
5
, - або рядком тексту, наприклад речення чи назва веб-сайту.
Більшість скалярів не беруться в лапки, але якщо ви вводите рядок, який використовує пунктуацію та інші елементи, які можна переплутати з синтаксисом YAML (тире, колонки тощо), ви можете процитувати ці дані за допомогою одинарних (''
)або подвійних (""
) лапок. Подвійні лапки дозволяють використовувати escapings для представлення символів ASCII та Unicode.
integer: 25
string: "25"
float: 25.0
boolean: Yes
Block Scalars
A block scalar header has three parts:
Block Style Indicator: The block style indicates how newlines inside the block should behave. If you would like them to be kept as newlines, use the literal style, indicated by a pipe (|
). If instead you want them to be replaced by spaces, use the folded style, indicated by a right angle bracket (>
). (To get a newline using the folded style, leave a blank line by putting two newlines in. Lines with extra indentation are also not folded.)
Block Chomping Indicator: The chomping indicator controls what should happen with newlines at the end of the string. The default, clip, puts a single newline at the end of the string. To remove all newlines, strip them by putting a minus sign (-
) after the style indicator. Both clip and strip ignore how many newlines are actually at the end of the block; to keep them all put a plus sign (+
) after the style indicator.
Indentation Indicator: Ordinarily, the number of spaces you’re using to indent a block will be automatically guessed from its first line. You may need a block indentation indicator if the first line of the block starts with extra spaces. In this case, simply put the number of spaces used for indentation (between 1 and 9) at the end of the header.
Послідовності (Sequences)
Це базовий список з кожним елементом у списку, розміщеним у його власному рядку. Це аналог масиву в інших мовах. Блок послідовностей позначають кожен запис з тире та пробілом (-
).
- Cat
- Dog
- Goldfish
Ця послідовність розміщує кожен елемент у списку на одному рівні. Якщо ви хочете створити вкладену послідовність з елементами та підпунктами, це можна зробити, розмістивши перед кожним тире в підпунктах один пробіл. YAML використовує для відступу пробіли, НЕ табуляцію. Приклад цього ви можете побачити нижче.
-
- Cat
- Dog
- Goldfish
-
- Python
- Lion
- Tiger
Це аналогічно 2-мірному масиву в інших мовах. Якщо ви хочете вкласти свої послідовності ще глибше, вам просто потрібно додати більше рівнів.
-
-
- Cat
- Dog
- Goldfish
Послідовності можуть бути додані до інших типів структури даних, таких як відображення чи скаляри.
Відображення (Mappings)
Відображення дає можливість перелічити ключі з їх значеннями. Це аналог асоційованого масиву. Для відображення використовується двокрапка та пробіл (:
) для позначення кожної пари ключ : значення.
animal: pets
Цей приклад відображає значення pets
до ключа animal
.
Використовуючи спільно з послідовністю, ви можете побачити, що ви починаєте складати список pets
. У наступному прикладі тире, яке використовується для позначення кожного елемента, починається з відступу (пробілу), що робить лінію елементів дочірніми, в відображаючи лінію pets
- батьківською.
pets:
- Cat
- Dog
- Goldfish
YAML також має стилі потоку, використовуючи явні показники, а не відступи для позначення області. Послідовність потоку записується як розділений комою список у квадратних дужках. Аналогічним чином у потоці відображень (flow mapping) використовуються фігурні дужки.
# Sequence of Sequences
- [name , hr, avg ]
- [Mark McGwire, 65, 0.278]
- [Sammy Sosa , 63, 0.288]
# Mapping of Mappings
Mark McGwire: {hr: 65, avg: 0.278}
Sammy Sosa: {
hr: 63,
avg: 0.288
}
Використання якорів (Anchors)
Будь-який вузол YAML може бути закріплений і посилатися в іншому місці як псевдонім. Щоб закріпити певне значення або набір значень, використовуйте &name of anchor
. Для посилання на нього використовується *name of anchor
item:
- method: UPDATE
where: &FREE_ITEMS
- Portable Hole
- Light Feather
SellPrice: 0
BuyPrice: 0
npc:
- method: MERGE
merge-from: {name: General Goods Vendor}
items: *FREE_ITEMS
Колекції (Collections)
Блокові колекції AML використовують відступи для сфери застосування та починають кожен запис у своєму власному рядку.
# Sequence of Scalars
- Mark McGwire
- Sammy Sosa
- Ken Griffey
# Mapping Scalars to Scalars
hr: 65 # Home runs
avg: 0.278 # Batting average
rbi: 147 # Runs Batted In
# Mapping Scalars to Sequences
american:
- Boston Red Sox
- Detroit Tigers
- New York Yankees
national:
- New York Mets
- Chicago Cubs
- Atlanta Braves
# Sequence of Mappings
-
name: Mark McGwire
hr: 65
avg: 0.278
-
name: Sammy Sosa
hr: 63
avg: 0.288