【YAML】非标记语言的标记语言
什么是YAML?
YAML是"YAML Ain't a Markup Language"(YAML不是一种标记语言)的递归缩写。
在开发的这种语言时,YAML 的意思其实是:"Yet Another Markup Language"(仍是一种标记语言)[3],
但为了强调这种语言以数据做为中心,而不是以标记语言为重点,而用反向缩略语重命名。
是一个可读性高,用来表达数据序列化的格式。
YAML参考了其他多种语言,包括:C语言、Python、Perl,并从XML、电子邮件的数据格式(RFC 2822)中获得灵感。
Clark Evans在2001年首次发表了这种语言[1],另外Ingy döt Net与Oren Ben-Kiki也是这语言的共同设计者[2]。
当前已经有数种编程语言或脚本语言支持(或者说解析)这种语言。
YAML能干什么用?
YAML的语法和其他高级语言类似,并且可以简单表达清单、散列表,标量等数据形态
语法特点:
使用空白符号缩进和大量依赖外观
让人最容易上手的特色是巧妙避开各种封闭符号
适用场景:
特别适合用来表达或编辑数据结构、各种配置文件、倾印调试内容、文件大纲(例如:许多电子邮件标题格式和YAML非常接近)。
尽管它比较适合用来表达层次结构式(hierarchical model)的数据结构,不过也有精致的语法可以表示关系性(relational model)的数据。[5]
演示案例:
数据结构可以用类似大纲的缩进方式呈现
---
receipt: Oz-Ware Purchase Invoice
date: 2012-08-06
customer:
given: Dorothy
family: Gale items:
- part_no: A4786
descrip: Water Bucket (Filled)
price: 1.47
quantity: 4 - part_no: E1628
descrip: High Heeled "Ruby" Slippers
size: 8
price: 133.7
quantity: 1 bill-to: &id001
street: |
123 Tornado Alley
Suite 16
city: East Centerville
state: KS ship-to: *id001 specialDelivery: >
Follow the Yellow Brick
Road to the Emerald City.
Pay no attention to the
man behind the curtain.
...
在YAML中,字符串不一定要用双引号标示。
另外,在缩进中空白字符的数目并不是非常重要,只要相同层次结构的元素左侧对齐就可以了(不过不能使用TAB字符)。
这个文件的顶层由七个键值组成:其中一个键值"items",是两个元素构成的数组(或称清单),
这清单中的两个元素同时也是包含了四个键值的散列表。
文件中重复的部分用这个方法处理:使用锚点(&)和引用(*)标签将"bill-to"散列表的内容复制到"ship-to"散列表。
也可以在文件中加入选择性的空行,以增加可读性。
在一个文件中,可同时包含多个文件,并用"---"分隔。
选择性的符号"..."可以用来表示文件结尾(在利用流的通信中,这非常有用,可以在不关闭流的情况下,发送结束信号)。
文件预览:
YAML的文件后缀有两种:
- file.yaml
- file.yml

都可以被识别为yaml文件,只不过yml是缩写的再缩写
对比三种配置文件:
XML设置端口号:
<server>
<port>8080</port>
</server>
Properties设置端口号:
server.port = 8081
YAML设置端口号:
server:
port: 8080
语法 Syntax
基本语法:
KEY: VALUE
KEY表示键,VALUE表示值
要注意的是,VALUE和分号之间必须留有一个空格
空格在YAML中具有特殊的意义:
以空格来控制每一个键值对的层级关系
以左对齐的一列数据,都是同一层级的数据
值的写法:
普通值【数字、字符串、布尔】
- K:V直接书写
- 字符串可不使用引号
- 双引号不会转义特殊字符 如果写\\n会换行
- 单引号会转义处理 如果写\\n不会换行

对象【属性:值】
- 对象的标识没有值对应
- 属性和值是对象的下一级的多个键值对组成

- 可以横向的书写

数组【List、Set】
列写法 & 行写法


