请通过适当的示例说明YAML中不同类型的Context

时间:2019-06-01 20:24:47

标签: yaml

YAML包含六种不同类型的上下文。 阻止,阻止,流入,阻止,阻止键,阻止键。 我得到了Block键和Flow键之间的区别,但是我无法 区分其他四个上下文。

我已经在YAML规范中看到了很多示例及其定义,但是我无法正确区分它们。 因此,请通过一些示例说明它们之间的区别,并说明何时将一个上下文转换为另一个上下文。

1 个答案:

答案 0 :(得分:0)

您可以在Production parameters下找到对六个不同上下文的简短描述

封锁

---
- foo

每个块序列的值都在块内环境中。

此外,顶级节点也处于块入上下文中,尽管您只能从生产207而不是上下文的简短描述中得出。

封锁

---
key:
- foo

块映射的值在块外上下文中。这对于缩进非常重要,因此这就是为什么您可以“零缩进”这样的序列(或者为什么将“ count”破折号作为缩进)。

以下是定义此差异的产品: 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,并在#yaml-dev中的freenode IRC上加入我们。