YAML

  • 定义:
    YAML是一个可读性高,用来表达数据序列化的格式。
  • 来源:
    参考XML、C语言、Python、Perl以及电子邮件格式RFC2822。
  • 命名:
    英文名:YAML Ain’t a Markup Language;中文名:另一种标记语言。
  • 说明:
    YAML不是一种标记语言,是"YAML Ain’t a Markup Language"的递归缩写,但开发之初其真实意思却是:“Yet Another Markup Language”,翻译:仍是一种标记语言。为了强调这种语言以数据做为中心,而不是以标记语言为重点,因此用反向缩略语重命名。
  • 功能:
    • 简单表达清单、散列表,标量等资料形态;
    • 它使用空白符号缩排和大量依赖外观的特色,特别适合用来表达或编辑数据结构、各种设定档、倾印除错内容、文件大纲;
    • 尽管它比较适合用来表达阶层式的数据结构,也有精致的语法可以表示关联性的资料;
    • 由于YAML使用空白字符和分行来分隔资料,使得它他特别适合用grep、Python、Perl、Ruby操作。
      其让人最容易上手的特色是巧妙避开各种封闭符号,如:引号、各种括号等,这些符号在嵌套结构中会变得复杂而难以辨认。
  • 语法:
    • 在yaml.org(英文)可以找到轻巧而好用的小抄(亦是用YAML表示)及格式说明。下面的内容,是关于基本组件的摘要;
    • YAML使用可打印的Unicode字符(UTF-8或UTF-16);
    • 使用空白字符为文件缩进来表示结构,不能使用跳格字符TAB;
    • 注解由#开始,可在一行中的任何位置,范围只有一行;
    • 每个清单成员以单行表示,并用短杠+空白(- )起始;或使用方括号([]),并用逗号+空白(, )分开成员;
    • 每个散列表成员用冒号+空白(: )分开键值和内容;或使用大括号({ }),并用逗号+空白(, )分开成员;
    • 散列表的键值可以用问号(?)起始,用来明确的表示多个词汇组成的键值;
    • 字符串
      • 一般不使用引号,但必要的时候可以用双引号(")或单引号(’)框住;
      • 使用双引号表示字符串时,可用倒斜线(\)开始的转义字符(类似C语言)表示特殊字符;
      • 区块的字符串用缩进和修饰符来和其他数据分隔,有新行保留使用符号|,新行折叠使用符号>;
    • 在单一文件中,可用连续三个连字号(—)区分多个文件;有选择性的连续三个点号(…)用来表示文件结尾;重复的内容可使从参考标记星号(*)复制到锚点标记(&);
    • 指定格式可以使用两个惊叹号(!!),后面接上名称;
    • 文件中的单一文件可以使用指导指令,使用方法是百分比符号(%);有两个指导指令在YAML1.1版中被定义:
      • %YAML 指导指令,用来识别文件的YAML版本;
      • %TAG 指导指令,被用在URI的前缀标记,用于标记节点的类型时相当有用;
    • YAML在使用逗号及冒号时,后面都必须接一个空白字符,所以可以在字符串或数值中自由加入分隔符号(例如:5,280或http://www.wikipedia.org)而不需要使用引号;
    • 另外还有两个特殊符号在YAML中被保留,有可能在未来的版本被使用–(@)和(`)。
  • 格式 :
    • 多行缩进
      数据结构通过缩进来表示,连续的项目通过减号“-”来表示,map结构里面的key/value对用冒号“:”来分隔。样例如下:

      house:
        family:
          name: Doe
          parents:
            - John
            - Jane
          children:
            - Paul
            - Mark
            - Simone
        address:
          number: 34
          street: Main Street
          city: Nowheretown
          zipcode: 12345
      
  • 单行缩写
    YAML也有用来描述好几行相同结构的数据的缩写语法,数组用’[]‘包括起来,hash用’{}'来包括,示例:
    house:
      family: { name: Doe, parents: [John, Jane], children: [Paul, Mark, Simone] }
      address: { number: 34, street: Main Street, city: Nowheretown, zipcode: 12345 }
    
  • 应用场景
    • 脚本语言
      由于实现简单,解析成本很低,YAML特别适合在脚本语言中使用,如:Ruby,Perl,Python,PHP,OCaml,JavaScript,另外非脚本语言Java 和 Go也支持解析;
    • 序列化
      YAML比较适合做序列化。因为它是宿主语言数据类型直转的;
    • 配置文件
      写YAML要比写XML快得多,并且比ini文档功能更强,Ruby on Rails的配置选用了YAML;由于兼容性问题,不同语言间的数据流转建议不要用YAML。
  • 函式库在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值