【YAML】非标记语言的标记语言的更多相关文章
- 从语言到库到框架,再到API,再到标记最后到DSL语言
计算机技术发展很快,而且越来越快,结果也是越来越复杂,那么我们到底怎么搞定复杂性并重用代码? 很明显,这是个大难题.一开始我们要解决计算问题,发展了基本的编程语言. 很快,编程语言不能满足需求,我们需 ...
- html标记语言 --图像标记
html标记语言 --图像标记 三.图像标记 1.使用方法 <img src="路径/文件名.格式" width="属性值" height="属 ...
- html标记语言 --文本标记
html标记语言 --文本标记 二.文本标记 1.h1-h6 标题标记,h1最大 2.font 字体设置标记 2.1 size字体大小.<font size="> 取值范围1-7 ...
- html标记语言 --格式标记
html标记语言 --格式标记 一.格式标记 1.<br>单标记,强制换行标记,让后面的文字.图片.表格等显示在下一行 2.<p>换段落标记 3.<center>居 ...
- Java语言与C++语言的差异总结
Java的设计者曾说过,设计这门语言的灵感主要来自于C++. 世上先有C++,然后才有Java,整个Java语言的发展历史就是一部对C++的填坑史.所以在Java语言学习过程中,将其与C++语言对比是 ...
- 【C语言】01-C语言概述
说明:这个C语言专题,是学习iOS开发的前奏.也为了让有面向对象语言开发经验的程序员,能够快速上手C语言.如果你还没有编程经验,或者对C语言.iOS开发不感兴趣,请忽略 为什么iOS开发要先学C语 ...
- Swift语言指南(七)--语言基础之布尔值和类型别名
原文:Swift语言指南(七)--语言基础之布尔值和类型别名 布尔值 Swift有一个基本布尔类型,叫做布尔(bool),布尔值又称逻辑值(logical),因为它只能为真(true)或假(false ...
- C语言(C++语言)中##(两个井号)和#(一个井号)用法[转]
文章来源:http://blog.csdn.net/starboybenben/article/details/49803315 C语言(C++语言)中的宏(Macro)属于编译器预处理的范畴,属于编 ...
- Go语言之Go语言变量
GO 语言变量 Go语言是静态类型语言,因此变量(variable)是有明确类型的,编译器也会检查变量类型的正确性. 标识符 在编程语言中标识符就是程序员定义的具有特殊意义的词,比如变量名.常量名.函 ...
- Python 语言特性:编译+解释、动态类型语言、动态语言
1. 解释性语言和编译性语言 1.1 定义 1.2 Python 属于编译型还是解释型? 1.3 收获 2. 动态类型语言 2.1 定义 2.2 比较 2. 动态语言(动态编程语言) 3.1 定义 3 ...
随机推荐
- U-Boot命令使用
帮助命令 help 所有命令提示: h ? help 某一条命令提示: ? 命令名 help 命令名 信息查询命令 bdinfo 查看板子信息: => bdinfo arch_number = ...
- 算法学习笔记(35): CMD Tree
对于 CMD Tree 的理解 原文:# 一种轻量级平衡树 这,EXSGT,感觉很像支持分裂 WBLT,但是相对来说思路很简单. 首先,在原文中说了: 能以均摊 \(\Theta(\log n)\) ...
- VIVO IQOO 5G 开关
VIVO IQOO 5G 开关 在拨号盘输入*#*#2288#*#*,然后点击网络模式选择. -
- 为什么boolean 类型的字段不建议使用is开头?
对于非boolean类型的参数,getter和setter方法命名的规范是以get和set开头 对于boolean类型的参数,setter方法是以set开头,但是getter方法命名的规范是以is开头 ...
- OOM异常的4种可能分析及常见的OOM异常演示
OOM异常的4种可能分析及常见的OOM异常演示 OOM异常: OutOfMemoryError 1.JAVA堆溢出JAVA堆用于存储对象实例,只要不断的创建对象,并且保证GC Roots到这些对象之间 ...
- 使用vue-contextmenujs鼠标右键菜单时,当高度不够时显示不全的问题
之前是采用npm或者yarn直接装包vue-contextmenujs的形式: npm install vue-contextmenujs -S || yarn add vue-contextmenu ...
- Built-in COM has been disabled via a feature switch.
.net 6.0 开始默认关闭com组件 使用时会出现以下信息 Built-in COM has been disabled via a feature switch. See https://aka ...
- python 判断token是否有效,若失效,重新发起token请求
场景: 1.对一个接口,进行接口自动化测试,查找的是有权限操作的用例,传入到获取token接口,生成token,判断当前是否有token,如果存在token,则无需再次发起token接口: 存在的问题 ...
- python重拾第十三天-那就做个堡垒机吧
本节内容 项目实战:运维堡垒机开发 前景介绍 到目前为止,很多公司对堡垒机依然不太感冒,其实是没有充分认识到堡垒机在IT管理中的重要作用的,很多人觉得,堡垒机就是跳板机,其实这个认识是不全面的,跳板功 ...
- 掉了两根头发后,我悟了!vue3的scoped原来是这样避免样式污染(上)
前言 众所周知,在vue中使用scoped可以避免父组件的样式渗透到子组件中.使用了scoped后会给html增加自定义属性data-v-x,同时会给组件内CSS选择器添加对应的属性选择器[data- ...