📜  YAML-语法基元

📅  最后修改于: 2020-10-14 08:39:41             🧑  作者: Mango


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

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

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

生产参数

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

缩进

它是由字符N或者M字符流表示取决于包括在它的块的缩进层次。许多产品已将这些功能参数化。

语境

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

风格

用s表示。标量内容可以用以下五种样式之一表示:普通,双引号和单引号流,字面量和折叠块。

t表示。块标量提供了许多有助于修剪块的机制:剥离,修剪保持。压缩有助于格式化新的行字符串。它用于块样式表示。斩压过程在指标的帮助下发生。指标控制应与字符串的换行符产生的输出结果。用(-)运算符删除换行符,并用(+)运算符添加换行符。

下图显示了一个斩压过程的示例-

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

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

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