它提供了一种标准化格式,以人类易于理解、机器可解读的方式表示结构化数据。“YAML”是首字母缩略词,其全称为“YAML Ain't Markup Language”或“Yet Another Markup Language”。前者旨在强调该语言是针对数据而不是文档。

从本质上讲,YAML 的设计考虑了简单性和可读性。它使用清晰简洁的语法,依赖缩进、键值对和直观的约定。这种方法让开发人员和用户以类似于自然语言且易于理解、一目了然的格式表达复杂的数据结构。

由于强调人类可读性,YAML 特别适合各种应用程序,包括配置 (config) 文件和不同系统之间的数据交换。简单直观的结构增强了其在不同领域的可用性,使用户能够以清晰易懂的方式定义和组织数据。YAML 支持 Unicode 字符,允许表示来自不同语言和字符集的各种字符和符号。有效的 YAML 会生成没有语法错误的规范。

YAML 适应性强,是各种应用程序的通用选择。YAML 可用于各个领域,包括从配置管理到数据交换和自动化,提供了一种可访问且结构化的方法来表示和管理数据。

YAML 语法严重依赖缩进和空格数量来表示数据结构。YAML 中使用空格(不是制表符,YAML 中禁止使用制表符)来表示层次结构和嵌套。由于 YAML 在结构上依赖缩进,因此在整个 YAML 文档中确保一致性非常重要。

换行 (Newline) 表示换行符,或 YAML 格式中的行尾,用于分隔不同的元素。

序列(其他语言中的数组或列表),让您可以使用 YAML 定义项目列表。缩进将序列与父序列分开,每个列表项以破折号 (-) 开头,然后跟一个空格。序列中的所有项目都必须缩进相同的量。

fruits:
- apple
- orange
- pear
也可以使用方括号和逗号在流序列中表示序列。 1

fruits: [apple, orange, pear]

YAML 和 JSON 在数据表示方面有些相似,但 YAML 因其可读性、表现力和对复杂数据结构的支持而脱颖而出。YAML 是 JSON 的超集,除了扩展的功能和命令之外,还包含 JSON 的所有功能。

JSON(JavaScript 对象表示法)使用更明确的语法,包含大括号 {}、方括号 [] 和逗号。虽然 JSON 语法简洁,使用广泛,但其可读性可能较差,尤其是在较大的数据集中。JSON 对数据结构的支持相对有限,主要包括数组、对象和标量值。

在 web 应用程序和 API 中,JSON 通常因其数据交换的交叉兼容性而备受青睐,而 YAML 更常用于需要人类可读性和更复杂的数据结构的场景,例如配置文件和某些类型的数据文档和交换。 2

与 XML 相比,YAML 提供了更简洁、更人性化的替代方案,强调数据表示和数据交换的简单性和易理解性。YAML 和 XML 在语法和用途上有根本的区别。

XML 是高度结构化的,依赖明确的开头和结束标记,因此有点混乱。相比之下,YAML 采用更简单、更自然的类似语言的结构,通过缩进和键值对来注重可读性,而无需明确的结束标签。

Ansible 是一种使用 YAML 格式的文件(即 playbook)来定义任务和自动化流程的开源自动化软件应用程序。​​YAML 模板让用户可以在不了解高级编程语言的情况下对重复性任务的自动化进行编程。 3

使用 IBM watsonx™ Code Assistant for Red Hat® Ansible® Lightspeed ,用户可以使用简单的英语编写任务,并接收自动化任务的 YAML 代码建议。 这些代码建议用于创建 Ansible Playbook。 3

PyYAML 是一个著名的 Python 库,用于在基于 Python 的应用程序中解析和处理 YAML 文件。它提供了将 YAML 数据加载到 Python 对象中的方法。PyYAML 允许在 Python 应用程序中将 YAML 文件转换为实用的数据结构,反之亦然。 5
PyYAML 等工具以及其他 YAML 解析器和验证器(例如 yamllint 和 YAML Validator)在保持 YAML 文件的准确性、有效性和完整性方面发挥着重要作用。它们的主要功能包括验证 YAML 语法、识别错误并确保 YAML 文档内的一致性。

1 《如何使用 YAML 表示数组》 (ibm.com 外部链接), Tarun Telang, Educative, Inc., 2023

2 《YAML 和 JSON 有何区别》 (ibm.com 外部链接), Amazon Web Services, 2023

3 《什么是 YAML》 (ibm.com 外部链接), redhat.com, 2023 年 3 月 3 日

4 《Docker Compose 概述》 (ibm.com 外部链接), Docker.com, 2023

5 《Python YAML | YAML 文件处理指南》 (ibm.com 外部链接), Gabriel Ramuglia, 2023 年 9 月 11 日