YAML – 处理过程
YAML - 数据处理流程
Section titled “YAML - 数据处理流程”YAML 促进了数据在其人类可读的文本格式与编程语言使用的原生数据结构之间的转换。无论您是将应用程序数据转换为 YAML(序列化 / 呈现)还是将 YAML 文本转换回应用程序数据(解析 / 表示),这个过程都包含几个关键阶段。
YAML 处理模型
Section titled “YAML 处理模型”大致流程可以可视化如下:
从应用程序数据到 YAML 文本:
- 应用程序的原生数据结构(例如,Python、Java、JavaScript 中的对象、数组、列表、字典)。
- YAML 表示(节点图):原生数据被转换为一个抽象的内部 YAML 模型,该模型由节点(标量、序列、映射)组成,通常称为节点图或表示图。
- 序列化(事件流):处理节点图以生成一个抽象的 YAML 事件流(例如,‘start sequence’(开始序列)、‘scalar value’(标量值)、‘end mapping’(结束映射))。
- 呈现(字符流):然后将这些事件格式化为最终的人类可读的 YAML 文本,包括缩进、注释和样式选择。
从 YAML 文本到应用程序数据:
- YAML 字符流(输入:
.yaml或.yml文件内容)。 - 解析(事件流):读取 YAML 文本并解析为 YAML 事件流,同时验证语法。
- YAML 表示(节点图):这些事件用于在内存中构建抽象的 YAML 节点图。
- 重构为原生数据结构:然后将节点图转换回编程语言的原生数据类型。
YAML 处理器(各种编程语言中的库)负责处理这些转换。让我们看看关键阶段:
1. 表示 (Representation)
Section titled “1. 表示 (Representation)”YAML 的核心是使用三种基本节点类型表示数据:
序列 (Sequences)
Section titled “序列 (Sequences)”表示有序的项目集合,相当于数组或列表。示例:
tasks: - sku: BL394D description: Football quantity: 4 - sku: BL4438H description: Super Hoop quantity: 1映射 (Mappings)
Section titled “映射 (Mappings)”表示无序的键值对集合,类似于字典、散列表或对象。键必须唯一。示例:
database_config: host: localhost port: 5432 user: admin标量 (Scalars)
Section titled “标量 (Scalars)”表示单个、原子性的数据值,如字符串、数字(整型、浮点数)、布尔值、空值、日期等。示例:BL394D、4、localhost、5432、true。
2. 序列化 (Serialization)
Section titled “2. 序列化 (Serialization)”序列化是将应用程序的内存中数据结构(即 YAML 表示/节点图)转换为 YAML 事件流的过程,该事件流最终生成文本格式的 YAML。这个阶段会考虑键的顺序(尽管映射本质上是无序的,但一些序列化器会保留插入顺序以提高可读性)以及解析锚点/别名。
例如,一个 Python 字典可以被序列化为一个 YAML 映射:
# Python 字典(概念性)# my_data = {'name': 'MyApp', 'version': '1.0', 'settings': {'debug': True, 'port': 8080}}
# 序列化后的 YAML 输出name: MyAppversion: '1.0'settings: debug: true port: 80803. 呈现 (Presentation)
Section titled “3. 呈现 (Presentation)”呈现是生成 YAML 字符流(实际文本文件)的最后阶段。YAML 处理器会决定格式化细节,例如缩进宽度、集合是使用块式风格还是流式风格、如何引用标量以及如果表示中包含注释则将注释放在哪里。用户偏好通常可以指导这个过程。
输出是人类可读的 YAML,如上面所示的示例。如果目标是 JSON,呈现将遵循 JSON 语法。
4. 解析 (Parsing)
Section titled “4. 解析 (Parsing)”解析是序列化和呈现的逆过程。它接收 YAML 字符流作为输入,并执行词法和语法分析,以确保其根据 YAML 规范格式良好。如果发现错误(例如,缩进不一致、语法违规),解析器将报告它们。成功的解析会生成一个事件流,然后使用该事件流在内存中构建 YAML 表示(节点图)。
考虑以下 YAML 输入:
---environment: productionapplication_nodes: - id: app_server_01 role: web_api - id: db_server_01 role: databaseparameters: max_connections: 100YAML 解析器读取并验证此内容,并允许应用程序访问 environment(作为 ‘production’)、application_nodes(作为对象列表)等。
可以使用像 YAML Lint 这样的在线工具(例如,可通过 yamllint.com 等网站访问或集成到 IDE 中)来解析和验证 YAML 文档。这些工具检查语法正确性,并有助于在使用 YAML 之前发现问题。许多代码编辑器和 IDE 也提供实时 YAML 验证。
理解这些过程有助于有效地使用 YAML 进行配置、数据交换,并了解 YAML 库的底层工作原理。