YAML

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, Dancer, Symfony, GAE framework и Google App Engine.

Пример

В некотором проекте нужно хранить конфигурацию, описывающую отображение текстовых команд на функции, с помощью регулярных выражений. Можно представить эту структуру простым текстом:

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="randomUri" 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 используют печатаемые Unicode-символы, как UTF-8, так и UTF-16
  • отступы из пробелов (символы табуляции не допускаются) используются для обозначения структуры
  • комментарии начинаются с символа “решетка” ( # ), могут начинаться в любом месте строки и продолжаются до конца строки
  • списки обозначаются начальным дефисом ( - ) с одним членом списка на строку, либо члены списка заключаются в квадратные скобки ( [] ) и разделяются запятой и пробелом ( , )
  • ассоциативные массивы представлены двоеточием с пробелом ( : ) в виде ключ: значение, по одной паре ключ-значение на строку, либо в виде пар, заключенных в фигурные скобки и разделенных запятой и пробелом ( , )
    • ключ в ассоциативном массиве может иметь в качестве префикса вопросительный знак ( ? ), что позволяет указать сложный ключ, например представленный в виде списка
  • строки записываются без кавычек, однако могут быть заключены в одиночные или двойные кавычки
    • внутри двойных кавычек могут быть использованы экранированные символы в C-стиле, начинающиеся с обратного слэша ( \ )
  • YAML позволяет задавать подстановки с помощью якорей & и алиасов (*). Пример
aliases:  #последовательность настроек
 - &myAlias1
   datakey: dataval
   moredata: morevals
 - &myAlias2
   datakey: dataval
   moredata: morevals
config:
 - *myAlias1  # *myAlias1 после парсинга будет заменен на [{"datakey": "dataval", "moredata": "morevals"}]
  • явное задание типа оформляется путем '!![указание типа]'. Пример, !!str 100 после парсинга выдаст значение "100".
  • значения типа Дата/Время задаются в формате YYYY-MM-DD или YYYY-MM-DD HH:MM:SS. Если необходимо задать дату, как строку, нужно заключать ее в кавычки ("2012-12-21")

Реализации

Поддержка YAML существует в языках программирования:

См. также

Ссылки

  • YAML.ORG  (англ.). — официальный сайт. Архивировано из первоисточника 10 февраля 2012. Проверено 29 ноября 2010.
  • YAML. CustisWiki. Заказные ИнформСистемы. — введением в технологию и сравнение с альтернативными представлениями. Архивировано из первоисточника 10 февраля 2012. Проверено 29 апреля 2006.



Wikimedia Foundation. 2010.

Смотреть что такое "YAML" в других словарях:

  • YAML — (IPAEng|ˈjæməl, rhymes with camel ) is a human readable data serialization format that takes concepts from languages such as XML, C, Python, Perl, as well as the format for electronic mail as specified by RFC [http://www.rfc… …   Wikipedia

  • YAML — es un formato de serialización de datos legible por humanos inspirado en lenguajes como XML, C, Python, Perl, así como el formato para correos electrónicos especificado por el RFC 2822. YAML fue propuesto por Clark Evans en 2001, quien lo diseñó… …   Wikipedia Español

  • Yaml — человекочитаемый формат сериализации данных, концептуально близкий к языкам разметки, но ориентированный на удобство ввода вывода типичных структур данных многих языков программирования. Название YAML представляет собой рекурсивный акроним YAML… …   Википедия

  • YAML — YAML, acronyme récursif de YAML Ain t Markup Language, est un langage de sérialisation en données Unicode. Il reprend des concepts d autres langages comme XML, ou encore du format de message électronique tel que documenté par RFC 2822. YAML a été …   Wikipédia en Français

  • YAML — ist eine vereinfachte Auszeichnungssprache (engl. markup language) zur Datenserialisierung, angelehnt an XML (ursprünglich) und an die Datenstrukturen in den Sprachen Perl, Python und C sowie dem in RFC 2822 vorgestellten E Mail Format. Die Idee… …   Deutsch Wikipedia

  • Yaml — YAML, acronyme récursif de YAML Ain t Markup Language, est un langage de sérialisation de données qui reprend des concepts d autres langages comme XML, C, Python, et Perl, ou encore du format de message électronique tel que documenté par RFC 2822 …   Wikipédia en Français

  • YAML — noun A retronym for YAML Aint Markup Language that meant originally Yet Another Markup Language …   Wiktionary

  • YAML — abbr. Yaml Ain t Markup Language …   Dictionary of abbreviations

  • YAML (Framework) — YAML (Yet Another Multicolumn Layout) Entwickler Privatperson Aktuelle Version 3.3.1 (18. Juni 2011) Betriebssystem unabhängig Kategorie Webdesign Lizenz …   Deutsch Wikipedia

  • Yml — YAML YAML, acronyme récursif de YAML Ain t Markup Language, est un langage de sérialisation de données qui reprend des concepts d autres langages comme XML, C, Python, et Perl, ou encore du format de message électronique tel que documenté par RFC …   Wikipédia en Français

Книги

  • Запускаем Ansible, Хохштейн Лорин, Мозер Рене. Простой способ автоматизации управления конфигурациями и развертывания приложений Принципиальные отличия Ansible от других систем управления конфигурациями Использование форматов YAML для… Подробнее  Купить за 1835 руб
  • Путь Ruby, Фултон Хэл, Арко Андрэ. Уже больше десяти лет программисты на Ruby обращаются к данной книге как к надежному источнику сведений о том, как эффективно писать на этом языке. А теперь Хэл Фултони Андрэ Арко изрядно… Подробнее  Купить за 1697 грн (только Украина)
  • Путь Ruby, Фултон Хэл, Арко Андрэ. Уже больше десяти лет программисты на Ruby обращаются к данной книге как к надежному источнику сведений о том, как эффективно писать на этом языке. А теперь Хэл Фултони Андрэ Арко изрядно… Подробнее  Купить за 1652 руб
Другие книги по запросу «YAML» >>


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»