什么是YAML?

YAML是"YAML Ain't a Markup Language"(YAML不是一种标记语言)的递归缩写

在开发的这种语言时,YAML 的意思其实是:"Yet Another Markup Language"(仍是一种标记语言[3]

但为了强调这种语言以数据做为中心,而不是以标记语言为重点,而用反向缩略语重命名。

是一个可读性高,用来表达数据序列化的格式。

YAML参考了其他多种语言,包括:C语言PythonPerl,并从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】非标记语言的标记语言的更多相关文章

  1. 从语言到库到框架,再到API,再到标记最后到DSL语言

    计算机技术发展很快,而且越来越快,结果也是越来越复杂,那么我们到底怎么搞定复杂性并重用代码? 很明显,这是个大难题.一开始我们要解决计算问题,发展了基本的编程语言. 很快,编程语言不能满足需求,我们需 ...

  2. html标记语言 --图像标记

    html标记语言 --图像标记 三.图像标记 1.使用方法 <img src="路径/文件名.格式" width="属性值" height="属 ...

  3. html标记语言 --文本标记

    html标记语言 --文本标记 二.文本标记 1.h1-h6 标题标记,h1最大 2.font 字体设置标记 2.1 size字体大小.<font size="> 取值范围1-7 ...

  4. html标记语言 --格式标记

    html标记语言 --格式标记 一.格式标记 1.<br>单标记,强制换行标记,让后面的文字.图片.表格等显示在下一行 2.<p>换段落标记 3.<center>居 ...

  5. Java语言与C++语言的差异总结

    Java的设计者曾说过,设计这门语言的灵感主要来自于C++. 世上先有C++,然后才有Java,整个Java语言的发展历史就是一部对C++的填坑史.所以在Java语言学习过程中,将其与C++语言对比是 ...

  6. 【C语言】01-C语言概述

      说明:这个C语言专题,是学习iOS开发的前奏.也为了让有面向对象语言开发经验的程序员,能够快速上手C语言.如果你还没有编程经验,或者对C语言.iOS开发不感兴趣,请忽略 为什么iOS开发要先学C语 ...

  7. Swift语言指南(七)--语言基础之布尔值和类型别名

    原文:Swift语言指南(七)--语言基础之布尔值和类型别名 布尔值 Swift有一个基本布尔类型,叫做布尔(bool),布尔值又称逻辑值(logical),因为它只能为真(true)或假(false ...

  8. C语言(C++语言)中##(两个井号)和#(一个井号)用法[转]

    文章来源:http://blog.csdn.net/starboybenben/article/details/49803315 C语言(C++语言)中的宏(Macro)属于编译器预处理的范畴,属于编 ...

  9. Go语言之Go语言变量

    GO 语言变量 Go语言是静态类型语言,因此变量(variable)是有明确类型的,编译器也会检查变量类型的正确性. 标识符 在编程语言中标识符就是程序员定义的具有特殊意义的词,比如变量名.常量名.函 ...

  10. Python 语言特性:编译+解释、动态类型语言、动态语言

    1. 解释性语言和编译性语言 1.1 定义 1.2 Python 属于编译型还是解释型? 1.3 收获 2. 动态类型语言 2.1 定义 2.2 比较 2. 动态语言(动态编程语言) 3.1 定义 3 ...

随机推荐

  1. windows server 2016 远程桌面连接,发生身份验证错误。 要求的函数不受支持

    远程桌面连接,发生身份验证错误. 要求的函数不受支持 客户端:WIN7 服务端:windows server 2016 在被远程的机器上-远程设置中-取消"仅允许运行使用网络级别身份验证的远 ...

  2. 将手机声音通过蓝牙输入到WIN10电脑-安卓手机投屏直播无声音

    安卓手机投屏无声音,斗鱼,虎牙,直播无声音.可以用本方案,前提是电脑要有蓝牙功能,没有蓝牙,可以购买一个USB蓝牙适配器(不建义买CSR芯片的,CSR驱动会导致office 和远程桌面有问题). 操作 ...

  3. Python基础——上节补充及数据类型

    1.变量的创建过程 当我们创建一个变量name='oldboy'时,实际上是这样一个过程. 程序先开辟了一个内存空间,把变量的内容放进去,再让变量name指向'oldboy'所在的内存地址. 我们可以 ...

  4. Vue 3深度探索:自定义渲染器与服务端渲染

    title: Vue 3深度探索:自定义渲染器与服务端渲染 date: 2024/6/14 updated: 2024/6/14 author: cmdragon excerpt: 这篇文章介绍了如何 ...

  5. @ConfigurationProperties(prefix = “xx.xx.xx“) 从配置文件中取值赋给类的属性

    @ConfigurationProperties(prefix = "xx.xx.xx") 从配置文件中取值赋给类的属性 @ConfigurationProperties(pref ...

  6. Java 将Markdown文件转换为Word和PDF文档

    Markdown 凭借其简洁易用的特性,成为创建和编辑纯文本文档的常用选择.但某些时候我们需要更加精致的展示效果,例如在专业分享文档或打印成离线使用的纸质版时,就需要将Markdown文件以其他固定的 ...

  7. Unity中正面视图的相机最大距离定位

    问题背景: Unity中在场景中有这样的需求,就是俯视整个场景或者平视整个场景.这种情况下场景中物体长宽比不一定和相机视口长宽比一致,要保证所有的物体都在视口内,并且距离不能太远,,所以处理起来需要点 ...

  8. GUI自动化测试策略

    标签(空格分隔): GUI自动化策略 带你看看实际的大型全球化电商网站的 GUI 自动化测试如何开展.这场实战,我将从以下两个方面展开 试策略如何设计?这一点,我会根据亲身经历的实际项目,和你探讨 G ...

  9. Qt实现汽车仪表盘

    在UI界面显示中,仪表盘的应用相对比较广泛,经常用于显示速度值,电压电流值等等,最终实现效果如下动态图片(文末提供给源工程下载): 主要包含以下绘制步骤: 绘制画布 /* * 绘制画布 */ void ...

  10. Pandas中的常用函数

    1. map.apply.applymap 参考:Pandas教程 | 数据处理三板斧--map.apply.applymap详解 在日常的数据处理中,经常会对一个DataFrame进行逐行.逐列和逐 ...