Пожалуйста, объясните различные типы контекста в YAML с соответствующими примерами. - PullRequest
0 голосов
/ 01 июня 2019

YAML содержит шесть различных типов контекстов. Блокировка, блокировка, вход, выход, блокировка, подача. Я получаю разницу между Block-key и Flow-key, но не могу различать четыре других контекста.

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

1 Ответ

0 голосов
/ 02 июня 2019

Краткое описание шести различных контекстов можно найти в разделе Параметры производства

block-in

---
- foo

Каждое значение последовательности блоков находится в блоке-in context.

Кроме того, узлы верхнего уровня также находятся в контексте block-in, хотя вы можете получить это только из производственного кода 207, а не из краткого описания контекстов.

block-out

---
key:
- foo

Значение отображения блока находится в контексте блокировки.Это важно для отступа, поэтому вы можете «нулевой отступ» такой последовательности (или почему пунктир «считать» как отступ).

Вот результат, который определяет эту разницу: https://yaml.org/spec/1.2/spec.html#seq-spaces(n,c)

[201]   seq-spaces(n,c) ::= c = block-out ⇒ n-1
                            c = block-in  ⇒ n

ключ блока

---
foo: bar

Ключи в отображении блока находятся в контексте ключа блока.

ключ потока

---
{ foo: bar }

Ключи в отображении потока находятся в контексте ключа потока.

входящий поток

---
{ key: foo }
---
[ foo ]

Значения в коллекциях потоков находятся в контексте входящего потока.

выходной поток

---
- foo

Значения вне коллекций потоков находятся в контексте потока.


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

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

Обязательно используйте YAML Test Suite при реализации анализатора и присоединитесьнас на freenode IRC в # yaml-dev.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...