====== メタデータ ====== Wikiページに保存された内容が//データ//だとすると、最終更新日時や更新したユーザー、ファイルサイズなどは、すべてそのページの//メタデータ//として扱われます。 ===== 保存 ===== DokuWikiはすべてのメタデータを(データベースやレジストリのような)一つの場所にまとめて保存しません。メタデータは基本的にデータファイル自体の情報(たとえば、ファイルサイズ、最終更新日時)であり、その他のメタデータはDokuWikiが''meta''ディレクトリで管理します。メタデータはページ名に''.meta''が追加されたファイル名で保存されています。 ===== メタデータの生成 ===== ''meta''ディレクトリの情報は最初にメタデータレンダラーによって作成されます。レンダラーは、各ページごとに''meta''ディレクトリに''$id.meta''という名前でメタデータを作成します。このファイルはPHPの多次元連想配列で、keyは[[http://dublincore.org/|Dublin Core]]の要素名に従います。レンダラーはページが保存されたり、[[:indexer]]によってDokuWiki以外のスクリプトなどでページが追加されると実行されます。 ==== メタデータを Set/Get する関数 ===== メタデータを扱う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 です。 ==== データ構造 ==== 現在、コアのメタデータレンダラーが保存している構造は次のようになっています。 * 'title' -- string, 最初の見出し * 'creator' -- string, ページの作成者のフルネーム * 'description' -- array * 'abstract' -- 生のWikiテキストの一部分 (250 〜 500 文字) * 'tableofcontents' -- array, 見出し(header)のID('hid')、タイトル('title')、list item 型('type')、見出しのレベル('level') * 'contributor' array, 編集に関わったユーザーのユーザーID=>フルネームの配列 * 'date' -- array * 'created' -- timestamp, 作成日 * 'modified'-- timestamp, 最後の変更日(小変更以外の場合のみ) * 'valid' * 'age' -- seconds, ページが更新されなければいけない時間まで何秒か('rss'構文でのみ使用) * 'relation' -- array * 'isreferencedby' -- array, このページをリンクしている元ページ。ページID => boolean (存在するかかどうか)の配列。 * 'references' -- array, このページがリンクしているリンク先ページ。ページID => boolean (存在するかどうか)の配列。 加えて、プラグインもメタデータ要素をサポートしています。現在次のようなものがあります。 * 'relation' -- array * 'ispartof' -- array, このページを内包(include)している元ページの配列。ID => boolean (存在するかどうか)([[plugin:include]] plugin) * 'haspart' -- array, このページが内包しているページの配列。ID => boolean (存在するかどうか)([[plugin:include]] plugin) * 'subject' -- array, タグのリスト([[plugin:tag]] plugin) * 'type' -- string, ドラフトのデータ ([[plugin:blog]] plugin) プラグイン等で外部からメタデータを扱う場合には、[[http://dublincore.org/documents/dces/|Dublin Core element set]] のキーを使用することを推奨します。 ==== メタデータの持続性 ==== DokuWikiの内部では、メタデータは2つの配列で管理されており、それぞれ''current''(現在の)と''persistent''(保持・持続する)といいます。この''persistent''配列には、レンダラーによる処理で削除されるべきでないkey/valueペアが複製されています。''p_get_metadata()''によるすべてのメタデータ取得処理は''current''から読み出されます。 Persistentなメタデータには次のようなものがあります。 * 'creator' (ページ作成者) * 'contributor' (ページ編集者) ==== メタデータとプラグイン ==== ここまでで述べたget/setの方法に加え、プラグインがメタデータに関与できる方法が2つあります。 -[[Syntax Plugins]]では、''render()''メソッド内で''$format=="metadata"''の場合に//current//ページのメタデータを作成できます。 メタデータのkey/valueペアは ''renderer%%->%%meta'' 配列に追加でき、persistentな値も''renderer%%->%%persistent''に追加できます。 -[[Action Plugins]]では、[[events_list#PARSER_METADATA_RENDER]]メソッドに処理する関数を登録することで、メタデータのレンダリング前後にメタデータの読み出しや変更ができます。