YAML初探
http://www.cnblogs.com/chwkai/archive/2009/03/01/249924.html
1 概念
YAML是一种人们可以轻松阅读的数据序列化格式,并且它非常适合对动态编程语言中使用的数据类型进行编码。YAML是YAML Ain't Markup Language简写,和GNU("GNU's Not Unix!")一样,YAML是一个递归着说“不”的名字。不同的是,GNU对UNIX说不,YAML说不的对象是XML。YAML不是XML。它可以用作数据序列,配置文件,log文件,Internat信息和过滤。
2 优点
YAML的可读性好。
YAML和脚本语言的交互性好。
YAML使用实现语言的数据类型。
YAML有一个一致的信息模型。
YAML易于实现。
3 YAML的适用范围
由于实现简单,解析成本很低,YAML特别适合在脚本语言中使用。列一下现有的语言实现:Ruby,Java,Perl,Python,PHP,OCaml,JavaScript。除了Java,其他都是脚本语言.
YAML比较适合做序列化。因为它是宿主语言数据类型直转的。
YAML做配置文件也不错。比如Ruby on Rails的配置就选用的YAML。对ROR而言,这很自然,也很省事.
由于兼容性问题,不同语言间的数据流转建议现在不要用YAML.
4 YAML不足
YAML和XML不同,没有自己的数据类型的定义,而是使用实现语言的数据类型。这一点,有可能是出奇制胜的地方,也可能是一个败笔。如果兼容性保证的不好的话,YAML数据在不同语言间流转会有问题。
假如兼容性没问题的话,YAML就太完美了。轻巧,敏捷,高效,简便,通用。
5 JYaml简介
JYAML是YAML的Java实现.
YAML使用实现语言的数据类型。我们看一下一些JYaml支持的Java数据类型:
原始数据和封装类(比如int,java.lang.Integer)
JavaBean兼容对象(Structure支持)
Collection (sequence支持)
List
Set
Map (map支持)
Arrays (sequence支持)
BigInteger 和BigDecimal
Date
注:我把我个人认为较好的文章推荐如下,方便我们共同学习和交流。
参考文献:
1 《YAML 简介》 http://www.ibm.com/developerworks/cn/xml/x-cn-yamlintro/index.html
2 《YAML 对 XML 的改进》http://www.ibm.com/developerworks/cn/xml/x-matters/part23/
3 http://jyaml.sourceforge.net/
4 http://www.yaml.org/
====================================
YAML何许物也?在XML泛滥的情况下,YAML的出现的确让人眼前一亮,在初步学习了YAML以后,粗略的总结了一下,拿出来和大家分享。
[MindMap]
[参考文档] YAML Specification YAML 数据类型说明
[摘要] YAML的设计目的 YAML描述: [注释, 文档, 数据结构, 数据类型, 其他]
YAML的设计目的
1、容易人类阅读 2、适合表示程序语言的数据结构 3、可用于不同程序间交换数据 4、支持泛型工具 5、支持串行处理? 6、丰富的表达能力和可扩展性 7、易于使用
粗看了specification以后感觉最好的是“容易人类阅读”,对比一下下面的xml和yaml的代码块:
# xml代码块:
<site>
<name>sina</name>
<url>http://www.sina.com.cn</url>
</site>
<site>
<name>google</name>
<url>http://www.google.com</url>
</site># YAML代码块
---
site:
name: sina
url : http://www.sina.com.cn
---
site:
name: google
url : http://www.google.com 

