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的工作了,更多的信息可以访问: [url]http://yaml.org/xml/[/url] 。
需要指出,我们已经开始做XML/YAML MAPPING的工作了,更多的信息可以访问: [url]http://yaml.org/xml/[/url] 。
4.YAML初步
YAML中数据主要由序列(sequence),map(有的也叫做hash)和标量(scalar )来表示。语法比较简单,易于人们阅读。
- 注释由#开头
- 序列由"-"开头
- map用key:value的格式
- "---"表示一个yaml文档的开始
- list和hash可以嵌套
- block的概念:一个 block 是一段文本。
- Inline Collections:数据都写在一行
例子:
1。序列
---
hash: { name: Steve, foo: bar }
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]liubin@huangpuzhuang.com[/email]")
puts (person.to_yaml) # 打印序列化之后的结果
#从person.yml创建对象
person2 = YAML::load( File.open( 'person.yml' ) )
puts (person2.to_yaml)
puts person2.class # 结果是Person
puts person2.name
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]liubin@huangpuzhuang.com[/email]")
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]xyz@huangpuzhuang.com[/email]
name: xyz
sex: female
age: 18
email: [email]xyz@huangpuzhuang.com[/email]
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]liubin@huangpuzhuang.com[/email]
name: liubin
sex: male
--- !ruby/object:Person
age: 18
email: [email]xyz@huangpuzhuang.com[/email]
name: xyz
sex: female
Person
xyz
--- !ruby/object:Person
age: 25
email: [email]liubin@huangpuzhuang.com[/email]
name: liubin
sex: male
--- !ruby/object:Person
age: 18
email: [email]xyz@huangpuzhuang.com[/email]
name: xyz
sex: female
Person
xyz