YAML как язык сериализации данных предназначен прежде всего для использования людьми.
Это строгое надмножество JSON с добавлением синтаксически значимых переносов строк и отступов как в Python. Тем не менее в отличие от Python, YAML запрещает использование табов для отступов.
1--- # начало документа
2
3# Комментарий в YAML выглядит как-то так.
4
5######################
6# Скалярные величины #
7######################
8
9# Наш корневой объект (который продолжается до конца документа) будет соответствовать
10# типу map, который в свою очередь соответствует словарю, хешу или объекту в других языках.
11key: value
12another_key: Другое значение ключа.
13a_number_value: 100
14scientific_notation: 1e+12
15# Число 1 будет интерпретировано как число, а не как логический тип. Если необходимо чтобы
16# значение было интерпретировано как логическое, необходимо использовать true
17boolean: true
18null_value: null
19key with spaces: value
20
21# Обратите внимание что строки используются без кавычек, но могут и с кавычками.
22however: 'Строка заключенная в кавычки.'
23'Ключ заключенный в кавычки.': "Полезно если нужно использовать ':' в вашем ключе."
24single quotes: 'Содержит ''одну'' экранированную строку'
25double quotes: "Содержит несколько: \", \0, \t, \u263A, \x0d\x0a == \r\n, экранированных строк."
26
27# Многострочные строковые значения могут быть записаны как 'строковый блок' (используя |),
28# или как 'сложенный блок' (используя '>').
29literal_block: |
30 Значение всего текста в этом блоке будет присвоено ключу 'literal_block',
31 с сохранением переноса строк.
32
33 Объявление продолжается до удаления отступа и выравнивания с ведущим отступом.
34
35 Любые строки с большим отступом сохраняют остатки своего отступа -
36 эта строка будет содержать дополнительно 4 пробела.
37folded_style: >
38 Весь блок этого текста будет значением 'folded_style', но в данном случае
39 все символы новой строки будут заменены пробелами.
40
41 Пустые строки будут преобразованы в перенос строки.
42
43 Строки с дополнительными отступами сохраняют их переносы строк -
44 этот текст появится через 2 строки.
45
46##################
47# Типы коллекций #
48##################
49
50# Вложения используют отступы. Отступ в 2 пробела предпочтителен (но не обязателен).
51a_nested_map:
52 key: value
53 another_key: Another Value
54 another_nested_map:
55 hello: hello
56
57# В словарях (maps) используются не только строковые значения ключей.
580.25: a float key
59
60# Ключи также могут быть сложными, например многострочными.
61# Мы используем ? с последующим пробелом, чтобы обозначить начало сложного ключа.
62? |
63 Этот ключ
64 который содержит несколько строк
65: и это его значение
66
67# YAML также разрешает соответствия между последовательностями со сложными ключами
68# Некоторые парсеры могут выдать предупреждения или ошибку
69# Пример
70? - Manchester United
71 - Real Madrid
72: [2001-01-01, 2002-02-02]
73
74# Последовательности (эквивалент списка или массива) выглядят как-то так
75# (обратите внимание что знак '-' считается отступом):
76a_sequence:
77 - Item 1
78 - Item 2
79 - 0.5 # последовательности могут содержать различные типы.
80 - Item 4
81 - key: value
82 another_key: another_value
83 -
84 - Это последовательность
85 - внутри другой последовательности
86 - - - Объявления вложенных последовательностей
87 - могут быть сжаты
88
89# Поскольку YAML это надмножество JSON, вы можете использовать JSON-подобный
90# синтаксис для словарей и последовательностей:
91json_map: {"key": "value"}
92json_seq: [3, 2, 1, "takeoff"]
93в данном случае кавычки не обязательны: {key: [3, 2, 1, takeoff]}
94
95##########################
96# Дополнительные функции #
97##########################
98
99# В YAML есть удобная система так называемых 'якорей' (anchors), которые позволяют легко
100# дублировать содержимое внутри документа. Оба ключа в примере будут иметь одинаковые значения:
101anchored_content: &anchor_name Эта строка будет являться значением обоих ключей.
102other_anchor: *anchor_name
103
104# Якоря могут использоваться для дублирования/наследования свойств
105base: &base
106 name: Каждый будет иметь одинаковое имя
107
108# Регулярное выражение << называется ключом объединения независимо от типа языка.
109# Он используется, чтобы показать что все ключи одного или более словарей должны быть
110# добавлены в текущий словарь.
111
112foo: &foo
113 <<: *base
114 age: 10
115
116bar: &bar
117 <<: *base
118 age: 20
119
120# foo и bar могли бы иметь имена: Каждый из них имеет аналогичное имя
121
122# В YAML есть теги (tags), которые используются для явного объявления типов.
123explicit_string: !!str 0.5
124# В некоторых парсерах реализованы теги для конкретного языка, пример для Python
125# пример сложного числового типа.
126python_complex_number: !!python/complex 1+2j
127
128# Мы можем использовать сложные ключи с включенными в них тегами из определенного языка
129? !!python/tuple [5, 7]
130: Fifty Seven
131# Могло бы быть {(5, 7): 'Fifty Seven'} в Python
132
133#######################
134# Дополнительные типы #
135#######################
136
137# Строки и числа не единственные величины которые может понять YAML.
138# YAML также поддерживает даты и время в формате ISO.
139datetime: 2001-12-15T02:59:43.1Z
140datetime_with_spaces: 2001-12-14 21:59:43.10 -5
141date: 2002-12-14
142
143# Тег !!binary показывает что эта строка является base64-закодированным
144# представлением двоичного объекта.
145gif_file: !!binary |
146 R0lGODlhDAAMAIQAAP//9/X17unp5WZmZgAAAOfn515eXvPz7Y6OjuDg4J+fn5
147 OTk6enp56enmlpaWNjY6Ojo4SEhP/++f/++f/++f/++f/++f/++f/++f/++f/+
148 +f/++f/++f/++f/++f/++SH+Dk1hZGUgd2l0aCBHSU1QACwAAAAADAAMAAAFLC
149 AgjoEwnuNAFOhpEMTRiggcz4BNJHrv/zCFcLiwMWYNG84BwwEeECcgggoBADs=
150
151# YAML может использовать объекты типа ассоциативных массивов (set), как представлено ниже:
152set:
153 ? item1
154 ? item2
155 ? item3
156or: {item1, item2, item3}
157
158# Сеты (set) являются простыми эквивалентами словарей со значениями
159# типа null; запись выше эквивалентна следующей:
160set2:
161 item1: null
162 item2: null
163 item3: null
164
165... # конец документа