天天看點

5分鐘了解YAML

你的朋友給你寄了一封如下的信件:

同時,他也要求你按照上面的順序來閱讀這些書,他想和你探讨關于這些書的内容。

在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 是一段文本,它們縮進一個或多個空格。

注意這個大于号: &gt;。它表示一個“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]

繼續閱讀