YAML 语法基础
在本章中,你将了解YAML语法基础的以下几个方面:
- 产生参数
- 缩进空格
- 分隔空格
- 忽略行前缀
- 折叠行
让我们逐个详细了解每个方面。
产生参数
产生参数包括一组参数和允许的值的范围,这些参数在特定的产生上使用。以下是YAML中使用的产生参数:
缩进
它由字符 n 或 m 表示。字符流取决于其中包含的块的缩进级别。许多产生都对这些特性进行了参数化。
上下文
它由 c 表示。YAML支持两组上下文: 块样式 和 流样式 。
样式
它由 s 表示。标量内容可以以以下五种样式之一呈现: 纯文本、双引号和单引号流、字面块和折叠块 。
回收
它由 t 表示。块标量提供了许多机制,有助于修整块: 剪裁、裁剪和保持 。回收有助于格式化换行符串。它在块样式表示中使用。回收过程是通过指示符来控制的。指示符控制应该生成带有字符串换行符的输出。用 (-) 操作符删除换行符,用 (+) 操作符添加换行符。
下面是一个回收过程的示例:
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"