命名
YAML 的意思其實是:"Yet Another Markup Language"(仍是一種置標語言)的縮寫。
功能
YAML的語法和其他高階語言類似,並且可以簡單表達清單、散列表,標量等資料形態、。
它使用 空白符號縮排 和 大量依賴外觀的特色,特別適合用來表達或編輯數據結構、各種設定檔、傾印除錯內容、文件大綱(例如:許多電子郵件標題格式和YAML非常接近)。
盡管它比較適合用來表達階層式(hierarchical model)的數據結構,不過也有精致的語法可以表示關聯性(relational model)的資料。
由於YAML使用空白字符和分行來分隔資料,使的他特別適合用 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: 12345
注意:
-
字串不一定要用雙引號標識;
-
在縮排中空白字符的數目並不是非常重要,只要相同階層的元素左側對齊就可以了(不過 不能使用TAB字符);
-
允許在文件中加入選擇性的空行,以增加可讀性;
-
在一個檔案中,可同時包含多個文件,並用“——”分隔;
-
選擇性的符號“...”可以用來表示檔案結尾(在利用串流的通訊中,這非常有用,可以在不關閉串流的情況下,發送結束訊號)。
單行縮寫
YAML也有用來描述好幾行相同結構的數據的縮寫語法,數組用'[]'包括起來,hash用'{}'來包括。因此,上面的這個YAML能夠縮寫成這樣:
house: family: { name: Doe, parents: [John, Jane], children: [Paul, Mark, Simone] } address: { number: 34, street: Main Street, city: Nowheretown, zipcode: 12345 }
舉例:
john.yaml 文件:
name: John Smith age: 37 spouse: name: Jane Smith age: 25 children: - name: Jimmy Smith age: 15 - name: Jenny Smith age 12
數組表示:
<?php $john = array( 'name' => 'John Smith', 'age' => 37, 'spouse' => array( 'name' => 'Jane Smith', 'age' => 25 ), 'children' => array( 0 => array( 'name' => 'Jimmy Smith', 'age' => 5 ), 1 => array( 'name' => 'Jenny Smith', 'age' => 3 ) ) );
PHP 解析 Yaml 文件的類: