# YAML
- YAML 是专门用来写配置文件的语言(它可以是 "YAML Ain't a Markup Language" 亦或是 "Yet Another Markup Language")
 - YAML 数据能够存储在独立的.yml 文件中。
 
# YAML 语法
# 基本语法
- 大小写敏感
 - 使用缩进表示层级关系
 - 缩进不允许使用 tab,只允许空格
 - 缩进的空格数不重要,只要相同层级的元素左对齐即可
 - #表示注释
 
# 支持的数据类型
- 对象:键值对的集合,又称为映射 / 哈希 / 字典
 - 数组:一组按次序排列的值,又称为序列 / 列表
 - 纯量:单个的、不可再分的值
 
# YAML 数组
#以 - 开头的数组 | |
- value1 | |
- value2 | |
#多维数组 | |
key: [value1, value2, ...]  | 
# YAML 纯量
- 字符串
 - 布尔值
 - 整数
 - 浮点数
 - Null
 - 时间
 - 日期
 
bool:  | |
- TRUE #true, True 都可以  | |
- FALSE #false, False 都可以  | |
float:  | |
- 2.33  | |
- 6.8523015e+5 #可以使用科学计数法  | |
int:  | |
- 233  | |
- 0b1110_1001 #二进制表示  | |
null:  | |
nodeName: 'node'  | |
parent: ~ #使用~表示 null  | |
string:  | |
    - 你好世界 | |
- 'Hello world' #可以使用双引号或者单引号包裹特殊字符  | |
    - line1 | |
      line2  #字符串可以拆成多行,每一行会被转化成一个空格 | |
date:  | |
- 2233-02-33 #日期必须使用 ISO 8601 格式,即 yyyy-MM-dd  | |
datetime:  | |
- 2233-02-33T12:02:33+08:00 #时间使用 ISO 8601 格式,时间和日期之间使用 T 连接,最后使用 + 代表时区  | 
# YAML 对象
- 格式 1:key: value
 - 格式 2:key:
 - 格式 3:利用缩进表示层级关系
 - 格式 4:问号加一个空格代表一个复杂的 key,配合一个冒号加一个空格代表一个 value
 
#格式 3 | |
key:  | |
child-key: value  | |
child-key2: value2  | |
#格式 4:对象的属性是一个数组,对应的值也是一个数组 | |
?   | |
    - key1 | |
- key2  | |
: | |
    - value1 | |
    - value2 | 
# 引用
#& 引用和 * 别名 | |
#& 用来建立锚点,<< 表示合并到当前数据,* 用来引用锚点。 | |
defaults: &defaults  | |
child-key1: value1  | |
test:  | |
child-key2:  | |
- &show value2  | |
        - value3 | |
- *show  | |
<<: *defaults  | |
#相当于 | |
defaults:  | |
child-key1: value1  | |
test:  | |
child-key2:  | |
        - value2 | |
        - value3 | |
        - value2 | |
child-key1: value1  |