Учебники

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 следующим образом: