YAML
Материал из Википедии — свободной энциклопедии
YAML (рекурсивный акроним, англ. YAML Ain't Markup Language — «YAML — не язык разметки») создан как некоторая альтернатива XML. Проблема XML — сложность редактирования и чтения текста человеком. YAML — решает ту же задачу, что и XML, то есть представление произвольной сложности структур данных, но в форме, удобной для человека, такие же аналогии можно провести между HTML и WikiWiki разметкой.
YAML создан Кларком Эвансом (англ. Clark Evans), для реализации следующих требований:
- YAML краток и понятен.
- YAML очень выразительный и расширяемый.
- YAML допускает простой потоковый интерфейс.
- YAML использует структуры данных, родные для языков программирования.
- YAML легко реализуется, возможно, слишком легко.
- YAML использует цельную модель данных. Нет исключений — нет беспорядка.
Содержание |
[править] Легок для чтения и записи
Синтаксис YAML минимален, особенно по сравнению с XML синтаксисом, и, хотя в спецификации не говорится о WikiWiki, разметке — YAML очень похож на WikiWiki. Вообще, в спецификации указывают, что большое влияние оказал стандарт RFC 822.
[править] Использование
YAML в основном используется как формат для файлов конфигурации. Применяется для настройки веб-каркасов Ruby on Rails и Symphony.
[править] Пример
В некотором проекте нужно хранить конфигурацию, описывающую отображение текстовых команд на функции, с помощью регулярных выражений. Можно представить эту структуру плоским текстом, типа конфигурационного файла от древней 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>
Конечно, можно сделать более «дешёвое» отображение с использованием атрибутов (и потерей гибкости):
<PRIVMSG> <newUri regex="^http://.*" /> <deleteUri regex="^delete.*" /> <newUri regex="^random.*" /> </PRIVMSG>
Но все это неоптимально и неудобно для ручного редактирования, а излишнее количество тегов для разметки вредно не только расходом ресурсов для хранения, но и неудобством чтения — трудно выделить смысловую информацию в мешанине тэгов.
Теперь то же самое на YAML:
--- - - PRIVMSG - newUri - '^http://.*' - - PRIVMSG - deleteUri - ^delete.* - - PRIVMSG - randomUri - ^random.*
Расходы на разметку — 12 чётко видимых символов, и некоторое количество пробелов (которые могут при неудачных условиях терятся) и переводов строк (YAML использует «---», для разделения документов внутри файла или потока)
Говоря об отличиях YAML от XML, отметим также, что вложенные XML элементы могут использоватся для отображения произвольных структур, а YAML более близок к отображению типичных моделей данных из Perl, Python, Java, позволяя описывать свободные смеси последовательностей, отображений и скалярных типов — то есть ближе к реальным структурам данных языков программирования, и не требует различных соглашений про DOM-отображения структур данных на документы и обратно, как требуется в XML.
[править] Ссылки
- YAML.ORG(англ.) — официальный сайт. Проверено 29 апреля 2006 г.
- YAML CustisWiki. Заказные ИнформСистемы . — введением в технологию и сравнение с альтернативными представлениями. Проверено 29 апреля 2006 г.