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 года).