11/06/2011

YAML簡介

什麼是YAML
YAML是YAML Ain't Markup Language的遞迴縮寫(一種來自Opensource界的奇怪幽默,如果你懂,你就...)。顧名思義,它設計的目的是作為表達、傳遞資料的一種資料描述方式(data serialization language)。與XML或類似的用途的語言相比,它著重於資料於人們的可(易)閱度讀性。
例如,以下兩個YAML的例子:
--- # 最喜愛的電影
- Casablanca
- North by Northwest
- Notorious
-
  name: Mark McGwire
  hr:   65
  avg:  0.278
-
  name: Sammy Sosa
  hr:   63
  avg:  0.288
YAML的語法
YAML結構乍看之下有點鬆散,因為它本身的語法結構主要是依賴階層及縮排(空白字元,非Tab),這點與Python有點類似。

文件的開頭與結束
YAML以「---」來表示一份文件的開始,以「...」表示文件的結束。
---
time: 20:03:20
player: Sammy Sosa
action: strike (miss)
...
---
time: 20:03:47
player: Sammy Sosa
action: grand slam
...
註解
以「#」起頭的文字代表註解,於資料中不具意義。
# This stream contains no
# documents, only comments.
hr:  65    # Home runs
avg: 0.278 # Batting average
rbi: 147   # Runs Batted In
字串
YAML中字串有三種表示法,可以選擇直接表示或是加上引號(單引號或雙引號)。如果字串中有脫逸字元(escape sequences)就必須使用雙引號;單引號則可以使用於其他場合(不需要脫逸字元時)。
plain: This unquoted scalar
single: '"Howdy!" he cried.'
double: "And, this double-quoted scalar.\n"
整數
a: 123                     # 整數

布林值
b: [ true, True, TRUE, false, False, FALSE ]        # 布林值

浮點數
c: 123.0                   # 浮點數

陣列(集合)
陣列有兩種表示法。一種是區塊格式(block format);另一種則是內置格式(inline format)。
區塊格式法中,各陣列元素以「- 」(減號加空白)起始。
--- # 最喜愛的電影
- Casablanca
- North by Northwest
- Notorious
內置格式,就如同JSON或Javascript的陣列表示法,各元素位於方括弧中([ ]),並以「, 」區隔。
--- # 購物清單 
[milk, pumpkin pie, eggs, juice]
雜湊表(結構)
雜湊表由「鍵」(key)加「值」(value)構成。中間以「: 」隔開。
--- # 區塊形式
name: John Smith
age: 33
--- # 內置形式
{name: John Smith, age: 33}
於集合中使用雜湊表
- {name: John Smith, age: 33}
- name: Mary Smith
  age: 27
於雜湊表中使用集合
men: [John Smith, Bill Jones]
women:
  - Mary Smith
  - Susan Williams
縮排
與Python相同,在YAML中為了表達階層而縮排用的空白字元數目並無限定,只要相同階層的元素左側對齊就可以了(但不能使用TAB字元)。
---
step:
    instrument:      Lasik 2000
    pulseEnergy:     5.4
    pulseDuration:   12
    repetition:      1000
    spotSize:        1mm

bill-to:  &id001
  street: 123 Tornado Alley Suite 16
  city: East Westville
  state: KS
完整的範例

---
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.

No comments:

Post a Comment