Содержание
Хранение метаданных
Если содержимое страницы вики это данные, то такую информацию как время последнего обновления, кто обновлял, размер файла и т.п., можно назвать метаданными этой страницы. На этой странице описано где и как такая дополнительная информация хранится в DokuWiki.
Плагины могут использовать хранилище метаданные для своих целей; например, хранения комментариев (как плагин discussion), переключателей определенных функций или параметров использования кэша.
Хранение
DokuWiki не хранит все метаданные системно, вроде базы данных или реестра / прим. пер. хотя имеет определённые возможности для внедрения СУБД /. Часть метаданных - размер файла и время последнего обновления - являются свойствами самого файла страницы из /data/pages/_структура_сайта_/_статья_.txt
. Прочие метаданные хранятся в параллельной папочной структуре /data/meta/_структура_сайта_/
, в файлах с именами:
_статья_.meta
- основные данные о странице
_статья_.changes
- данные о ревизиях страницы
- и
_статья.indexed
- статус индексирования страницы
Визуализатор метаданных
При создании новой статьи на сайте (включая нестандартные способы, например, добавление через API или скриптами, реиндексацию после форс-мажорных обстоятельств) визуализатор (renderer) метаданных создает файл _статья_.meta
в директории /data/meta/_структура_сайта_/
, который посещает при каждой последующей правке. В файле хранится сериализованный многомерный массив PHP, ключи которого названы аналогично элементам протокола метаданных Dublin Core.
Функции для получения и задания метаданных
В файле /inc/parserutils.php
определены две функции для работы с метаданными:
p_get_metadata($id, $key, $render)
возвращает многомерный массив метаданных для определенной страницы.$id
— идентификатор страницы вики; обязательный параметр$key
— имя атрибута метаданных; необязательный параметр, значение по умолчанию —false
(функция возвращает весь массив метаданных)$render
— булево значение, определяющее, нужно ли вызывать визуализатор для генерации метаданных если это еще не было сделано; необязательный параметр, значение по умолчанию —false
p_set_metadata($id, $data, $render, $persistent)
устанавливает требуемые атрибуты метаданных.$id
— идентификатор страницы вики; обязательный параметр$data
— массив с парами атрибут ⇒ значение, для метаданных, которые требуется установить; обязательный параметр$render
— булево значение, определяющее, нужно ли вызывать визуализатор для генерации метаданных; необязательный параметр, значение по умолчанию —false
$persistent
— булево значение, определяющее, будут ли указанные атрибуты сохранены при следующей визуализации метаданных (см. ниже); необязательный параметр, значение по умолчанию —true
Структура метаданных
На текущий момент базовый визуализатор метаданных сохраняет следующие атрибуты:
- 'title' — строка, первый заголовок
- 'creator' — строка, полное имя пользователя, создавшего страницу
- 'description' — массив
- 'abstract' — фрагмент текста страницы (от 250 до 500 символов)
- 'tableofcontents' — массив, состоящий из структур со следующими полями:
- 'hid' — строка, идентификатор заголовка
- 'title' — строка, текст заголовка
- 'type' — строка, тип элемента HTML списка
- 'level' — целое число, уровень вложенности заголовка
- 'contributor' — массив, ключи которого являются идентификаторами, а значения полными именами пользователей, редактировавших страницу
- 'date' — массив
- 'created' — метка времени, дата создания страницы
- 'modified'— метка времени, дата последней значительной модификации
- 'relation' — массив
- 'isreferencedby' — массив, список страниц ссылающихся на текущую: идентификатор страницы ⇒ булево значение,
true
, если страница существует - 'references' — массив, список страниц на которые ссылается текущая страница: идентификатор страницы ⇒ булево значение,
true
, если страница существует
Плагины также могут хранить свои атрибуты в метаданных. На текущий момент используются:
- 'relation' — массив
- 'subject' — массив, список тэгов (плагин tag)
- 'type' — строка, 'draft' для черновиков (плагин blog)
Для метаданных, которые могут быть использованы внешними приложениями, рекомендуется использовать имена элементов Dublin Core.
Постоянные метаданные
DokuWiki хранит метаданные в двух массивах: в текущем (current
) и постоянном (persistent
). Постоянный массив содержит копии тех атрибутов, которые не должны быть утеряны в процессе визуализации страницы в метаданные. Все запросы метаданных, использующие функцию p_get_metadata()
берут данные из текущего массива.
Примеры постоянных атрибутов:
- 'creator'
- 'contributor'
Метаданные и плагины
В дополнение к описанным выше функциям доступа к метаданным, существуют еще два способа, которыми плагины может взаимодействовать с ними.
Плагины, расширяющие синтаксис вики, могут создавать метаданные для текущей страницы обрабатывая условие $format==«metadata»
в методе render()
. Метаданные (атрибут ⇒ значение) добавляются в массив renderer->meta
, а постоянные метаданные также в массив renderer->persistent
.
Плагины, связанные с событиями вики, могут зарегистрировать метод PARSER_METADATA_RENDER, для получения или модификации метаданных до или после визуализации.