或:
---
site: {name: sina, url: http://www.sina.com.cn}
---
site: {name: google, url: http://www.google.com}YAML利用缩进或者是explicit indicatior(如上面的{})来表示属性的嵌套,更为直观和simple。
YAML描述
先来看看YAML里的主要标记:
(1)注释:
举个例子: # Comment Example # Profile Of Mary Mary: - name: Mary - age : 19 # age property
(2)文档(document):
现在还不明白文档是什么意思,既然YAML定义是data serialization,暂时把一个doucment视为一个object序列化后得到的yaml配置信息
# documents example ---
site: {name: sina, url: http://www.sina.com.cn}
---
site: {name: google, url: http://www.google.com}(3)数据结构: YAML的设计者认为在配置文件中所要表达的数据内容有三种类型:标量(Scalar,如字符串和整数等)、序列(Sequence,如数组)和Mapping(类似hash的key/value pair)。
sequence型主要是用来表示数组类型的数据。下图描述了YAML中Sequence型数据的表示法: 
mapping数据类型主要用来表示key: value对类型的数据。YAML描述方式见下图: 
最后,我们用YAML来描述一本书《单元测试知道-c#版》
# 《单元测试之道-c#版》描述
--- # begin of document
书名 : '单元测试之道-C#版'
出版社: '电子工业出版社'
原作者: ['Andrew Hunt', 'David Thomas']
译者 :
- 陈伟柱
- 陶文
前二章节 :
- 第一章: 序言
- 第二章: 你的首个单元测试计划

#end of document 
YAML推荐使用空格作为缩进,避免了在不同编辑器中对tab的表示形式不同而可能产生误解。
YAML初探的更多相关文章
- yaml
YAML http://baike.baidu.com/link?url=Jqbh_SBnlVuP0dPCknzd5ti5jr4h9HcacA0j56ztf4QsPcXI8kvgFaKpvhRG3em ...
- 初探YAML
YAML何许物也?在XML泛滥的情况下,YAML的出现的确让人眼前一亮,在初步学习了YAML以后,粗略的总结了一下,拿出来和大家分享.[MindMap][参考文档]YAML Specification ...
- ASP.NET Core on K8S学习初探(1)K8S单节点环境搭建
当近期的一个App上线后,发现目前的docker实例(应用服务BFF+中台服务+工具服务)已经很多了,而我司目前没有专业的运维人员,发现运维的成本逐渐开始上来,所以容器编排也就需要提上议程.因此我决定 ...
- ASP.NET Core on K8S学习初探(3)部署API到K8S
在上一篇<基本概念快速一览>中,我们把基本的一些概念快速地简单地不求甚解地过了一下,本篇开始我们会将ASP.NET Core WebAPI部署到K8S,从而结束初探的旅程. Section ...
- ASP.NET Core on K8S学习初探(2)K8S基本概念快速一览
在上一篇<单节点环境搭建>中,通过Docker for Windows在Windows开发机中搭建了一个单节点的K8S环境,接下来就是动人心弦的部署ASP.NET Core API到K8S ...
- 跟我学SpringCloud | 第十二篇:Spring Cloud Gateway初探
SpringCloud系列教程 | 第十二篇:Spring Cloud Gateway初探 Springboot: 2.1.6.RELEASE SpringCloud: Greenwich.SR1 如 ...
- 初探云原生应用管理(二): 为什么你必须尽快转向 Helm v3
系列介绍:这个系列是介绍如何用云原生技术来构建.测试.部署.和管理应用的内容专辑.做这个系列的初衷是为了推广云原生应用管理的最佳实践,以及传播开源标准和知识.在这个系列文章的开篇初探云原生应用管理(一 ...
- 初探云原生应用管理之:聊聊 Tekton 项目
[编者的话]“人间四月芳菲尽,山寺桃花始盛开.” 越来越多专门给 Kubernetes 做应用发布的工具开始缤纷呈现,帮助大家管理和发布不断增多的 Kubernetes 应用.在做技术选型的时候,我们 ...
- docker-compose 的使用和负载均衡的初探
docker-compose 的使用和负载均衡的初探 前言 a. 本文主要为 Docker的视频教程 笔记. b. 环境为 CentOS 7.0 云服务器 c. 上一篇:Docker 私有仓库 1. ...
随机推荐
- 年底奉献-QT编写视频监管平台(开源)
忙忙碌碌又是一年,算算自己毕业四年半,一直在现在这家公司做研发外加总经理助理,研发起初用的VB.NET,而后全面转为C#,最后又全面转为QT,都是由于项目需要,算下来自己搞QT编程也已经四年了,201 ...
- Unix sed实用教程开篇
已经看了一段时间的Linux Shell编程了,也能完成一些基本的使用,为了加深理解,恰好看到了The Unix School的一个sed&awk教程,不是简单的命令参数堆积,而是一个相当实用 ...
- MyBatis知多少(2)
MyBatis从目前最流行的关系数据库访问方法中吸收了大量的优秀特征和思想,并找出其中的协同增效作用.下图展示了MyBatis框架是如何吸收我们在多年使用不同方式进行数据库集成的 开发过程中所学到的知 ...
- WWDC2015 结束.新一波更新以及bug即将来袭.
WWDC结束.新一波更新以及bug即将来袭. HTTPS 将成为标准链接. http被报错. GamePlayKit 这是搞那样. 还有ReplayKit 那些什么录像分享什么的还有活路么? Mod ...
- shell 和awk性能对比
time for ((i=0;i<10000;i++)) do ((sum+=i)); done real 0m0.086suser 0m0.079ssys 0m0.007s ...
- Maven进价:eclipse中集成maven
一.M2Eclipse插件 m2eclipse是一个在Eclipse中集成Maven的插件,有了该插件,用户可以方便的在Eclipse中执行Maven命令.创建Maven项目.修改POM文件等. 下载 ...
- 各种Camera,总有一款适合你(一)
根据游戏类型的不一样,会需要各种各样的摄像机,下面将分享三种典型的摄像机类型:(1)地下城摄像机:(2)第三人称跟随摄像机:(3)鼠标控制旋转摄像机.将这些控制脚本拖动到场景的MainCamera上即 ...
- fzu 2107 Hua Rong Dao(状态压缩)
Problem 2107 Hua Rong Dao Accept: 106 Submit: 197 Time Limit: 1000 mSec Memory Limit : 32768 K ...
- MySQL单机load过高问题讨论
有一个朋友问我: "hi,我想问下你们遇到单机load过高的情况 采取什么紧急措施啊?" 我问他是不是mysql db server? 他说是. 我给他如下建议: 1 先看下是不是 ...
- sqlserver -- 学习笔记(四)将一个数据库的表复制到另外一个数据库(备忘)
--复制结构+数据 select * into 数据库名.dbo.新表名 from 数据库名.dbo.原表名 select * into Stockholder.dbo.SHInfo from dsp ...