在本章中,将了解YAML中语法原语的以下几个方面 -
下面来详细地了解每个方面。
生产参数包括一组参数以及在特定生产中使用的允许值范围。 YAML中使用以下生产参数列表 -
缩进
它由字符n
或m
表示字符流取决于其中包含的块的缩进级别。 许多生产都参数化了这些功能。
上下文
它由c
表示,YAML支持两组上下文:块样式和流样式。
样式
它由s
表示。 标量内容可以以五种样式之一呈现:普通,双引号和单引号流,字面和折叠块。
Chomping
它用t
表示。 块标量提供了许多有助于修剪块的机制:剥离,剪辑和保留。 Chomping
有助于格式化新的线串。 它使用块样式表示。 Chomping
过程在指标的帮助下发生。 指标控制使用字符串换行符生成的输出。 使用( -
)运算符删除换行符,并使用(+
)运算符添加换行符。
Chomping
过程的一个例子如下所示 -
strip: |- text↓ clip: | text↓ keep: |+ text↓
解析指定的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" }
折叠线允许打破长线以便于阅读。更多的短线意味着更好的可读性。 通过注意长行的原始语义来实现行折叠。 以下示例演示折叠线 -
%YAML 1.1 --- !!str "specific\L\ trimmed\n\n\n\ as space"
可以看到JSON格式的折叠输出如下 -
"specific\u2028trimmed\n\n\nas space"