YAML - 简介
YAML - YAML An't a Markup Lanague
P.S. YAML was originally was side to mean Yet Another Markup Language, referencing its purpose as a markup lanaguage with the yet another construct; but it was then repurposed as YAML Anit Markup Language (仍是标记语言,只是为了强调不同,YAML 是以数据设计为重点,XML以标记为重点), a recursive acronym, to distinguish its purpose as data-orinted, rather than document markup.
为什么用YAML -> 对比XML的几点优势
可读性高 && 和脚本语言的交互性好 && 使用实现语言的数据类型 && 有一个一致的信息模型 && 易于实现 && 可以基于流来处理 && 表达能力强,扩展性好
YAML 语法规则 -> Structure 用空格表示 && Sequence里的项用"-"表示 && MAP 里的键值对用 ":"分隔
#John.yaml
name: John Smith
age: 37
spouse:
name: Jane Smith
age: 25
children:
- name: Jimmy Smith
age: 15
- name: Jenny Smith
age 12
JYaml - > 基于Java 的YAML实现 (使用JAVA的数据类型)
JYaml 支持的Java数据类型
原始数据和封装类 && JavaBean 兼容对象(Structure 支持)&& Collection [List, Set] (Sequence 支持)&& Map (map 支持) && Arrays (sequence 支持) && Date
#John.yaml 的Java描述
public class Person {
private String name;
private int age;
private Person sponse;
private Person[] children;
// setXXX, getXXX方法略.
}
# 添加John
Person john = new Person();
john.setAge(37);
john.setName("John Smith");
Person sponse = new Person();
sponse.setName("Jane Smith");
sponse.setAge(25);
john.setSponse(sponse);
Person[] children = {new Person(), new Person()};
children[0].setName("Jimmy Smith");
children[0].setAge(15);
children[1].setName("Jenny Smith");
children[1].setAge(12);
john.setChildren(children);
#使用JYaml 将John dump出来
File dumpfile = new File("John_dump.yaml");
Yaml.dump(john, dumpfile);
# 用JYaml 把Jone_dump.yaml load 进来
Person john2 = (Person) Yaml.loadType(dumpfile, Person.class);
JYaml 对流的处理
#把同一个John 写10次
YamlEncoder enc = new YamlEncoder(new FileOutputStream(dumpfile));
for(int i=0; i<10; i++){
john.setAge(37+i);
enc.writeObject(john);
enc.flush();
}
enc.close();
#依次读出此10个对象
YamlDecoder dec = new YamlDecoder(new FileInputStream(dumpfile));
int age = 37;
while(true){
try{
john = (Person) dec.readObject();
assertEquals(age, john.getAge());
age++;
}catch(EOFException eofe){
break;
}
}
YAML 的适用范围
a. 由于解析成本低,YAML比较适合在脚本语言中使用, 现有的语言有: Ruby, Java, Perl, Python, PHP, JavaScript & Java
b. YAML 比较适合做序列化, 因为它支持对宿主语言的直接转化
c. 做配置文件
Note: 由于兼容性问题,不同语言间的数据流转不建议使用YAML
YAML 存在的意义
YAML和XML不同,没有自己的数据类型的定义,而是使用实现语言的数据类型。这一点,有可能是出奇制胜的地方,也可能是一个败笔。如果兼容性保证的不好的话,YAML数据在不同语言间流转会有问题。如果兼容性好的话,YAML就会成为不同语言间数据流通的桥梁。建议yaml.org设立兼容认证机制,每个语言的实现必须通过认证。
Reference -> https://www.ibm.com/developerworks/cn/xml/x-cn-yamlintro/index.html
YAML - 简介的更多相关文章
- 【SpringBoot】SpringBoot配置文件及YAML简介(三)
SpringBoot配置文件 SpringBoot使用一个全局的配置文件,配置文件名是固定的; application.properties application.yml 配置文件的作用:修改Spr ...
- YAML简介
YAML Ain’t Markup Language YAML 是一种简洁的非标记语言 YAML以数据为中心,使用空白,缩进,分行组织数据,从而使得表示更加简洁易读 基本规则: 1.大小写敏感 2. ...
- YAML文件格式简介
一.yaml简介 yaml是一种用来写配置文件的序列化语言,跟json有些像,yaml又称作json的超集,yaml的设计则是为了友好可读性,主要用于配置信息的书写,而json设计的目的则是为了简 ...
- yaml
YAML http://baike.baidu.com/link?url=Jqbh_SBnlVuP0dPCknzd5ti5jr4h9HcacA0j56ztf4QsPcXI8kvgFaKpvhRG3em ...
- YAML初探
http://www.cnblogs.com/chwkai/archive/2009/03/01/249924.html 1 概念YAML是一种人们可以轻松阅读的数据序列化格式,并且它非常适合对动态编 ...
- YAML详解
1 YAML简介 YAML,即YAML Ain’t Markup Language的缩写,YAML 是一种简洁的非标记语言.YAML以数据为中心,使用空白,缩进,分行组织数据,从而使得表示更加简洁 ...
- Python基础(八) yaml在python中的使用
yaml 通常用来存储数据,类似于json YAML 简介 YAML(Yet Another Markup Language),一种直观的能够被电脑识别的数据序列化格式,是一个可读性高并且容易被人类阅 ...
- python操作YAML文件之pyyaml库
1. YAML简介 YAML是一种被认为可以超越XML.JSON的配置文件,最早接触是Spring Boot,木有想到python也是支持的,遂研究一下. python解析YAML库叫做pyyaml, ...
- python笔记14-读取yaml配置文件(pyyaml)
yaml简介 1.yaml [ˈjæməl]: Yet Another Markup Language :另一种标记语言.yaml 是专门用来写配置文件的语言,非常简洁和强大,之前用ini也能写配置文 ...
随机推荐
- 【Android Developers Training】 34. 添加一个简单的分享行为(Action)
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- form表单1的ajax验证
form表单的ajax验证1: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"&g ...
- 9.Smarty的循环
1.session循环 目的:循环输出一个二维数组 构造一个二维数组 $towSide = array( array("name"=>"caimuqing" ...
- Vijos 1002 过河 状态压缩DP
描述 在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧.在桥上有一些石子,青蛙很讨厌踩在这些石子上.由于桥的长度和青蛙一次跳过的距离都是正整数,我们可以把独木桥上青蛙可能到达的点看成数轴上 ...
- AugularJS从入门到实践(一)
前 言 前端 AngularJS是为了克服HTML在构建应用上的不足而设计的.(引用百度百科) AngularJS使用了不同的方法,它尝试去补足HTML本身在构建应用方面的缺陷.Angu ...
- c#Message多功能用法
1. 当要显示如图3个按钮时,并要获得单击不同按钮的进行不同的相应时,可以在MessageBoxButtons后面添加一个.(应该英文的点,此处为了醒目,用中文代替)可以看到提示框下方需要几个按 ...
- java Gui编程 事件监听机制
1. GUI编程引言 以前的学习当中,我们都使用的是命令交互方式: 例如:在DOS命令行中通过javac java命令启动程序. 软件的交互的方式: 1. 命令交互方式 图书管理系统 ...
- Spring和SpringMVC父子的容器之道---[上篇]
Spring和SpringMVC作为Bean管理容器和MVC层的默认框架,已被众多WEB应用采用,而在实际开发中,由于有了强大的注解功能,很多基于XML的配置方式已经被替代,但在实际项目中,我们经常会 ...
- Selenium webdriver定位iframe里面元素两种方法
以东方财富网登录页面为例: 在查找元素过程中,直接通过id或者xpath等找不到元素,查看页面源代码发现元素是属于iframe里,例如: <div class="wrap_login& ...
- SpringMVC源码情操陶冶-ViewResolver视图解析
简单分析springmvc是如何解析view视图,并返回页面给前端 SpringMVC配置视图解析器 <bean id="viewResolver" class=" ...