Yml спецификация: YAML™ Specification Index

YAML(tm) — еще один язык разметки


Добро пожаловать в YAML ™ — РАБОЧИЙ ПРОЕКТ 0.19a

Это первый серьезный рабочий проект YAML.


Ключевые идеи

YAML основан на нескольких ключевых концепциях очень
успешные языки.

  • YAML использует структуру типов, аналогичную Perl. В ЯМЛ,
    там есть три фундаментальные структуры: скаляры ($),
    карты (%) и списки (@). YAML также поддерживает ссылки на
    включить сериализацию графиков. Более того,
    каждое значение данных может быть связано с именем класса
    чтобы разрешить использование определенных типов данных.
  • YAML использует область видимости блока, аналогичную Python. В ЯМЛ,
    степень узла указывается его дочерним
    уровень вложенности, т. е. в каком столбце он находится. Блок
    отступ обеспечивает удобство просмотра документа
    структура, которая помогает идентифицировать ошибки области.
  • YAML использует ту же обработку пробелов, что и HTML. В
    YAML, последовательности пробелов, табуляции и возврата каретки
    символы складываются в один пробел во время синтаксического анализа.
    Эта замечательная техника делает код разметки читаемым
    включение отступов и переноса слов, не затрагивая
    Каноническая форма содержания.
  • YAML использует escape-последовательности в стиле косой черты, аналогичные C.
    В YAML \n используется для представления новой строки, \t используется для
    представляет вкладку, а \\ используется для представления косой черты.
    Кроме того, поскольку пробелы складываются, YAML использует bash
    стиль «\», чтобы избежать дополнительных пробелов, которые являются частью
    содержание и не должны быть свернуты. Наконец, трейлинг
    \ используется как маркер продолжения, позволяя
    содержимое должно быть разбито на несколько строк без
    введение нежелательных пробелов.
  • YAML позволяет
    rfc822
    совместимая область заголовка для комментариев, специальная обработка
    инструкции и объявления кодирования. Это обеспечивает
    гибкий и перспективный метод увеличения
    Парсер YAML с другими функциями, такими как валидатор
    аналогично TREX или RELAX. Кроме того, это позволит
    система обработки почты для прямого использования YAML в качестве
    входной парсер.
  • YAML поддерживает двоичные и форматированные текстовые объекты с
    MIME
    многокомпонентные вложения. Каждому приложению дается
    идентификатор ссылки, который может быть связан с
    расположение в иерархическом содержимом YAML. Это позволяет
    конечные значения, которые нарушили бы встроенную структурную
    поток должен обрабатываться отдельно в отдельном блочном механизме.
  • YAML имеет SAX
    как последовательный API «C». Эту библиотеку C можно использовать для
    легко создавать представления YAML на родном языке
    сериализация. API также демонстрирует умные случаи
    метод заменяемости, который позволяет изменять схему
    происходить в листовых узлах в обратно совместимом
    образом, не нарушая старый код. Это дает устойчивость
    к более старому коду, позволяя структуру ваших данных
    расти со временем.

Пример: Базовый

Ниже приведен пример счета, выраженного с помощью YAML.
Тип каждого значения обозначается либо процентами (карта), либо
знак at (список) или необязательный знак доллара (скаляр).
Содержимое каждого значения следует за индикатором либо
на той же строке для скаляров или на последующих с отступом
линии. Содержимое карты, которая также является стартовой
производство, представляет собой список ключевого значения париж. Каждый ключ и
значения разделяются двоеточием.

покупатель : %
    адрес     : %
       город: Роял Оук
       первая строка: 458 Путь Виттигена
       вторая строка: Люкс № 292
       почтовый : 48046
       состояние: Ми
    фамилия: Думарс
    имя: Крис
Дата: 12 января 2001 г.
Комментарии :
    Мистер Дюмарс часто отсутствует по утрам
    поэтому лучше всего попробовать что-то в конце
    полдень. \nЕсли Джо нет рядом, попробуйте его дом\
    вратарь Нэнси Биллсмер @ (734) 338-4338. \n
доставка : %
    способ : UZS Express Ночной
    цена : 45.50
счет : 00034843
продукт : @
    %
        desc : Класс A, баскетбольный мяч из кожи
        идентификатор: BL394D
        цена : 450.00
        количество : 4
    %
        desc : Super Hoop (tm)
        идентификатор: BL4438H
        цена : 2,392.00
        количество : 1
налог : 0.00
всего: 4237,50
 

Поскольку «продукт» — это список, он имеет только значения и, следовательно,
отсутствует ключ и двоеточие. Также обратите внимание, что
Скаляр «комментарии» находится на нескольких строках. Поскольку пробел
складывается, возврат каретки (\n) экранируется и
окончание строки \ требуется для сохранения домработницы как
одно слово. По умолчанию сериализатор будет
сортировать ключи карты, хотя это не является обязательным требованием
структуры сериализации.


Пример: ссылки и имена классов

Ниже приведен пример документа YAML, который демонстрирует
использование ссылок и классов. Сразу после
индикатор может встречаться имя класса, а затем в круглых скобках
необязательный дескриптор ссылки. Если индикатор «*»,
то дальнейшее содержание не допускается, так как этот индикатор
означает ссылку на другое значение. Имя класса может
использоваться в качестве конкретной языковой привязки к
конкретный объект или тип соответствующего класса, в противном случае
это можно считать комментарием. Производство за допустимые
имена и механизм пространства имен еще предстоит разработать.

покупатель : %человек
    Комментарии :
        Это доступный объект человека
        через ключ "покупатель" из
        карта верхнего уровня.
    фамилия: Думарс
    имя: Крис
встроенный: $(0001)
    Это свернутый текстовый объект
    что связано с
    ссылка, так что это может быть
    повторно использованы позже.
продавец: %person(0002)
    Комментарии:
        Это объект другого человека, только
        что ему присвоен дескриптор 0001 как
        а также класс, так что это может быть
        упоминается позже.  Ручки должны быть
        числовой, и классы не могут начаться
        с номером.
    Фамилия : Продавцы
    имя: Питер
ззз :
   Комментарии:
       Первые два элемента на этой карте являются ссылками
       Первый — это объект человека «Питер Селлерс».
       Второй — к встроенному текстовому объекту «Это…».
       Скаляр цены ниже имеет класс «цена».
   Питер: *(0002)
   цена : $валюта
       23.34
   текст: *(0001)
 

Пример: ссылки на блоки и вложения

Ниже приведен пример документа YAML, который включает
необязательный заголовок стиля rfc822, в частности
Составной заголовок rfc2046. Парсер YAML должен обрабатывать
эти заголовки, чтобы обеспечить обработку для конкретного приложения
инструкции и MIME для необработанных/двоичных ссылок.

Дата: Воскресенье, 13 мая 2001 г., 23:48:04 -04:00
MIME-версия: 1.0
Content-Type: multipart/related;
    граница="================================"
X-YAML-Версия: 1. 0
--=================================
Content-Type: текстовый/обычный;
  ХХ ХХХ ХХХХХ ХХ ХХ
   ХХХ ХХ Х ХХ Х ХХ
   ХХ ХХХХХ ХХ Х ХХ
   ХХ Х ХХ ХХХХХХХХ
  ХХХ ХХХХХ Х ХХ ХХ
