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

YAML配置格式变量 更多...

yaml_value.hpp 的引用(Include)关系图:

浏览该文件的源代码.

详细描述

YAML配置格式变量

此文件提供了YAML(YAML Ain't Markup Language)配置格式的抽象基类和具体实现类。 YAML是一种人类可读的数据序列化语言,常用于配置文件、数据交换和持久化存储。

支持YAML 1.2规范中的核心数据类型:

  • 空值(Null)
  • 布尔值(Boolean)
  • 整数(Integer,64位有符号)
  • 浮点数(Float,双精度)
  • 字符串(String,支持五种标量样式)
  • 时间戳(Timestamp,ISO 8601 / RFC 3339格式)
  • 序列(Sequence,支持块样式和流样式)
  • 映射(Mapping,支持块样式和流样式)
  • 锚点与别名(Anchor & Alias,通过 anchor 字段支持)
  • 标签(Tag,自定义类型标注)

遵循的国际标准

本实现严格遵循以下 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

在文件 yaml_value.hpp 中定义.