WikiSort.ru - Не сортированное

ПОИСК ПО САЙТУ | о проекте
YAML
Расширение .yaml или .yml
MIME-тип application/x-yaml
Разработчик Clark Evans[d]
Опубликован 11 мая 2001
Последний выпуск 1.2 (Third Edition) (2009-10-01; 3443 дня тому назад)
Тип формата Обмен данными
Расширен из XML, Perl и JSON
Открытый формат? Да
Сайт yaml.org (англ.)

YAML (акроним англ.  «Yet Another Markup Language» — «Ещё один язык разметки», позже — рекурсивный акроним англ. «YAML Ain't Markup Language» — «YAML — не язык разметки») — «дружественный» формат сериализации данных, концептуально близкий к языкам разметки, но ориентированный на удобство ввода-вывода типичных структур данных многих языков программирования.

В трактовке названия отражена история развития: на ранних этапах YAML расшифровывался как Yet Another Markup Language («Ещё один язык разметки») и даже позиционировался как конкурент XML, но позже был переименован с целью[источник не указан 1354 дня] акцентировать внимание на данных, а не на разметке документов.

Цели создания

Согласно целям, озвученным Кларком Эвансом (англ. Clark Evans), YAML 1.0 призван :

  1. быть легко понятным человеку;
  2. поддерживать структуры данных, родные для языков программирования;
  3. быть переносимым между языками программирования;
  4. использовать цельную модель данных для поддержки обычного инструментария;
  5. поддерживать потоковую обработку;
  6. быть выразительным и расширяемым;
  7. быть лёгким в реализации и использовании;

К текущей редакции YAML (1.2) в эти цели были внесены некоторые изменения :

  • пункты 2 и 3 поменялись местами
  • пункт 5 был заменен на «YAML поддерживает обработку в один проход»

Легкость для чтения и записи

Синтаксис YAML минималистичен, особенно по сравнению с XML-синтаксисом. В спецификации указывают, что большое влияние оказал стандарт RFC 822.

Использование

YAML в основном используется как формат для файлов конфигурации Ruby on Rails, Dancer, Symfony, GAE framework, Google App Engine и Dart. Также является основным языком описания классов, ресурсов и манифестов для пакетов приложений OpenStack Murano Project [источник не указан 1354 дня] и Swagger.io.

Пример

В некотором проекте нужно хранить конфигурацию, описывающую отображение (англ. bindings) IRC-команд на функции, с помощью регулярных выражений.

Вот исходная конфигурация, представленная в виде таблицы:

ircEvent method regexp
PRIVMSG newUri "^http://.*"
PRIVMSG deleteUri "^delete.*"
PRIVMSG randomUri "^random.*"

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

bindings:
  - ircEvent: PRIVMSG
    method: newUri
    regexp: '^http://.*'
  - ircEvent: PRIVMSG
    method: deleteUri
    regexp: '^delete.*'
  - ircEvent: PRIVMSG
    method: randomUri
    regexp: '^random.*'

Сравнение с XML

Для сравнения, в XML-представлении данная конфигурация может быть представлена следующим образом:

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

Альтернативный вариант, использующий атрибуты:

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

Говоря об отличиях YAML от XML, также следует отметить, что вложенные XML-элементы могут использоваться для отображения произвольных структур, а YAML более близок к отображению типичных моделей данных из Ruby, Perl, Python, Java, позволяя описывать свободные сочетания последовательностей, сопоставлений и скалярных типов — то есть ближе к реальным структурам данных языков программирования, и не требует различных соглашений про DOM-отображения структур данных на документы и обратно, как требуется в XML.

Синтаксические элементы

Ниже приведены образцы различных компонентов разметки. Следует заметить, что наличие варианта записи в однострочном формате делает JSON допустимым подмножеством YAML.

Последовательности

--- # Список фильмов: последовательность в блочном формате
- 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 1
   moredata: morevals 1
 - &myAlias2
   datakey: dataval 2
   moredata: morevals 2
config:
 - *myAlias1  # *myAlias1 после парсинга будет заменен на [{"datakey": "dataval 1", "moredata": "morevals 1"}]
  • явное задание типа оформляется путём '!![указание типа]'. Пример, !!str 100 после парсинга выдаст значение "100".
  • значения типа Дата/Время задаются в формате YYYY-MM-DD или YYYY-MM-DD HH:MM:SS. Если необходимо задать дату, как строку, нужно заключать её в кавычки ("2012-12-21")

Реализации

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

См. также

Примечания

Ссылки

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

Данная страница на сайте WikiSort.ru содержит текст со страницы сайта "Википедия".

Если Вы хотите её отредактировать, то можете сделать это на странице редактирования в Википедии.

Если сделанные Вами правки не будут кем-нибудь удалены, то через несколько дней они появятся на сайте WikiSort.ru .




Текст в блоке "Читать" взят с сайта "Википедия" и доступен по лицензии Creative Commons Attribution-ShareAlike; в отдельных случаях могут действовать дополнительные условия.

Другой контент может иметь иную лицензию. Перед использованием материалов сайта WikiSort.ru внимательно изучите правила лицензирования конкретных элементов наполнения сайта.

2019-2024
WikiSort.ru - проект по пересортировке и дополнению контента Википедии