Wikiページに保存された内容がデータだとすると、最終更新日時や更新したユーザー、ファイルサイズなどは、すべてそのページのメタデータとして扱われます。
DokuWikiはすべてのメタデータを(データベースやレジストリのような)一つの場所にまとめて保存しません。メタデータは基本的にデータファイル自体の情報(たとえば、ファイルサイズ、最終更新日時)であり、その他のメタデータはDokuWikiがmetaディレクトリで管理します。メタデータはページ名に.metaが追加されたファイル名で保存されています。
metaディレクトリの情報は最初にメタデータレンダラーによって作成されます。レンダラーは、各ページごとにmetaディレクトリに$id.metaという名前でメタデータを作成します。このファイルはPHPの多次元連想配列で、keyはDublin Coreの要素名に従います。レンダラーはページが保存されたり、indexerによってDokuWiki以外のスクリプトなどでページが追加されると実行されます。
メタデータを扱う2つの関数はinc/parserutils.php内にあります。
p_get_metadata($id, $key, $render) はページのメタデータを返します。$id はページIDです。(必須)$key は取得するメタデータキーです。デフォルトでは false です。キーが渡されない場合にはすべてのメタデータを配列で返します。render はboolean値で、ページのメタデータが存在しない場合にレンダラーが生成するかどうかを指定します。デフォルトは false です。p_set_metadata($id, $data, $render, $persistent) はメタデータ内のプロパティを設定します。$id はページIDです。(必須)$data はメタデータにセットするkey⇒valueペアの配列です。(必須)$render は boolean 値で、メタデータを生成するかどうかを指定するオプションです。デフォルトは false です。$persistent は boolean 値で、特定のメタデータが次のメタデータ生成まで保持されるかどうかを指定します。デフォルトは true です。現在、コアのメタデータレンダラーが保存している構造は次のようになっています。
加えて、プラグインもメタデータ要素をサポートしています。現在次のようなものがあります。
プラグイン等で外部からメタデータを扱う場合には、Dublin Core element set のキーを使用することを推奨します。
DokuWikiの内部では、メタデータは2つの配列で管理されており、それぞれcurrent(現在の)とpersistent(保持・持続する)といいます。このpersistent配列には、レンダラーによる処理で削除されるべきでないkey/valueペアが複製されています。p_get_metadata()によるすべてのメタデータ取得処理はcurrentから読み出されます。
Persistentなメタデータには次のようなものがあります。
ここまでで述べたget/setの方法に加え、プラグインがメタデータに関与できる方法が2つあります。
render()メソッド内で$format==“metadata”の場合にcurrentページのメタデータを作成できます。 メタデータのkey/valueペアは renderer->meta 配列に追加でき、persistentな値もrenderer->persistentに追加できます。