YAML 的定義是:“YAML Ain ’ t a Markup Language”,或者“Yet Another Markup Language”。
特點(diǎn)
- YAML 的數(shù)據(jù)組織主要依靠的是空白,縮進(jìn),分行等結(jié)構(gòu),可讀性好。
- YAML 實(shí)現(xiàn)簡(jiǎn)單,解析成本很低,和腳本語(yǔ)言的交互性好。
- YAML 很容易就可以插入另一個(gè) YAML 文件,甚至其他類(lèi)型的文件,包括 XML, SDL, JSON 等。
- YAML 使用實(shí)現(xiàn)語(yǔ)言的數(shù)據(jù)類(lèi)型。
- YAML 可以基于流來(lái)處理;
- YAML 表達(dá)能力強(qiáng),擴(kuò)展性好。
說(shuō)明
基礎(chǔ)
- 使用空白字符(不能使用Tab)分層,同層元素左側(cè)對(duì)齊;
- 用“-”來(lái)表示一些序列的項(xiàng)(Sequence);
- 用“:”來(lái)表示一對(duì)項(xiàng)目(Map)里的欄目(Key)和其相應(yīng)的值(Value);
- 單行注解由“#”字號(hào)開(kāi)始,可以出現(xiàn)在行中任何位置;
- 字符串一般不使用引號(hào),但必要的時(shí)候可以用引號(hào)框住;
- YAML也有用來(lái)描述好幾行相同結(jié)構(gòu)的數(shù)據(jù)的縮寫(xiě)語(yǔ)法,數(shù)組用“[]”包括起來(lái),hash用“{}”來(lái)包括。
其它
- YAML使用可打印的Unicode字符,可使用UTF-8或UTF-16
- 使用雙引號(hào)表示字串時(shí),可用倒斜線(\)進(jìn)行特殊字符轉(zhuǎn)義
- 區(qū)塊的字串用縮排和修飾詞(非必要)來(lái)和其他資料分隔,有新行保留(使用符號(hào)<kbd>|</kbd>)或新行折疊(使用符號(hào)<kbd>></kbd>)兩種方式
- 在單一檔案中,可用連續(xù)三個(gè)連字號(hào)(---)區(qū)分多個(gè)檔案
- 可選擇性的連續(xù)三個(gè)點(diǎn)號(hào)(...)用來(lái)表示檔案結(jié)尾(在流式傳輸時(shí)非常有用,不需要關(guān)閉流即可知道到達(dá)結(jié)尾處)
- 重復(fù)的內(nèi)容可使從參考標(biāo)記星號(hào) (*)復(fù)制到錨點(diǎn)標(biāo)記(&)
- 指定格式可以使用兩個(gè)驚嘆號(hào) ( !! ),后面接上名稱
- 允許在文件中加入選擇性的空行,以增加可讀性
- 在縮排中空白字符的數(shù)目并不是非常重要,只要相同階層的元素左側(cè)對(duì)齊就可以了
實(shí)例
簡(jiǎn)單實(shí)例
John.yaml
name: John Smith
age: 37
spouse:
name: Jane Smith
age: 25
children:
- name: Jimmy Smith
age: 15
- name: Jenny Smith
age: 12
John今年37歲,有一個(gè)幸福的四口之家。兩個(gè)孩子Jimmy 和Jenny活潑可愛(ài)。妻子Jane年輕美貌。
也可縮寫(xiě)為:
name: John Smith
age: 37
spouse: {name: Jane Smith, age: 25}
children: [{name: Jimmy Smith, age: 15}, {name: Jenny Smith, age: 12}]
用 YAML 表達(dá)的一個(gè)購(gòu)物發(fā)票
--- !clarkevans.com/^invoice
invoice: 34843
date : 2001-01-23
bill-to: &id001
given : Chris
family : Dumars
address:
lines: |
458 Walkman Dr.
Suite #292
city : Royal Oak
state : MI
postal : 48046
ship-to: *id001
product:
- sku : BL394D
quantity : 4
description : Basketball
price : 450.00
- sku : BL4438H
quantity : 1
description : Super Hoop
price : 2392.00
tax : 251.42
total: 4443.52
comments: >
Late afternoon is best.
Backup contact is Nancy
Billsmer @ 338-4338.
比較
JSON
JSON的語(yǔ)法是YAML1.2版的子集,同時(shí)非常接近YAML1.0與1.1版的子集,因此大部分的JSON文件都可以被YAML的剖析器剖析。這是因?yàn)镴SON的語(yǔ)法結(jié)構(gòu)和YAML的內(nèi)置格式相同。雖然大范圍的分層也可以使用類(lèi)似JSON的內(nèi)置格式,不過(guò)YAML標(biāo)準(zhǔn)并不建議這樣使用,除非這樣編寫(xiě)能讓文件可讀性增加。YAML的許多擴(kuò)展在JSON是找不到的,如:進(jìn)階資料形態(tài)、關(guān)系錨點(diǎn)、字串不需要雙引號(hào)、映射資料形態(tài)會(huì)儲(chǔ)存鍵值的順序。