YAML – Failsafe Schema (故障安全模式)
YAML - Failsafe Schema (故障安全模式)
Section titled “YAML - Failsafe Schema (故障安全模式)”YAML 模式(Schema)定义了如何将 YAML 标签(Tag)解析为原生数据类型。Failsafe Schema 是最基础、最普遍兼容的模式。它保证任何 YAML 文档都能被解析,但它仅识别三种基本数据结构:通用映射(generic mappings)、通用序列(generic sequences)和通用字符串(generic strings)。它不执行任何隐式类型转换(例如,‘true’ 仍然是字符串,而不是布尔值;‘123’ 仍然是字符串,而不是整数)。
当未指定其他模式,或者 YAML 处理器需要为未知标签提供回退机制时,会隐式使用 Failsafe Schema。它通过对数据的含义做出最少的假设来确保互操作性。
Failsafe Schema 支持的类型
Section titled “Failsafe Schema 支持的类型”通用映射(!!map)
Section titled “通用映射(!!map)”表示一种关联容器,其中键(key)是唯一的,并映射到值(value)。在 Failsafe Schema 中,除非通过更具体的模式明确标记,否则键和值通常都被视为通用字符串。
通用映射示例:
# YAML 内容authors: "Clark Evans": "YAML Specification Co-author" "Ingy döt Net": "YAML Specification Co-author" "Oren Ben-Kiki": "YAML Specification Co-author"
# 显式使用 !!map 标签(通常会自动推断)flow_style_map: !!map {name: "Alice", role: "Developer"}使用 Failsafe Schema 解析时,其结构被保留为键值对,其中键和值均为通用字符串:
# 概念性的 JSON 表示(所有值均为字符串){ "authors": { "Clark Evans": "YAML Specification Co-author", "Ingy döt Net": "YAML Specification Co-author", "Oren Ben-Kiki": "YAML Specification Co-author" }, "flow_style_map": { "name": "Alice", "role": "Developer" }}通用序列(!!seq)
Section titled “通用序列(!!seq)”表示一个有序的项集合,通过从零开始的连续整数进行索引。在 Failsafe Schema 中,序列中的项被视为通用字符串。
# 序列的 YAML 内容contributors: - "Clark Evans" - "Ingy döt Net" - "Oren Ben-Kiki"
# 显式使用 !!seq 标签表示流式序列flow_style_seq: !!seq ["item1", "item2", "item3"]这个通用序列的概念性 JSON 表示将是:
# 概念性的 JSON 表示(所有项均为字符串){ "contributors": [ "Clark Evans", "Ingy döt Net", "Oren Ben-Kiki" ], "flow_style_seq": [ "item1", "item2", "item3" ]}通用字符串(!!str)
Section titled “通用字符串(!!str)”表示一个标量值,作为 Unicode 字符的序列。所有未加引号的标量、单引号标量、双引号标量、字面量块标量和折叠块标量,如果未被其他模式(如 JSON 或 Core Schema)解析,在 Failsafe Schema 中都默认为通用字符串。
# YAML 内容message: Hello, world!quoted_message: "123"boolean_like_string: 'true'在 Failsafe Schema 中,这些都将被解释为字符串:
# 概念性的 JSON 表示{ "message": "Hello, world!", "quoted_message": "123", "boolean_like_string": "true"}Failsafe Schema 之所以基础,是因为它为 YAML 处理提供了一个基线,确保任何文档至少可以作为映射、序列和字符串的结构被加载。更高级的模式,如 JSON Schema 或 Core Schema,在此基础上增加了将标签解析为更具体类型(如整数、布尔值、空值等)的规则。