NexusForce 1.0.0
A Modern C++ Library with extended functionality, web components, and utility libraries
载入中...
搜索中...
未找到

YAML(YAML Ain't Markup Language)1.2 配置格式支持 更多...

YAML配置 的协作图:

class  yaml_builder
 YAML配置构建器 更多...
class  yaml_parser
 YAML 1.2 递归下降解析器 更多...
class  yaml_value
 YAML值的抽象基类 更多...
class  yaml_null
 YAML空值类型 更多...
class  yaml_boolean
 YAML布尔值类型 更多...
class  yaml_integer
 YAML整数值类型 更多...
class  yaml_float
 YAML浮点数值类型 更多...
class  yaml_string
 YAML字符串值类型 更多...
class  yaml_timestamp
 YAML时间戳值类型 更多...
class  yaml_sequence
 YAML序列值类型(数组) 更多...
class  yaml_mapping
 YAML映射值类型(字典/对象) 更多...

详细描述

YAML(YAML Ain't Markup Language)1.2 配置格式支持

本模块提供 YAML 1.2.2 规范的完整实现,包含解析(yaml_parser)、 构建(yaml_builder)和值类型(yaml_value 层次结构)。

YAML 1.2 是 JSON 的严格超集(IETF RFC 8259),支持更丰富的数据类型 和更灵活的表达方式,广泛应用于配置文件、数据交换和持久化存储。

遵循的国际标准

本实现严格遵循以下 YAML 及相关标准规范:

YAML 数据序列化规范:

JSON 兼容性标准(YAML 1.2 是 JSON 的超集):

时间戳格式标准(YAML 1.2 §10.4.2 引用):

Unicode 编码标准:

浮点数标准:

YAML 值类型定义

根据 YAML 1.2.2 规范,支持以下八种核心值类型:

类型 YAML 1.2.2 引用 本实现类 说明
Null §10.2 yaml_null null、Null、NULL、~
Boolean §10.3 yaml_boolean true/false、True/False、yes/no等
Integer §10.4.1 yaml_integer 64位有符号整数(支持十进制、十六进制、八进制)
Float §10.4.1 yaml_float IEEE 754 双精度浮点数(支持 .inf、-.inf、.nan)
String §10.5 yaml_string Unicode 字符串(UTF-8/UTF-16/UTF-32)
Timestamp §10.4.2 yaml_timestamp ISO 8601 / RFC 3339 时间戳
Sequence §10.1.1 yaml_sequence 有序值列表(数组)
Mapping §10.1.2 yaml_mapping 键值对集合(字典/对象)

字符串标量样式

根据 YAML 1.2.2 §7.3,支持五种字符串标量样式:

样式 语法示例 转义序列 换行处理 说明
Plain string 不支持 折叠空格 无引号纯文本
SingleQuoted 'string' 有限支持 保留 单引号字符串
DoubleQuoted "string" 完全支持 保留 双引号字符串(含转义)
Literal | 不支持 保留 块字面量(保留换行)
Folded > 不支持 折叠 块折叠(换行转空格)

集合样式

根据 YAML 1.2.2 §7.4,序列和映射支持两种集合样式:

类型 块样式(Block) 流样式(Flow)
序列 - item1
- item2
[item1, item2]
映射 key1: value1\nkey2: value2 {key1: value1, key2: value2}

布尔值同义词

根据 YAML 1.2.2 §10.3.2,支持以下布尔值同义词:

语义值 规范形式 同义词
true true True、TRUE、y、Y、yes、Yes、YES、on、On、ON
false false False、FALSE、n、N、no、No、NO、off、Off、OFF

空值同义词

根据 YAML 1.2.2 §10.2.2,支持以下空值同义词:

规范形式 同义词
null Null、NULL、~(空字符串在某些上下文中)

实现细节

特性 规范参数
编码 UTF-8(YAML 1.2 §5.1)
整数范围 -2^63 到 2^63-1(YAML 1.2 §10.4.1)
浮点数精度 IEEE 754-2019 双精度(YAML 1.2 §10.4.1)
字符串转义序列 YAML 1.2 §5.7 定义
键名唯一性 YAML 1.2 §3.2.1(映射中键名应唯一)
缩进要求 空格字符(YAML 1.2 §6.1),禁止制表符
注释支持 # 行注释(YAML 1.2 §6.8)
锚点与别名 &anchor 和 *alias(YAML 1.2 §3.2.2)
标签系统 !tag 和 !!type(YAML 1.2 §3.2.3)

字符串转义序列

根据 YAML 1.2.2 §5.7,双引号字符串支持以下转义序列:

转义序列 字符 Unicode 码点
\" 引号 U+0022
\\ 反斜杠 U+005C
\/ 斜杠 U+002F
\b 退格 U+0008
\f 换页 U+000C
\n 换行 U+000A
\r 回车 U+000D
\t 制表符 U+0009
\uXXXX Unicode 字符 U+XXXX
\UXXXXXXXX Unicode 字符(全范围) U+XXXXXXXX

YAML 1.2 与 JSON 兼容性

YAML 1.2 是 JSON 的严格超集,所有有效的 JSON 文档也是有效的 YAML 文档。 这意味着 JSON 可以作为 YAML 的子集进行解析。

特性 JSON YAML 1.2
注释 不支持 # 行注释
字符串引号 仅双引号 五种样式
尾部逗号 不允许 允许(可选)
键名引号 必须引号 可选(裸键)
锚点与别名 不支持 &anchor 和 *alias
标签 不支持 !tag 和 !!type
警告
根据 YAML 1.2 §6.1,制表符(tab)不应用于缩进,仅允许在内容中使用。 流样式映射中重复的键名行为未定义,应避免使用。
根据 YAML 1.2 §3.2.1,映射中的键名在 YAML 1.2 中应唯一。
参见
https://yaml.org/
https://yaml.org/spec/1.2.2/
https://json.org/
https://www.rfc-editor.org/rfc/rfc8259