`
deng131
  • 浏览: 672562 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Ruby on Rails中YAML

阅读更多
YAML

YAML Ain't Markup Language。

YAML是一个类似GNU的递归式定义。GNU对Unix说“No”,YMAL则是对XML说“No”。而在Ruby的世界里,YAML可以说是Ruby流动的血液。YAML 之于Ruby,犹如XML之于Java。

为什么要向XML说“No”呢?因为:

    * YAML的可读性好。
    * YAML和脚本语言的交互性好。
    * YAML使用宿主语言的数据类型。
    * YAML有一个一致的信息模型。
    * YAML易于实现。

上面5条也就是XML不足的地方。同时,YAML也有XML的下列优点:

    * YAML可以基于流来处理;
    * YAML表达能力强,扩展性好。

总之,YAML试图用一种比XML更敏捷的方式,来完成XML所完成的任务。

YAML示例

首先用一个在Rails开发中一定会遇到的YAML文件——database.yml——作为示例。在你创建一个Rails工程后,Rails会自动给你创建一个这样的文件,它的路径是config/database.yml:

# MySQL (default setup).  Versions 4.1 and 5.0 are recommended.
# 此处省略一些注释。
development:
  adapter: mysql
  database: demo_development
  username: root
  password:
  host: localhost

# Warning: The database defined as 'test' will be erased and
# re-generated from your development database when you run 'rake'.
# Do not set this db to the same as development or production.
test:
  adapter: mysql
  database: demo_test
  username: root
  password:
  host: localhost

production:
  adapter: mysql
  database: demo_production
  username: root
  password:
  host: localhost


似乎很直观,对么?除去注释,会发现有三个组,分别用development、test和production标识。这三个组每个又有adapter、database、username、password和host这些属性。作为一个聪明的程序员,你一定已经意识到空格在这里发挥了作用!

完全正确!空格(注意:Tab不是)在YAML中用来表示代码的结构。上面的YAML文件可以被解析为一个哈希对象,它有三个元素,当然,每个元素又是一个哈希对象,下面是使用YAML::load(File.read(“database.yml”)) 方法获得的对象描述(为了保护视力和大脑,我进行了一些排版):

{
      'development'=> {'adapter' => 'mysql', 'database' => 'demo_development',
                   ‘username’ => 'root', ‘password’ => nil, ‘host’ => 'localhost'},
      ‘test’=> {‘adapter’ => 'mysql', ‘database’ => 'demo_test',
                   ‘username’ => 'root', ‘password’ => nil, ‘host’ => 'localhost'},
      ‘production’=> {‘adapter’ => 'mysql', ‘database’ => 'demo_production',
                   ‘username’ => 'root', ‘password’ => nil, ‘host’ => 'localhost'}
}

有了这个,你几乎就已经明白了所有在Rails中能遇到的YAML文件了,Rails中用到的YAML文件几乎永远是这种格式。例如,Rails为每个模型都会生成一个供单元测试使用的夹具(Fixture)文件,也是使用这种格式。

不过,Rails还加入了另外的灵活性。在这些属性中还可以使用Ruby代码!当然,对于数据库配置来说,这似乎用处不大,但是对于单元测试,有时你可能希望某个日期属性是当前测试的日期,那么这个功能就特别有用了。

Rails是怎样做到这个的,其实很简单。它在调用YAML::load方法之前先进行了ERB的解析,把Ruby代码执行后的结果再交给YAML进行加载,就可以得到这个小魔术了。下面是Rails加载数据库配置文件的代码:

YAML::load(ERB.new(IO.read(database_configuration_file)).result)

尽管Rails一般总是这样使用YAML,YAML实际上还有其他的一些用法,我们将在下面进行一些介绍。

YAML语言元素

下面对YAML的语言元素做一个简要介绍:

1.       列表(List)

表示一个列表很简单,在每个条目前加入一个短横线。比如

- Item1
- Item2
- Item3


在Ruby中会被解释为数组对象(Array),上例为:

[“Item1”, “Item2”, “Item3”]

2.       哈希表(Hash)

我们在前面的例子中已经大量使用了哈希表对象。哈希表的键/值之间用冒号(:)进行分隔。

key1 : value1
key2 : value2
key3 : value3

在Ruby中会被解释为如下的哈希对象:

{"key1"=>"value1", "key2"=>"value2", "key3"=>"value3"}

3.       字符串和其它基本类型

YAML会自动判断类型,一般性的文字都会被解释为字符串。在有可能发生歧义的情况下,可以为字符串加上单引号或者双引号(在双引号下转义字符会被转义,转义方式与C语言类似)来避免歧义。

下面是一个例子,包含了字符串、整数、浮点数和日期类型:

1 : 1.0
1.0 : "1.0"
"1.0" : 2006-01-01

它会被解释为:

{1=>1.0, "1.0"=>#<Date: 4907473/2,0,2299161>, 1.0=>"1.0"}

可以看出它的类型被很好的识别出来。

4.       字符串块

字符串可能会占据多行,可以用两种方式来处理这种情况,一种是保留换行符,另外一种则去除换行符。

用| 表示保留换行符:

|
  This is line1.
  This is line2.
  This is line3.

它会被解释为:

"This is line1.\nThis is line2.\nThis is line3."

用>表示删除换行符:

>
  Hello,
  world.

会被解释为:

"Hello,  world."

以上是一些常用的基本类型,当然它们还可以组合为更复杂的结构,比如列表的内容可以是列表本身,也可以是哈希表;哈希表的内容也可以是列表或哈希表,它们可以嵌套使用,来获得非常复杂的结构。

对于重复出现的项目,可以用&进行定义,然后用*进行引用。下面用一个比较完整的例子来说明这些内容(该例子取自http://en.wikipedia.org/wiki/YAML#Sample_Document)。

logEvent:    Purchase Invoice
date:        2007-08-06
customer:
    given:   Dorothy
    family:  Gale

bill-to:  &id001
    street: |
            123 Tornado Alley
            Suite 16
    city:   East Westville
    state:  KA

ship-to:  *id001  
  
items:
    - part_no:   A4786
      descrip:   Water Bucket (Filled)
      price:     1.47
      quantity:  4

    - part_no:   E1628
      descrip:   High Heeled "Ruby" Slippers
      price:     100.27
      quantity:  1

specialDelivery:  >
    Follow the Yellow Brick
    Road to the Emerald City.
    Pay no attention to the
    man behind the curtain.

它表示Ruby对象如下:

{
  "items"=>[
    {"price"=>1.47, "quantity"=>4, "part_no"=>"A4786", "descrip"=>"Water Bucket (Filled)"},
    {"price"=>100.27, "quantity"=>1, "part_no"=>"E1628", "descrip"=>"High Heeled \"Ruby\" Slippers"}
  ],
  "bill-to"=>{"city"=>"East Westville", "street"=>"123 Tornado Alley\nSuite 16\n", "state"=>"KA"},
  "specialDelivery"=>"Follow the Yellow Brick Road to the Emerald City. Pay no attention to the  man behind the curtain.",
  "date"=>#<Date: 4908637/2,0,2299161>,
  "ship-to"=>{"city"=>"East Westville", "street"=>"123 Tornado Alley\nSuite 16\n", "state"=>"KA"},
  "customer"=>{"given"=>"Dorothy", "family"=>"Gale"},
  "logEvent"=>"Purchase Invoice"
}

YAML和JSON

近来火热的JSON可以看作是(几乎是)YAML的一个子集,一般说来,YAML的解析器都可以解析JSON文档。关于JSON的说明可以参见JSON的主页(http://json.org/),这里甚至还提供了一个中文版本的文档(http://json.org/json-zh.html)。

YAML资源

·         YAML主页:http://www.yaml.org/

·         YAML维基百科:http://en.wikipedia.org/wiki/YAML

·         Developerworks上的YAML简介:http://www.ibm.com/developerworks/cn/xml/x-cn-yamlintro/index.html
分享到:
评论

相关推荐

    ruby on rails对mongodb的操作

    在Ruby on Rails框架中,开发人员经常选择使用关系型数据库如SQLite、PostgreSQL或MySQL来存储数据。然而,随着NoSQL数据库的兴起,MongoDB因其灵活性和非结构化数据处理能力,也成为了许多Web应用程序的选择。本文...

    ruby on rails最佳敏捷开发

    相比于Java框架普遍存在的XML配置,Rails更倾向于使用YAML或纯Ruby代码进行配置,这使得配置文件更加简洁直观,符合Ruby语言的哲学。Rails的“Convention over Configuration”思想使得开发者可以更快地专注于业务...

    ruby on rails基础知识

    ### Ruby on Rails基础知识详解 #### 一、Rails简介与安装 **Rails** 是一款流行的开源Web应用框架,基于Ruby语言编写。它强调简洁性、生产力和优雅的设计,非常适合快速开发Web应用。 - **特点** - **DRY (Don'...

    Ubuntu 11.04安装Ruby on rails 连接MySQL数据库.pdf

    在Ubuntu 11.04环境中,安装MySQL数据库是部署Ruby on Rails应用的重要步骤之一。首先,通过打开终端并执行以下命令进行安装: ```bash sudo apt-get install mysql-server ``` 在安装过程中,系统会提示输入MySQL...

    Ruby on rails 数据库详细配置

    在Ruby on Rails框架中,数据库配置是至关重要的部分,它允许开发者与各种数据库系统进行交互,如MySQL、Microsoft SQL Server等。以下将详细介绍如何在Windows环境下安装Ruby on Rails以及配置数据库。 首先,我们...

    ruby on rails MySql

    当在Ruby on Rails项目中使用MySQL作为数据存储时,这两个技术的结合提供了强大的后端支持。 在Rails中集成MySQL,你需要安装特定的数据库适配器,即`mysql2` gem。这个gem允许Rails与MySQL数据库进行通信,处理SQL...

    Ruby和Rails高效的Kafka处理框架_Ruby_下载.zip

    在这个主题中,我们将深入探讨如何在Ruby on Rails环境下使用Kafka处理框架,从而实现高效的数据传输和处理。 Kafka是一种分布式流处理平台,由LinkedIn开发并贡献给了Apache软件基金会。它被广泛应用于实时数据...

    rubynostrilhos:关于Ruby on Rails的博客(pt-br)

    【标题】"rubynostrilhos:关于Ruby on Rails的博客(pt-br)"指出这是一个专注于Ruby on Rails技术的博客资源,主要面向葡萄牙语(pt-br)的读者。Ruby on Rails,通常简称为Rails,是一款基于Ruby语言的开源Web...

    rails的最好的事例

    在分类区域选择“Ruby”,然后在项目类型中选择“Ruby on Rails 应用”。 3. 输入项目名称为“RubyWebLog”,并保持其他默认设置不变。 4. 点击“Next”完成项目创建。 #### 1.2 配置数据库环境 - **配置文件**...

    hub-uc:Ruby on Rails应用

    【标题】:“hub-uc:Ruby on Rails应用” 在IT领域,Ruby on Rails(简称RoR)是一款基于Ruby语言的开源Web开发框架,它遵循MVC(Model-View-Controller)架构模式,使得开发者能够高效地构建数据驱动的Web应用程序...

    Ruby-RailsConfig为Rails3提供多环境yaml设置

    Ruby on Rails 是一个流行的Web应用程序框架,用于快速开发和部署高效、优雅的Web应用。在Rails中,配置管理是至关重要的,它允许开发者根据不同的运行环境(如开发、测试和生产)来设置不同的参数。RailsConfig库...

    基于Ruby的Rails应用功能介绍与用户指引设计源码

    该项目为基于Ruby语言的Rails框架开发的应用程序,集成了功能介绍与用户指引设计。源码包含151个文件,涵盖66个Ruby脚本文件、18个SCSS样式文件、15个JavaScript文件、15个ERB模板文件、11个YAML配置文件、3个HTML...

    Ruby-AnsibleRubyonRails服务器Ubuntu16x

    在Ruby世界中,Ruby on Rails(RoR)是一种流行的开源框架,用于构建高效、优雅的Web应用程序。Ansible则是一个自动化运维工具,可以帮助我们轻松地配置、部署和管理服务器,尤其是对于Ruby on Rails应用的部署而言...

    java党建平台源码-ruby_resource:ruby&rails学习资源汇总

    解析器](Online YAML Parser) 好文共分享 [Ruby 与多态](Polymorphism and Ruby) 书籍推荐 由于 ruby 和 rails 的版本迭代都很快,这就导致很多出版的 ruby 书籍过了几年都严重落伍,所以一定要看要买最新版的。 ...

    ansible-rails:使用Ansible部署Ruby on Rails-使用Lets Encrypt,Sidekiq,PostgreSQL,nginx和puma

    本篇文章将详细探讨如何使用Ansible部署一个基于Ruby on Rails的应用,该应用集成了Lets Encrypt(用于SSL证书)、Sidekiq(后台任务处理)、PostgreSQL(数据库服务)、nginx(反向代理)和puma(Web服务器)。...

    friendly-locale:Xamarin和.NET的简单跨平台国际化。 本地化类似于Ruby On Rails-http:guides.rubyonrails.orgi18n.html(测试版)

    标题中的“friendly-locale”项目是一个专为Xamarin和.NET框架设计的轻量级、跨平台的国际化解决方案,它的设计灵感来源于Ruby on Rails的i18n(国际化)机制。这个项目的目的是简化移动应用和桌面应用的本地化过程...

    Ruby-开箱即用的Rails项目模板

    Swagger Docs是一款用于生成RESTful API文档的工具,它允许开发者通过注释在Ruby on Rails应用中定义API接口,然后自动生成易于理解和使用的JSON或YAML格式的文档。这里的“修改后”可能意味着这个模板中的Swagger...

    Ruby-Figaro简单的Rails应用程序配置

    Ruby on Rails是一个强大的Web开发框架,它为开发者提供了丰富的功能和便利性。在构建Rails应用时,管理和配置应用的环境变量是至关重要的。Figaro就是这样一款工具,它为Rails应用程序提供了一个简单的方式来管理...

    SQL-PQL:SQL-PQL(发音为“Sequel Prequel”)是一个交互式 SQL 学习指南。 它是使用 Ruby on Rails、Postgres SQL、Bootstrap、YAML、JQuery、Underscore.string、AJAX、OmniAuth、JST、EJS 开发的,并托管在 Heroku 上

    它是使用 Ruby on Rails、Postgres SQL、Bootstrap、YAML、JQuery、Underscore.string、AJAX、OmniAuth、JST、EJS 开发的,并托管在 Heroku 上。 在观看现场演示并享受。 我们通过在带有示例的实时表上向您展示...

    guard-yamlsort:Guard 插件,用于在 Ruby on Rails 中按字母顺序对 I18n 翻译文件中的键进行排序

    守卫::Yamlsort Guard::Yamlsort 在检测到修改时按字母顺序对 yaml 文件中的键进行排序。要求Ruby。 Ruby 1.9.2 或更高版本。安装将 guard-yamlsort 添加到您的 Gemfile(在开发组内): gem ' guard-yamlsort ' ...

Global site tag (gtag.js) - Google Analytics