YAML教程:5分钟内开始使用YAML

简介: YAML教程:5分钟内开始使用YAML

YAML是一种数据序列化语言,它允许您以紧凑且可读的格式存储复杂数据。这对于DevOps和虚拟化非常有用,因为它对于实现高效的数据管理系统和自动化至关重要。

尽管它经常被开发人员所忽略,但它是一个功能强大且简单的工具,只需几个小时的学习就可以学会。

今天,我们将快速学习YAML,并且探索如何在下一个数据驱动的解决方案中使用它。

这是我们今天要介绍的内容:

  • 什么是YAML?
  • YAML的显著特征
  • YAML语法
  • 进阶概念

什么是YAML?

YAML是一种数据序列化语言,用于以人类可读的形式存储信息。它最初代表“Yet Another Markup Language”,但后来更改为“ YAML Ain’t Markup Language”,以区别于真正的标记语言。

它类似于XMLJSON文件,但使用更简洁的语法。YAML通常用于在基础架构代码(IoC)程序中创建配置文件或在DevOps开发管道中管理容器。

最近,YAML已用于创建自动化协议,该协议可以执行YAML文件中列出的一系列命令。这意味着您的系统可以更加独立和快速响应,而无需开发人员额外关注。

随着越来越多的公司采用DevOps和虚拟化技术,YAML迅速成为现代开发人员职位的必备技能。通过使用PyYAML库DockerAnsible等流行技术(如Python)的支持,YAML还易于与现有技术结合。

YAML与JSON与XML

YAML(.yml)

  • 可读代码
  • 极简主义语法
  • 专为数据设计
  • 与JSON类似的内联样式(是JSON的超集)
  • 允许注释
  • 不带引号的字符串
  • 被认为是“更简洁”的JSON
  • 高级功能(可扩展的数据类型,关系锚和保留键顺序的映射类型)

用例:YAML最适合使用DevOps管道或VM的数据繁重的应用程序。当团队中的其他开发人员经常使用此数据并因此需要更具可读性时,这也很有用。

JSON格式

  • 难以阅读
  • 明确而严格的语法要求
  • 与YAML相似的内联样式(某些YAML解析器可以读取JSON文件)
  • 暂无注释
  • 字符串需要双引号

用例:JSON在Web开发中受到青睐,因为它最适合序列化格式和通过HTTP连接传输数据。

XML格式

  • 难以阅读
  • 更详细
  • 充当标记语言,而YAML则用于数据格式化
  • 包含比YAML更多的功能,例如标记属性
  • 更严格定义的文档架构

用例: XML最适合需要对验证,架构和名称空间进行精细控制的复杂项目。XML不是人类可读的,并且需要更多的带宽和存储容量,但是提供了精细的控制。

YAML的显着特征

以下是YAML提供的一些最佳功能。

多文档支持

您可以在一个YAML文件中包含多个YAML文档,以使文件组织或数据解析更加容易。

每个文档之间的分隔都用三个破折号(---)标记

---
player: playerOne
action: attack (miss)
---
player: playerTwo
action: attack (hit)
--------


内置注释

YAML允许您使用#,类似于Python注释向文件添加注释。

key: #Here is a single-line comment
  - value line 5
  #Here is a
  #multi-line comment
- value line 13


可读的语法

YAML文件使用类似于Python的缩进系统来显示程序的结构。您需要使用空格而不是制表符来创建缩进,以免造成混淆。

它还削减了JSON和XML文件中的许多“噪声”格式,例如引号,括号和花括号。

这些格式规范一起提高了YAML文件的可读性,超越了XML和JSON。

YAML

#YAML
Imaro:
author: Charles R. Saunders
language: English
publication-year: 1981
pages: 224

JSON格式

#JSON
{
"Imaro": {
  "author": "Charles R. Saunders",
  "language": "English",
    "publication-year": "1981",
    "pages": 224,
}
}


注意,他们传达了相同的信息,但是由于YAML文件中删除了双引号,逗号和方括号,因此一目了然,更易于阅读。

隐式和显式输入

YAML在通过自动检测数据类型在输入方面提供了多功能性,同时还支持显式输入选项。要将数据标记为某种类型,只需!![typeName]在值之前添加。

# The value should be an int:
is-an-int: !!int 14.10
# Turn any value to a string:
is-a-str: !!str 67.43
# The next value should be a boolean:
is-a-bool: !!bool yes

没有可执行命令

作为数据表示格式,YAML不包含可执行文件。因此,与外部方交换YAML文件非常安全。

YAML必须与其他语言(例如Perl或Java)集成,才能添加可执行文件。

YAML语法

YAML具有构成大部分数据的一些基本概念。

键值对

通常,YAML文件中的大多数内容都是键-值对的一种形式,其中键表示对的名称,而值表示链接到该名称的数据。键值对是所有其他YAML构造的基础。

<key>: <value>

标量和映射(Scalars and mapping)

标量表示单个存储的值。标量使用映射分配给键名。您定义一个映射,该映射具有名称,冒号和空格,然后为其保留一个值。

YAML支持常见的类型,例如整数和浮点数值,以及非数字类型的Boolean和String。

