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 - 简介的更多相关文章

  1. 【SpringBoot】SpringBoot配置文件及YAML简介(三)

    SpringBoot配置文件 SpringBoot使用一个全局的配置文件,配置文件名是固定的; application.properties application.yml 配置文件的作用:修改Spr ...

  2. YAML简介

    YAML Ain’t Markup Language YAML 是一种简洁的非标记语言 YAML以数据为中心,使用空白,缩进,分行组织数据,从而使得表示更加简洁易读 基本规则: 1.大小写敏感  2. ...

  3. YAML文件格式简介

    一.yaml简介   yaml是一种用来写配置文件的序列化语言,跟json有些像,yaml又称作json的超集,yaml的设计则是为了友好可读性,主要用于配置信息的书写,而json设计的目的则是为了简 ...

  4. yaml

    YAML http://baike.baidu.com/link?url=Jqbh_SBnlVuP0dPCknzd5ti5jr4h9HcacA0j56ztf4QsPcXI8kvgFaKpvhRG3em ...

  5. YAML初探

    http://www.cnblogs.com/chwkai/archive/2009/03/01/249924.html 1 概念YAML是一种人们可以轻松阅读的数据序列化格式,并且它非常适合对动态编 ...

  6. YAML详解

    1   YAML简介 YAML,即YAML Ain’t Markup Language的缩写,YAML 是一种简洁的非标记语言.YAML以数据为中心,使用空白,缩进,分行组织数据,从而使得表示更加简洁 ...

  7. Python基础(八) yaml在python中的使用

    yaml 通常用来存储数据,类似于json YAML 简介 YAML(Yet Another Markup Language),一种直观的能够被电脑识别的数据序列化格式,是一个可读性高并且容易被人类阅 ...

  8. python操作YAML文件之pyyaml库

    1. YAML简介 YAML是一种被认为可以超越XML.JSON的配置文件,最早接触是Spring Boot,木有想到python也是支持的,遂研究一下. python解析YAML库叫做pyyaml, ...

  9. python笔记14-读取yaml配置文件(pyyaml)

    yaml简介 1.yaml [ˈjæməl]: Yet Another Markup Language :另一种标记语言.yaml 是专门用来写配置文件的语言,非常简洁和强大,之前用ini也能写配置文 ...

随机推荐

  1. (转载)Java自带的GUI性能监控工具Jconsole以及JisualVM简介

    原文链接:http://blog.csdn.net/chendc201/article/details/22905503 1 Jconsole 1.1 简介以及连接 JConsole是一个基于JMX的 ...

  2. Java自学手记——servlet3.0新特性

    servlet3.0出来已经很久了,但市场上尚未普遍应用,servlet3.0有三个比较重要的新特性:使用注解来代替配置文件,异步处理以及上传组件支持. 支持servlet3.0的要求:MyEclip ...

  3. Tomcat7安装(linux环境)

    1.获取安装包 如果没有tomcat,则创建之,并下载二进制文件到该目录,如下: mkdir /opt/tomcat cd /opt/tomcat wget http://mirrors.hust.e ...

  4. oracle预定义角色

    角色是相关权限的集合,使用角色能够简化权限的管理.简而言之就是oracle可以事先把一系列权限集中在一起(角色),打包赋予给用户,那么用户就具有了角色的一系列权限. oracle预定义角色有25种,它 ...

  5. Vue.js学习笔记(三) - 修饰符

    本篇将简单介绍常用的修饰符. 在上一篇中,介绍了 v-model 和 v-on 简单用法.除了常规用法,这些指令也支持特殊方式绑定方法,以修饰符的方式实现.通常都是在指令后面用小数点“.”连接修饰符名 ...

  6. 是什么优化让 .NET Core 性能飙升?

    .NET Core(开放源代码,跨平台,x-copy可部署等)有许多令人兴奋的方面,其中最值得称赞的就是其性能了. 感谢所有社区开发人员对.NET Core做出的贡献,其中的许多改进也将在接下来的几个 ...

  7. PHP获取文件夹中的所有文件(包括子目录)

    方法一: 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 function tree($directory) ...

  8. GET请求和POST请求的区别

    request获取请求参数 最为常见的客户端传递参数方式有两种: 浏览器地址栏直接输入:一定是GET请求: 超链接:一定是GET请求: 表单:可以是GET,也可以是POST,这取决与<form& ...

  9. Vulkan Tutorial 29 Loading models

    操作系统:Windows8.1 显卡:Nivida GTX965M 开发工具:Visual Studio 2017 Introduction 应用程序现在已经可以渲染纹理3D模型,但是 vertice ...

  10. 记一次 联想杨天A4600K 安装操作系统遇到的尴尬

    故事的开始: 某日,有一台联想扬天A4600K台式机,该机器原来使用的系统为windowsXP,先需要安装win7系统. 准备好gho镜像,准备ghost安装系统.不料,提示镜像文件损坏,无法安装.起 ...