DokuWiki

It's better when it's simple

ユーザ用ツール

サイト用ツール


ja:plugin:data

構造化データプラグイン

互換性のある DokuWiki バージョン

Ponder Stibbons, Binky, Weatherwax, Adora Belle

plugin Wiki に構造化データを追加し検索する

最終更新日
2014-08-27
種類
Syntax, Helper, Action
リポジトリ
ソース
競合
data-au, fckg, headerfooter, newline
必要
sqlite

この拡張は二年以上更新されていません。もはや維持管理や対応がされておらず、互換性に問題がある可能性があります。

This extension is not in the 'plugin' or 'template' namespace and is therefore ignored.

類似 datatemplate, dtable, fields, json, jsoneditor, pagemod, semanticdata, strata, struct

タグ data, database, listing, sqlite, tables, tags

必要とされるプラグイン datagraph, dataloop, datapopup, datasearchform, datatemplate, orgchart, podcast

このプラグインは Dokuwiki の任意のページに構造化データを追加できるようにします。 このデータを付加的な名前付き属性と考えて下さい。 この属性は照会・集約することができます。 このプラグインは、ここでリポジトリプラグインがやっていることに似ていますが、内部は非常に異なっています。

ダウンロードとインストール

プラグイン管理 とプラグインの最新バージョンにリンクしている上記の URL を使ってインストールしてください。 手動インストール方法は プラグイン を参照してください。

変更履歴

ビルド状況

2013-02-06 以前のバージョンからの更新

sqlite プラグインを更新し、SQLiteバージョンのアップグレードについての指示に従ってください。

2010-03-22 以前のバージョンからの更新

2010年3月22日以来、データプラグインはsqlite プラグインを 使用することになりました。このため、データベースファイルの場所と構造が変更されました。 古いデータベースを保持したままデータプラグインを更新するには、 次の手順を実行する必要があります:

  1. sqlite プラグインをインストール
  2. data/cache/dataplugin.sqlite ファイルを data/meta/data.sqlite へ移動
  3. データベース上で次のSQL文を実行(sqlite プラグインの管理ページを使用するなど)
    CREATE TABLE opts (opt,val);
    CREATE UNIQUE INDEX idx_opt ON opts(opt);
    INSERT INTO opts VALUES ('dbversion', 1);
  4. データプラグインを更新

この手順の前にデータのプラグインをアップグレードした場合、空の data.sqlite が作成されます。既存の data/meta/data.sqlite の上に data/cache/dataplugin.sqlite をコピーする必要があります。

プラグインの構文

このプラグインは複数の部品でできており、それぞれがよく似た構文を持っています。 構文は様々なキーと値のペアを持ったブロックを定義します。 キーと値のペアはプラグインの部品の動作を設定しています。 以下の部品が用意されています:

  • Data Entry(入力)
  • Data Table(出力)
  • Data List (出力)
  • Related Pages (出力)
  • Tag Cloud(操作)

Data Entry(入力)

この部品は、ページに構造化データを追加するために使用します。 入力したデータはすべて該当のページに関連付けらます。 なので、1ページ上で一回しか使用できません。 1) 例から始めましょう。

---- dataentry projects ----
type            : web development
volume          : 1 Mrd    # いくら払うか?
employees       : Joe, Jane, Jim
customer_page   : customers:microsoft
deadline_dt     : 2009-08-17
server_pages    : servers:devel01, extern:microsoft
website_url     : http://www.microsoft.com
task_tags       : programming, coding, design, html
----

ハイフンと dataentry という単語でブロックが定義されています。 dataentry キーワードの後ろに単語(ページクラス)を追加することもできます。 それらは最終的なHTML出力にCSSクラスとして追加され、後に %class% として照会されます。 別種類の入力は後で表示するとか特定の種類のページの集合に制限するとかの出力方式に使えます。

ブロックにコメントを追加するためには # 文字を使います。それは無視され表示されませんが保存はされます。データとして # が必要な時はバックスラッシュで回避して下さい(\#)。バックスラッシュが必要な時も同じです (\\)。

