YAML - 语法原语

在本章中,您将了解 YAML 语法原语的以下方面 −

  • 生产参数
  • 缩进空格
  • 分隔空格
  • 忽略的行前缀
  • 行折叠

让我们详细了解每个方面。

生产参数

生产参数包括一组参数和特定生产中使用的允许值范围。以下生产参数列表在 YAML −

中使用。

缩进

它用字符 nm 表示,字符流取决于其中包含的块的缩进级别。许多产品已将这些功能参数化。

上下文

它用c表示。YAML 支持两组上下文:块样式流样式

样式

它用 s 表示。标量内容可以采用以下五种样式之一呈现:纯文本、双引号和单引号流、文字和折叠块。

Chomping

它用t表示。块标量提供了许多有助于修剪块的机制:剥离、剪辑保留。Chomping 有助于格式化新行字符串。它用于块样式表示。Chomping 过程在指示器的帮助下发生。指示器控制应使用字符串换行符生成哪些输出。使用 (-) 运算符删除换行符,使用 (+) 运算符添加换行符。

下面显示了 chomping 过程的一个示例 −

strip: |-
   text↓
clip: |
   text↓
keep: |+
   text↓

解析指定的 YAML 示例后的输出如下 −

解析指定的 YAML 后的输出

缩进空格

在 YAML 字符流中,缩进定义为由零个或多个字符组成的换行符。需要牢记的最重要的一点是缩进不能包含任何制表符。缩进中的字符永远不应被视为节点内容信息的一部分。请观察以下代码以更好地理解 −

%YAML 1.1
---
!!map {
   ? !!str "Not indented"
   : !!map {
      ? !!str "By one space"
      : !!str "By four
 spaces
",
      ? !!str "Flow style"
      : !!seq [
         !!str "By two",
         !!str "Still by two",
         !!str "Again by two",
      ]
   }
}

缩进后可以看到的输出如下 −

{
   "Not indented": {
      "By one space": "By four
 spaces
", 
      "Flow style": [
         "By two", 
         "Still by two", 
         "Again by two"
      ]
   }
}

分隔符

YAML 使用空格字符来分隔标记。最重要的一点是 YAML 中的分隔符不应包含制表符。

以下代码显示了分隔符的用法 −

{ · first: · Sammy, · last: · Sosa · }
The syntax shown above gives you the following output:
{
   "\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
"
}

块流实现的输出如下 −

{
   "plain": "text lines", 
   "quoted": "text lines", 
   "block": "text\u00b7\u00aelines
"
}

折行

折行允许拆分长行以提高可读性。短行越多,可读性越好。折行是通过注意长行的原始语义来实现的。以下示例演示了折行 −

%YAML 1.1
--- !!str
"specific\L\
trimmed


\
as space"

您可以看到 JSON 格式的行折叠输出,如下所示 −

"specific\u2028trimmed


as space"