📝

MediaWiki フォームの考え方

に公開

MediaWiki は Wiki なので、Wiki 記法でページを記述するのが基本になっている。

そのうえで、よりグラフィカルな定型入力方法を求めて開発されてきた方法がいくつかある。

  • VisualEditor + TemplateData
  • Page Forms

VisualEditor + TemplateData

MediaWiki でよく見る「編集」ボタンで起動する。実体は VisualEditor である。フォーム的な定型入力には、MediaWiki のテンプレート機能を使う。名前付きテンプレート引数が定型入力項目になる。

VisualEditor は TemplateData に対応していて、Template 入力の補助データを制御する。TemplateData の内容には、次のような要素がある。

  • 項目の順序
  • 入力候補
  • フールド名の国際化対応
  • 項目自体が必須か非推奨かなど

テンプレート引数名に国際化対応されるラベル名がつく。このラベル名は TemplateData では強く推奨されており、テンプレート引数はプレースホルダの役割である。エンドユーザはラベル名で引数を識別する。

入力候補は TemplateData の suggestedvalues で固定的に与える。ちなみに suggested というパラメータもあるけれども、これは suggestedvalues とは無関係で、入力項目が「推奨」であるかを示すフラグになっている。

Page Forms

フォーム入力のために作られた Page Forms extension がある。先ほどのテンプレート機能はもちろん使うのだけれど、VisualEditor による既定の編集画面ではなく、カスタマイズされた入力画面を作成できる。入力画面はやはり Wikitext 記法である。

Wikitext 記法で入力項目を画面上に配置していく。入力項目はテンプレート引数である。ざっくりとは、テンプレート引数で {{{word1}}} であったものは、{{{field|word1}}} として配置することになる。

テンプレート引数名自体が入力項目で、Form 入力作成者が認識する名前でもある。これをエンドユーザにどのように見せるかは Form 入力画面作成者に委ねられており、国際化対応するかどうかは任意である。オプション的にテンプレート引数名にラベルを付けて国際化対応することもできる。

入力候補は様々な方法で組み立てることができる。Values, mappings, autocomplete で説明されている様々な方法が使える。Property と map されていれば、Property::Allowed values を参照することもできる。ただしこれらを機械的にすぐに取り出す手段は用意されていない。

まとめ

VisualEditor/TemplateData も Page Forms も、どちらもテンプレート引数がフォーム入力項目であることには変わりがない。

TemplateData では、国際化対応したラベル名を機械可読な状態で入力・出力できるようになる。一方で Page Forms ではラベル名はMediaWiki内部に閉じて利用される。

入力候補は Page Forms のほうが柔軟性は高いが、機械処理も難しい。TemplateData はjsonに固定された値を使うのみである。どちらが良いかは一概には言えない。

Discussion