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 існує в мовах програмування:

Посилання[ред.ред. код]

Дивись також[ред.ред. код]