YAML 语法基础原语怎么用?

文章导读
上一个 测验 下一个 在本章中,您将学习 YAML 中语法原语的以下方面 −
📋 目录
  1. 生成参数
  2. 缩进空格
  3. 分隔空格
  4. 忽略的行前缀
  5. 行折叠
A A

YAML - 语法原语



上一个
测验
下一个

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

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

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

生成参数

生成参数包括一组参数及其允许值的范围,这些参数用于特定的生成。YAML 中使用的生成参数列表如下 −

缩进

由字符 nm 表示。字符流取决于其中包含的块的缩进级别。许多生成已对这些特性进行了参数化。

上下文

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

样式

由 s 表示。标量内容可以以五种样式之一呈现:plain、双引号流、单引号流、literal 和 folded block

Chomping

t 表示。块标量提供了多种机制来帮助修剪块:strip、clipkeep。Chomping 有助于格式化换行字符串。它用于块样式表示。Chomping 过程通过指示符实现。指示符控制字符串换行应产生什么输出。使用 (-) 操作符移除换行,使用 (+) 操作符添加换行。

以下显示了 chomping 过程的示例 −

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

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

解析指定 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"