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, расходы на разметку намного больше: <source lang="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> </source> Конечно, можно сделать более «дешёвое» отображение с использованием атрибутов (и потерей гибкости): <source lang="xml"> <event name="PRIVMSG">
<method name="newUri" regex="^http://.*" /> <method name="deleteUri" regex="^delete.*" /> <method name="newUri" regex="^random.*" />
</event> </source>
Теперь то же самое на YAML: <source lang="text"> event: PRIVMSG methods:
- name: newUri regexp: '^http://.*' - name: deleteUri regexp: '^delete.*' - name: randomUri regexp: '^random.*'
</source>
Говоря об отличиях 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 существует в языках программирования:
- JavaScript (осуществляется вывод YAML, но не разбор ввода)
- Objective-C
- .NET Framework (сайт проекта)
- Perl
- PHP
- Python
- Ruby (YAML включен в стандартную библиотеку начиная с версии 1.8.)
- Java
- Haskell
- XML (пока только черновой вариант)
См. также
Ссылки
- YAML.ORG (англ.). — официальный сайт. Проверено 4 августа 2008.
- YAML. CustisWiki. Заказные ИнформСистемы. — введением в технологию и сравнение с альтернативными представлениями. Проверено 29 апреля 2006.
- YAML-парсер на Java
| SQL | Это незавершённая статья о компьютерных языках. Вы можете помочь проекту, исправив и дополнив её. |
cs:YAML de:YAML en:YAML es:YAML fi:YAML fr:YAML id:YAML ja:YAML ko:YAML pl:YAML pt:YAML sv:YAML uk:YAML zh:YAML
Если вам нравится SbUP.com Сайт, вы можете поддержать его - BTC: bc1qppjcl3c2cyjazy6lepmrv3fh6ke9mxs7zpfky0 , TRC20 и ещё....