查看: 10281|回复: 1
打印 上一主题 下一主题

5分钟认识YAML

[复制链接]
跳转到指定楼层
1#
发表于 2007-10-9 10:42:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
台州网址导航
译: liubin http://www.ruby-cn.org/
原文: http://yaml.kwiki.org/index.cgi?HomePage

文档位置:http://www.ruby-cn.org/articles/yaml_in_5_minutes.html

2004/11/11

译者注:在开始之前,也许,你想先看看yaml的基本概念,如果是,请点这里:http://www.ruby-cn.org/articles/what_is_yaml.html

第一分钟:一个简单的列表

你的朋友给你寄了一封如下的信件:

- Memoirs Found in a Bathtub
- Snow Crash
- Ghost World

同时,他也要求你按照上面的顺序来阅读这些书,他想和你探讨关于这些书的内容。

在YAML中,这些有顺序的列表(list)叫做序列(sequence)。序列包括了一组有顺序的数据,当你在程序中载入这个序列,它们的顺序保持不变。

在很多比较灵活的语言中,你可以用指定索引的方式访问这个序列及其中的值。以0开头的表示这个序列的第一项。

在PHP, Perl, 或 Ruby中,可以这样:

print $book_list[0];

打印结果如下:

Memoirs Found in a Bathtub

这也是上面书籍列表的第一项。
其他列表

列表(Lists)可以包括各种数据:

---
- 1           # Numbers
- Snow Crash  # Strings
- 2003-07-24  # Dates

上面的列表以三个"-"开头,这三个"-"是文档分割符(document separator),它表示了一段YAML文档的开始。当然,你也可以划分多个文档,比如:

---
- Harry Potter and the Prisoner of Azkaban
- Harry Potter and the Goblet of Fire
- Harry Potter and the Order of the Phoenix
---
- Memoirs Found in a Bathtub
- Snow Crash
- Ghost World

第二分钟:一个简单的字典

当你沉浸在阅读 Harry Potter 时,你的朋友又寄来了新的列表,这次列表包括了作者的名字:

Stanislaw Lem: Memoirs Found in a Bathtub
Neal Stephenson: Snowcrash
Daniel Clowes: Ghost World

上面的字典没有顺序,但是每个作者都对应一本书的名字。你的朋友希望你可以根据作者找到你想要的书。(注意前面没有"-")

在YAML中,这样的字典结构称为 map,map通常用来存放成对的数据,冒号左面的称为key,右面的叫做value。

key 用作从map中取数据的索引。

在PHP 或 Ruby中,可以这样写:

print $books_by_author['Daniel Clowes'];

将打印如下内容:

Ghost World

Sequence中的Map

你的朋友寄给你了一份更新的列表,包括了作者,书名,并且有一定的顺序,希望你能按照这个顺序来阅读。

---
- Stanislaw Lem: Memoirs Found in a Bathtub
- Neal Stephenson: Snowcrash
- Daniel Clowes: Ghost World

上面的序列中,每一项都是一个map,当一种集合(collection )包括另一种集合时,称作嵌套(nesting)。
第三分钟:邮箱里的东西

第三分钟我们先放慢一下速度,老师让你朋友这么打扰你我想过不多久你肯定会被气疯的。

冉我们来看看你的信箱。你住在一个公寓里,你的信箱只有一个小口可以投信,旁边是其他的几百个信箱。

你检查一下自己的信箱发现了五封信。两封是给你的邻居Jim O'Connor的,一封是给一个叫做"Hank Bros.: the Car Wash!"的公司的,其他的两封信是你自己的。

你打算对自己邮箱里多出来的信进行投诉,你打算给邮局发送一封信,让他们看看这给你带来了多大的麻烦。

你开始了一个新的YAML文档,里面包括今天的日期,和你的信箱里的信件:

---
date: 2003-07-25
letters to:
  "Hank Bros.: the Car Wash!": 1
  Jim O'Connor: 2
  Myself: 2

这个例子里,一个map嵌套了另一个map,第一个MAP的key是,它的值是letters to 一个被嵌套的MAP,第二个MAP是缩进排列的。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播 分享分享 分享淘帖
台州维博网络(www.tzweb.com)专门运用PHP+MYSQL/ASP.NET+MSSQL技术开发网站门户平台系统等。
2#
 楼主| 发表于 2007-10-9 10:42:28 | 只看该作者
