Продолжая улучшать то, что можно назвать CMS, но на деле — просто набор скриптов, которые используются для публикации этого блога, решил избавиться еще от одного элемента, который был самописным и работал "постольку-поскольку".
Это уже третий способ хранения метаданных, используемый в моей "системе". Первый был элементарным - метаданные записывались в начале текстового файла, экранированные символом решетки. Это было компактно, но мне регулярно не хватало гибкости этой формы записи.
Поэтому метаданные были вынесены в отдельный файл, лежащий в каталоге с основным .txt (а позже — с .md). Формат файла, впрочем, практически не изменился. Одна строка — одна запись вида:
ИМЯ_ПОЛЯ: значение
В случае, когда нужно было поместить несколько значений в одно поле (читай массив) формат немного менялся:
ИМЯ_ПОЛЯ:
значение1
значение2
...
значениеN
Так как никаких маркеров конца списка я не предполагал, то ради простоты список тегов (а эта структура использовалась исключительно для списка тегов) продолжался до конца файла.
Разумеется, это была очень примитивная и негибкая структура данных, но, несмотря на это, она выполняла возложенные на нее требования в течение многих лет. Благодаря ее простоте, я долгое время использовал для работы простенькие bash-скрипты, которые grep-ом выдирали из файла необходимые строки.
Однако, простенькие bash-скрипты сменились довольно хитрыми скриптами на perl, и поэтому захотелось привести все структуры данных к какому либо общепринятому формату. Так что теперь метаданные страниц описываются в модном формате YAML.
YAML всегда вызывал у меня некоторые подозрения в том, что он такая же поделка, как и те мои попытки, про которые я писал выше, но, должен признать, YAML широко применяется и имеет свои неоспоримые достоинства. Например, он очень легко читается и пишется без применения какого-либо специального софта. Да, это камень в огород XML (XML мощнейная штука, но в моем случае эта штука выглядит, как стрельба из пушки по воробьям).
Для обработки YAML использовал уже готовую перловую библиотеку YAML::Tiny, так как нет смысла писать самому то, что уже давно написано, проверено и работает. Использование данной библиотеки не просто элементарное, а очень элементарное, поэтому той справки, что есть в man-странице дебиановского пакета (и на CPAN) будет достаточно для того, чтобы научиться ей пользоваться.
Теперь метаданные выглядят примерно так:
title: Заголовок
date: 2023-01-30 12:00:00
tags:
- tag1
- tag2
...
- tagN
Что с одной стороны, структура файла практически не изменилась, с другой — она стала более гибкой на случай, если я захочу добавить в нее какие-то поля (маловероятно, но само наличие возможности — уже хорошо).
Переход прошел довольно безболезненно. В скриптах была сохранена возможность использовать старый формат метаданных, но все новые записи будут работать исключитльно с YAML-ем.