YAML (YAML Ain't Markup Language или иногда расшифровывается как Yet Another Markup Language) — это человекочитаемый формат сериализации данных, используемый в конфигурационных файлах, документации и других местах, где данные описываются в структурированном виде.
В контексте вашей задачи YAML можно использовать для хранения метаданных прямо в начале каждого Markdown-файла. Эти метаданные затем можно прочитать программатически, чтобы определить тип заметки и добавить соответствующий дисклеймер.
Пример YAML-блока в Markdown-файле:
```markdown
---
type: article
title: Моя статья
date: 2023-09-01
---
```
В этом примере, между `---` лежит YAML-блок, который содержит метаинформацию о заметке. В данном случае `type: article` указывает, что это статья.
Преимущества использования YAML для метаданных:
1. **Человекочитаемость**: Формат легко читается и редактируется.
2. **Стандартизация**: Это популярный формат, используемый во многих системах.
3. **Гибкость**: Вы можете хранить любые ключ-значение пары, что позволяет легко расширить метаданные в будущем.
### Особенности
1. **Чувствительность к регистру**: Ключи чувствительны к регистру (`Name` и `name` будут разными ключами).
2. **Чувствительность к отступам**: Отступы (обычно 2 пробела) используются для структурирования данных. Табуляции не рекомендуются.
3. **Анкеры и алиасы**: Можно использовать `&` для определения анкера (метки) и `*` для его вызова.
```yaml
default: &DEFAULT
age: 12
person1:
<<: *DEFAULT
name: John
```
4. **Включение других YAML-файлов**: Стандартный синтаксис для включения других YAML-файлов отсутствует, но некоторые программы могут предоставить собственные методы для этого.
**Производительность**: Обработка YAML может быть медленнее по сравнению с форматами типа JSON или бинарными форматами, так как синтаксис YAML более сложный и чувствителен к контексту. Однако для небольших и средних файлов разница в производительности часто незначительна.
### Какие типы данных поддерживает YAML
YAML поддерживает несколько основных типов данных:
1. **Скаляры (Scalars)**
- Числа: целые (integers), с плавающей точкой (floats)
- Строки (strings): можно заключать в кавычки или нет
- Логические значения (booleans): `true`, `false`
2. **Коллекции (Collections)**
- Списки (Arrays): последовательности элементов
```yaml
fruits:
- Apple
- Banana
```
- Словари (Maps): пары "ключ-значение"
```yaml
person:
name: Alice
age: 30
```
3. **Null-значения**: Специальное значение, обозначающее отсутствие данных. В YAML это `null` или `~`.
4. **Время и даты**: YAML поддерживает типы данных для времени и дат, но они обычно преобразуются в строки или числа в зависимости от языка программирования.
```yaml
registrationDate: "2023-09-03T10:00:00Z"
```
Пример смешанного использования:
```yaml
info:
name: "Alice"
age: 30
isStudent: false
grades: [A, B, C]
address:
city: "New York"
zip: 10001
hobbies: null
registrationDate: "2023-09-03T10:00:00Z"
```
### Прочий синтаксис YAML
**Комментарии**: Строки, начинающиеся с `#`, являются комментариями.
```yaml
# Это комментарий
```
**Многострочные строки**: Можно использовать символ `|` для сохранения переносов строк и `>` для их удаления.
```yaml
multi_line: |
Line 1
Line 2
```
### Разные форматы дат в YAML
В YAML даты и время обычно представлены в виде строк. Стандарт не определяет встроенные типы для дат и времени, но вы можете использовать различные форматы строк для представления дат и времени в зависимости от того, как вы планируете их интерпретировать в вашем приложении.
Вот пример YAML-файла с разными форматами дат:
```yaml
dates:
iso8601: "2023-09-03T10:00:00Z"
rfc2822: "Sun, 03 Sep 2023 10:00:00 +0000"
custom: "03-09-2023 10:00"
onlyDate: "2023-09-03"
onlyTime: "10:00:00"
epoch: 1686050400
```
1. `iso8601`: Стандартный формат ISO 8601.
2. `rfc2822`: Формат даты, определённый в RFC 2822, часто используемый в электронной почте.
3. `custom`: Произвольный формат даты и времени.
4. `onlyDate`: Только дата.
5. `onlyTime`: Только время.
6. `epoch`: Время в формате Unix Epoch (количество секунд с 1 января 1970 года).