YAML - 语法原语
在本章中,您将学习 YAML 中语法原语的以下方面 −
- 生成参数
- 缩进空格
- 分隔空格
- 忽略的行前缀
- 行折叠
让我们详细了解每个方面。
生成参数
生成参数包括一组参数及其允许值的范围,这些参数用于特定的生成。YAML 中使用的生成参数列表如下 −
缩进
由字符 n 或 m 表示。字符流取决于其中包含的块的缩进级别。许多生成已对这些特性进行了参数化。
上下文
由 c 表示。YAML 支持两组上下文:块样式 和 流样式。
样式
由 s 表示。标量内容可以以五种样式之一呈现:plain、双引号流、单引号流、literal 和 folded block。
Chomping
由 t 表示。块标量提供了多种机制来帮助修剪块:strip、clip 和 keep。Chomping 有助于格式化换行字符串。它用于块样式表示。Chomping 过程通过指示符实现。指示符控制字符串换行应产生什么输出。使用 (-) 操作符移除换行,使用 (+) 操作符添加换行。
以下显示了 chomping 过程的示例 −
strip: |- text↓ clip: | text↓ keep: |+ text↓
解析指定的 YAML 示例后的输出如下 −
缩进空格
在 YAML 字符流中,缩进定义为由零个或多个字符组成的换行字符。最重要的一点是缩进不得包含任何 tab 字符。缩进中的字符绝不应被视为节点内容信息的一部分。观察以下代码以更好地理解 −
%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 使用空格字符在 token 之间进行分隔。最重要的一点是 YAML 中的分隔不应包含 tab 字符。
以下代码行展示了分隔空格的使用 −
{ first: Sammy, last: Sosa }
上面显示的语法给出了以下输出:
{
"\u00b7 last": "\u00b7 Sosa \u00b7",
"\u00b7 first": "\u00b7 Sammy"
}
忽略的行前缀
空前缀始终包括取决于标量类型的缩进,还包括前导空白。Plain 标量不应包含任何 tab 字符。另一方面,quoted 标量可能包含 tab 字符。块标量完全依赖于缩进。
以下示例系统地展示了忽略行前缀的工作方式 −
%YAML 1.1
---
!!map {
? !!str "plain"
: !!str "text lines",
? !!str "quoted"
: !!str "text lines",
? !!str "block"
: !!str "textlines\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"