Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

YAML ( рекурсивная аббревиатура от «YAML Ain't Markup Language») - это удобочитаемый язык сериализации данных . Он обычно используется для файлов конфигурации и в приложениях, где данные хранятся или передаются. YAML нацелен на многие из тех же коммуникационных приложений, что и Extensible Markup Language (XML), но имеет минимальный синтаксис, который намеренно отличается от SGML . [1] Он использует как отступы в стиле Python для обозначения вложенности, так и более компактный формат, который используется [...]для списков и {...}карт [1], так что файлы JSON являются действительными YAML 1.2. [2]

Разрешены настраиваемые типы данных, но YAML изначально кодирует скаляры (такие как строки , целые числа и числа с плавающей запятой ), списки и ассоциативные массивы (также известные как карты, словари или хеши). Эти типы данных основаны на языке программирования Perl , хотя все широко используемые языки программирования высокого уровня имеют очень похожие концепции. [ Править ] двоеточие-центрированной синтаксис, используемый для выражения пары ключ-значение , вдохновлен электронной почты заголовков , как определено в RFC  822 , и разделитель документов ---заимствовано из MIME ( RFC 2046 ). Escape-последовательности повторно используются из C , а перенос пробелов для многострочных строк вдохновлен HTML . Списки и хэши могут содержать вложенные списки и хэши, образующие древовидную структуру ; произвольные графы могут быть представлены с использованием псевдонимов YAML (аналогично XML в SOAP ). [1] YAML предназначен для чтения и записи в потоках, функция, вдохновленная SAX . [1] 

Поддержка чтения и записи YAML доступна для многих языков программирования. [3] Некоторые редакторы исходного кода, такие как Emacs [4] и различные интегрированные среды разработки [5] [6] [7], имеют функции, упрощающие редактирование YAML, такие как сворачивание вложенных структур или автоматическое выделение синтаксических ошибок.

Официально рекомендованное расширение имени файла для файлов YAML было .yaml[8] с 2006 года. [9]

История и имя [ править ]

YAML ( / J æ м əl / , рифмуется с верблюдом [2] ) впервые был предложен Кларк Эванс в 2001 году, [10] , который разработал вместе с Ingy Dot Net [11] и Орен Бен-Кики. [11] Первоначально YAML было сказано в виду Еще один Markup Language , [12] , потому что он был выпущен в эпоху , которая видела пролиферация языков разметки для представления и соединения (HTML, XML, SGML, и т.д.). Его первоначальное название было задумано как насмешливая ссылка [13] на технологический ландшафт, ссылаясь на его назначение как языка разметки сеще одна конструкция, но это было тогда , как перепрофилировать YAML это не язык разметки , в рекурсивный акроним , чтобы отличить его назначение , как ориентированные на данные-, а не разметки документа.

Дизайн [ править ]

Синтаксис [ править ]

Шпаргалка и полная спецификация доступны на официальном сайте. [14] Ниже приводится краткий обзор основных элементов.

YAML принимает весь набор символов Unicode, за исключением некоторых управляющих символов , и может быть закодирован в любом из UTF-8 , UTF-16 или UTF-32 . (Хотя UTF-32 не является обязательным, для парсера требуется совместимость с JSON .) [15]

  • Отступ пробелов используется для обозначения структуры; однако символы табуляции не могут быть частью этого отступа.
  • Комментарии начинаются со знака числа ( #), могут начинаться в любом месте строки и продолжаться до конца строки. Комментарии должны быть отделены от других токенов пробелами. [16] Если внутри строки появляется # символов, то они являются #литералами числового знака ( ).
  • Элементы списка обозначаются ведущим дефисом ( -) с одним элементом в строке.
    • Список также можно указать, заключив текст в квадратные скобки ( [...]) с каждой записью, разделенной запятой .
  • Ассоциативный массив запись представляется с использованием двоеточие пространства в виде ключа: значение одной записи в каждой строке. YAML требует, чтобы двоеточие сопровождалось пробелом, чтобы скалярные значения, такие как http://www.wikipedia.orgобычно, можно было представить без необходимости заключать в кавычки.
    • Знак вопроса можно использовать перед ключом, в виде «ключ: значение?» , Чтобы ключ содержит ведущий тир, квадратные скобки и т.д., без кавычек.
    • Ассоциативный массив также может быть указан с помощью текста, заключенного в фигурные скобки ( {...}), с ключами, отделенными от значений двоеточием, и записями, разделенными запятыми (пробелы не требуются для сохранения совместимости с JSON).
  • Строки (один из типов скаляров в YAML) обычно не заключаются в кавычки , но могут быть заключены в двойные кавычки ( ") или одинарные кавычки ( ').
    • В двойных кавычках специальные символы могут быть представлены escape-последовательностями в стиле C, начинающимися с обратной косой черты ( \). Согласно документации, поддерживается только восьмеричный escape-код \0.
  • Блочные скаляры разделяются отступом с дополнительными модификаторами для сохранения ( |) или fold ( >) новой строки.
  • Несколько документов в одном потоке разделяются тремя дефисами ( ---).
    • Три периода ( ...) необязательно конец документа в пределах потока.
  • Повторяющиеся узлы первоначально обозначаются амперсандом ( &), а затем обозначаются звездочкой ( *).
  • Узлы могут быть помечены типом или тегом с помощью двойного восклицательного знака ( !!), за которым следует строка, которая может быть расширена до URI.
  • Документам YAML в потоке могут предшествовать «директивы», состоящие из знака процента ( %), за которым следует имя и параметры, разделенные пробелами. В YAML 1.1 определены две директивы:
    • Директива% YAML используется для определения версии YAML в данном документе.
    • Директива% TAG используется как ярлык для префиксов URI. Эти ярлыки затем можно использовать в тегах типов узлов.

Два дополнительных символа сигил зарезервированы в YAML для возможной будущей спецификации: знак at ( @) и обратная кавычка ( `).

Основные компоненты [ править ]

YAML предлагает "встроенный" стиль для обозначения ассоциативных массивов и списков. Вот образец компонентов.

В обычном блочном формате для начала нового элемента в списке используется дефис + пробел.

---  # Любимые фильмы -  Касабланка -  Север за северо-западом -  Человек, которого там не было

Необязательный встроенный формат разделяется запятой + пробел и заключен в квадратные скобки (аналогично JSON ). [17]

---  # Список покупок [ молоко ,  тыквенный пирог ,  яйца ,  сок ]

Ключи отделяются от значений двоеточием + пробелом. Блоки с отступом, обычно используемые в файлах данных YAML, используют отступ и новые строки для разделения пар ключ / значение. Встроенные блоки, распространенные в потоках данных YAML, используют запятую + пробел для разделения пар ключ / значение между фигурными скобками.

---  # отступ Блок  имя :  John Smith  Возраст :  33 ---  # Inline Block { имя :  Джон Смит , возраст :  33 }

Строки не требуют кавычек. Есть два способа записать многострочные строки: один с сохранением новой строки (с использованием |символа) и другой, который сворачивает >новую строку (с помощью символа), за обоими следует символ новой строки.

данные :  |  Жил-был высокий мужчина из Илинга,  который сел на автобус до Дарджилинга.  На двери было написано:  «Пожалуйста, не садитесь на пол»,  поэтому он осторожно сел на потолок.

По умолчанию начальный отступ (первой строки) и конечный пробел удаляются, хотя можно явно указать другое поведение.

data :  >  Обернутый текст  будет свернут  в один  абзац Пустые строки обозначают  разрывы абзацев

Сложенный текст преобразует символы новой строки в пробелы и удаляет ведущие пробелы.

---  # Смиты -  { имя :  Джон Смит , возраст :  33 } -  имя :  Мэри Смит,  возраст :  27 -  [ имя ,  возраст ]:  [ Рэй Смит ,  4 ]  # поддерживаются последовательности в качестве ключей ---  # Люди, по полу мужчины :  [ Джон Смит ,  Билл Джонс ] женщины :  -  Мэри Смит  -  Сьюзан Уильямс

Объекты и списки являются важными компонентами yaml и могут быть смешаны. Первый пример - это список объектов «ключ-значение», все люди из семьи Смит. Второй перечисляет их по полу; это объект "ключ-значение", содержащий два списка.

Расширенные компоненты [ править ]

Две особенности, которые отличают YAML от возможностей других языков сериализации данных, - это структуры [18] и типизация данных.

Структуры YAML позволяют хранить несколько документов в одном файле, использовать ссылки для повторяющихся узлов и использовать произвольные узлы в качестве ключей. [18]

Для ясности, компактности и исключения ошибок ввода данных в YAML предусмотрены привязки узлов (с использованием &) и ссылки (с использованием *). Ссылки на якорь работают для всех типов данных (см. Ссылку на отправку в приведенном ниже примере).

Ниже приведен пример очереди в секвенсоре инструментов, в которой два шага повторно используются повторно, но каждый раз полностью не описываются.

---  # Протоколы секвенсора для лазерной хирургии глаза -  шаг :  & id001  # определяет метку привязки & id001  инструмент :  Lasik 2000  pulse Энергия :  5,4  импульса Продолжительность :  12  повторений :  1000  точек Размер :  1 мм-  шаг :  & id002  инструмент :  Lasik 2000  pulse Энергия :  5,0  импульса Длительность :  10  повторений :  500  точек Размер :  2 мм -  шаг :  * id001  # относится к первому шагу (с привязкой & id001) -  шаг :  * id002  # относится ко второму шагу -  шагу :  * id002

Явная типизация данных редко встречается в большинстве документов YAML, поскольку YAML автоматически определяет простые типы. Типы данных можно разделить на три категории: основные, определенные и определяемые пользователем. Core - это те, которые, как ожидается, будут присутствовать в любом парсере (например, числа с плавающей запятой, целые числа, строки, списки, карты и т. Многие более сложные типы данных, такие как двоичные данные, определены в спецификации YAML, но поддерживаются не во всех реализациях. Наконец, YAML определяет способ расширения определений типов данных локально, чтобы приспособить определяемые пользователем классы, структуры или примитивы (например, числа с плавающей точкой с четырьмя точностью).

YAML автоматически определяет тип данных объекта, но иногда нужно явно указать тип данных. Наиболее распространенная ситуация - когда строка из одного слова, которая выглядит как число, логическое значение или тег, требует устранения неоднозначности путем заключения ее в кавычки или использования явного тега типа данных.

--- : 123 # целого число б : «123» # строка, снято неоднозначность в кавычках с : 123,0 # поплавковым д : !! поплавок 123 # также с плавающей точкой с помощью явного типа данных с приставкой (!!) е : ! ! str 123 # строка, устраненная явным типом f : !! str Yes # строка с явным типом g : Yes # логическое значение True (yaml1.1), строка "Yes" (yaml1.2) h : Да, у нас есть No bananas # строка, "Да" и "Нет", неоднозначная по контексту.                   

Не во всех реализациях YAML есть все типы данных, определенные спецификацией. Эти встроенные типы используют префикс сигил с двойным восклицательным знаком ( !!). Особенно интересными, не показанными здесь, являются наборы, упорядоченные карты, временные метки и шестнадцатеричные числа. Вот пример двоичных данных в кодировке base64 .

--- изображение :  !! двоичный  |  R0lGODdhDQAIAIAAAAAAANn  Z2SwAAAAADQAIAAACF4SDGQ  ar3xxbJ9p0qa7R0YxwzaFME  1IAADs =

Многие реализации YAML могут поддерживать определяемые пользователем типы данных для сериализации объектов. Локальные типы данных не являются универсальными типами данных, но определяются в приложении с помощью библиотеки синтаксического анализатора YAML. Для локальных типов данных используется один восклицательный знак ( !).

--- MyObject :  ! MyClass  { имя :  Джо , возраст :  15  }

Пример [ править ]

Иерархия структуры данных поддерживается за счет отступов контура.

--- квитанция :  Oz-Ware Purchase Invoice Дата :  2012-08-06 клиент :  first_name :  Dorothy  family_name :  Galeпозиции :  - номер  детали :  A4786  описание :  Ведро с водой (заполненное)  цена :  1.47  количество :  4 - номер  детали :  E1628  описание :  Тапочки "Ruby" на высоком каблуке  размер :  8  цена :  133.7  количество :  1получатель счета :  & id001  улица :  |  123 Tornado Alley  Suite 16  город :  Ист-Сентервиль  штат :  Канзасгрузить к :  * id001specialDelivery :  >  Следуйте по  дороге  из желтого кирпича в Изумрудный город. Не обращайте внимания на  человека за занавеской. ...

Обратите внимание, что строки не требуют заключения в кавычки. Конкретное количество пробелов в отступе не имеет значения, если параллельные элементы имеют одинаковое выравнивание по левому краю, а иерархически вложенные элементы имеют больший отступ. Этот образец документа определяет ассоциативный массив с 7 ключами верхнего уровня: один из ключей, «items», содержит список из 2 элементов, каждый элемент которого сам является ассоциативным массивом с разными ключами. Отображаются реляционные данные и удаление избыточности: содержимое ассоциативного массива «получатель» копируется из содержимого ассоциативного массива «получатель», как указано метками anchor ( &) и reference ( *). Дополнительные пустые строки могут быть добавлены для удобства чтения. В одном файле / потоке может существовать несколько документов, разделенных символом ---.Необязательный... может использоваться в конце файла (полезно для сигнализации об окончании потоковой передачи без закрытия канала).

Особенности [ править ]

Разделители с отступом [ править ]

Поскольку YAML в первую очередь полагается на отступ контура для структуры, он особенно устойчив к столкновениям разделителей . Нечувствительность YAML к кавычкам и фигурным скобкам в скалярных значениях означает, что можно встраивать документы XML, JSON или даже YAML в документ YAML, просто сделав отступ в литерале блока (используя |или >):

--- пример :  >  HTML переходит в YAML без сообщения об изменении :  | <blockquote style = "font: italic 1em serif">  <p> «Три всегда больше двух,  даже для больших значений двух» </p>  <p> - Автор неизвестен </p>  </blockquote> дата :  2007-06-01

YAML может быть помещен в JSON, заключив в кавычки и убрав все внутренние кавычки. YAML , может быть помещен в XML вытеканий зарезервированных символов ( <, >, &, ', ") и преобразование пробелов, или путем размещения его в CDATA секции.

Неиерархические модели данных [ править ]

В отличие от JSON, который может представлять данные только в иерархической модели с каждым дочерним узлом, имеющим одного родителя, YAML также предлагает простую реляционную схему, которая позволяет ссылаться на повторяющиеся идентичные данные из двух или более точек в дереве, а не вводить их повторно в эти точки. Это похоже на средство IDREF, встроенное в XML. [19]Затем синтаксический анализатор YAML расширяет эти ссылки в полностью заполненные структуры данных, которые они подразумевают при чтении, поэтому любая программа, использующая синтаксический анализатор, не должна знать о реляционной модели кодирования, в отличие от процессоров XML, которые не расширяют ссылки. Это расширение может улучшить удобочитаемость, уменьшив количество ошибок ввода данных в файлы конфигурации или протоколы обработки, где многие параметры остаются неизменными в последовательной серии записей, в то время как только некоторые изменяются. Примером может служить то, что записи «получатель» и «получатель счета» в счете-фактуре почти всегда являются одними и теми же данными.

Практические соображения [ править ]

YAML ориентирован на строки, и поэтому часто бывает просто преобразовать неструктурированный вывод существующих программ в формат YAML, сохранив при этом большую часть внешнего вида исходного документа. Поскольку нет закрывающих тегов, фигурных скобок или кавычек для балансировки, обычно легко сгенерировать правильно сформированный YAML непосредственно из распределенных операторов печати в простых программах. Точно так же разделители пробелов облегчают быструю и грязную фильтрацию файлов YAML с помощью строчно-ориентированных команд в grep, AWK, Perl, Ruby и Python.

В частности, в отличие от языков разметки, фрагменты последовательных строк YAML, как правило, сами являются правильно сформированными документами YAML. Это позволяет очень легко писать синтаксические анализаторы, которым не нужно полностью обрабатывать документ (например, балансировать открывающие и закрывающие теги и перемещаться по кавычкам и экранированным символам) до того, как они начнут извлекать определенные записи внутри. Это свойство особенно целесообразно при итерации за один проход без сохранения состояния по записям в файле, вся структура данных которого слишком велика для хранения в памяти, или для которых восстановление всей структуры для извлечения одного элемента было бы чрезмерно дорогостоящим.

Как ни странно, хотя его разделение с отступом может показаться усложнением глубоко вложенных иерархий, YAML обрабатывает отступы размером с один пробел, и это может обеспечить лучшее сжатие, чем языки разметки. Кроме того, очень глубоких отступов можно полностью избежать: 1) вернуться к «встроенному стилю» (т.е. формату, подобному JSON) без отступов; или 2) использование реляционных якорей для преобразования иерархии в плоскую форму, которую синтаксический анализатор YAML прозрачно воссоздает в полную структуру данных. [ необходима цитата ]

Безопасность [ править ]

YAML - это чисто язык представления данных и, следовательно, не имеет исполняемых команд. [20] Хотя проверка и безопасный синтаксический анализ по сути возможны на любом языке данных, реализация является настолько печально известной ловушкой, что отсутствие в YAML связанного командного языка может быть относительным преимуществом безопасности.

Однако YAML допускает языковые теги, так что произвольные локальные объекты могут быть созданы парсером, который поддерживает эти теги. Любой синтаксический анализатор YAML, который позволяет выполнять сложные экземпляры объектов, открывает возможность для атаки путем внедрения. Парсеры Perl, позволяющие загружать объекты произвольных классов, создают так называемые «благословенные» значения. Использование этих значений может вызвать неожиданное поведение, например, если класс использует перегруженные операторы. Это может привести к выполнению произвольного кода Perl. [ необходима цитата ]

Ситуация аналогична для парсеров Python или Ruby. Согласно документации PyYAML: [21]

Обратите внимание, что возможность создания произвольного объекта Python может быть опасной, если вы получаете документ YAML из ненадежного источника, такого как Интернет. Функция yaml.safe_loadограничивает эту возможность простыми объектами Python, такими как целые числа или списки. [...]

PyYAML позволяет создавать объект Python любого типа. С помощью !!python/objectтега можно создать даже экземпляры классов Python .

Обработка и представление данных [ править ]

Спецификация YAML идентифицирует экземплярный документ как «презентацию» или «поток символов». [22] Первичные логические структуры в документе экземпляра YAML - это скаляры, последовательности и отображения. [23] Спецификация YAML также указывает некоторые основные ограничения, которые применяются к этим первичным логическим структурам. Например, согласно спецификации, ключи сопоставления не имеют порядка. В каждом случае, когда порядок узлов важен, необходимо использовать последовательность. [24]

Более того, при определении соответствия для процессоров YAML спецификация YAML определяет две основные операции: дамп и загрузку . Все YAML-совместимые процессоры должны обеспечивать по крайней мере одну из этих операций, а при желании могут предоставлять обе. [25] Наконец, спецификация YAML определяет информационную модель или «граф представления», который должен быть создан во время обработки как для операций дампа, так и для операций загрузки , хотя это представление не обязательно должно быть доступно пользователю через API. [26]

Сравнение с другими форматами сериализации [ править ]

Сравнение с JSON [ править ]

Синтаксис JSON является основой YAML версии 1.2, которая была обнародована с явной целью приведения YAML «в соответствие с JSON в качестве официального подмножества». [2] Хотя предыдущие версии YAML не были строго совместимы, [27] расхождения редко были заметны, и большинство документов JSON можно было проанализировать некоторыми синтаксическими анализаторами YAML, такими как Syck. [28] Это связано с тем, что семантическая структура JSON эквивалентна необязательному «встроенному стилю» написания YAML. Хотя расширенные иерархии могут быть написаны во встроенном стиле, таком как JSON, это не рекомендуемый стиль YAML, за исключением случаев, когда он способствует ясности.

YAML имеет много дополнительных функций, которых не хватает в JSON, включая комментарии, расширяемые типы данных, реляционные привязки, строки без кавычек и типы сопоставления, сохраняющие порядок ключей.

Сравнение с TOML [ править ]

С одной стороны, YAML намного сложнее по сравнению с TOML - указано, что спецификация YAML содержит 23 449 слов, тогда как спецификация TOML содержит только 3339 слов. [29] С другой стороны, YAML менее подробный, более СУХИЙ , синтаксически менее шумный, а иерархия документа очевидна по отступам [30] .

Сравнение с XML [ править ]

В YAML отсутствует понятие атрибутов тегов, которые можно найти в XML. Вместо этого в YAML есть объявления расширяемых типов (включая типы классов для объектов).

Сам YAML не имеет определяемых языком дескрипторов схемы документа XML, которые позволяют, например, документу проходить самопроверку. Однако существует несколько внешне определенных языков дескрипторов схемы для YAML (например, Doctrine , Kwalify и Rx), которые выполняют эту роль. Более того, семантика, предоставляемая объявлениями типов, определяемых языком YAML, в самом документе YAML часто снижает потребность в валидаторе в простых, распространенных ситуациях. Кроме того, YAXML , который представляет структуры данных YAML в XML, позволяет применять к YAML импортеры схем XML и механизмы вывода, такие как XSLT .

Сравнение форматов сериализации данных обеспечивает более полное сравнение YAML с другими форматами сериализации.

Программное обеспечение (эмиттеры и парсеры) [ править ]

Для фиксированных структур данных файлы YAML можно просто сгенерировать с помощью команд печати, которые записывают как данные, так и специальное оформление YAML. Однако для выгрузки различных или сложных иерархических данных предпочтительнее использовать специальный эмиттер YAML . Точно так же простые файлы YAML (например, пары ключ-значение) легко анализируются с помощью регулярных выражений. Для более сложных или разнообразных структур данных рекомендуется формальный синтаксический анализатор YAML .

Эмиттеры и парсеры YAML существуют для многих популярных языков. Большинство из них написано на самом родном языке. Некоторые из них являются языковыми привязками библиотеки C libyaml ; они могут бежать быстрее. Раньше существовала еще одна библиотека C, называемая Syck , написанная и осиротевшая по вине счастливчиков : она не обслуживается, отсутствует авторитетный исходный пакет, а веб-сайт был взломан. Следовательно, единственная рекомендуемая библиотека C - это libyaml . Первоначально он был разработан Кириллом Симоновым. В 2018 году разработку возобновили новые специалисты по сопровождению Ян Кордаско и Инги döt Net . [31]

Программисты на C ++ могут выбирать между библиотекой C libyaml и библиотекой C ++ libyaml-cpp . Оба имеют полностью независимые кодовые базы и совершенно разные API . Библиотека libyaml-cpp по- прежнему имеет основной номер версии 0, что указывает на то, что API может измениться в любой момент, как это действительно произошло после версии 0.3. Существует реализация, ориентированная на грамматику, написанная на C # с целью расширения вложенных элементов. [32]

Некоторые реализации YAML, такие как Perl YAML.pm, загружают весь файл (поток) и массово анализируют его . Другие реализации, такие как PyYaml, ленивы и перебирают следующий документ только по запросу. Для очень больших файлов, в которых планируется обрабатывать документы независимо, создание экземпляра всего файла перед обработкой может быть недопустимым. Таким образом, в YAML.pm иногда нужно разбивать файл на документы и анализировать их по отдельности. YAML упрощает это, поскольку для этого просто требуется разделение маркера конца документа, который определяется как три точки в отдельной строке. Этот маркер запрещен по содержанию. [33]

Критика [ править ]

YAML критиковали за значительные пробелы , сбивающие с толку функции, небезопасные значения по умолчанию и его сложную и неоднозначную спецификацию: [29] [34] [35]

  • Файлы конфигурации могут выполнять команды или загружать содержимое, даже если пользователи этого не осознают. [29]
  • Редактировать большие файлы YAML сложно, поскольку ошибки отступа могут остаться незамеченными. [29]
  • Автоопределение типа является источником ошибок. Например, не заключенные в кавычки Yesи NOпреобразуются в логические значения; номера версий программного обеспечения могут быть преобразованы в числа с плавающей запятой. [29] [36]
  • Усеченные файлы часто интерпретируются как допустимый YAML из-за отсутствия терминаторов.
  • Сложность стандарта привела к непоследовательности реализаций и сделала язык непереносимым. [29] [37]

Предполагаемые недостатки и сложность YAML привели к появлению StrictYAML , который использует ограниченное подмножество спецификации YAML. [36]

См. Также [ править ]

  • Сравнение форматов сериализации данных
  • Легкий язык разметки

Ссылки [ править ]

  1. ^ a b c d "Еще один язык разметки (YAML) 1.0 / Рабочий проект" . 10 декабря 2001 г.
  2. ^ a b c «YAML не является языком разметки (YAML) версии 1.2» . YAML.org . Проверено 29 мая 2019 .
  3. ^ "Официальный веб-сайт YAML" . yaml.org .
  4. ^ "Режим Ямла" . EmacsWiki. 2015-06-12 . Проверено 5 декабря 2016 .
  5. ^ aukaost. «Симпатичный YAML - Пакеты - Управление пакетами» . Packagecontrol.io . Проверено 5 декабря 2016 .
  6. ^ "yaml | Плагины, пакеты и продукты Eclipse - Торговая площадка Eclipse" . Marketplace.eclipse.org . Проверено 5 декабря 2016 .
  7. ^ Рут Кустерер. «IDE NetBeans - разработка на Ruby и Ruby on Rails» . Netbeans.org . Проверено 5 декабря 2016 .
  8. ^ «YAML - это не язык разметки» . yaml.org .
  9. ^ «YAML - это не язык разметки» . web.archive.org . 24 сентября 2006 г.
  10. Эванс, Кларк (11 мая 2001 г.). «ЯМЛ Драфт 0.1» . Yahoo! Технические группы: sml-dev . Проверено 21 марта 2019 .
  11. ^ a b «YAML - это не язык разметки: о» . YAML.org . Проверено 29 мая 2019 .
  12. ^ «Еще один язык разметки (YAML) 1.0» . YAML.org . Проверено 29 мая 2019 .
  13. ^ «Еще один язык разметки (YAML) 1.0» . stackoverflow.com . Проверено 24 марта 2021 .
  14. ^ " Справочная карта YAML 1.1" . YAML.org . Проверено 29 мая 2019 . 
  15. ^ «YAML не является языком разметки (YAML) версии 1.2» . YAML.org . Проверено 29 мая 2019 .
  16. ^ «YAML не является языком разметки (YAML) версии 1.2» . YAML.org . Проверено 29 мая 2019 .
  17. ^ «Приложения для управления на основе облака» . JigoCloud.com . Архивировано из оригинала на 2016-09-17 . Проверено 28 сентября 2016 .
  18. ^ a b «Спецификация структур YAML 1.2» . YAML.org . Проверено 29 мая 2019 .
  19. ^ «Расширяемый язык разметки (XML) 1.0 (второе издание)» . W3.org . Проверено 27 мая 2015 года .
  20. ^ Предлагаемый тег "yield" обеспечит простые арифметические вычисления.
  21. ^ «Документация PyYAML, загрузка YAML» . Pyyaml.org . Проверено 28 сентября 2016 .
  22. ^ «Это не язык разметки (YAML) версии 1.1» . YAML.org . Проверено 29 мая 2019 .
  23. ^ Дополнительные, необязательные, логические структуры перечислены в репозитории типов YAML. «Независимые от языка типы для YAML версии 1.1» . YAML.org . Проверено 29 мая 2019 .Тегированные типы в репозитории типов YAML являются необязательными и, следовательно, не важны для совместимых процессоров YAML. «Использование этих тегов не обязательно».
  24. ^ «YAML не является языком разметки (YAML) версии 1.1» . YAML.org . Проверено 29 мая 2019 .
  25. ^ «Это не язык разметки (YAML) версии 1.1» . YAML.org . Проверено 29 мая 2019 .
  26. ^ «YAML не является языком разметки (YAML) версии 1.1» . YAML.org . Проверено 29 мая 2019 .
  27. ^ Несовместимость заключалась в следующем: JSON допускает расширенные наборы символов, такие как UTF-32, и имеет несовместимый синтаксис escape-символов Unicode относительно YAML; YAML требует пробела после разделителей, таких как запятая, равно и двоеточие, а JSON - нет. Некоторые нестандартные реализации JSON расширяют грамматику, добавляя/*...*/комментарииJavascript. Обработка таких крайних случаев может потребовать легкой предварительной обработки JSON перед синтаксическим анализом как встроенного YAML. См. Также [1] .
  28. ^ Анализ JSON с помощью SYCK . Обратите внимание, что, например, синтаксический анализатор YAML Symfony не поддерживает разрывы строк внутри структур [] или {}, что является серьезной несовместимостью с JSON.
  29. ^ a b c d e f Турной, Мартин (4 сентября 2016 г.). «YAML: наверное, все-таки не так уж и хорош» . Дата обращения 16 мая 2019 .
  30. ^ Что не так с TOML?
  31. ^ [email protected], письмо от 27 июня 2018 г.
  32. ^ "Грамматика YAML для Lexepars" .
  33. ^ «YAML не является языком разметки (YAML) версии 1.2 # 9.1.2 маркеры документа» . YAML.org . Проверено 29 мая 2019 .
  34. ^ "Это много YAML" . Дата обращения 16 мая 2019 .
  35. ^ "YAML отстой" . Дата обращения 16 мая 2019 .
  36. ^ a b «Проблема Норвегии - почему StrictYAML отказывается выполнять неявную типизацию и вы должны тоже» . Дата обращения 3 июня 2020 .
  37. ^ "Тестовая матрица YAML" .

Внешние ссылки [ править ]

  • Официальный веб-сайт