翻译: 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是缩进排列的。
在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/developerWorks/cn/xml/x-matters/part23/index.shtml
3.最近推出了 YAML 规范 1.0,在 http://yaml.org/spec/
相关推荐
了解并复现yaml反序列化漏洞有助于提升对这类安全问题的认识,这对于开发者和安全研究人员来说至关重要。在实际应用中,务必对从不可信源接收的YAML数据进行严格的输入验证和安全处理,防止此类漏洞的利用。
ts-yaml YAML太棒了! 简单易学。 最小语法。 但是它有一些缺点,尤其是随着YAML文件的扩展。 没有类型/代码完成。 语法不明确。 没有控制流(例如,三元运算符,函数, map )。 这是在TypeScript中定义...
5. **# 用于注释**:以井字号(#)开始的行被视为注释,会被解析器忽略。 6. **字符串的表示**:字符串可以不加引号,但如果字符串包含特殊字符或者换行,通常需要使用单引号或双引号包围。 **YAML在自动化测试项目...
**Docker-认识和安装DockerCompose** Docker是一个开源的应用容器引擎,它基于Go语言并遵循Apache2.0协议开源。Docker让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上...
游乐设施:ROS IDE RIDE会根据您的需要自动为节点创建程序包和样板OOP Python... 如果您或您认识的人对此有经验或有兴趣,请与我联系! 添加ROS服务的功能 这是3AM代码。 如果您有任何问题,疑问,建议,请告诉我:)
Dubbo 3简化了API接口,提供了更加友好的配置方式,如YAML格式的配置文件,使得开发者能够更直观地管理服务配置。源码分析可以揭示这些配置是如何被解析并应用于服务实例的。 4. **插件化设计** Dubbo 3采用了...
5. **验证状态**:使用`kubectl get pods`和`kubectl describe pod`等命令,你可以检查Pod的状态,确保应用正在正常运行。 6. **更新和扩展应用**:Deployment的一个强大之处在于它可以无缝更新应用。只需更改...
### Python基础认识 #### 一、Anaconda管理与配置 **Anaconda** 是一个非常流行的Python发行版,它集成了大量的科学计算库,是进行数据分析和机器学习项目的理想选择。通过Anaconda,我们可以轻松地管理和配置不同...
5. `package`模块可以用来安装、升级或卸载软件包。 6. `command`模块执行指定的命令,与`shell`类似但不支持多条命令。 【Ansible Playbook】 Playbook是Ansible的主要剧本形式,用YAML编写,可以定义一系列任务...
是的,Google员工会认识到这与同名的内部工具非常相似;)安装页面上针对某些平台存在预编译的可执行文件。 在macOS上,也可以通过 brew install kubecfg : brew install kubecfg 要从源代码构建: % PATH= $PATH ...
通过以上知识点的梳理,我们对Flutter的基本开发流程有了较为全面的认识。无论是从安装环境配置,还是到编写第一个应用程序,再到进阶学习资源的介绍,都为初学者提供了明确的指引。希望这些内容能够帮助读者快速...
Lirian Su 的博客 这个人很懒,README 没啥好看的。 不过你想认识他的话, 可以看看他的自我介绍: 今天又学到了什么奇怪的知识?...YAML 的官方推荐后缀是 .yaml, 而不是 .yml. 命令行获取证书内容
《Ansible 源码深度解析》 Ansible 是一款强大的自动化运维工具,以其简洁的配置方式、无需在目标节点安装代理...无论你是初学者还是经验丰富的管理员,深入源码都会让你对 Ansible 有更深的认识,提升你的运维技能。
在Spring Boot中,"快速入门"通常指的是新手或初学者对Spring Boot的基本认识和基础使用,能够快速构建和部署一个Spring Boot应用程序。 ### Spring Boot概述 #### 1.1. 什么是Spring Boot Spring Boot是Spring...
2. 创建并应用CRD,使Kubernetes集群认识Fluentd Operator所管理的新资源类型。 3. 部署Fluentd Operator本身,这通常涉及到应用一个YAML文件来创建Deployment或DaemonSet。 4. 创建或更新CRD实例,定义Fluentd的...
### Ansible自动化运维工具详解与实践 #### 一、Ansible简介 Ansible是一款非常流行的自动化运维工具,...通过上述介绍和示例,相信读者已经对Ansible有了初步的认识,并掌握了如何安装配置和使用Ansible的基本方法。
此外,虽然最初创建Hyde是为了迎合用户的需要,但在开发过程中,人们也认识到有机会在各种平台上同样改善书写体验。 因此,已集成了其他功能,这些功能使Hyde能够适应利用markdown格式设置的各种流行平台和工具。 ...
要深入理解这些知识点,需要学习Kubernetes文档,熟悉分子数据处理的科学方法,掌握云服务激活的流程,以及对数据安全和隐私保护有深刻的认识。同时,对容器化、API开发、日志分析和科研计算也有一定的了解。
认识 dox dox 将 Markdown 以 HTML 形式发布到 Confluence。 对于那些喜欢将文档保存在 git 中,但由于......原因需要发布到 Confluence 的人。 安装 go install github.com/jesselang/dox 用 # tell dox where to...
- **YAML/Properties**:SpringBoot使用YAML或Properties文件进行配置,支持外部化配置,方便不同环境的切换。 9. **监控与健康检查**: - **Actuator**:SpringBoot自带的Actuator模块提供了一组端点,用于监控...