Тема: YAML [Стаття]
Назва
YAML - це рекурсивний акронім від "YAML Ain't Markup Language" / "YAML не є мовою розмітки" (прям як GNU - "GNU's Not Unix").
Що таке YAML
Це стандарт серіалізації даних, який можна використовувати в будь-якій мові програмування.
На момент створення цієї теми останньою версією був YAML 1.2, нижче буде описано тільки цю версію (доки не вказано інше).
Переваги
Про офіційно заявлені переваги можна почитати тут.
А тепер про реальні переваги:
Не засмічений зайвим текстом (таким як теги в XML або дужки в JSON).
Строго структурований. Не має виключень із правил.
Рівень вкладеності визначається відступами (як в Python), або дужками.
Парсинг серіалізованих даних потребує тільки один прохід (для програміста це важливо).
Для чого вчити YAML
Колись ви захочете створити собі сайт на GitHub Pages, а там Jekyll, а там *.yml файли, от і приїхали.
Як конвертувати JSON в YAML або YAML в JSON
Можу порекомендувати json2yaml.com.
Або шукайте самі.
Як виглядає YAML код
Приклади взяв звідси.
Послідовність значень :
- Адріян Ігорович
- Очі.завидющі
- Master_Sergius
Відображення значень в значення :
user: Cyan # user name
mc: 2102 # messages count
date: 2013-02-26 # registered
Відображення значень в послідовності :
Користувачі:
- bvn
- ostap34PHP
- Lordie
Модератори:
- Arete
- koala
- 0xDADA11C7
Послідовність відображень :
-
user: P.Y.
mc: 3730
date: 2013-02-19
-
user: Monolith
mc: 706
date: 2014-07-29
Послідовність послідовностей :
-
- user
- mc
- date
-
- P.Y.
- 3730
- 2013-02-19
-
- Monolith
- 706
- 2014-07-29
або табличний варіант
- [user , mc , date ]
- [P.Y. , 3730, 2013-02-19]
- [Monolith, 706 , 2014-07-29]
Відображення відображень :
P.Y.: {mc: 3730, date: 2013-02-19}
Monolith: {mc: 706, date: 2014-07-29}
або
P.Y.: {
mc: 3730,
date: 2013-02-19
}
Monolith: {
mc: 706,
date: 2014-07-29
}
Структури :
YAML використовує "---" щоб відділити директиви від іншого вмісту документу.
2 документи в потоці (кожен позначений коментарем) :
# Ranking of 1998 home runs
---
- Mark McGwire
- Sammy Sosa
- Ken Griffey
# Team ranking
---
- Chicago Cubs
- St Louis Cardinals
"..." позначають кінець документу без переходу на наступний (використовуються в каналах новин) :
---
time: 20:03:20
player: Sammy Sosa
action: strike (miss)
...
---
time: 20:03:47
player: Sammy Sosa
action: grand slam
...
Елементи, які повторюються, спочатку позначаються через "&" і потім використовуються як посилання через "*".
Документ без посилань на повторювані елементи :
---
hr:
- Mark McGwire
- Sammy Sosa
rbi:
- Sammy Sosa
- Ken Griffey
Документ з посиланням на повторювані елементи :
---
hr:
- Mark McGwire
# Following node labeled SS
- &SS Sammy Sosa
rbi:
- *SS # Subsequent occurrence
- Ken Griffey
"? " позначає ключ явного/складного відображення (a complex mapping key) :
? - Detroit Tigers
- Chicago cubs
:
- 2001-07-23
? [ New York Yankees,
Atlanta Braves ]
: [ 2001-07-02, 2001-08-12,
2001-08-14 ]
Такий приклад деякий час мене конфузив, тому залишу пояснення :
- Detroit Tigers
- Chicago cubs
це перший ключ.
- 2001-07-23
це "перше значення", значення для першого ключа.
[ New York Yankees,
Atlanta Braves ]
це другий ключ.
[ 2001-07-02, 2001-08-12,
2001-08-14 ]
це "друге значення".
Тобто наступні 2 коди дають однаковий результат :
1
---
# Products purchased
- item : Super Hoop
quantity: 1
- item : Basketball
quantity: 4
2
---
# Products purchased
-
? item
: Super Hoop
? quantity
: 1
-
? item
: Basketball
? quantity
: 4
Кому цікаво продовжити вивчення YAML, вам сюди. На цьому поки зупинюсь.