Краткое описание шести различных контекстов можно найти в разделе Параметры производства
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.