Учебники

YAML — Краткое руководство

YAML — Введение

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

Формат

Рассмотрите текст, показанный ниже —

Quick brown fox jumped over the lazy dog.

Текст YAML для этого будет представлен, как показано ниже —

yaml.load(Quick brown fox jumped over the lazy dog.)
>>'Quick brown fox jumped over the lazy dog.'

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

Примеры

Давайте разберемся с форматами в YAML с помощью следующих примеров:

Рассмотрим следующий номер точки «пи», который имеет значение 3,1415926. В YAML это представлено как плавающее число, как показано ниже —

>>> yaml.load('3.1415926536')
3.1415926536

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

eggs
ham
spam
French basil salmon terrine

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

>>> yaml.load('''
   - eggs
   - ham
   - spam
   - French basil salmon terrine
   ''')
['eggs', 'ham', 'spam', 'French basil salmon terrine']

Характеристики

YAML включает язык разметки с важной конструкцией, чтобы отличать ориентированный на данные язык с разметкой документа. Цели и особенности дизайна YAML приведены ниже —

  • Соответствует собственным структурам данных гибкой методологии и ее языкам, таким как Perl, Python, PHP, Ruby и JavaScript

  • Данные YAML переносимы между языками программирования

  • Включает в себя согласованную модель данных

  • Легко читается людьми

  • Поддерживает однонаправленную обработку

  • Простота внедрения и использования

Соответствует собственным структурам данных гибкой методологии и ее языкам, таким как Perl, Python, PHP, Ruby и JavaScript

Данные YAML переносимы между языками программирования

Включает в себя согласованную модель данных

Легко читается людьми

Поддерживает однонаправленную обработку

Простота внедрения и использования

YAML — Основы

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

Правила создания файла YAML

Когда вы создаете файл в YAML, вы должны помнить следующие основные правила —

  • YAML чувствителен к регистру

  • Файлы должны иметь расширение .yaml в качестве расширения.

  • YAML не позволяет использовать вкладки при создании файлов YAML; пробелы разрешены вместо

YAML чувствителен к регистру

Файлы должны иметь расширение .yaml в качестве расширения.

YAML не позволяет использовать вкладки при создании файлов YAML; пробелы разрешены вместо

Основные компоненты файла YAML

Основные компоненты YAML описаны ниже —

Обычный блочный формат

Этот формат блока использует дефис + пробел, чтобы начать новый элемент в указанном списке. Обратите внимание на пример, показанный ниже —

--- # Favorite movies
 - Casablanca
 - North by Northwest
 - The Man Who Wasn't There

Встроенный формат

Встроенный формат отделяется запятой и пробелом, а элементы заключаются в JSON. Обратите внимание на пример, показанный ниже —

--- # Shopping list
   [milk, groceries, eggs, juice, fruits]

Сложенный текст

Свернутый текст преобразует символы новой строки в пробелы и удаляет начальные пробелы. Обратите внимание на пример, показанный ниже —

- {name: John Smith, age: 33}
- name: Mary Smith
  age: 27

Структура, которая следует всем основным соглашениям YAML, показана ниже —

men: [John Smith, Bill Jones]
women:
  - Mary Smith
  - Susan Williams