--=================================
Content-Type: изображение/gif;
Кодирование передачи контента: base64
R0lGODlhGQAPAOMAAAICBDaanAJSVAISFP7+/GbOzAJmZAIeHGbMzGbMzGbMzGbMzGbMzGbMzGbM
zGbMzCH+Dk1hZGUgd2l0aCBHSU1QACH5BAEKAAYALAAAAAZAA8AQAR70EgZArlBWHw7Nts1gB6R
GV0wCBMlkp4qlHJppkNoyW1r5SmcTeV6wUwrFI4VEulSMyRLchHYrYLq4MDKYrm9СУФКИЗЛХАЛА
pm6VV+g44FBSHybokQGdnivNfhJ8enwFSR12eB4jcWZ3gHeCJQJycXSJEzaIc5SIWz0RADs=
--=================================
Content-Type: text/x-yaml;
встроенный: $(0004)
    Это свернутый текстовый объект
    что связано с
    ссылка.
содержание :
   комментарий:
       Циклический элемент является ссылкой
       на карту верхнего уровня.
   циклический: *(0003)
   изображение: *(0002)
   встроенный: *(0004)
   необработанный: *(0001)
   title : содержит несколько ссылок
 

Информационная модель

Карта/список/скалярные структуры данных, найденные в
современные языки программирования, такие как ML,
Python, Perl и C. Эта модель также должна
быть очень совместимым с реляционной базой данных
столы. Примечание. В этой модели отсутствуют классы и
ссылки, которые все еще находятся на рассмотрении.

Документ Начальным продуктом для YAML является карта.
Карта Неупорядоченная последовательность из нуля или более
(Ключ, Значение) кортежи. Где они ключ
уникален в последовательности и соответствует
Ключевое производство.
Значение Ровно один из Scalar, Map или List
List Упорядоченная последовательность из нуля или более значений.
Скаляр Любой тип, который может быть непосредственно сериализован или может быть
составленный из последовательности из нуля или более символов.
Эти символы должны соответствовать Char
производство.

По умолчанию Это синтезированный атрибут каждого значения. Если
Значение является скаляром, тогда свойство по умолчанию
относится к самому значению. Если это значение является списком,
то значение по умолчанию относится к свойству по умолчанию
первое значение в своей последовательности. Если значение является картой,
то значение по умолчанию относится к свойству по умолчанию
Значение в записи Pair без ключа. Используя
По умолчанию скалярное значение можно заменить на
Map или List Value без торможения старого кода.

Обратите внимание, что информационная модель не
допускают «родительское» свойство каждого значения. Довольно
напротив, YAML может быть структурой графа, а не
обязательно дерево.


Сопоставление с популярными средами

Для Python внутреннее представление имеет верхний уровень
объект является словарем, и оттуда, в зависимости от
индикатор каждого значения может быть списком, словарем
или строка. Механизм схемы может
быть включено, что позволяет более конкретное декодирование
на классы и типы. Атрибут по умолчанию
реализуется через отдельную функцию.

Для Perl внутреннее представление начинается с
хэш верхнего уровня. И оттуда, в зависимости от
индикаторы могут быть списком, хешем или строковым скаляром.
Конечно, это также возможно для механизма схемы
быть включенным, что обеспечивает более конкретное декодирование.
Атрибут по умолчанию реализуется через автономный
функция.

Не занимался Java или Javascript с 1998 года, но я помню
Строки, карты и списки являются объектами. Так что не должно быть
любая проблема в Java. Javascript, вероятно, находится в
ту же лодку, но я не могу подтвердить, так как эта книга
также таинственно исчез.

Для ML, C и C++, в которых отсутствует встроенная переменная
структура типа Map и List требует определенной схемы
построить внутреннее представление. Для этих языков
тип YamlValue может быть создан с подтипами
Скаляр, список и карта. Для C++ STL может сделать
реализация очень быстрая, особенно с итератором
поддерживать. Альтернативным подходом может быть класс
строитель… но для этого, конечно, требуется немного
больше смартов и схема системы.

Сопоставление с реляционной базой данных также потребует
какая-то схема, указывающая, как упаковывать/распаковывать.
Однако, учитывая, что кортеж (запись) легко
связан с Картой, а отношение (таблица)
легко ассоциируется со списком, не должно быть
столько трудностей. Сопоставление значений NULL будет
быть представлен отсутствием конкретной карты
вход.


Формат сериализации / BNF

В этом разделе собраны произведения БНФ.
для синтаксиса YAML. Много сделать…


Поведение парсера

В этом разделе описывается, как синтаксический анализатор должен
разобрать YAML. Много сделать…


Поведение эмиттера/каноническая форма

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


Реализации

Сделать… реализацию на C, C++/STL, Python, Java и…


Кредиты

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


Некоторые мысли
  1. Это очень предварительные мысли по этому поводу,
    обратная связь очень приветствуется.
  2. Необходимы реализации… Кларк с удовольствием пишет
    Python, C и, возможно, даже C++.
    Есть берущие?
  3. Долго думал над использованием # для комментария
    индикатор, или, возможно, как числовой индикатор.
    Преимущества? В любом случае БНФ должен уйти
    все эти специальные символы открыты для будущего
    версии.

Часто задаваемые вопросы
  1. Разве символы индикатора не должны быть
    сбежал в содержании? Ответ: нет.

Конкретные производства
Символ >  ::=  #x9 | #хА | #xД | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF] Любой символ Юникода, за исключением суррогатных блоков,
ФФФЕ и ФФФФ. Где юникод определяется
ISO/IEC 10646-2000
Символы >  ::=  Чар* Ноль или более символов.
УайтЧар  ::=  #x20 | #x9 | #xД | #хА Пробел, табуляция, новая строка или возврат каретки,
экранируется символами \s, \t, \n и \r соответственно.
Пробел  ::=  БелыйЧар+ Любая последовательность пробелов, табуляции, новых строк
или возврат каретки.
Индикатор>  ::=  ‘$’ | ‘%’ | ‘@’ | ‘*’ Знак доллара указывает скаляр, знак процента
указывает на карту, знак at указывает на список,
а звездочка обозначает ссылку.
Зарезервировано>  ::=  Белый Чар | Индикатор | [#x21-#x2F] | ‘/’ | [#x3B-#x40] |
[#x5B-#x5E] | #x60 | [#x7B-#x7F]
Печатные, не буквенные, не числовые символы ASCII
исключая точку, двоеточие, подчеркивание и тире.
Ключ  ::=  (символ — зарезервировано)* Один или несколько незарезервированных символов.

YAML — еще один язык разметки

90 008


Добро пожаловать в YAML

YAML — это минимальный язык разметки, основанный на XML и Minimal XML. YAML это
на следующих принципах:

  • В первую очередь для иерархического представления текстовых данных.
  • Совместимость с XML 1.0 хороша, но не обязательна.
  • Целостность математики/модели важна
  • Многословность приемлема, регулярность предпочтительна
  • YAML должен дополнять другие обозначения и типы данных.
  • строгая типизация данных была бы идеальной
  • Прямая поддержка типов данных Standard ML была бы отличной.

Таким образом, YAML определяется как помеченная древовидная структура. Он отличается
из XML разными способами:

  • Поддерживаются только элементы, без PI, комментариев, атрибутов и т. д.
  • Допускается сокращенный синтаксис элемента .
  • Элементы имеют значение или дочерние элементы, но никогда оба.
  • Пространства имен не поддерживаются, используется двоеточие.
  • UTF-16/ISO8859-1 — единственные кодировки (на данный момент)
  • Допускается более одного элемента верхнего уровня (для совместимости с XML
    не делайте этого, но это необходимо для конкатенации
    закрытый оператор)
  • Обработка пробелов аналогична HTML, один или несколько
    вхождения табуляции, ввода и т. д. сжимаются в
    единое пространство.

Тип данных

Имена тегов состоят из двух частей: метки и типа данных.
Эти части разделены двоеточием. Поддерживаемый
типы данных:

Целое :int Точное целое (оператор равенства)
Действительное число :real Неточное приближение с плавающей запятой (оператор равенства отсутствует) 90 007
Символ :char Один символ , могут использоваться целые числа или шестнадцатеричная запись.
Булево значение :bool Либо «истина», либо «ложь».
Строка (по умолчанию) Строковое значение & < и > допустимый.
Список :список Это упорядоченный список элементов одного типа.
Запись :запись Это неупорядоченная карта, каждая метка должна быть уникальной.
Кортеж
:кортеж Используйте _1, _2 и т. д. для имен тегов.

Для удобства испускаются следующие «производные» типы. Они
не являются стандартными типами ML, но, тем не менее, могут быть полезны.

Сумка (по умолчанию) Упорядоченный список предметов любого типа.
IntegerList :intlist Список целых чисел, разделенных пробелом.
RealList :reallist Список действительных чисел, разделенных пробелом.
CharList :charlist Список символов, разделенных пробелом.
Двоичный :base64 Строка, закодированная с помощью Base64, в группах по 8 символов, разделенных пробелами.

Примечание. Если требуется строгая совместимость XML+пространства имен,
документ может иметь только содержимое Bag/String. В противном случае,
вышеприведенное совместимо с XML 1.0, где эксперимент «пространство имен»
является строгим типом данных!


Имена тегов

Как правило, имена тегов соответствуют требованиям к именам тегов XML.
хотя теги с точками имеют особое значение, а теги
начинающиеся с подчеркивания, зарезервированы. В частности,
теги с одной или несколькими точками должны использовать структуру на основе DNS
где самые правые части являются доменом верхнего уровня, например
«com», «org», «co.uk». Затем непосредственно перед вершиной
домен уровня, является зарегистрированной частью, как и «clarkevans».
А предыдущая зарегистрированная часть зависит от пользователя.
Поэтому: «timesheet.clarkevans.com» и «zoom.mytag.domain.co.uk»
оба будут действительными именами в соответствии с этой схемой.

Также обратите внимание, что тип данных может быть добавлен в конец
любого из этих типов данных с помощью :, как описано выше.
Таким образом, «timesheet.clarevans.com:list» будет глобальным
квалифицированный список.


Информационная модель

Информационная модель для YAML выглядит следующим образом.
(большое заимствование из Minimal XML).

9 0003

Тег := Последовательность одного или нескольких символов
Значение := Последовательность одного или нескольких символов
Узел := Тег
+ Значение xor Children
Children := Упорядоченная последовательность одного или нескольких узлов

Кроме того, узел может иметь следующую вычисляемую информацию.

ExtVal Расширенное значение узла. Это
Значение, если узел имеет значение, иначе
он определяется как ExtVal
первый ребенок в последовательности Дети
Тип Один из перечисленных выше типов данных.
Метка Тег без трейлера :type
Сегменты[] Массив сегментов Метки между периодами

Пример
  
    <человек:запись>
      <идентификатор: целое>
        293945
      <имя:запись>
        <дано>
          Кларк
        <семья>
          Эванс
    <журнал:список>
      <журнал:запись>
        <дата:запись>
          <день:целое>
            12
          <месяц:целое>
            1
          <год:целое>
            2001
        <описание>
           В этот день я работал над тремя темами,
           скоро последует. 
        <запись: список>
          <запись: запись>
            <длительность:целое>
               120
            <проект>
              Самообучение, ML
            <описание>
              Пройдена глава 3 книги.
            <ссылка: список>
              <ссылка>
                Элементы программирования машинного обучения, Джеффри
                Д. Ульман, ML97 издание
                  
          <запись: запись>
            <длительность:целое>
              90
            <проект>
              Двойные Близнецы
            <описание>
              Работа над графиком разработки программного обеспечения, окончательная поставка
              дата конец марта.
                
                
 

Некоторые мысли
  1. Это очень предварительные мысли по теме, обратная связь
    очень приветствуется.

    This entry was posted in Популярное