Instruction
YAML 是一种比其他常见数据格式(如XML或JSON)更易于读写的文件格式。
Collections
YAML的块集合使用缩进限定范围并在其自己的行上开始每个元素。序列用短划线和空格-
表示每个元素。映射使用冒号和空格:
来标记每个键值对。注释以井号开头(也称为octothorpe
,hash
,sharp
,pound
或number sign
- #
)。
List
- Mark McGwire
- Sammy Sosa
- Ken Griffey
Map
hr: 65 # Home runs
avg: 0.278 # Batting average
rbi: 147 # Runs Batted In
Map[List]
american:
- Boston Red Sox
- Detroit Tigers
- New York Yankees
national:
- New York Mets
- Chicago Cubs
- Atlanta Braves
List[Map]
-
name: Mark McGwire
hr: 65
avg: 0.278
-
name: Sammy Sosa
hr: 63
avg: 0.288
List[List]
- [name , hr, avg ]
- [Mark McGwire, 65, 0.278]
- [Sammy Sosa , 63, 0.288]
Map[Map]
Mark McGwire: {hr: 65, avg: 0.278}
Sammy Sosa: {
hr: 63,
avg: 0.288
}
Structures
YAML使用三个破折号---
将指令与文档内容分开。如果没有指令,这也用于表示文档的开始。三个点...
表示文档的结尾而不开始新的文档,用于通信通道。
Two Documents in a Stream (each with a leading comment)
# Ranking of 1998 home runs
---
- Mark McGwire
- Sammy Sosa
- Ken Griffey
# Team ranking
---
- Chicago Cubs
- St Louis Cardinals
Play by Play Feed from a Game
---
time: 20:03:20
player: Sammy Sosa
action: strike (miss)
...
---
time: 20:03:47
player: Sammy Sosa
action: grand slam
...
Single Document with Two Comments
---
hr: # 1998 hr ranking
- Mark McGwire
- Sammy Sosa
rbi:
# 1998 rbi ranking
- Sammy Sosa
- Ken Griffey
Node for “Sammy Sosa” appears twice in this document
重复节点(对象)首先由锚点符号&
+alias
标记,然后用*
引用别名。
---
hr:
- Mark McGwire
# Following node labeled SS
- &SS Sammy Sosa
rbi:
- *SS # Subsequent occurrence
- Ken Griffey
Mapping between Sequences - Map[List,List]
问号和空格?
表示复杂映射的key。在块集合中,key:value
可以在短划线-
,冒号:
或问号?
后立即开始。
? - Detroit Tigers
- Chicago cubs
:
- 2001-07-23
? [ New York Yankees,
Atlanta Braves ]
: [ 2001-07-02, 2001-08-12,
2001-08-14 ]
Compact Nested Mapping - List[Map]
---
# Products purchased
- item : Super Hoop
quantity: 1
- item : Basketball
quantity: 4
- item : Big Shoes
quantity: 1
Scalars
标量内容可以用块表示法编写,使用文字样式(用|
表示),其中所有换行符都很重要。或者,它们可以用折叠样式(用>
表示)书写,其中每个换行符都会被转换成一个空格,除非它以空行结束或下一行有更多缩进。
In literals, newlines are preserved
在文字中保留换行符
# ASCII Art
--- |
\//||\/||
// || ||__
# - 表示删除字符串末尾的换行符
s1: |-
Foo
# + 表示保留文字块末尾的换行符
s2: |+
Foo
In the folded scalars, newlines become spaces
在折叠的标量中,换行符会转换成空格
--- >
Mark McGwire's
year was crippled
by a knee injury.
Folded newlines are preserved for “more indented” and blank lines
折叠空行保留为更多的缩进和空白行
>
Sammy Sosa completed another
fine season with great stats.
63 Home Runs
0.288 Batting Average
What a year!
Indentation determines scope
缩进确定范围
name: Mark McGwire
accomplishment: >
Mark set a major league
home run record in 1998.
stats: |
65 Home Runs
0.278 Batting Average
Quoted Scalars - 引号标量
YAML的流量标量包括普通样式(迄今为止的大多数示例)和两种引用样式。双引号样式提供转义序列。当不需要转义时,单引号样式很有用。
unicode: "Sosa did fine.\u263A"
control: "\b1998\t1999\t2000\n"
hex esc: "\x0d\x0a is \r\n"
single: '"Howdy!" he cried.'
quoted: ' # Not a ''comment''.'
tie-fighter: '|\-*-/|'
Multi-line Flow Scalars
所有流量标量都可以跨越多行,换行总是折叠的。
plain:
This unquoted scalar
spans many lines.
quoted: "So does this
quoted scalar.\n"
Tags
在YAML中,未标记节点的数据类型由应用程序给出。本规范中的示例通常使用故障安全模式中的seq,map和str类型。一些示例还使用JSON模式中的int,float和null类型。存储库包括其他类型,如binary,omap(ordered map),set等。
Integers
canonical: 12345
decimal: +12345
octal: 0o14
hexadecimal: 0xC
Floating Point
canonical: 1.23015e+3
exponential: 12.3015e+02
fixed: 1230.15
negative infinity: -.inf
not a number: .NaN
Miscellaneous - 杂项
null:
booleans: [ true, false ]
string: '012345'
Timestamps
canonical: 2001-12-15T02:59:43.1Z
iso8601: 2001-12-14t21:59:43.10-05:00
spaced: 2001-12-14 21:59:43.10 -5
date: 2002-12-14
Various Explicit Tags - 各种显示标签
使用感叹号!
符号用标记表示显式类型。
---
not-date: !!str 2002-04-28
picture: !!binary |
R0lGODlhDAAMAIQAAP//9/X
17unp5WZmZgAAAOfn515eXv
Pz7Y6OjuDg4J+fn5OTk6enp
56enmleECcgggoBADs=
application specific tag: !something |
The semantics of the tag
above may be different for
different documents.
Global Tags
全局标记是URIs,而且可以使用句柄以标签简写表示。还可以使用特定于应用的本地标签。
%TAG ! tag:clarkevans.com,2002:
--- !shape
# Use the ! handle for presenting
# tag:clarkevans.com,2002:circle
- !circle
center: &ORIGIN {x: 73, y: 129}
radius: 7
- !line
start: *ORIGIN
finish: { x: 89, y: 102 }
- !label
start: *ORIGIN
color: 0xFFEEBB
text: Pretty vector drawing.
Unordered Sets
# Sets are represented as a
# Mapping where each key is
# associated with a null value
--- !!set
? Mark McGwire
? Sammy Sosa
? Ken Griff
Ordered Mappings
# Ordered maps are represented as
# A sequence of mappings, with
# each mapping having one key
--- !!omap
- Mark McGwire: 65
- Sammy Sosa: 63
- Ken Griffy: 58
Full Length Example
两个完整示例,第一个是样品发票,第二个是日志文件示例
Invoice
--- !<tag:clarkevans.com,2002:invoice>
invoice: 34843
date : 2001-01-23
bill-to: &id001
given : Chris
family : Dumars
address:
lines: |
458 Walkman Dr.
Suite #292
city : Royal Oak
state : MI
postal : 48046
ship-to: *id001
product:
- sku : BL394D
quantity : 4
description : Basketball
price : 450.00
- sku : BL4438H
quantity : 1
description : Super Hoop
price : 2392.00
tax : 251.42
total: 4443.52
comments:
Late afternoon is best.
Backup contact is Nancy
Billsmer @ 338-4338.
Log File
---
Time: 2001-11-23 15:01:42 -5
User: ed
Warning:
This is an error message
for the log file
---
Time: 2001-11-23 15:02:31 -5
User: ed
Warning:
A slightly different error
message.
---
Date: 2001-11-23 15:03:17 -5
User: ed
Fatal:
Unknown variable "bar"
Stack:
- file: TopClass.py
line: 23
code: |
x = MoreObject("345\n")
- file: MoreClass.py
line: 58
code: |-
foo = bar