作者 liubin http://www.ruby-cn.org/
本文地址 http://www.ruby-cn.org/articles/what_is_yaml.html
1.YAML ="YAML Ain't Markup Language"
官方網站的解釋是YAML ="YAML Ain't Markup Language"(縮寫爲YAML)。這是一種數據序列化(serialization )語言,是一種可讀的文本的數據結構,它的設計目標是使人們容易讀,程序容易處理。它類似XML,但是比XML簡單。
2.設計目標:
YAML的設計目標如下:
- YAML 文檔很容易閱讀。
- YAML 使用本地結構存儲數據。
- YAML 數據在編程語言之間是可移植的。
- YAML 有一個固定的模型來支持一般的開發工具。
- YAML 支持基於流的處理。
- YAML 表現力強,而且容易擴充。
- YAML 容易實現和使用。
3.和XML的關係
新手總是試圖瞭解YAML和XML的關係,這兩種語言在某些領域是處於競爭之中,除此沒有什麼直接關係。
YAML 首先是一種數據序列化語言,而XML則是向後繼承了SGML(Standard Generalized Markup Language)。XML試圖做到面面俱到,它試圖成爲一種文檔格式、數據格式、消息包格式、安全的 RPC 通道(SOAP)甚至XML數據庫;而YAML只關注有限的領域,它只是清晰地表示在動態編程語言(如 Perl、Python、Ruby)中所遇到的數據結構以及數據類型。目前,對於這些語言,已經有了一些綁定/庫。
需要指出,我們已經開始做XML/YAML MAPPING的工作了,更多的信息可以訪問: http://yaml.org/xml/。
4.YAML初步
YAML中數據主要由序列(sequence),map(有的也叫做hash)和標量(scalar )來表示。語法比較簡單,易於人們閱讀。
- 註釋由#開頭
- 序列由"-"開頭
- map用key:value的格式
- "---"表示一個yaml文檔的開始
- list和hash可以嵌套
- block的概念:一個 block 是一段文本。
- Inline Collections:數據都寫在一行
例子:
1。序列- apple - banana - carrot
- apple - - foo - bar - x123 - banana - carrot
foo: whatever bar: stuff
foo: whatever bar: - uno - dos
foo: whatever bar: fruit: apple name: steve sport: baseball
hash: { name: Steve, foo: bar }
5.Ruby中的YAML支持
Ruby1.8已經包含了YAML支持了。只需要require進來就行了。
一個例子:
require 'yaml'
class Person
attr_accessor :name, :sex, :age, :email
def initialize(n,s,a,e)
@name=n
@sex=s
@age=a
@email=e
end
end
#創建一個對象
person=Person.new("liubin","male",25,"[email protected]")
puts (person.to_yaml) # 打印序列化之後的結果
#從person.yml創建對象
person2 = YAML::load( File.open( 'person.yml' ) )
puts (person2.to_yaml)
puts person2.class # 結果是Person
puts person2.name
person.yml文件:
注意person.yml中第一行“--- !ruby/object:YAML::Person ”是不可缺的,否則person2.class返回Hash,而person2.name也會出錯
程序執行情況如下:
--- !ruby/object:Person
age: 25
email: [email protected]
name: liubin
sex: male
--- !ruby/object:Person
age: 18
email: [email protected]
name: xyz
sex: female
Person
xyz
總結:yaml東西很多,不是一時半會能學會和講清楚的,希望我們一起學習。接下來請看我的另一篇文章:http://www.ruby-cn.org/articles/yaml_in_5_minutes.html,也許會更瞭解yaml。
參考資料:
1.ruby語言主頁:http://www.ruby-lang.org/
2.yaml主頁:http://yaml.org/