ブロックの中は 項目名 とその があります。項目名にはいくつかルールがあります:

  • 項目名は自由です
  • 項目名の最後が s 文字は、カンマ区切りの複数値が設定できます( employees 行のように)。 これは与えられた項目名から最後の s 文字を消すことになります。
    • If you want to avoid the multiple value option and keep your column name as is, add an underscore to the end of your name (example: thickness_ : 1cm).
    • If you want the multiple value option and keep the your column name as is, add a second s to your column name…
      e.g.:
      name : John → name: John
      names: John, Jack → name: John, Jack
      name_tag : John, Jack → name: [[John, Jack]]
      name_tags: John, Jack → name: [[John]], [[Jack]]
      thickness : 1cm → thicknes: 1cm
      thickness_: 1cm → thickness: 1cm
      thicknesss: 1cm, 2inch → thickness: 1cm, 2inch
  •  項目名に特別な を追加できます。それに応じて出力が形式化されます。識別子 とを区切るためにアンダースコアを使います。 次の が現在使用可能です:
    • dt – YYYY-MM-DD フォームの日付。単純なテキストとして形式化され、入力が正しい形式かチェックされます。
    • page – 入力は Wikiのページ名として扱われ、出力はリンク化されます。
    • title – page に似ていますが、パイプで区切られた表示タイトルが追加されます。
    • nspage – page に似ていますが、項目名はリンクの名前空間として扱われます。
    • url – 値は外部リンクとして扱われます。
    • tag – 値は、項目名と同じ名前のページにリンクされます。値そのものは Data Table の制御フィルタとなります。 (change target by a type alias)
    • mail – 値は、有効なメールアドレスを含むかをチェックされ、他のテキストは名前として使用し、メールアドレスにリンクされます。
    • img<num> – 値は、画像のURLまたはローカルメディアIDと見なされます。<num>オプションは、イメージのサイズを変更するピクセル単位(デフォルト40)です。
    • ​wiki​ – 値を wikitext として扱います。(性能に影響があるので、この型は慎重に使用して下さい。)
    • pageid – 値はデータ入力ページヘのリンクの標題です。
    • ​hidden​ – the input will not be shown in the data entry or the entry editor
    • 型が付与されない場合、それは単純な文字列として扱います。
    • Type Aliases を使用して新しい型を作成できます。
  • 型を使用する場合、複数値のための s は一番最後に追加します( server_pages 行のように)。

値の中で、地域依存リンクの作成に便利な二つのプレースホルダーが使えます。

値用変数 意味
%lang% デフォルトのwikiの言語の言語コード。例:en
%trans% 現在のページの地域の言語コード。
Translation プラグイン必須。de:test:page というページリンクの場合 de が置換えられる。デフォルト言語に戻る。
Translation プラグインなしの場合は空。

Data Table(出力)

Wiki 内の様々なページに添付された構造化データを集計するために、この構文が使用されます。 あなたが必要なデータを含んだ設定可能なテーブルとして表示します。テーブルはソートや抽出ができます。ページングも対応しています。dataentry 同様に、datatable キーワードの後ろに単語(ページクラス)を追加することができます。その単語は最終的なHTML出力にCSSクラスとして追加されます。再び例から始めましょう:

---- datatable ----
cols    : %pageid%, employees, deadline_dt, volume
headers : Details, Assigned Employees, Deadline, $$$
max     : 10
filter  : type=web development
sort    : ^volume
----

上記の設定は、すべてのWeb開発プロジェクト、プロジェクトに割り当てられた従業員、期限、量を持つテーブルが表示されます。テーブルは、量でソートされ、上から10プロジェクトが表示されます。

dataentry と同様に、型を列名の後ろに付けることで列の値を整形できます。 上記の ​deadline_dt​ 列のように。

コロンの前のキーワードは設定オプションで、コロンの後の値は実際の設定値です。 耐障害性を口上させるため、多くの場合複数のオプション名が可能です。利用可能なオプションのリストは、次のとおりです:

オプション(s) 必須? 説明
cols
select
yes 表示する属性。Data Entry で使用した同じ 項目名 を使います。
head
header
headers
no 指定した場合、項目名の代わりにテーブルヘッダーで使用されます。
max
limit
no 表示行数。該当行が多すぎる場合、テーブルを参照し易くします。指定のない場合、該当行が全て表示されます。
sort
order
no どのカラムでテーブルをソートするかを指定。逆ソートの場合、^ を前に付加する。
filter
where
filterand
and
no カラムの値で抽出する。複数指定可能。複数 filter は AND演算されます。
filteror
or
no filter に似ているが、複数指定は OR演算されます。
dynfilters no 1 を設定すると、動的にテーブルをフィルタリングするための入力フィールドの行を有効にする。
summarize no 1 を設定すると、カラムの合計を計算します。
align no カラムの配置リスト。left (l)、center (c)、 right (r)
rownumbers no 1 を設定すると、行数を表示します。
widths ​ no 特別な列幅。例: ​50px,​ 20em, -, 10%​。ダッシュ ​-​ で列を飛ばします。

抽出には、複数の比較が可能です:

比較 意味
= 完全一致
!= or <> 完全一致でない
< 未満
<= 以下
> より大きい
>= 以上
~ ワイルドカードマッチ。ワイルドカードとして * を使用します。 Apple*  は Apple PieApple Computer に一致します。例)dessert~ *Pie。 大文字小文字は区別しません。
*~ ワイルドカードマッチ。検索語を含むモノを探します。例)dessert*~ PiApple Pie に一致。
!~ 負のワイルドカードマッチ。一致しないすべてのものを選択します。

抽出では、現在ログイン中のユーザや現在の日付に相当する特殊な単語が使用できます。例:filter: username=%user%

抽出用変数 意味
%user% 現在ログイン中のユーザに一致
%now% 現在の日付との比較
%lang% デフォルトのwikiの言語の言語コード。例:en
%trans% ​ 現在のページの地域の言語コード。
Translation プラグイン必須。de:test:page というページリンクの場合 de が置換えられる。デフォルト言語に戻る。
Translation プラグインなしの場合は空。

この構文は、現在のページのすべてのキャッシュを無効にします!

フィールド名として使用可能ないくつかの変数があります:

フィールド名用変数 意味
%pageid% ページ名 全て
%title% ページの「タイトル」。このページの最初の見出しです。
%class% data entry のクラス

Data List(出力)

datalist は、上記の datatable と同じように動作し、同じパラメータを受付けます。 テーブルを表示する代わりに、順不同のリストが表示されます。 行は一つのリスト項目となり、選択されたカラムは標準ではスペースで結合されます。 sepbyheaders が設定されていない場合、header パラメータは無視されます。 ページ区切りは使用されません。

オプション 必須? 説明       
sepbyheaders no 1 を設定すると、値の間の区切りとしてヘッダーを使用します。引用符で囲めば、ヘッダー内にスペースを追加できます。例:" - "
---- datalist ----
cols    : %pageid%, volume
max     : 10
filter  : type=web development
sort    : ^volume
----

このモードでは、構造化データの一部を共有し現在のページと似ているページの一覧を表示できます。 類似比較のために使用するカラムは cols オプションで指定する必要があります。 追加のフィルタおよびソートオプションも設定できます。 次に例を示します:

---- datarelated ----
cols  : task_tags, type
title : Similar projects
max   : 5
sort  : ^volume
----

この設定では task_tagstype カラムの値が似ているページを探します。 最大 5ページで、volume でソートされます。

使用可能なオプションは datatable を参照して下さい。

このモードはページのキャッシュを無効にしないので、リストは最新でない可能性があります。

Tag Cloud(操作)

この構文は、指定した項目名の値をタグクラウドとして表示します。 それぞれの値は(​target​ オプションで特に設定しない限り)現在のページにリンクバックします。 同じページ上に Data Table も作成する必要があります。 このテーブルは選択したタグに合わせた内容によって抽出されます。

例:

---- datacloud ----
field: employees
min: 2
limit: 20
----

上のコードは、少なくとも二つのプロジェクトに割り当てられた従業員のクラウドを表示します。 最大20人の忙しい従業員が表示されます。

クラウドで利用可能はオプションは以下のとおりです:

オプション(s) 必須? 説明
field
select
col
yes クラウドに使用する属性は?
limit
max
no 表示タグの最大数。定義されない場合、すべて表示します。
min no  タグに要求される最小カウント数。定義されない場合、すべて表示します。
page
target
no 操作する Data Table を持っているページ。定義されない場合、現在のページが設定されます。

datatable 構文で説明した抽出条件も指定できます。

様式設定のカスタマイズ

入力と出力 BOX の位置決めと様式設定は簡単な CSS で行います。 構文キーワードの後に追加された全ては、DIV の追加クラス名として割り当てられます。 また、入力ボックス項目のクラスとして使用されるフィールドキーとなります。

ページの先頭に指定された、次の “dataentry” ボックスを想定しましょう。

---- dataentry character24 ----
name            : Jack Bauer
agency_nspage   : CTU
status_tags     : alive, active, disowned, furtive
.... more info
----

<dokuwiki>/conf/userstyle.cssCSS によってこのボックスの様式設定ができます2)。 次がその例です:

div.character24 {
  /* コンテナボックス用のコード。位置、配置、枠線はここです。 */
  float: right;
  width: 33%;
}
 
div.character24 dl > dt { 
  /* 条件定義の様式設定 */
  font-variant: small-caps;
}
 
div.character24 dl > dt + dd {
  /* 定義値の様式設定 */
  font-family: sans-serif;
}
 
div.character24 dl dd.name{
  /*  他よりも名前は大きくなる */
  font-size: 120%;
}

Type aliases

Type aliases は、(page のような組み込みタイプ又はタイプなしのような)ベースタイプと必要に応じて接頭語・接尾語・カンマ区切りの有効値で定義された特注のデータタイプです。Type aliases は、管理者メニューの独自のページで管理され、データベースに記録されています。記録された Type aliases は、組み込みタイプ同様に、dataentry datalist datatable 内で使用できます。

Map type alias

Google Maps を開く map という新しいタイプを例にします:

map を Interwiki に定義します:

map     http://maps.google.com/maps?q={NAME}

次に「管理」→ 「Data Plugin: Field Aliases」 (do=admin&page=data_aliases) で定義します:

Type Alias 接頭語 接尾語 有効値
map wiki [[map> ]]

これで以下のように使用可能です:

---- dataentry  ----
Address_map  : 51.103028,-1.780611
----

有効なアドレスを入力することもできます:例) Bahnhofsstraße 5, Regensburg, Deutschland

Change tag target with a tag type alias

Tag links use default the column name as target page. You can change it by a type alias. Give as Prefix the url of the page that has your datatable. Clicking on taglink will filter that table by the tagvalue.

Type Alias 接頭語 接尾語 有効値
newtag tag namespace:pagewithdatatable

which you could use now as:

---- dataentry  ----
Address_newtag  : cheese
----

Clicking on this cheese tag will refer to namespace:pagewithdatatable and filter on cheese.

iCal type alias with iCal-Plugin

会議を集約する場合、会議をダウンロードリンクに関連付けることができます。

iCal プラグイン

Type Alias 接頭語 接尾語 有効値
ical wiki {{ical> }}

vCard type alias with vCard Plugin

iCal のように vCard プラグインのために設定します。

entry editor のカスタマイズ

データプラグインは、データ入力のためにカスタムエディタを提供する最初のプラグインです。 DokuWiki では、データ入力には自分自身の編集ボタンがあります。このボタンを押すと、編集フォームが表示されます。edit_content_only の設定オプションに応じて、Data Entry の内容の編集またはさらに構造の編集が可能です。例:フィールドの名前・種類の変更またはフィールドの追加・削除。現在の bureaucracyプラグインバージョンでは、ページのフィールドと日付型を編集可能な JavaScript magic も可能です。

"edit_content_only" 設定オフのカスタムエディタ。構造と値を編集可能。
カスタムエディタ:構造と値を編集する

"edit_content_only" 設定オフのカスタムエディタ。値のみ編集可能。
カスタムエディタ:edit_content_only設定オプションを有効にすることで値のみ編集する。

"edit_content_only" の親切な入力欄

edit_content_only設定オプションが有効になっている場合、親切な入力欄を使います:

  • Type aliases有効値欄の値を埋めて表示されるドロップダウンリスト
  • dt型の入力欄用の日付入力カレンダー
  • page型を元にしたType aliases用の既存ページの自動補完提案
    page型自体は動作しません)

要件:日付入力カレンダーとページ提案には、JavaScript magic を提供する bureaucracyプラグインが必要です。

ページ提案は、page型の Type aliases の場合に有効になります。 二個目の aliase は、画像内でもしめされているように plugin: 名前空間内のページだけ表示されます。

Type Alias 接頭語 接尾語 有効値
pagesuggest page
pagesuggestplugin page plugin:

カスタム入力エディタ:_dt 用の日付入力カレンダーと有効値のある aliase type 用の選択肢

カスタム入力エディタ:page 型の Type aliases 用のページ提案。ページタイトルと括弧付きのページ名を表示する提案。

左:日付入力カレンダー入力欄と単独選択欄と複数選択欄のあるカスタムエディタ。右:ページ提案。

Bureaucracy プラグインと type aliases

カスタム入力エディタが使用する構造化データプラグインの親切な入力欄は、bureaucracyプラグインの入力フォームの入力欄にも利用できます。 有効な値の選択・日付入力カレンダー・ページ提案が該当します。 他の type も可能ですが、単純なテキスト入力欄となります。

構造化データプラグインの入力欄を利用した、Bureaucracy プラグインフォームの入力欄の定義例です:

dataplugin Tag _fixedtag 	
dataplugin Multitags _fixedtags 

dataplugin "Date of happening" _dt	
dataplugin "Plugin Page" _pagesuggestplugin

最後の行は、前のセクションの type alias を使用し、最初の2行は type alias を組み合わせています:

Type Alias 接頭語 接尾語 有効値
fixedtag tag Book, Notebook, Reader

Bureaucracy プラグインフォーム内の構造化データプラグイン _dt 入力欄用の日付入力カレンダー Bureaucracy プラグインフォーム内の有効値のある type alias を利用した構造化データプラグイン入力欄用の単独選択欄と複数選択欄

左の画像は Bureaucracy プラグインフォーム内の日付入力カレンダーで、右の画像は有効値を定義した type alias で作成した単独選択欄と複数選択欄です。

翻訳対応

translation プラグインを使用する場合、異なる言語で同じデータ項目を使用したいこともあります。 プラグインは項目名を翻訳できますが、値は翻訳されません。

項目名を翻訳するには、conf/lang/<langcode>/data-plugin.php ファイルを作成します。 ファイルには、配列のキーがフィールド名、値が翻訳の $lang という名前の PHP 配列があります:

conf/lang/en/data-plugin.php
<?php
$lang['somekey']  = 'My name for the key';
$lang['otherkey'] = 'My name for the other key';

フィールド名は型なしで設定します。 deadline_dt ではなく deadline です。

存在しない機能

  • 以下の制御オプション:
    • 属性リスト(タグクラウドに似ているが、単純なリストとして)
    • 検索フィールド
  • 優れたドキュメントや例
  • 本格的なフォーム同様の content_only 編集フォームのために JavaScript の追加
  • より多くのデータ型?
  • 集計リンクとバックリンクの発生しないデータ入力
  • 特定の名前空間内のデータ検索
  • SQL INTERVALに相当する、日付フィールドの WHERE チェック(“field_dt before 6 months from now” と同等の “WHERE field_dt < %now% + INTERVAL 6 MONTH”)
  • “this page” という名前との比較(data table 内で)
  • Type aliases テーブルの履歴(テーブルの変更をページに反映できるが、記録と旧戻しがありません)。

使用事例

いくつかの使用事例です:

Q&A

データを更新するには?

SQLiteデータベースにコピーされるデータは、dataentryボックスを含むページが変更されるたびに自動的に更新される はず です。 If you deleted or renamed pages outside the wiki, the database will still contain data about now non-existing pages. These can be cleaned using the ​Data Plugin: Clean up database​ entry in the Admin menu.

しかし、必ずしも 100% 信頼できない状態ようなバグがあるかもしれません。 壊れている可能性や最近の修正実績を知るために、open bugs 章や 変更履歴 章を見て下さい。

データベース全体を削除した場合、データベースを再作成するために全ての入力ページを再描画する必要があります。これを自動的に行う方法はありません。

ページを外部から変更した場合やデータベースを初期化した場合、データベースを再作成するやり方です:

  • コマンドラインファイルダウンローダである wget を利用してバッチで Wikiページをダウンロードする。
  • Searchindex 管理プラグインをインストールし、「管理者メニュー」に追加された「Searchindex 管理」画面を起動し「Index の再作成」ボタンを押す。

もちろん、SQLiteのコマンドライン·クライアントを使ってデータベースファイルを直接オープンし 、SQLクエリを介して操作することもできます。

他の質問

まだ質問があれば、フォーラムを検索し、前に質問されていない場合は質問して下さい。 Github の問題追跡にバグ報告を書いて下さい。

バグ、機能要望、パッチ

バグと機能要望は Github の問題追跡に提出してください。 パッチは diff ユニファイド形式かgitパッチで開発部門に送ってください。 github 上でフォークし、merge resuest を送ってくれるとなお良いです。

1)
同じページ上に追加された ​dataentry は、前に記述された ​dataentry を上書きします。 なので、- 一ページ上に多くの dataentry ブロックが表示されていても - 最後の値のみ SQLite のデータベースに格納され、例えば ​datatable​ による出力として取得できます。
ja/plugin/data.txt · 最終更新: 2014-09-25 15:19 by sawachan

特に明示されていない限り、本Wikiの内容は次のライセンスに従います: CC Attribution-Share Alike 4.0 International
CC Attribution-Share Alike 4.0 International Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki