规格
- 大小写敏感
toml
文件必须是合法的UTF-8
编码的Unicode
文档- 空白是指制表符
0x09
或空格0x20
- 换行是指LF
0x0A
或CRLF0x0D0A
注释
井号会将该行余下的部分标记为注释
1 2 3 4 |
# 这是一个注释 key = "value" #这是一个注释 another = "# 这不是一个注释" |
键值对
toml
文档最基本的构成区块是键值对
- 键名在等号左边
- 键名和简直周围的空白会被忽略
- 键、等号、值必须在同一行
值的类型
- 字符串
- 整数
- 浮点数
- 布尔型
- 坐标日期时刻
- 各地日期时刻
- 各地日期
- 各地时刻
- 数组
- 内联表
- 不指定值是非法的
- 键值对后必须换行
键名
- 裸露
- 只能包含ASCII 字母,ASCII 数字,下划线和短横线
- 引号引起来的
- 裸键不能为空,但是可以使用空引号
""
,''
- 裸键不能为空,但是可以使用空引号
- 以点分隔的
physical.color
- 注意
- 点分隔符周围的空白会被忽略
- 键不能重名
字符串
- 基本字符串
- 任何 Unicode 字符都可以使用,除了那些必须转义的:引号,反斜杠,以及除制表符外的控制字符
(U+0000 至 U+0008,U+000A 至 U+001F,U+007F)
- 任何 Unicode 字符都可以使用,除了那些必须转义的:引号,反斜杠,以及除制表符外的控制字符
- 多行基本字符串
- 由三个引号包裹,允许折行
- 字面量
- 由单引号包裹
- 多行字面量
- 两侧各有三个单引号来包裹,允许换行
- 所有字符串都只能包含有效的
UTF-8
字符
整数
- 整数是纯数字
- 正数可以有加号前缀
- 负数的前缀是减号
浮点数
浮点数应当被实现为
IEEE 754 binary64
值
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
# 小数 flt1 = +1.0 flt2 = 3.1415 flt3 = -0.01 # 指数 flt4 = 5e+22 flt5 = 1e06 flt6 = -2E-2 # 都有 flt7 = 6.626e-34 # 与整数相似,你可以使用下划线来增强可读性 flt8 = 224_617.445_991_228 |
特殊浮点值
1 2 3 4 5 6 7 8 9 |
# 无穷 sf1 = inf # 正无穷 sf2 = +inf # 正无穷 sf3 = -inf # 负无穷 # 非数 sf4 = nan # 实际上对应信号非数码还是静默非数码,取决于实现 sf5 = +nan # 等同于 `nan` sf6 = -nan # 有效,实际码取决于实现 |
布尔值
1 2 |
bool1 = true bool2 = false |
坐标日期时刻
1 2 3 4 5 |
odt1 = 1979-05-27T07:32:00Z odt2 = 1979-05-27T00:32:00-07:00 odt3 = 1979-05-27T00:32:00.999999-07:00 odt4 = 1979-05-27 07:32:00Z |
各地日期时刻
1 2 |
ldt1 = 1979-05-27T07:32:00 ldt2 = 1979-05-27T00:32:00.999999 |
各地日期
1 |
ld1 = 1979-05-27 |
各地时刻
1 2 |
lt1 = 07:32:00 lt2 = 00:32:00.999999 |
数组
- 内含值得方括号
- 空白会被忽略
- 子元素由逗号分隔
- 数组可以包含与键值对所允许的相同数据类型的值
- 可以混合不同类型的值
1 2 3 4 5 6 7 8 9 10 11 12 |
integers = [ 1, 2, 3 ] colors = [ "红", "黄", "绿" ] nested_array_of_int = [ [ 1, 2 ], [3, 4, 5] ] nested_mixed_array = [ [ 1, 2 ], ["a", "b", "c"] ] string_array = [ "所有的", '字符串', """是相同的""", '''类型''' ] # 允许混合类型的数组 numbers = [ 0.1, 0.2, 0.5, 1, 2, 5 ] contributors = [ "Foo Bar <foo@example.com>", { name = "Baz Qux", email = "bazqux@example.com", url = "https://example.com/bazqux" } ] |
- 数组可以跨行
- 数组的最后一个值后面可以有终逗号(也称为尾逗号)
- 值和结束括号前可以存在任意数量的换行和注释
1 2 3 4 5 6 7 8 |
integers2 = [ 1, 2, 3 ] integers3 = [ 1, 2, # 这是可以的 ] |
表
- 表(也被称为哈希表或字典)是键值对的集合
- 它们在方括号里,并作为单独的行出现
- 看得出它们不同于数组,因为数组只有值
看得出它们不同于数组,因为数组只有值
表不保证保持键值对的指定顺序
1 2 3 4 5 6 7 |
[table-1] key1 = "some string" key2 = 123 [table-2] key1 = "another string" key2 = 456 |
内联表
- 内联表得出现在同一行内
- 内联表中,最后一对键值对后不允许终逗号(也称为尾逗号)
- 不允许花括号中出现任何换行,除非在值中它们合法
1 2 3 |
name = { first = "Tom", last = "Preston-Werner" } point = { x = 1, y = 2 } animal = { type.name = "pug" } |
内联表完全在内部定义键和子表
新键和子表不再能被添加进去
内联表不能被用来向一个已定义的表添加键或子表
表数组
- 通过双方括号来表示,在它下方,直至下一个表或文件结束,都是该表的键值对
- 各个具有相同方括号名的表将会成为该表数组内的一员,这些表按出现顺序插入
- 一个没有任何键值对的双方括号表将被视为一个空表
1 2 3 4 5 6 7 8 9 10 11 |
[[products]] name = "Hammer" sku = 738594937 [[products]] [[products]] name = "Nail" sku = 284758393 color = "gray" |
等价于如下JSON格式
1 2 3 4 5 6 7 |
{ "products": [ { "name": "Hammer", "sku": 738594937 }, { }, { "name": "Nail", "sku": 284758393, "color": "gray" } ] } |
还可以创建一个嵌套表数组
在子表上使用相同的双方括号语法语法
每个双方括号子表将隶属于最近定义的表元素
普通的子表(非数组)同样也隶属于最近定义的表元素
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
[[fruit]] name = "apple" [fruit.physical] # 子表 color = "red" shape = "round" [[fruit.variety]] # 嵌套表数组 name = "red delicious" [[fruit.variety]] name = "granny smith" [[fruit]] name = "banana" [[fruit.variety]] name = "plantain" |
文件扩展名
toml
文件应当使用.toml
扩展名
MIME类型
在互联网上传输
toml
文件时,恰当的 MIME 类型是application/toml
本文为原创文章,版权归Aet所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ Uml 相关记述08/26
- ♥ 架构模式:MVC模式07/27
- ♥ Linux 高性能服务器编程:I/O复用二12/12
- ♥ Visual Studio:管理工程文件10/14
- ♥ Photoshop CEP扩展和插件开发04/27
- ♥ 【Javascript】对象引用复制05/18