【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 ...
随机推荐
- windows server 2016 远程桌面连接,发生身份验证错误。 要求的函数不受支持
远程桌面连接,发生身份验证错误. 要求的函数不受支持 客户端:WIN7 服务端:windows server 2016 在被远程的机器上-远程设置中-取消"仅允许运行使用网络级别身份验证的远 ...
- 将手机声音通过蓝牙输入到WIN10电脑-安卓手机投屏直播无声音
安卓手机投屏无声音,斗鱼,虎牙,直播无声音.可以用本方案,前提是电脑要有蓝牙功能,没有蓝牙,可以购买一个USB蓝牙适配器(不建义买CSR芯片的,CSR驱动会导致office 和远程桌面有问题). 操作 ...
- Python基础——上节补充及数据类型
1.变量的创建过程 当我们创建一个变量name='oldboy'时,实际上是这样一个过程. 程序先开辟了一个内存空间,把变量的内容放进去,再让变量name指向'oldboy'所在的内存地址. 我们可以 ...
- Vue 3深度探索:自定义渲染器与服务端渲染
title: Vue 3深度探索:自定义渲染器与服务端渲染 date: 2024/6/14 updated: 2024/6/14 author: cmdragon excerpt: 这篇文章介绍了如何 ...
- @ConfigurationProperties(prefix = “xx.xx.xx“) 从配置文件中取值赋给类的属性
@ConfigurationProperties(prefix = "xx.xx.xx") 从配置文件中取值赋给类的属性 @ConfigurationProperties(pref ...
- Java 将Markdown文件转换为Word和PDF文档
Markdown 凭借其简洁易用的特性,成为创建和编辑纯文本文档的常用选择.但某些时候我们需要更加精致的展示效果,例如在专业分享文档或打印成离线使用的纸质版时,就需要将Markdown文件以其他固定的 ...
- Unity中正面视图的相机最大距离定位
问题背景: Unity中在场景中有这样的需求,就是俯视整个场景或者平视整个场景.这种情况下场景中物体长宽比不一定和相机视口长宽比一致,要保证所有的物体都在视口内,并且距离不能太远,,所以处理起来需要点 ...
- GUI自动化测试策略
标签(空格分隔): GUI自动化策略 带你看看实际的大型全球化电商网站的 GUI 自动化测试如何开展.这场实战,我将从以下两个方面展开 试策略如何设计?这一点,我会根据亲身经历的实际项目,和你探讨 G ...
- Qt实现汽车仪表盘
在UI界面显示中,仪表盘的应用相对比较广泛,经常用于显示速度值,电压电流值等等,最终实现效果如下动态图片(文末提供给源工程下载): 主要包含以下绘制步骤: 绘制画布 /* * 绘制画布 */ void ...
- Pandas中的常用函数
1. map.apply.applymap 参考:Pandas教程 | 数据处理三板斧--map.apply.applymap详解 在日常的数据处理中,经常会对一个DataFrame进行逐行.逐列和逐 ...