你的朋友給你寄了一封如下的信件:
同時,他也要求你按照上面的順序來閱讀這些書,他想和你探讨關于這些書的内容。
在YAML中,這些有順序的清單(list)叫做<b>序列</b>(sequence)。序列包括了一組有順序的資料,當你在程式中載入這個序列,它們的順序保持不變。
在很多比較靈活的語言中,你可以用指定索引的方式通路這個序列及其中的值。以0開頭的表示這個序列的第一項。
在PHP, Perl, 或 Ruby中,可以這樣:
列印結果如下:
這也是上面書籍清單的第一項。
清單(Lists)可以包括各種資料:
上面的清單以三個"-"開頭,這三個"-"是<b>文檔分割符</b>(document separator),它表示了一段YAML文檔的開始。當然,你也可以劃分多個文檔,比如:
當你沉浸在閱讀 Harry Potter 時,你的朋友又寄來了新的清單,這次清單包括了作者的名字:
上面的字典沒有順序,但是每個作者都對應一本書的名字。你的朋友希望你可以根據作者找到你想要的書。(注意前面沒有"-")
在YAML中,這樣的字典結構稱為 map,map通常用來存放成對的資料,冒号左面的稱為key,右面的叫做value。
key 用作從map中取資料的索引。
在PHP 或 Ruby中,可以這樣寫:
将列印如下内容:
你的朋友寄給你了一份更新的清單,包括了作者,書名,并且有一定的順序,希望你能按照這個順序來閱讀。
上面的序列中,每一項都是一個map,當一種集合(collection )包括另一種集合時,稱作<b>嵌套</b>(nesting)。
第三分鐘我們先放慢一下速度,老師讓你朋友這麼打擾你我想過不多久你肯定會被氣瘋的。
冉我們來看看你的信箱。你住在一個較高價的電梯大廈裡,你的信箱隻有一個小口可以投信,旁邊是其他的幾百個信箱。
你檢查一下自己的信箱發現了五封信。兩封是給你的鄰居Jim O'Connor的,一封是給一個叫做"Hank Bros.: the Car Wash!"的公司的,其他的兩封信是你自己的。
你打算對自己郵箱裡多出來的信進行投訴,你打算給郵局發送一封信,讓他們看看這給你帶來了多大的麻煩。
你開始了一個新的YAML文檔,裡面包括今天的日期,和你的信箱裡的信件:
這個例子裡,一個map嵌套了另一個map,第一個MAP的key是,它的值是letters to 一個被嵌套的MAP,第二個MAP是縮進排列的。
在PHP或者RUBY中,可以這樣通路:
将會列印:
你也發現了,"Hank Bros.: the Car Wash!"用雙銀号擴起來了,這是因為這裡面包括了冒好。否則,會引起麻煩的,你将可能弄不清哪個是key 哪個是value。
你從郵局得到了一些解釋:
郵局工作有誤,但這也向我們展示了YAML的另一個特點:塊(block )。在他們的資訊裡,用到了block。
在 YAML中,一個 block 是一段文本,它們縮進一個或多個空格。
注意這個大于号: >。它表示一個“folded block”的開始。所謂folded block,就是一行一行緊挨着句子将組成一個段落,這個段落就像我們讀課文那樣可以閱讀的。
上面的消息在YAML 閱讀器看來将分為兩行,由一個回車換行分割。
上面的消息還沒完,這是後面的:
這看起來有點古怪,郵局的人用一個豎線,取代了原來的大于号,這有什麼不同嗎?
一個豎線(也稱管道pipe),表示了一個literal block的開始。 literal block 表示每個句子自成一節,這個塊将會像計算機讀取那樣,都是字面值。
YAML 閱讀器會把上面的塊當作5行(第一行是空行)。
到現在,看起來YAML也就這麼多東西而已,它隻是一些清單和字典組成的集合而已?
這隻是我們五分鐘能談論到的最基本的東西,在繼續之前,來看最後一個概念。
這裡是一個人讀這個五分鐘教程所用時間的紀錄:
上面我們用一個序列 (sequence)嵌套在了一個map中,序列中的每項代表了在第幾步所用的時間。如果每個人都把自己閱讀的時間像這樣寄給我們,那我們需要給本教程準備一個更準确的名字,比如YAML in Five-Point-One-Two Minutes。這将有點華而不實。(我們可能需要很多的篇幅來寫這樣的文檔。)
一個機靈的YAML使用者可能會用 inline sequence來記錄它們所用的時間:
對于短的清單,你可以把它們都房在一行裡,各項之間用逗号分割,最後用中括号括起來。
Inline maps 也類似:
以上也要謹慎使用,BLOCK在inline sequences 或 Inline maps 中不能使用。
看看時間,多長時間了?五分鐘?還是十分鐘?
如果你想更深入的學習YAML,我建議你去看看 YAML Cookbook,一本非常好的手冊,它将會更詳細的講解YAML,你一定會驚奇于YAML提供的功能。
最後,謝謝你花時間來閱讀這篇文章
譯者注:以下是我找到的一些資源,可能對你有用
1.YAML老家: [url]http://yaml.org/[/url]
2.XML 問題:YAML 對 XML 的改進:[url]http://www-900.ibm.com/developerWorks/cn/xml/x-matters/part23/index.shtml[/url]
3.最近推出了 YAML 規範 1.0,在 [url]http://yaml.org/spec/[/url]