什麼是YAML?

作者  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的設計目標如下:

  1. YAML 文檔很容易閱讀。
  2. YAML 使用本地結構存儲數據。
  3. YAML 數據在編程語言之間是可移植的。
  4. YAML 有一個固定的模型來支持一般的開發工具。
  5. YAML 支持基於流的處理。
  6. YAML 表現力強,而且容易擴充。
  7. 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 
2。嵌套序列
- apple 
- 
 - foo 
 - bar 
 - x123 
- banana 
- carrot 
3。map
foo: whatever 
bar: stuff 
4。map和sequence嵌套
foo: whatever 
bar: 
 - uno 
 - dos 
5。map嵌套
foo: whatever 
bar: 
 fruit: apple 
 name: steve 
 sport: baseball 
6。inline hash
--- 
 hash: { name: Steve, foo: bar }

 

5.Ruby中的YAML支持

    Ruby1.8已經包含了YAML支持了。只需要require進來就行了。

一個例子:

# file name yaml.rb

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文件:

--- !ruby/object:YAML::Person            
age: 18
email: [email protected]
name: xyz
sex: female

 

   注意person.yml中第一行“--- !ruby/object:YAML::Person   ”是不可缺的,否則person2.class返回Hash,而person2.name也會出錯

  

 

程序執行情況如下:
C:/>ruby yaml.rb
--- !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/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章