- 定义:
YAML是一个可读性高,用来表达数据序列化的格式。 - 来源:
参考XML、C语言、Python、Perl以及电子邮件格式RFC2822。 - 命名:
英文名:YAML Ain’t a Markup Language;中文名:另一种标记语言。 - 说明:
YAML不是一种标记语言,是"YAML Ain’t a Markup Language"的递归缩写,但开发之初其真实意思却是:“Yet Another Markup Language”,翻译:仍是一种标记语言。为了强调这种语言以数据做为中心,而不是以标记语言为重点,因此用反向缩略语重命名。 - 功能:
- 简单表达清单、散列表,标量等资料形态;
- 它使用空白符号缩排和大量依赖外观的特色,特别适合用来表达或编辑数据结构、各种设定档、倾印除错内容、文件大纲;
- 尽管它比较适合用来表达阶层式的数据结构,也有精致的语法可以表示关联性的资料;
- 由于YAML使用空白字符和分行来分隔资料,使得它他特别适合用grep、Python、Perl、Ruby操作。
其让人最容易上手的特色是巧妙避开各种封闭符号,如:引号、各种括号等,这些符号在嵌套结构中会变得复杂而难以辨认。
- 语法:
- 在yaml.org(英文)可以找到轻巧而好用的小抄(亦是用YAML表示)及格式说明。下面的内容,是关于基本组件的摘要;
- YAML使用可打印的Unicode字符(UTF-8或UTF-16);
- 使用空白字符为文件缩进来表示结构,不能使用跳格字符TAB;
- 注解由#开始,可在一行中的任何位置,范围只有一行;
- 每个清单成员以单行表示,并用短杠+空白(- )起始;或使用方括号([]),并用逗号+空白(, )分开成员;
- 每个散列表成员用冒号+空白(: )分开键值和内容;或使用大括号({ }),并用逗号+空白(, )分开成员;
- 散列表的键值可以用问号(?)起始,用来明确的表示多个词汇组成的键值;
- 字符串:
- 一般不使用引号,但必要的时候可以用双引号(")或单引号(’)框住;
- 使用双引号表示字符串时,可用倒斜线(\)开始的转义字符(类似C语言)表示特殊字符;
- 区块的字符串用缩进和修饰符来和其他数据分隔,有新行保留使用符号|,新行折叠使用符号>;
- 在单一文件中,可用连续三个连字号(—)区分多个文件;有选择性的连续三个点号(…)用来表示文件结尾;重复的内容可使从参考标记星号(*)复制到锚点标记(&);
- 指定格式可以使用两个惊叹号(!!),后面接上名称;
- 文件中的单一文件可以使用指导指令,使用方法是百分比符号(%);有两个指导指令在YAML1.1版中被定义:
- %YAML 指导指令,用来识别文件的YAML版本;
- %TAG 指导指令,被用在URI的前缀标记,用于标记节点的类型时相当有用;
- YAML在使用逗号及冒号时,后面都必须接一个空白字符,所以可以在字符串或数值中自由加入分隔符号(例如:5,280或http://www.wikipedia.org)而不需要使用引号;
- 另外还有两个特殊符号在YAML中被保留,有可能在未来的版本被使用–(@)和(`)。
- 格式 :
-
多行缩进 :
数据结构通过缩进来表示,连续的项目通过减号“-”来表示,map结构里面的key/value对用冒号“:”来分隔。样例如下:house: family: name: Doe parents: - John - Jane children: - Paul - Mark - Simone address: number: 34 street: Main Street city: Nowheretown zipcode: 12345
-
- 单行缩写
YAML也有用来描述好几行相同结构的数据的缩写语法,数组用’[]‘包括起来,hash用’{}'来包括,示例:house: family: { name: Doe, parents: [John, Jane], children: [Paul, Mark, Simone] } address: { number: 34, street: Main Street, city: Nowheretown, zipcode: 12345 }
- 应用场景:
- 脚本语言
由于实现简单,解析成本很低,YAML特别适合在脚本语言中使用,如:Ruby,Perl,Python,PHP,OCaml,JavaScript,另外非脚本语言Java 和 Go也支持解析; - 序列化
YAML比较适合做序列化。因为它是宿主语言数据类型直转的; - 配置文件
写YAML要比写XML快得多,并且比ini文档功能更强,Ruby on Rails的配置选用了YAML;由于兼容性问题,不同语言间的数据流转建议不要用YAML。
- 脚本语言
- 函式库
YAML
最新推荐文章于 2021-12-02 17:20:11 发布