台州网址导航
在PHP或者RUBY中,可以这样访问:

print $mailbox['letters to']['Myself'];

将会打印:

2

你也发现了,"Hank Bros.: the Car Wash!"用双银号扩起来了,这是因为这里面包括了冒好。否则,会引起麻烦的,你将可能弄不清哪个是key 哪个是value。
第四分钟:更多消息

你从邮局得到了一些解释:

---
Concerning Car Washes: >

  We are sorry to have misplaced this letter.
  We were told by a reliable source that you
  were the owner of "Hank Bros.: the Car Wash!".

  Sorry.

邮局工作有误,但这也向我们展示了YAML的另一个特点:块(block )。在他们的信息里,用到了block。

在 YAML中,一个 block 是一段文本,它们缩进一个或多个空格。

注意这个大于号: >。它表示一个“folded block”的开始。所谓folded block,就是一行一行紧挨着句子将组成一个段落,这个段落就像我们读课文那样可以阅读的。

上面的消息在YAML 阅读器看来将分为两行,由一个回车换行分割。
Controlling Words

上面的消息还没完,这是后面的:

Concerning "Jim O'Connor": |

  You are receiving Jim O'Connor's mail for several reasons:
  - The nameplate on your mailbox still says his name.
  - He has told our postman that you screen his mail.
  - He is living in your ceiling.
  - He held a raygun to the postmans head.

这看起来有点古怪,邮局的人用一个竖线,取代了原来的大于号,这有什么不同吗?

一个竖线(也称管道pipe),表示了一个literal block的开始。 literal block 表示每个句子自成一节,这个块将会像计算机读取那样,都是字面值。

YAML 阅读器会把上面的块当作5行(第一行是空行)。
第五分钟:这就是全部吗?

到现在,看起来YAML也就这么多东西而已,它只是一些列表和字典组成的集合而已?

这只是我们五分钟能谈论到的最基本的东西,在继续之前,来看最后一个概念。

这里是一个人读这个五分钟教程所用时间的纪录:

---
name: Dirk Hockeybranch
minutes spent:
- 1.02
- 1.34
- 0.7
- 0.89
- 0.94

上面我们用一个序列 (sequence)嵌套在了一个map中,序列中的每项代表了在第几步所用的时间。如果每个人都把自己阅读的时间像这样寄给我们,那我们需要给本教程准备一个更准确的名字,比如YAML in Five-Point-One-Two Minutes。这将有点华而不实。(我们可能需要很多的篇幅来写这样的文档。)

一个机灵的YAML用户可能会用 inline sequence来记录它们所用的时间:

---
name: Dirk Hockeybranch
minutes spent: [1.02, 1.34, 0.7, 0.89, 0.94]

对于短的列表,你可以把它们都房在一行里,各项之间用逗号分割,最后用中括号括起来。

Inline maps 也类似:

---
minutes spent: {one: 1.02, two: 1.34, three: 0.7,
                four: 0.89, five: 0.94}

以上也要谨慎使用,BLOCK在inline sequences 或 Inline maps 中不能使用。
结论

看看时间,多长时间了?五分钟?还是十分钟?

如果你想更深入的学习YAML,我建议你去看看 YAML Cookbook,一本非常好的手册,它将会更详细的讲解YAML,你一定会惊奇于YAML提供的功能。

最后,谢谢你花时间来阅读这篇文章

 

译者注:以下是我找到的一些资源,可能对你有用

1.YAML老家: http://yaml.org/

2.XML 问题:YAML 对 XML 的改进:http://www-900.ibm.com/developer ... /part23/index.shtml

3.最近推出了 YAML 规范 1.0,在 http://yaml.org/spec/
台州维博网络(www.tzweb.com)专门运用PHP+MYSQL/ASP.NET+MSSQL技术开发网站门户平台系统等。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

网站推广
关于我们
  • 台州朗动科技(Tzweb.com)拥有多年开发网站平台系统门户手机客户端等业务的成功经验。主要从事:政企网站,系统平台,微信公众号,各类小程序,手机APP客户端,浙里办微应用,浙政钉微应用、主机域名、虚拟空间、后期维护等服务,满足不同企业公司的需求,是台州地区领先的网络技术服务商!

Hi,扫描关注我

Copyright © 2005-2026 站长论坛 All rights reserved

Powered by 站长论坛 with TZWEB Update Techonolgy Support

快速回复 返回顶部 返回列表