YAML

YAML — зручний для читання людиною формат серіалізації даних, концептуально близький до мов розмітки, але орієнтований на зручність введення-виведення типових структур даних багатьох мов програмування.

Назва YAML це рекурсивний акронім YAML Ain't Markup Language («YAML — не мова розмітки»). У назві відображена історія розвитку: на ранніх етапах мова називалася Yet Another Markup Language («Ще одна мова розмітки») і навіть розглядалася як конкурент XML, але пізніше була перейменована з метою акцентувати увагу на даних, а не на розбивці документів.

Особливості

[ред. | ред. код]

YAML створений Кларком Евансом (Clark Evans), для реалізації таких вимог:

  • YAML короткий і зрозумілий;
  • YAML дуже виразний і розширний;
  • YAML допускає простий потоковий інтерфейс;
  • YAML використовує структури даних, характерні для мов програмування;
  • YAML легко реалізується (можливо, занадто легко);
  • YAML використовує цілісну модель даних. Немає винятків — немає безладу.

Синтаксис YAML мінімальний, особливо в порівнянні з XML синтаксисом. У специфікації вказують, що великий вплив справив стандарт RFC 822.

Використання

[ред. | ред. код]

YAML в основному використовується як формат для файлів конфігурації. Застосовується для установки вебкаркасів Ruby on Rails і Symfony.

Приклад

[ред. | ред. код]

У певному проекті потрібно зберігати конфігурацію, що описує відображення текстових команд на функції, за допомогою регулярних виразів. Можна подати цю структуру у вигляді простого тексту, подібного до конфігураційного файлу давньої UNIX-програми:

  PRIVMSG newUri ^http://.*    PRIVMSG deleteUri ^delete.*    PRIVMSG randomUri ^random.*  

Тоді витрати на розбивку мінімальні, але все стає дуже негнучким — значення не можуть містити пробіли, не можуть бути багаторядковими тощо. Підходить тільки в простих випадках.

У XML витрати на розбивку значніші:

<bindings>   <binding>     <ircEvent>PRIVMSG</ircEvent>     <method>newUri</method>     <regex>^http://.*</regex>   </binding>   <binding>     <ircEvent>PRIVMSG</ircEvent>     <method>deleteUri</method>     <regex>^delete.*</regex>   </binding>   <binding>     <ircEvent>PRIVMSG</ircEvent>     <method>randomUri</method>     <regex>^random.*</regex>   </binding> </bindings> 

Звичайно, можна зробити «дешевше» відображення з використанням атрибутів (і втратою гнучкості):

<event name = "PRIVMSG">   <method name = "newUri" regex = "^http://.*" />   <method name = "deleteUri" regex = "^delete.*" />   <method name = "newUri" regex = "^random.*" />   </event> 

Тепер те ж саме на YAML:

event: PRIVMSG  methods:    - Name: newUri      regexp: '^http://.*'    - Name: deleteUri      regexp: '^delete.*'    - Name: randomUri      regexp: '^random.*' 

Говорячи про відмінності YAML від XML, відзначимо також, що вкладені XML елементи можуть використовуватися для відображення довільних структур, а YAML ближчий до відображення типових моделей даних з Perl, Python, Java, що дозволяє описувати вільні поєднання послідовностей, зіставлень і скалярних типів — це ближче до реальних структур даних мов програмування, і не вимагає різних угод про DOM-відображення структур даних на документи і назад, як потрібно в XML.

Синтаксичні елементи

[ред. | ред. код]

Послідовності

[ред. | ред. код]
--- # Список фільмів: послідовність у блочному форматі  - Casablanca  - Spellbound  - Notorious  --- # Список покупок: послідовність у Однорядковому форматі  [milk, bread, eggs, juice] 

Зіставлення імені та значення

[ред. | ред. код]
--- # Блочний формат  name: John Smith  age: 33  --- # Однорядковий формат  {name: John Smith, age: 33} 

Блочні літерали

[ред. | ред. код]

Переведення рядків зберігаються

[ред. | ред. код]
--- |    There was a young fellow of Warwick    Who had reason for feeling euphoric        For he could, by election        Have triune erection    Ionic, Corinthian, and Doric 

Переведення рядків зникають

[ред. | ред. код]
--- >   Wrapped text    will be folded    into a single    paragraph       Blank lines denote    paragraph breaks 

Послідовності із зіставлень

[ред. | ред. код]
- {Name: John Smith, age: 33}  - Name: Mary Smith    age: 27 

Зіставлення з послідовностей

[ред. | ред. код]
men: [John Smith, Bill Jones]  women:    - Mary Smith    - Susan Williams 

Реалізації

[ред. | ред. код]

Підтримка YAML існує в мовах програмування:

Див. також

[ред. | ред. код]

Посилання

[ред. | ред. код]
  • YAML.ORG (англійською) . Архів оригіналу за 30 червня 2013. Процитовано 4 серпня 2008.
  • YAML. CustisWiki. Заказные ИнформСистемы. Архів оригіналу за 10 лютого 2012. Процитовано 29 квітня 2006.
  • YAML-парсер на Java