TOML
2023-10-22 10:44:13 阿炯

TOML 是一种旨在成为一个小规模、易于使用的语义化的配置文件格式,它被设计为可以无二义性的转换为一个哈希表。于2013年2月23日首发,扩展名为.toml。

“TOML”这个名字是“Tom's Obvious, Minimal Language(汤姆的浅显的、极简的语言)”的首字母略写词。“Tom”指它的作者Tom Preston-Werner。


TOML aims to be a minimal configuration file format that's easy to read due to obvious semantics. TOML is designed to map unambiguously to a hash table. TOML should be easy to parse into data structures in a wide variety of languages.

其已在一些软件工程中使用,并且很多编程语言都支持TOML格式数据的解析。旨在成为一个语义明显且易于阅读的最小化配置文件格式;被设计成可以无歧义地映射为哈希表,应该能很容易地被解析成各种语言中的数据结构。配置文件的使用由来已久,从.ini、XML、JSON、YAML再到TOML,语言的表达能力越来越强,同时书写便捷性也在不断提升。TOML是前GitHub CEO,Tom Preston-Werner于2013年创建,其目标是成为一个小规模的易于使用的语义化配置文件格式。它被设计为可以无二义性的转换为一个哈希表(Hash Table)。

规格
TOML 是大小写敏感的。
文件必须是合法的 UTF-8 编码的 Unicode 文档。
空白是指制表符(0x09)或空格(0x20)。
换行是指 LF(0x0A)或 CRLF(0x0D 0x0A)。

TOML 文档最基本的构成区块是键值对:
键名在等号的左边而值在右边。
键名和键值周围的空白会被忽略。
键、等号和值必须在同一行(不过有些值可以跨多行)。

注释
使用#来表示注释开始,至当前行尾结束。

语法
TOML的语法广泛地由key = "value"、[节名]与#注释构成。有4种字符串表示方法:基本、多行-基本、字面量、多行-字面量,所有字符串必须是合法的UTF8字符。基本字符串由双引号包裹,所有Unicode字符均可出现,除了双引号、反斜线、控制字符(U+0000 to U+001F)需要转义。它支持以下数据类型:字符串、整形、浮点型、布尔型、日期时间、数组和图表。

示例
# 这是一份 TOML 文件

title = "TOML 范例"

[owner]
name = "Tom Preston-Werner"
dob = 1979-05-27T07:32:00-08:00 # First class dates

[database]
server = "192.168.1.1"
ports = [ 8001, 8001, 8002 ]
connection_max = 5000
enabled = true

[servers]
  # 可以使用缩排(TAB或是空格),但不是必要的
  [servers.alpha]
  ip = "10.0.0.1"
  dc = "eqdc10"

  [servers.beta]
  ip = "10.0.0.2"
  dc = "eqdc10"

[clients]
data = [ ["gamma", "delta"], [1, 2] ]

# 可以在阵列中换行
hosts = [
  "alpha",
  "omega"
]


多行-基本字符串由三个双引号包裹,除了分隔符开始的换行外,字符串内的换行将被保留。在多行-基本字符串中可以在行尾使用\来忽略其后的所有(换行符和空白符)直到第一个非空白符。字面量字符串由单引号包裹,其内不允许转义,因此可以方便的表示基本字符串中需要转义的内容。多行-字面量字符串与多行-基本字符串类似。

整数:为了增加可读性,整数可以使用_分隔。每个_必须被至少一个数字环绕。不被允许的表达:前置0,2、8、16进制、无穷、NaN。 整数的范围是64bit signed long类型的范围。

浮点数:浮点数的范围是64 bit double类型的范围。

布尔值:小写的true或false。

日期时间:使用RFC 3339描述的时间格式。

数组:其使用方括号包裹。空格会被忽略,包括换行符。元素使用逗号分隔。注意,不允许混用数据类型(所有的字符串类型均为同一类型)。

表格:表格也称为哈希表或字典,用来存储键值对。表格名由方括号包裹,且自成一行。表格名下,直到下一个表格名或文件尾,均为当前表格的内容。表格可以嵌套,即表格中某个键的值可以为表格。另外还有表格数组与JSON结构类似。


最新版本:1.0


官方主页:https://toml.io/