https://baike.baidu.com/item/YAML/1067697?fr=aladdin

https://yaml.org/spec/1.2/spec.html

介绍

诞生

YAML参考了其他多种语言,包括:XMLC语言PythonPerl以及电子邮件格式RFC2822。

Clark Evans在2001年5月在首次发表了这种语言,另外Ingy döt Net与Oren Ben-Kiki也是这语言的共同设计者。

命名

YAML是"YAML Ain't a Markup Language"(YAML不是一种置标语言)的递归缩写。

在开发的这种语言时,YAML 的意思其实是:"Yet Another Markup Language"(仍是一种置标语言),

功能

YAML的语法和其他高阶语言类似,并且可以简单表达清单、散列表,标量等资料形态、。

它使用空白符号缩排和大量依赖外观的特色,特别适合用来表达或编辑数据结构、各种设定档、倾印除错内容、文件大纲(例如:许多电子邮件标题格式和YAML非常接近)。

尽管它比较适合用来表达阶层式(hierarchical model)的数据结构,不过也有精致的语法可以表示关联性(relational model)的资料。

由于YAML使用空白字符和分行来分隔资料,使得它他特别适合用grep、Python、Perl、Ruby操作。

其让人最容易上手的特色是巧妙避开各种封闭符号,如:引号、各种括号等,这些符号在嵌套结构中会变得复杂而难以辨认。

格式

多行缩进

数据结构可以用类似大纲的缩排方式呈现,结构通过缩进来表示,连续的项目通过减号“-”来表示,map结构里面的key/value对用冒号“:”来分隔。样例如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

house:

  family:

    name: Doe

    parents:

      - John

      - Jane

    children:

      - Paul

      - Mark

      - Simone

  address:

    number: 34

    street: Main Street

    city: Nowheretown

    zipcode: 12345

注意:

  1. 字串不一定要用双引号标识;

  2. 在缩排中空白字符的数目并不是非常重要,只要相同阶层的元素左侧对齐就可以了(不过不能使用TAB字符);

  3. 允许在文件中加入选择性的空行,以增加可读性;

  4. 在一个档案中,可同时包含多个文件,并用“——”分隔;

  5. 选择性的符号“...”可以用来表示档案结尾(在利用串流的通讯中,这非常有用,可以在不关闭串流的情况下,发送结束讯号)。

单行缩写

YAML也有用来描述好几行相同结构的数据的缩写语法,数组用'[]'包括起来,hash用'{}'来包括。因此,上面的这个YAML能够缩写成这样:

1

2

3

house:

  family: { name: Doe, parents: [John, Jane], children: [Paul, Mark, Simone] }

  address: { number: 34, street: Main Street, city: Nowheretown, zipcode: 12345 }

适用场景

脚本语言

由于实现简单,解析成本很低,YAML特别适合在脚本语言中使用。列一下现有的语言实现:Ruby,Java,Perl,Python,PHP,OCaml,JavaScript,Go 。除了Java 和 Go,其他都是脚本语言。

序列化

YAML比较适合做序列化。因为它是宿主语言数据类型直转的。

配置文件

YAML做配置文件也不错。写YAML要比写XML快得多(无需关注标签或引号),并且比ini文档功能更强。

比如Ruby on Rails的配置就选用的YAML。对ROR而言,这很自然,也很省事.

由于兼容性问题,不同语言间的数据流转建议不要用YAML.

 

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