zoukankan      html  css  js  c++  java
  • 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 Ain't Markup Language” (abbreviated YAML) is a data serialization language designed to be human-friendly and work well with modern programming languages for common everyday tasks.

    先来看看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的表示形式不同而可能产生误解。

  • 相关阅读:
    Linux 磁盘分区
    curl
    Metasploit ms10_046_shortcut_icon_dllloader 利用
    Ettercap 入门
    Ettercap dos_attack
    Centos7/Debian 配置双网卡
    Centos7配置单网卡,多IP
    Ettercap MITM Arp Poisoning
    Ettercap DNS Spoofing
    java常用设计模式--工厂模式简单例子
  • 原文地址:https://www.cnblogs.com/kungfupanda/p/5507281.html
Copyright © 2011-2022 走看看