|
Персональные инструменты |
|||
|
|
YAMLМатериал из CustisWikiВерсия от 15:06, 20 сентября 2013; VitaliyFilippov (обсуждение | вклад) Это снимок страницы. Он включает старые, но не удалённые версии шаблонов и изображений. Тим Брэй, один из авторов спецификации XML 1.0, недавно столкнулся с проблемой извлечения небольших данных из большого XML-файла. На своем веблоге Тим Брэй признался , что он не очень доволен результатами, сообщает газета "Компьютерные вести". Похоже, уже даже до создателей XML начинает доходить, что если программисты http://www.xmlsuck.com/ и создают http://www.yaml.org/ ему, то, наверное, у этого формата и правда есть недостатки, не позволяющие ему быть действительно универсальным. Clark Evans: Тогда давайте будем независимыми. В следующей версии давайте _полностью_ откажемся от синтаксиса XML. Я серьёзно. Меня достали теги и их производные.
YAML создан Clark Evans'ом, для реализации следующих требований:
Легок для чтения и записиСинтаксис YAML сверхлегкий, особенно по сравнению с XML ным синтакисом, и хотя в спецификации не говорится о WikiWiki разметке - YAML очень похож на WikiWiki разметку. Вообще, в спецификации указывают, что большое влияние оказал стандарт RFC 822. Рассмотрим примеры. Итак, в некотором питоновском проекте нужно хранить конфигурацию, описывающую отображение текстовых команд на функции, с помощью регулярных выражений. Структура данных на Питоне будет выглядеть так: [ ("PRIVMSG", "newUri", "^http://.*"), ("PRIVMSG", "deleteUri", "^delete.*"), ("PRIVMSG", "randomUri", "^random.*") ] Тут можно насчитать подрядка 30 "вспомогательных" символов, необходимых для описания структуры - неплохо. Можно представить эту структуру плоским текстом, типа конфигурационного файла от древней UNIX-программы: PRIVMSG newUri ^http://.* PRIVMSG deleteUri ^delete.* PRIVMSG randomUri ^random.* Тогда "overhead" вообще минимален, но все становится очень негибко - значения не могут включать пробелы, не могут быть многострочными и т.п. Но в простых приложениях это сойдет. В XML, "overhead" сильно больше: <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> Конечно, можно сделать более "дешевое" отображение с использованием атрибутов (и потерей гибкости): <bindings> <binding ircEvent="PRIVMSG" method="newUri" regex="^http://.*" /> ... </bindings> Но по любому понятно, что все это очень неоптимально и неудобно для ручного редактирования, а "space overhead" вреден не только расходом ресурсов для хранения, но и неудобством чтения - трудно выделить смысловую информацию в мешанине тэгов. Теперь то же самое на YAML:
---
-
- PRIVMSG
- newUri
- '^http://.*'
-
- PRIVMSG
- deleteUri
- ^delete.*
-
- PRIVMSG
- randomUri
- ^random.*
"Space overhead" - 12 четко видимых символов, и некоторое количество пробелов и переводов строк. (YAML использует "---", для разделения документов внутри файла или потока.) Говоря об отличиях YAML от XML, отметим также, что вложеннее XML элементы обычно используются для отображения иерархических структур, а YAML более ближе к отображению моделей данных из Perl, Python, Java, позволяя описывать свободные винигреты из последовательностей, отображений и скалярных типов - т.е. ближе к реальным структурам данных программных языков, и не требует различных соглашений про DOM-отображения структур данных на документы и обратно, как требуется в XML. ПримерыСчет--- !clarkevans.com/^invoice
invoice: 34843
date : 2001-01-23
bill-to: &id001
given : Chris
family : Dumars
address:
lines: |
458 Walkman Dr.
Suite #292
city : Royal Oak
state : MI
postal : 48046
ship-to: *id001
product:
- sku : BL394D
quantity : 4
description : Basketball
price : 450.00
- sku : BL4438H
quantity : 1
description : Super Hoop
price : 2392.00
tax : 251.42
total: 4443.52
comments: >
Late afternoon is best.
Backup contact is Nancy
Billsmer @ 338-4338.
Лог файл---Time: 2001-11-23 15:01:42 -5
User: ed
Warning:
This is an error message
for the log file
---
Time: 2001-11-23 15:02:31 -5
User: ed
Warning:
A slightly different error
message.
---
Date: 2001-11-23 15:03:17 -5
User: ed
Fatal:
Unknown variable "bar"
Stack:
- file: TopClass.py
line: 23
code: |
x = MoreObject("345\n")
- file: MoreClass.py
line: 58
code: |-
foo = bar
Ссылки
Любые правки этой статьи будут перезаписаны при следующем сеансе репликации. Если у вас есть серьезное замечание по тексту статьи, запишите его в раздел «discussion». Репликация: База Знаний «Заказных Информ Систем» → «YAML» |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||