Yet Another Markup Language(YAML)

Yet Another Markup Language

另一种标记语言
特别适合用 grep、Python、Perl、Ruby 操作

多行缩进

连续的项目通过减号 ‘ - ’ 来表示
Map结构里面的 key/value 对用冒号 ‘ : ’ 来分隔

house:
  family:
    name: Doe
    parents:
      - John
      - Jane
    children:
      - Paul
      - Mark
      - Simone
  address:
    number: 34
    street: Main Street
    city: Nowheretown
    zipcode: 610101

Tip

  • 字串不一定要用双引号标识
  • 在缩排中空白字符的数目并不是非常重要,只要相同阶层的元素左侧对齐就可以了(不过不能使用TAB字符)
  • 允许在文件中加入选择性的空行,以增加可读性
  • 在一个档案中,可同时包含多个文件,并用---分隔
  • 选择性的符号...可以用来表示档案结尾(在利用串流的通讯中,这非常有用,可以在不关闭串流的情况下,发送结束讯号)

单行缩写

  • 数组用 []
  • Hash用 {}
house:
  family: { name: Doe, parents: [John, Jane], children: [Paul, Mark, Simone] }
  address: { number: 34, street: Main Street, city: Nowheretown, zipcode: 235011 }

适用场景

  • 实现简单,解析成本很低,YAML 特别适合在脚本语言中使用
  • YAML 比较适合做序列化,因为它是宿主语言数据类型直转的
  • YAML 做配置文件也不错

附加 YAML 库到浏览器

<script src="/scripts/js-yaml.min.js" />
<script type="text/javascript">
var doc = jsyaml.load('greeting: hello\nname: world')
</script>

与 JSON

JSON 的语法是 YAML1.2 版的子集, JSON 文件都可以被 YAML 的剖析器剖析

YAML 的许多扩展在 JSON 是找不到的。
如:进阶资料形态、关系锚点、字串不需要双引号、映射资料形态会储存键值的顺序

与 XML和SDL

XML 和 SDL 标签概念,在 YAML 中是找不到的

安全性

YAML 是纯粹用来表达资料的语言,所以内部不会存代码注入的可执行命令

语法

  • YAML 使用可打印的 Unicode 字符,可使用 UTF-8 或 UTF-16
  • 使用空白字符(不能使用Tab)分层,同层元素左侧对齐
  • 单行注解由井字号( # )开始,可以出现在行中任何位置
  • 每个清单成员以单行表示,并用短杠+空白( - )起始
  • 每个杂凑表的成员用冒号+空白( : )分开键和值
  • 每个杂凑表的成员用冒号+空白(:)分开键和值
  • 字串一般不使用引号,但必要的时候可以用引号框住
  • 使用双引号表示字串时,可用倒斜线(\)进行特殊字符转义
  • 区块的字串用缩排和修饰词(非必要)来和其他资料分隔,有新行保留(使用符号|)或新行折叠(使用符号>)两种方式
  • 在单一档案中,可用连续三个连字号(---)区分多个档案
  • 可选择性的连续三个点号(...)用来表示档案结尾(在流式传输时非常有用,不需要关闭流即可知道到达结尾处)
  • 重复的内容可使从参考标记星号 (*)复制到锚点标记(&
  • 指定格式可以使用两个惊叹号 ( !! ),后面接上名称

YAML语法示例

receipt:     Oz-Ware Purchase Invoice
date:        2015-12-15
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 
      price:     100.27
      quantity:  1
bill-to:  &id001
    street: | 
            123 Tornado Alley
            Suite 16
    city:   East Westville
    state:  KS
ship-to:  *id001   
specialDelivery:  >
     Follow the Yellow Brick
    Road to the Emerald City.
    Pay no attention to the 
    man behind the curtain.

转换成 JSON 之后

{
    "receipt": "Oz-Ware Purchase Invoice",
    "date": "2015-12-15T00:00:00.000Z",
    "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",
            "price": 100.27,
            "quantity": 1
        }
    ],
    "bill-to": {
        "street": "123 Tornado Alley\nSuite 16\n",
        "city": "East Westville",
        "state": "KS"
    },
    "ship-to": {
        "street": "123 Tornado Alley\nSuite 16\n",
        "city": "East Westville",
        "state": "KS"
    },
    "specialDelivery": "Follow the Yellow Brick Road to the Emerald City. Pay no attention to the  man behind the curtain.\n"
}
  • 其中一个键值 items,是俩个元素构成的清单,当中的俩个元素分别是包含四个 HASH 键值对的
  • 使用锚点 (&) 和参考 (*) 标签将 bill-to 复制到了 ship-to

XML和 YAML 语法格式

XML

<site>
    <name>yugo</name>
    <url>github.io/miyogurt</url>
</site>

YAML - Type 01

# example
---
site:
    name: yugo
    url: github.io/miyogurt

YAML - Type 02

# example
---
site: { name:yugo,url: github.io/miyogurt }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,657评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,662评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,143评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,732评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,837评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,036评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,126评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,868评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,315评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,641评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,773评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,470评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,126评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,859评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,095评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,584评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,676评论 2 351

推荐阅读更多精彩内容