每个都可以用不同的方式表示,例如十六进制,八进制或指数。数学概念还有特殊类型,例如无穷大,-无穷大和非数字(NAN)。

integer: 25
hex: 0x12d4 #evaluates to 4820
octal: 023332 #evaluates to 9946
float: 25.0
exponent: 12.3015e+05 #evaluates to 1230150.0
boolean: Yes
string: "25"
infinity: .inf # evaluates to infinity
neginf: -.Inf #evaluates to negative infinity
not: .NAN #Not a Number


String

字符串是代表句子或短语的字符的集合。您可以使用|将每个字符串打印为新行,>可以将其打印为段落。

YAML中的字符串不需要用双引号引起来。

str: Hello World
data: |
  These
  Newlines
  Are broken up
data: >
  This text is
  wrapped and is a
  single paragraph

顺序 (Sequence)

序列是类似于列表或数组的数据结构,它们在同一键下保存多个值。它们是使用块或内联流样式定义的。

块样式使用空格来构造文档。与流程样式相比,它更易于阅读,但结构却不那么紧凑。


--------
# Shopping List Sequence in Block Style
shopping:
- milk
- eggs
- juice


流样式允许您使用方括号内联编写序列,类似于Python或JavaScript等编程语言中的数组声明。Flow样式更紧凑,但一眼就很难阅读。

--------
# Shopping List Sequence in Flow Style
shopping: [milk, eggs, juice]


辞典 (Dictionaries)

词典是键-值对的集合,它们都嵌套在同一子组下。它们有助于将数据划分为逻辑类别,以供以后使用。

字典的定义就像映射一样,在字典中,您输入字典名称,冒号和一个空格,后跟一个或多个缩进键/值对。

# An employee record
Employees:
- dan:
  name: Dan D. Veloper
  job: Developer
  team: DevOps
- dora:
  name: Dora D. Veloper
  job: Project Manager
  team: Web Subscriptions

字典也可以包含更复杂的结构,例如序列。嵌套序列是表示复杂关系数据的好技巧。

下一步要学习的高级概念

恭喜您迈出了学习YAML的第一步。尽管经常被忽视,但YAML是一种简单有效的工具,可用于开发DevOps工具包。

接下来要讨论的一些高级主题是:

  • 锚点
  • 范本
  • YAML与外部工具(Docker,Ansible等)
  • 高级序列/映射类型
  • 高级数据类型(时间戳,空值等)





相关文章
|
1月前
|
机器学习/深度学习 数据可视化 计算机视觉
YOLOv5改进 | 2023Neck篇 | 轻量级跨尺度特征融合模块CCFM(附yaml文件+添加教程)
YOLOv5改进 | 2023Neck篇 | 轻量级跨尺度特征融合模块CCFM(附yaml文件+添加教程)
414 1
|
SQL 机器人 测试技术
pytest+yaml框架环境配置和使用教程
pytest+yaml框架环境配置和使用教程
|
存储 JSON 测试技术
16个实例带你玩转yaml数据格式——自动化测试工程师必备yaml教程
yaml数据格式可谓是自动化测试领域一颗璀璨的明星,笔者最近正好要用到yaml数据格式,可是笔者始终找不到一个想要的yaml格式教程,于是便奋发图强,攻上yaml官网,钻研苦读最新版本的yaml,写下此篇教程,以供大家更加方便、快速、深入地了解yaml数据格式。
384 0
16个实例带你玩转yaml数据格式——自动化测试工程师必备yaml教程
|
JavaScript 前端开发 数据库
|
XML 数据格式 计算机视觉
OpenCV教程(42) xml/yaml文件的读写
参考资料: http://docs.opencv.org/modules/core/doc/xml_yaml_persistence.html #include "opencv2/opencv.
1174 0
|
1月前
|
存储 IDE 测试技术
玩转数据处理利器:学会使用 YAML 文件轻松处理数据
玩转数据处理利器:学会使用 YAML 文件轻松处理数据
151 0
|
8月前
|
Kubernetes Cloud Native 应用服务中间件
【云原生】使用k8s创建nginx服务—通过yaml文件svc类型暴露
【云原生】使用k8s创建nginx服务—通过yaml文件svc类型暴露
299 0
|
8月前
|
Web App开发 资源调度 JavaScript
SAP Fiori Elements 应用里的 ui5.yaml 文件详解试读版
SAP Fiori Elements 应用里的 ui5.yaml 文件详解试读版
185 0
|
8月前
|
Kubernetes 应用服务中间件 nginx
kubernetes集群命令行工具kubectl介绍&yaml文件介绍-20230208
kubernetes集群命令行工具kubectl介绍&yaml文件介绍-20230208
173 0
|
16小时前
|
存储 Kubernetes 网络协议
K8s yaml文件配置详解
- name: string #共享存储卷名称 (volumes类型有很多种) emptyDir: {} #类型为emtyDir的存储卷,与Pod同生命周期的一个临时目录。为空值 hostPath: string #类型为hostPath的存储卷,表示挂载Pod所在宿主机的目录 path: string #Pod所在宿主机的目录,将被用于同期中mount的目录 secret: #类型为secret的存储卷,挂载集群与定义的secre对象到容器内部
8 0