01-YAML 简介和语法
0、一些网站
YAML
官方的一些资料。YAML
在线编辑及校验工具
1、YAML 简介
YAML
(YAML Ain't Markup Language
YAML不是一种标记语言的缩写)是一种人类可读的完整的数据序列化语言。
YAML 的语法和其他高级语言类似,并且可以简单表达清单、散列表,标量等数据形态。它使用空白符号缩进和大量依赖外观的特色,特别适合用来表达或编辑数据结构、各种配置文件、倾印调试内容、文件大纲(例如:许多电子邮件标题格式和YAML非常接近)
- 文件的标准扩展名为
.yaml
,也可接受.yml
扩展名; YAML
基本语法规则(基于缩进的Block Style
):- 大小写敏感;
- 使用缩进表示层级关系(类似Python风格);
- 缩进不允许使用Tab制表符,只允许使用空格字符;
- 缩进的空格数不重要,但官方推荐使用2个空格字符;
YAML
基本语法规则(基于显式指示符的表示范围的Flow Style
):- 流序列:以逗号分隔的列表形式写入,并置于方括号
[]
内; - 流映射:以逗号分隔的列表形式写入,并置于大括号
{}
内;
- 流序列:以逗号分隔的列表形式写入,并置于方括号
YAML
支持3种基本数据类型:- 标量(
Scalar
):原子数据类型,如:字符串(String
)、数字(Numbers
)、布尔值(Boolean
)和空值(null
)等; - 序列(
Sequence
):节点列表,类似某些编程语言的数组(Array
)、列表(List
)等; - 映射(
Mapping
):节点到节点的映射,键值对,类似某些编程语言的哈希(Hash
)、哈希映射(Hash Map
)、字典(Dict
)、对象(Objects
)等;
与许多编程语言不同,键key
可以是序列或映射。
- 标量(
- 一个
YAML
文件或流可以包含多个文档Documents
- 文档可以显式地以
---
开头(可选的)。在规范中称此为指令结束标记
,但实际使用中更多称为文档开始标记
; - 文档可以显式地以
...
结尾(可选的)。在规范中称此为文档结束标记
,如果文档没有指令,可以省略---
,仅用...
来分割多个文档; - 如果
YAML
文件或流仅包含一个文档,那么---
...
可以省略
- 文档可以显式地以
YAML
支持两个指令:- 版本指令:指令放在
---
之前行,如%YAML 1.2
用于告知 YAML 处理器使用哪个版本处理当前文档; - 标签指令:为用户提供自定义处理程序的速记标记的方法,一般很少使用
- 版本指令:指令放在
2、YMAL 语法
2.1、注释
YAML 允许使用注释,注释以“#”开头,直到行尾都是注释。注释可以用来解释代码或者标记代码。
1 |
|
2.2、标量(Scalar)
YMAL 中标量是最基本的不可再分割的值,如 字符串(String
)、数字(Numbers
)、布尔值(Boolean
)和空值(null
)等。
其中最常见也是最复杂的是字符串(String
)。基本上有五种方式来表达字符串:
- 流标量
Flow Scalars
:(普通标量、单引号标量、双引号标量) - 块标量
Block Scalars
:(文本块标量、折叠块标量)
2.2.1、流标量 Flow Scalars
1 |
|
不能在普通标量开头使用的字符(YAML语法元素):
!
Tag 标记符, 如!!null
&
锚点 符,如&mapping_for_later_use
*
别名引用 符,如*mapping_for_later_use
-<space>
流序列 符:<space>
流映射 符?<space>
复杂key声明符{
}
[
]
流映射及流序列 符,
流收集条目分隔符#
注释符|
>
块标量@
```(反引号)保留字符"
'
双引号和单引号<space>
%
指令符
不能在普通标量中间使用的字符序列:
:<space>
键/值分隔符。允许使用冒号,但前提是不允许后跟空格<space>#
这将开始评论
2.2.2、块标量 Block Scalars
当字符串较长时,最好使用块标量 来使其更具可读性。
块标量的一个优点是,在其内部的任何字符序列都是被允许的,不存在转义的情况。
(除了用于缩进的空格,行开头或结尾的空格将被保留。)
1 |
|
2.3、映射(Mapping)
YAML 以键值对形式存储数据,以:
分隔键和值。:
和值之间必须有一个空格。
1 |
|
2.4、序列(Sequence)
YAML 支持序列(列表),以-
开头,后跟一个空格和列表项的值。列表项可以是任何类型的数据,标量、序列、映射等。
-
之前是否缩进2个空格看个人习惯,官网上有的地方缩进了,有的地方没缩进
1 |
|
2.5、锚点(Anchor)与别名(Alias)
YAML 支持使用锚点(Anchor
)与别名(Alias
)来避免重复定义数据。可以使用&
定义一个锚点,使用*
引用已定义的锚点。
1 |
|
2.6、继承
YAML 支持继承数据。可以使用<<
表示继承锚点数据(仅继承未有的数据部分)。
1 |
|
01-YAML 简介和语法
https://flepeng.github.io/021-YAML-01-YAML-简介和语法/