Сводка основных элементов YAML

  • Сводка основных элементов YAML приведена здесь: Комментарии в YAML начинаются с символа ( # ).

  • Комментарии должны быть отделены от других токенов пробелами.

  • Отступы для пробелов используются для обозначения структуры.

  • Вкладки не включены в качестве отступа для файлов YAML.

  • Члены списка обозначаются дефисом ( ).

  • Члены списка заключены в квадратные скобки и разделены запятыми.

  • Ассоциативные массивы представляются с помощью двоеточия ( 🙂 в формате пары ключ-значение. Они заключены в фигурные скобки {} .

  • Несколько документов с отдельными потоками разделяются 3 дефисами (—).

  • Повторяющиеся узлы в каждом файле первоначально обозначаются амперсандом ( & ) и звездочкой ( * ) позже.

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

  • Узлы должны быть помечены восклицательным знаком ( ! ) Или двойным восклицательным знаком ( !! ), за которым следует строка, которую можно развернуть в URI или URL.

Сводка основных элементов YAML приведена здесь: Комментарии в YAML начинаются с символа ( # ).

Комментарии должны быть отделены от других токенов пробелами.

Отступы для пробелов используются для обозначения структуры.

Вкладки не включены в качестве отступа для файлов YAML.

Члены списка обозначаются дефисом ( ).

Члены списка заключены в квадратные скобки и разделены запятыми.

Ассоциативные массивы представляются с помощью двоеточия ( 🙂 в формате пары ключ-значение. Они заключены в фигурные скобки {} .

Несколько документов с отдельными потоками разделяются 3 дефисами (—).

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

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

Узлы должны быть помечены восклицательным знаком ( ! ) Или двойным восклицательным знаком ( !! ), за которым следует строка, которую можно развернуть в URI или URL.

YAML — Отступ и разделение

Отступ и разделение — это две основные концепции, когда вы изучаете любой язык программирования. В этой главе подробно рассматриваются эти две концепции, связанные с YAML.

Отступ YAML

YAML не содержит никаких обязательных пробелов. Кроме того, нет необходимости быть последовательным. Действительный отступ YAML показан ниже —

a:
   b:
      - c
      -  d
      - e
f:
      "ghi"
  • При работе с отступами в YAML следует помнить следующие правила: для блоков потока должны быть хотя бы некоторые пробелы с окружающим текущим уровнем блока.

  • Содержание потока YAML охватывает несколько строк. Начало содержимого потока начинается с { или [ .

  • Элементы списка блоков содержат те же отступы, что и уровень окружающих блоков, поскольку — считаются частью отступа.

При работе с отступами в YAML следует помнить следующие правила: для блоков потока должны быть хотя бы некоторые пробелы с окружающим текущим уровнем блока.

Содержание потока YAML охватывает несколько строк. Начало содержимого потока начинается с { или [ .

Элементы списка блоков содержат те же отступы, что и уровень окружающих блоков, поскольку — считаются частью отступа.

Пример предполагаемого блока

Обратите внимание на следующий код, который показывает отступ с примерами:

--- !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.

Разделение строк

Строки разделяются двойными кавычками. Если вы экранируете символы новой строки в данной строке, она полностью удаляется и переводится в пробел.

пример

В этом примере мы сфокусировали список животных, перечисленных в виде структуры массива с типом данных строки. Каждый новый элемент указан с префиксом дефиса, который упоминается как префикс.

-
 - Cat
 - Dog
 - Goldfish
-
 - Python
 - Lion
 - Tiger

Другой пример объяснения строкового представления в YAML приведен ниже.

 errors:
      messages:
         already_confirmed: "was already confirmed, please try signing in"
         confirmation_period_expired: "needs to be confirmed within %{period}, please request a new one"
         expired: "has expired, please request a new one"
         not_found: "not found"
         not_locked: "was not locked"
         not_saved:
            one: "1 error prohibited this %{resource} from being saved:"
            other: "%{count} errors prohibited this %{resource} from being saved:"

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

YAML — Комментарии

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

YAML поддерживает однострочные комментарии . Его структура объясняется ниже с помощью примера —

# this is single line comment.

YAML не поддерживает многострочные комментарии . Если вы хотите предоставить комментарии для нескольких строк, вы можете сделать это, как показано в примере ниже —

# this
# is a multiple
# line comment

Особенности комментариев

Особенности комментариев в YAML приведены ниже —

  • Закомментированный блок пропускается во время выполнения.

  • Комментарии помогают добавить описание для указанного блока кода.

  • Комментарии не должны появляться внутри скаляров.

  • YAML не включает какой-либо способ экранирования хеш-символа (#), поэтому в многострочной строке нет способа отделить комментарий от необработанного строкового значения.

Закомментированный блок пропускается во время выполнения.

Комментарии помогают добавить описание для указанного блока кода.

Комментарии не должны появляться внутри скаляров.

YAML не включает какой-либо способ экранирования хеш-символа (#), поэтому в многострочной строке нет способа отделить комментарий от необработанного строкового значения.

Комментарии в коллекции показаны ниже —

key: #comment 1
   - value line 1
   #comment 2
   - value line 2
   #comment 3
   - value line 3

Сочетание клавиш для комментирования блоков YAML — Ctrl + Q.

Если вы используете редактор Sublime Text , шаги для комментирования блока упомянуты ниже —

Выберите блок. Используйте «CTRL + /» в Linux и Windows и «CMD + /» для операционной системы Mac. Выполнить блок.

Обратите внимание, что те же шаги применимы, если вы используете редактор кода Visual Studio . Всегда рекомендуется использовать Sublime Text Editor для создания YAML-файлов, так как он поддерживается большинством операционных систем и содержит удобные сочетания клавиш для разработчиков.

YAML — Коллекции и Структуры

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

Отображения — это представление значения ключа, включенного в структуру JSON. Он часто используется в многоязычных системах поддержки и создании API в мобильных приложениях. Отображения используют представление пары ключ-значение с использованием двоеточия и пробела ( 🙂 .

Примеры

Рассмотрим пример последовательности скаляров, например, список игроков с мячом, как показано ниже —

- Mark Joseph
- James Stephen
- Ken Griffey

В следующем примере показано отображение скаляров на скаляры —

hr: 87
avg: 0.298
rbi: 149

В следующем примере показано отображение скаляров на последовательности:

European:
- Boston Red Sox
- Detroit Tigers
- New York Yankees

national:
- New York Mets
- Chicago Cubs
- Atlanta Braves

Коллекции могут быть использованы для отображения последовательности, которые показаны ниже —

-
name: Mark Joseph
hr: 87
avg: 0.278
-
name: James Stephen
hr: 63
avg: 0.288

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

[PHP, Perl, Python]

Эти коллекции хранятся в документах. Разделение документов в YAML обозначается тремя дефисами или тире (—). Конец документа отмечен тремя точками (…).

Разделение документов в YAML обозначается тремя черточками (—). Конец документа представлен тремя точками (…).

Представление документа называется структурным форматом, который упоминается ниже —

# Ranking of 1998 home runs
---
- Mark Joseph
- James Stephen
- Ken Griffey 

# Team ranking
---
- Chicago Cubs
- St Louis Cardinals

Знак вопроса с комбинацией пробела указывает на сложное отображение в структуре. В коллекцию блоков пользователь может включить структуру с тире, двоеточием и вопросительным знаком. В следующем примере показано отображение между последовательностями —

- 2001-07-23
? [ New York Yankees,Atlanta Braves ]
: [ 2001-07-02, 2001-08-12, 2001-08-14]

YAML — Скаляры и теги

Скаляры в YAML записываются в блочном формате с использованием литерального типа, который обозначается как ( | ). Он обозначает количество разрывов строк. В YAML скаляры записываются в сложенном стиле ( > ), где каждая строка обозначает сложенный пробел, который заканчивается пустой строкой или строкой с отступом .

Новые строки в литералах показаны ниже —

ASCII Art
--- |
\//||\/||
// || ||__

Сложенные новые строки сохраняются для более отступов и пустых строк, как показано ниже —

>
Sammy Sosa completed another
fine season with great stats.
63 Home Runs
0.288 Batting Average
What a year!

Скалярные потоки YAML включают простые стили и стили в кавычках. Стиль в двойных кавычках включает различные escape-последовательности. Скаляры потока могут включать несколько строк; разрывы строк всегда складываются в этой структуре.

plain:
This unquoted scalar
spans many lines.
quoted: "So does this
quoted scalar.\n"

В YAML нетегированные узлы указываются с конкретным типом приложения. В примерах спецификации тегов обычно используются типы seq, map и str для хранилища тегов YAML. Теги представлены в качестве примеров, которые упомянуты ниже:

Целочисленные теги

Эти теги включают в себя целочисленные значения. Они также называются числовыми тегами.

canonical: 12345
decimal: +12,345
sexagecimal: 3:25:45
octal: 014
hexadecimal: 0xC

Числа с плавающей точкой

Эти теги включают десятичные и экспоненциальные значения. Они также называются экспоненциальными метками.

canonical: 1.23015e+3
exponential: 12.3015e+02
sexagecimal: 20:30.15
fixed: 1,230.15
negative infinity: -.inf
not a number: .NaN

Разные теги

Он включает в себя различные целочисленные, плавающие и строковые значения, встроенные в них. Следовательно, это называется разные теги.

null: ~
true: y
false: n
string: '12345'

YAML — Пример полной длины

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

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

defaults: &defaults
   adapter:  postgres
   host:     localhost

development:
   database: myapp_development
   <<: *defaults

test:
   database: myapp_test
   <<: *defaults

Давайте преобразуем YAML в формат JSON и проверим вывод.

{
   "defaults": {
      "adapter": "postgres",
      "host": "localhost"
   },
   "development": {
      "database": "myapp_development",
      "adapter": "postgres",
      "host": "localhost"
   },
   "test": {
      "database": "myapp_test",
      "adapter": "postgres",
      "host": "localhost"
   }
}

Ключ по умолчанию с префиксом «<<: *» включается по мере необходимости, без необходимости повторной записи одного и того же фрагмента кода.

YAML — Процессы

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

Он включает в себя отображение, последовательность и скалярные величины, которые сериализуются для создания дерева сериализации. При сериализации объекты конвертируются с потоком байтов.

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

Обратная процедура анализирует поток байтов в сериализованное дерево событий. Позже узлы преобразуются в граф узлов. Эти значения позже преобразуются в собственную структуру данных YAML. Рисунок ниже объясняет это —

Процессы YAML

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

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

Представление

YAML представляет структуру данных, используя три вида узлов: последовательность, отображение и скаляр .

Последовательность

Последовательность относится к упорядоченному количеству записей, которое отображает неупорядоченную связь пары ключ-значение. Это соответствует списку массивов Perl или Python.

Код, показанный ниже, является примером представления последовательности:

product:
   - sku         : BL394D
     quantity    : 4
     description : Football
     price       : 450.00
   - sku         : BL4438H
     quantity    : 1
     description : Super Hoop
     price       : 2392.00

картографирование

Сопоставление, с другой стороны, представляет собой структуру данных словаря или хэш-таблицу. Пример для того же самого упомянут ниже —

batchLimit: 1000
threadCountLimit: 2
key: value
keyMapping: <What goes here?>

Скаляры

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

Сериализация

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

Пример для сериализации приведен ниже —

consumer:
   class: 'AppBundle\Entity\consumer'
   attributes:
      filters: ['customer.search', 'customer.order', 'customer.boolean']
   collectionOperations:
      get:
         method: 'GET'
         normalization_context:
       groups: ['customer_list']
   itemOperations:
      get:
         method: 'GET'
         normalization_context:
            groups: ['customer_get']

презентация

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

Примером процесса представления YAML является результат создания значения JSON. Соблюдайте приведенный ниже код для лучшего понимания —

{
   "consumer": {
      "class": "AppBundle\\Entity\\consumer",
      "attributes": {
         "filters": [
            "customer.search",
            "customer.order",
            "customer.boolean"
         ]
      },
      "collectionOperations": {
         "get": {
            "method": "GET",
            "normalization_context": {
               "groups": [
                  "customer_list"
               ]
            }
         }
      },
      "itemOperations": {
         "get": {
            "method": "GET",
            "normalization_context": {
               "groups": [
                  "customer_get"
               ]
            }
         }
      }
   }
}

анализ

Разбор является обратным процессом представления; он включает в себя поток символов и создает серию событий. Он отбрасывает детали, представленные в процессе представления, что вызывает события сериализации. Процедура синтаксического анализа может быть неудачной из-за некорректного ввода. Это в основном процедура, чтобы проверить, правильно ли сформирован YAML или нет.

Рассмотрим пример YAML, который упоминается ниже —

---
   environment: production
   classes:
      nfs::server:
         exports:
            - /srv/share1
            - /srv/share3
   parameters:
      paramter1

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

YAML lint — это онлайн-анализатор YAML, помогающий проанализировать структуру YAML, чтобы проверить, действительна она или нет. Официальная ссылка на YAML lint указана ниже: http://www.yamllint.com/

Вы можете увидеть результат анализа, как показано ниже —

YAML Lint

YAML — информационные модели

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

Для информационной модели важно представлять информацию о приложении, которая переносима между средами программирования.

Информационные модели YAML

Диаграмма, показанная выше, представляет собой обычную информационную модель, которая представлена ​​в графическом формате. В YAML представление нативных данных укоренено, связано и является ориентированным графом теговых узлов. Если мы упомянем направленный граф, он включает в себя набор узлов с ориентированным графом. Как упоминалось в информационной модели, YAML поддерживает три вида узлов, а именно:

  • Последовательности
  • Скаляры
  • Отображения

Основные определения этих узлов представления обсуждались в предыдущей главе. В этой главе мы сосредоточимся на схематическом представлении этих терминов. Следующая диаграмма последовательности представляет рабочий процесс легенд с различными типами тегов и узлов отображения.

Диаграмма последовательности работ Легенды

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

Последовательности

Узел последовательности следует последовательной архитектуре и включает упорядоченную серию из нуля или более узлов. Последовательность YAML может содержать один и тот же узел повторно или один узел.

Скаляры

Содержимое скаляров в YAML включает символы Unicode, которые могут быть представлены в формате с нулевой серией. В общем, скалярный узел включает скалярные величины.

картографирование

Узел отображения включает в себя представление пары ключ-значение. Содержимое узла отображения включает комбинацию пары ключ-значение с обязательным условием, чтобы имя ключа поддерживалось уникальным. Последовательности и отображения вместе образуют коллекцию.

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

YAML — Синтаксические символы

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

Индикаторные символы

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

Sr.No. Характер и функциональность
1

_

Обозначает запись последовательности блоков

2

?

Обозначает ключ сопоставления

3

:

Это обозначает значение отображения

4

,

Обозначает запись о потоке

5

[

Запускает последовательность потоков

6

]

Заканчивается последовательность потоков

7

{

Запускает отображение потока

8

}

Заканчивается отображение потока

9

#

Обозначает комментарии

10

&

Это обозначает свойство якоря узла

11

*

Обозначает псевдоним узла

12

!

Обозначает тег узла

13

|

Обозначает скаляр буквального блока

14

>

Обозначает сложенный скалярный блок

15

`

Одинарная кавычка окружает цитируемый скаляр потока

16

«

Двойная кавычка окружает двойную кавычку

17

%

Обозначает используемую директиву

_

Обозначает запись последовательности блоков

?

Обозначает ключ сопоставления

:

Это обозначает значение отображения

,

Обозначает запись о потоке

[

Запускает последовательность потоков

]

Заканчивается последовательность потоков

{

Запускает отображение потока

}

Заканчивается отображение потока

#

Обозначает комментарии

&

Это обозначает свойство якоря узла

*

Обозначает псевдоним узла

!

Обозначает тег узла

|

Обозначает скаляр буквального блока

>

Обозначает сложенный скалярный блок

`

Одинарная кавычка окружает цитируемый скаляр потока

«

Двойная кавычка окружает двойную кавычку

%

Обозначает используемую директиву

В следующем примере показаны символы, используемые в синтаксисе:

%YAML 1.1
---
!!map {
   ? !!str "sequence"
   : !!seq [
      !!str "one", !!str "two"
   ],
   ? !!str "mapping"
   : !!map {
      ? !!str "sky" : !!str "blue",
      ? !!str "sea" : !!str "green",
   }
}

# This represents
# only comments.
---
!!map1 {
   ? !!str "anchored"
   : !local &A1 "value",
   ? !!str "alias"
   : *A1,
}
!!str "text"

YAML — синтаксические примитивы

В этой главе вы узнаете о следующих аспектах синтаксических примитивов в YAML:

  • Производственные параметры
  • Отступы
  • Разделительные пространства
  • Игнорируемый префикс строки
  • Линия складывания

Позвольте нам понять каждый аспект в деталях.

Производственные параметры

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

вдавливание

Он обозначается символом n или m. Поток символов зависит от уровня отступа включенных в него блоков. Многие постановки параметризовали эти функции.

контекст

Обозначается через c . YAML поддерживает две группы контекстов: стили блоков и стили потоков .

Стиль

Обозначается с. Скалярное содержимое может быть представлено в одном из пяти стилей: простой, двойной кавычки и одинарные кавычки, буквальный и сложенный блок.

чавканье

Обозначается т . Блочные скаляры предлагают множество механизмов, которые помогают при обрезке блока: снимать, зажимать и удерживать . Chomping помогает в форматировании новых строк. Используется блочное представление стиля. Процесс грохочения происходит с помощью индикаторов. Индикаторы контролируют, какой вывод следует производить с помощью новых строк. Новые строки удаляются с помощью оператора (-), а новые строки добавляются с помощью оператора (+) .

Пример процесса чомпинга показан ниже —

strip: |-
   text↓
clip: |
   text↓
keep: |+
   text↓

Вывод после анализа указанного примера YAML выглядит следующим образом:

Вывод после анализа указанного YAML

Отступы

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

%YAML 1.1
---
!!map {
   ? !!str "Not indented"
   : !!map {
      ? !!str "By one space"
      : !!str "By four\n spaces\n",
      ? !!str "Flow style"
      : !!seq [
         !!str "By two",
         !!str "Still by two",
         !!str "Again by two",
      ]
   }
}

Вывод, который вы можете увидеть после отступа, выглядит следующим образом:

{
   "Not indented": {
      "By one space": "By four\n spaces\n", 
      "Flow style": [
         "By two", 
         "Still by two", 
         "Again by two"
      ]
   }
}

Разделительные пространства

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

Следующий фрагмент кода показывает использование пробелов —

{ · first: · Sammy, · last: · Sosa · }

Синтаксис, показанный выше, дает следующий вывод:

{
   "\u00b7 last": "\u00b7 Sosa \u00b7", 
   "\u00b7 first": "\u00b7 Sammy"
}

Игнорируемый префикс строки

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

В следующем примере показано систематическое использование игнорируемого префикса строки:

%YAML 1.1
---
!!map {
   ? !!str "plain"
   : !!str "text lines",
   ? !!str "quoted"
   : !!str "text lines",
   ? !!str "block"
   : !!str "text·®lines\n"
}

Результат, достигнутый для потоков блоков, следующий:

{
   "plain": "text lines", 
   "quoted": "text lines", 
   "block": "text\u00b7\u00aelines\n"
}

Линия складывания

Line Folding позволяет разбивать длинные строки для удобства чтения. Большее количество коротких строк означает лучшую читаемость. Сгибание строки достигается за счет оригинальной семантики длинной строки. Следующий пример демонстрирует сгибание строки —

%YAML 1.1
--- !!str
"specific\L\
trimmed\n\n\n\
as space"

Вы можете увидеть выходные данные для свертывания строк в формате JSON следующим образом:

"specific\u2028trimmed\n\n\nas space"

YAML — символьные потоки

В YAML вы сталкиваетесь с различными потоками символов следующим образом:

  • Директивы
  • Маркеры границ документа
  • документы
  • Полный поток

В этой главе мы обсудим их подробно.

Директивы

Директивы являются основными инструкциями, используемыми в процессоре YAML. Директивы — это детали представления, такие как комментарии, которые не отражены в дереве сериализации. В YAML нет способа определить частные директивы. В этом разделе обсуждаются различные типы директив с соответствующими примерами —

Зарезервированные Директивы

Зарезервированные директивы инициализируются тремя символами дефиса (—), как показано в примере ниже. Зарезервированные директивы преобразуются в конкретное значение JSON.

%YAML 1.1
--- !!str
"foo"

Директива YAML

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

%YAML 1.1
---
!!str "foo"

Маркеры границ документа

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

Следующий код объясняет это примерами:

%YAML 1.1
---
!!str "foo"
%YAML 1.1
---
!!str "bar"
%YAML 1.1
---
!!str "baz"

документы

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

В YAML используются два типа документов. Они объяснены в этом разделе —

Явные документы

Он начинается с маркера начала документа, за которым следует представление корневого узла. Пример явного объявления YAML приведен ниже —

---

some: yaml

...

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

{
   "some": "yaml"
}

Неявные документы

Эти документы не начинаются с маркера начала документа. Соблюдайте приведенный ниже код —

fruits:
   - Apple
   - Orange
   - Pineapple
   - Mango

Преобразуя эти значения в формат JSON, мы получаем вывод в виде простого объекта JSON, как показано ниже —

{
   "fruits": [
      "Apple",
      "Orange",
      "Pineapple",
      "Mango"
   ]
}

Полный поток

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

Пример полного потока (символьный поток) показан ниже —

%YAML 1.1
---
!!str "Text content\n"

YAML — Свойства узла

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

Основной пример представления узла следующий:

%YAML 1.1
---
!!map {
   ? &A1 !!str "foo"
   : !!str "bar",
   ? !!str &A2 "baz"
   : *a1
}

Узлы якоря

Свойство привязки представляет узел для будущей ссылки. Поток символов представления YAML в узле обозначается индикатором амперсанда (&) . Процессору YAML не нужно сохранять имя якоря с деталями представления, скомпонованными в нем. Следующий код объясняет это —

%YAML 1.1
---
!!map {
   ? !!str "First occurence"
   : &A !!str "Value",
   ? !!str "Second occurence"
   : *A
}

Вывод YAML, созданного с помощью узлов привязки, показан ниже —

---
!!map {
   ? !!str "First occurence"
   : !!str "Value",
   ? !!str "Second occurence"
   : !!str "Value",
}

Теги узла

Свойство tag представляет тип собственной структуры данных, которая полностью определяет узел. Тег представлен с помощью ( ! ) Индикатора. Теги рассматриваются как неотъемлемая часть графа представления. Следующий пример подробно объясняет теги узла —

%YAML 1.1
---
!!map {
   ? !<tag:yaml.org,2002:str> "foo"
   : !<!bar> "baz"
}

Содержание узла

Контент узла может быть представлен в виде потока или в формате блока. Содержимое блока распространяется до конца строки и использует отступ для обозначения структуры. Каждый вид коллекции может быть представлен в определенном едином стиле сбора потока или может рассматриваться как один блок. Следующий код объясняет это подробно —

%YAML 1.1
---
!!map {
   ? !!str "foo"
   : !!str "bar baz"
}

%YAML 1.1
---
!!str "foo bar"

%YAML 1.1
---
!!str "foo bar"

%YAML 1.1
---
!!str "foo bar\n"

YAML — Скалярный заголовок блока

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

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

Представление скаляров приведено ниже —

%YAML 1.1
---
!!map {
   ? !!str "simple key"
   : !!map {
      ? !!str "also simple"
      : !!str "value",
      ? !!str "not a simple key"
      : !!str "any value"
   }
}

Сгенерированный вывод блочных скалярных заголовков показан ниже —

{
   "simple key": {
      "not a simple key": "any value", 
      "also simple": "value"
   }
}

Скалярное содержимое маркера документа

Все символы в этом примере рассматриваются как содержимое, включая символы внутреннего пробела.

%YAML 1.1
---
!!map {
   ? !!str "---"
   : !!str "foo",
   ? !!str "...",
   : !!str "bar"
}

%YAML 1.1
---
!!seq [
   !!str "---",
   !!str "...",
   !!map {
      ? !!str "---"
      : !!str "..."
   }
]

Простые разрывы линий представлены в примере, приведенном ниже —

%YAML 1.1
---
!!str "as space \
trimmed\n\
specific\L\n\
none"

Соответствующий вывод JSON для этого же упомянут ниже —

"as space trimmed\nspecific\u2028\nnone"

YAML — Flow Styles

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

  • Узлы псевдонимов
  • Пустые узлы
  • Flow Скалярные стили
  • Стили коллекции Flow
  • Узлы потока

Пример псевдонимов узлов показан ниже —

%YAML 1.2
---
!!map {
   ? !!str "First occurrence"
   : &A !!str "Foo",
   ? !!str "Override anchor"
   : &B !!str "Bar",
   ? !!str "Second occurrence"
   : *A,
   ? !!str "Reuse anchor"
   : *B,
}

Вывод JSON кода, приведенного выше, приведен ниже —

{
   "First occurrence": "Foo", 
   "Second occurrence": "Foo", 
   "Override anchor": "Bar", 
   "Reuse anchor": "Bar"
}

Узлы с пустым содержимым считаются пустыми узлами. Следующий пример показывает это —

%YAML 1.2
---
!!map {
   ? !!str "foo" : !!str "",
   ? !!str "" : !!str "bar",
}

Вывод пустых узлов в JSON представлен ниже:

{
   "": "bar", 
   "foo": ""
}

Скалярные стили потока включают в себя двойные, одинарные и простые типы. Основной пример для того же приведен ниже —

%YAML 1.2
---
!!map {
   ? !!str "implicit block key"
   : !!seq [
      !!map {
         ? !!str "implicit flow key"
         : !!str "value",
      }
   ]  
}

Вывод в формате JSON для приведенного выше примера показан ниже —

{
   "implicit block key": [
      {
         "implicit flow key": "value"
      }
   ] 
}

Коллекция потоков в YAML вложена вместе с коллекцией блоков в другую коллекцию потоков. Записи сбора потока заканчиваются запятой ( , ). В следующем примере подробно объясняется блок сбора потока —

%YAML 1.2
---
!!seq [
   !!seq [
      !!str "one",
      !!str "two",
   ],
   
   !!seq [
      !!str "three",
      !!str "four",
   ],
]

Вывод для сбора потока в JSON показан ниже —

[
   [
      "one", 
      "two"
   ], 
   [
      "three", 
      "four"
   ]
]

Стили потока, такие как JSON, включают индикаторы начала и конца. Единственный стиль потока, который не имеет какого-либо свойства, это простой скаляр.

%YAML 1.2
---
!!seq [
!!seq [ !!str "a", !!str "b" ],
!!map { ? !!str "a" : !!str "b" },
!!str "a",
!!str "b",
!!str "c",]

Вывод кода, показанного выше в формате JSON, приведен ниже —

[
   [
      "a", 
      "b"
   ], 
   
   {
      "a": "b"
   }, 
   
   "a", 
   "b", 
   "c"
]

YAML — блочные стили

YAML включает в себя два блочных скалярных стиля: буквальный и сложенный . Блочные скаляры управляются несколькими индикаторами с заголовком, предшествующим самому содержанию. Пример блочных скалярных заголовков приведен ниже —

%YAML 1.2
---
!!seq [
   !!str "literal\n",
   !!str "·folded\n",
   !!str "keep\n\n",
   !!str "·strip",
]

Вывод в формате JSON с поведением по умолчанию приведен ниже —

[
   "literal\n", 
   "\u00b7folded\n", 
   "keep\n\n", 
   "\u00b7strip"
]

Типы стилей блоков

Существует четыре типа стилей блоков: буквальный, сложенный, сохраненный и раздельный. Эти стили блоков определяются с помощью сценария блочной компоновки. Пример сценария блочного чипинга приведен ниже —

%YAML 1.2
---
!!map {
   ? !!str "strip"
   : !!str "# text",
   ? !!str "clip"
   : !!str "# text\n",
   ? !!str "keep"
   : !!str "# text\n",
}

Вы можете увидеть выходные данные, сгенерированные в трех форматах в формате JSON, как показано ниже:

{
   "strip": "# text", 
   "clip": "# text\n", 
   "keep": "# text\n"
}

Сжатие в YAML контролирует последние разрывы и конечные пустые строки, которые интерпретируются в различных формах.

демонтаж

В этом случае окончательный разрыв строки и пустые строки исключаются для скалярного содержимого. Это указывается индикатором гудения «-».

вырезка

Отсечение считается поведением по умолчанию, если не указан явный индикатор чомпинга. Символ последнего разрыва сохраняется в содержимом скаляра. Лучший пример отсечения показан в примере выше. Он заканчивается символом новой строки «\ n» .

хранение

Сохранение относится к дополнению с представлением индикатора «+». Созданные дополнительные строки не подлежат сворачиванию. Дополнительные линии не подлежат складыванию.

YAML — стили последовательности

Чтобы понять стили последовательности, важно понимать коллекции. Концепция коллекций и стили последовательности работают параллельно. Коллекция в YAML представлена ​​с правильными стилями последовательности. Если вы хотите указать правильную последовательность тегов, всегда обращайтесь к коллекциям. Коллекции в YAML индексируются последовательными целыми числами, начинающимися с нуля, как представлено в массивах. Фокус последовательности стилей начинается с коллекций.

пример

Давайте рассмотрим количество планет во вселенной как последовательность, которая может быть создана как коллекция. Следующий код показывает, как представить стили последовательности планет во вселенной —

# Ordered sequence of nodes in YAML STRUCTURE
Block style: !!seq
- Mercury   # Rotates - no light/dark sides.
- Venus     # Deadliest. Aptly named.
- Earth     # Mostly dirt.
- Mars      # Seems empty.
- Jupiter   # The king.
- Saturn    # Pretty.
- Uranus    # Where the sun hardly shines.
- Neptune   # Boring. No rings.
- Pluto     # You call this a planet?
Flow style: !!seq [ Mercury, Venus, Earth, Mars,      # Rocks
                    Jupiter, Saturn, Uranus, Neptune, # Gas
                    Pluto ]                           # Overrated

Затем вы можете увидеть следующий вывод для упорядоченной последовательности в формате JSON —

{
   "Flow style": [
      "Mercury", 
      "Venus", 
      "Earth", 
      "Mars", 
      "Jupiter", 
      "Saturn", 
      "Uranus", 
      "Neptune", 
      "Pluto"
   ], 
   
   "Block style": [
      "Mercury", 
      "Venus", 
      "Earth", 
      "Mars", 
      "Jupiter", 
      "Saturn", 
      "Uranus", 
      "Neptune", 
      "Pluto"
   ]
}

YAML — Отображения потока

Отображения потока в YAML представляют собой неупорядоченную коллекцию пар ключ-значение. Они также называются узлами отображения. Обратите внимание, что ключи должны быть уникальными. Если в структуре отображения потока есть дублирование ключей, это приведет к ошибке. Порядок ключей генерируется в дереве сериализации.

пример

Пример структуры отображения потока показан ниже —

%YAML 1.1
paper:
   uuid: 8a8cbf60-e067-11e3-8b68-0800200c9a66
   name: On formally undecidable propositions of  Principia Mathematica and related systems I.
   author: Kurt Gödel.
tags:
   - tag:
      uuid: 98fb0d90-e067-11e3-8b68-0800200c9a66
      name: Mathematics
   - tag:
      uuid: 3f25f680-e068-11e3-8b68-0800200c9a66
      name: Logic

Вывод отображенной последовательности (неупорядоченный список) в формате JSON показан ниже:

{
   "paper": {
      "uuid": "8a8cbf60-e067-11e3-8b68-0800200c9a66",
      "name": "On formally undecidable propositions of Principia Mathematica and related systems I.",
      "author": "Kurt Gödel."
   },
   "tags": [
      {
         "tag": {
            "uuid": "98fb0d90-e067-11e3-8b68-0800200c9a66",
            "name": "Mathematics"
         }
      },
      {
         "tag": {
            "uuid": "3f25f680-e068-11e3-8b68-0800200c9a66",
            "name": "Logic"
         }
      }
   ]
}

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

YAML — последовательности блоков

Последовательности блоков YAML представляют собой серию узлов. Каждый элемент обозначается лидирующим индикатором «-». Обратите внимание, что индикатор «-» в YAML должен быть отделен от узла пробелом.

Основное представление последовательности блоков приведено ниже —

block sequence:
··- one↓
  - two : three↓

пример

Обратите внимание на следующие примеры для лучшего понимания последовательности блоков.

Пример 1

port: &ports
  adapter:  postgres
  host:     localhost

development:
  database: myapp_development
  <<: *ports

Вывод последовательностей блоков в формате JSON приведен ниже —

{
   "port": {
      "adapter": "postgres",
      "host": "localhost"
   },
   "development": {
      "database": "myapp_development",
      "adapter": "postgres",
      "host": "localhost"
   }
}

YAML — отказоустойчивая схема

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

Типы

Существует два типа отказоустойчивой схемы: общее сопоставление и общая последовательность

Универсальное картографирование

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

Пример для представления общего отображения приведен ниже —

Clark : Evans
Ingy : döt Net
Oren : Ben-Kiki
Flow style: !!map { Clark: Evans, Ingy: döt Net, Oren: Ben-Kiki }

Вывод общей структуры отображения в формате JSON показан ниже —

{
   "Oren": "Ben-Kiki", 
   "Ingy": "d\u00f6t Net", 
   "Clark": "Evans", 
   "Flow style": {
      "Oren": "Ben-Kiki", 
      "Ingy": "d\u00f6t Net", 
      "Clark": "Evans"
   }
}

Общая последовательность

Это представляет тип последовательности. Он включает в себя коллекцию, проиндексированную последовательными целыми числами, начиная с нуля. Он представлен с тегом !! seq .

Clark : Evans
Ingy : döt Net
Oren : Ben-Kiki
Flow style: !!seq { Clark: Evans, Ingy: döt Net, Oren: Ben-Kiki }

Выход для этой общей последовательности отказов

schema is shown below:
{
   "Oren": "Ben-Kiki", 
   "Ingy": "d\u00f6t Net", 
   "Clark": "Evans", 
   "Flow style": {
      "Oren": "Ben-Kiki", 
      "Ingy": "d\u00f6t Net", 
      "Clark": "Evans"
   }
}

YAML — JSON схема

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

Схема JSON является скалярной и не имеет значения. Запись сопоставления в схеме JSON представлена ​​в формате некоторой пары ключ-значение, где значение null считается допустимым.

пример

Нулевая схема JSON представлена, как показано ниже —

!!null null: value for null key
key with null value: !!null null

Результат представления JSON упомянут ниже:

{
   "null": "value for null key", 
   "key with null value": null
}

пример

В следующем примере представлена ​​логическая схема JSON:

YAML is a superset of JSON: !!bool true
Pluto is a planet: !!bool false

Ниже приведен вывод для того же в формате JSON —

{
   "YAML is a superset of JSON": true, 
   "Pluto is a planet": false
}

пример

В следующем примере представлена ​​целочисленная схема JSON —

negative: !!int -12
zero: !!int 0
positive: !!int 34

Вывод сгенерированной целочисленной схемы JSON показан ниже:

{
   "positive": 34, 
   "zero": 0, 
   "negative": -12
}

пример

Теги в схеме JSON представлены в следующем примере:

A null: null
Booleans: [ true, false ]
Integers: [ 0, -0, 3, -19 ]
Floats: [ 0., -0.0, 12e03, -2E+05 ]
Invalid: [ True, Null, 0o7, 0x3A, +12.3 ]

Вы можете найти вывод JSON, как показано ниже —