【YAML】非标记语言的标记语言

什么是YAML?

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

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

但为了强调这种语言以数据做为中心,而不是以标记语言为重点,而用反向缩略语重命名。

是一个可读性高,用来表达数据序列化的格式。

YAML参考了其他多种语言,包括:C语言PythonPerl,并从XML、电子邮件的数据格式(RFC 2822)中获得灵感。

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

当前已经有数种编程语言或脚本语言支持(或者说解析)这种语言。


YAML能干什么用?

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

语法特点:

使用空白符号缩进和大量依赖外观

让人最容易上手的特色是巧妙避开各种封闭符号

适用场景:

特别适合用来表达或编辑数据结构、各种配置文件、倾印调试内容、文件大纲(例如:许多电子邮件标题格式和YAML非常接近)。

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


演示案例:

数据结构可以用类似大纲的缩进方式呈现

---
receipt:     Oz-Ware Purchase Invoice
date:        2012-08-06
customer:
    given:   Dorothy
    family:  Gale
   
items:
    - part_no:   A4786
      descrip:   Water Bucket (Filled)
      price:     1.47
      quantity:  4

    - part_no:   E1628
      descrip:   High Heeled "Ruby" Slippers
      size:      8
      price:     133.7
      quantity:  1

bill-to:  &id001
    street: | 
            123 Tornado Alley
            Suite 16
    city:   East Centerville
    state:  KS

ship-to:  *id001   

specialDelivery:  >
    Follow the Yellow Brick
    Road to the Emerald City.
    Pay no attention to the
    man behind the curtain.
...

在YAML中,字符串不一定要用双引号标示。

另外,在缩进中空白字符的数目并不是非常重要,只要相同层次结构的元素左侧对齐就可以了(不过不能使用TAB字符)。

这个文件的顶层由七个键值组成:其中一个键值"items",是两个元素构成的数组(或称清单),

这清单中的两个元素同时也是包含了四个键值的散列表。

文件中重复的部分用这个方法处理:使用锚点(&)和引用(*)标签将"bill-to"散列表的内容复制到"ship-to"散列表。

也可以在文件中加入选择性的空行,以增加可读性。

在一个文件中,可同时包含多个文件,并用"---"分隔。

选择性的符号"..."可以用来表示文件结尾(在利用流的通信中,这非常有用,可以在不关闭流的情况下,发送结束信号)。


文件预览:

 YAML的文件后缀有两种:

- file.yaml

- file.yml

都可以被识别为yaml文件,只不过yml是缩写的再缩写


对比三种配置文件:

XML设置端口号:

<server>
    <port>8080</port>
</server>

Properties设置端口号:

server.port = 8081

YAML设置端口号:

server:
  port: 8080

语法 Syntax

基本语法:

KEY: VALUE

KEY表示键,VALUE表示值

要注意的是,VALUE和分号之间必须留有一个空格

  

空格在YAML中具有特殊的意义:

  以空格来控制每一个键值对的层级关系

  以左对齐的一列数据,都是同一层级的数据

值的写法:

  普通值【数字、字符串、布尔】

  - K:V直接书写

  - 字符串可不使用引号

  - 双引号不会转义特殊字符 如果写\n会换行

  - 单引号会转义处理 如果写\n不会换行

  

  对象【属性:值】

  - 对象的标识没有值对应

  - 属性和值是对象的下一级的多个键值对组成

  

  - 可以横向的书写

  

  数组【List、Set】

  列写法 & 行写法

  

  

原文地址:https://www.cnblogs.com/mindzone/p/12851380.html