Title: Еще один невидимый апдейт
Author: Viva Calman
Date: 2023-01-30 18:26:40
Correction code: 167510905945572

Продолжая улучшать то, что можно назвать 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-ем.

Метки:
^HOME