SuikaWiki2

SuikaWiki2

[1] SuikaWiki2 は、 2002年6月から2004年2月まで開発されていた SuikaWiki の第2世代です。

[6] 注意: SuikaWiki2 は既にメインテナンスされていません。 SuikaWiki3 をご利用ください。

歴史

[2] SuikaWiki2 の開発は、2002年6月に SuikaWiki1 を WalWiki 2.0.beta.1.wal.1 と sync したことにより始まりました。 SuikaWiki1 は YukiWiki 1 を base にわずかな修正を加えたものでしたが、 YukiWiki 2 を base とする WalWiki 2 とは code が大きく違っていましたから、 YukiWiki 1 と SuikaWiki 1 の差分を手作業で WalWiki 2 に merge することによって SuikaWiki 2 を作りました。

その後2002年8月には WalWiki 2.0.3.wal1 を SuikaWiki 2 に merge しました。 WalWiki の修正 (YukiWiki の修正を含む。) のうちのいくつかは、 SuikaWiki 2 で既に修正されていたクロスサイトスクリプティング脆弱性関連のものでした (当時は丁度 XSS 脆弱性修正ブームでした)。 WalWiki の新機能のうち、 InterWikiBox や WikiAntena など一部を除いて、 手作業で SuikaWiki2 に merge しました。 InterWiki は、 YukiWiki や WalWiki では WikiName の一部に : を含める方式でしたが、当時既に SuikaWiki @ suika.fam.cx には : を含む WikiName があったことから、 code は merge したものの使えるような使えないような、という状態でした。

[3] 以後、 SuikaWiki2 は YukiWiki や WalWiki とは別の道を歩むことになります。 SuikaWiki2 で追加した機能には、次のようなものがあります。

text/css 出力モード
スタイル・シートも wiki のデータの一部にしてしまえば、 誰でも修正できるようになります。ということで text/css で出力できるようにしました。
魔法行
ということで、 wiki のデータに従来の wiki 文書と CSS のスタイル・シートが混在することになります。 CSS でないものを CSS といって送り出すのは好ましくありませんから、 wiki のデータにラベルをつけておく必要があります。 ということで、データの最初の行を魔法行として、 書式を宣言することにしました。
WikiPlugin
WikiForm (>>4) を実装した際に、 form 部品やその入力を整形するための部品を自由に定義するための仕組みとして WikiPlugin を実装しました。
関連頁一覧
Wiki 内の関連する情報のある頁や wiki 外の非参照頁へのリンクが自動的に挿入されるようにしました。 YukiWiki / WalWiki でも検索機能で実現していますが、 それは利用者の積極的な動作の結果です。 SuikaWiki2 では情報自体が勝手に集まることをイメージしています。
RDF・RSS 出力
WikiPage 一覧などを RDF を使って出力できます。

また、次の機能等を大きく修正しています。

標準の文書書式
SuikaWiki2 の標準の記述形式は最終的に SuikaWiki/0.9 とよばれる書式となりました。 >>4 を参照。
WikiName の階層化
WikiName に名前空間という階層概念を取り入れました。
Yuki
:YukiWikiDBMeta]]]]:YukiWiki 2 / WalWiki 2 の Yuki::YukiWikiDB2 にディレクトリ構造 (WikiName 名前空間に対応) とメタ・データを追加したファイル・システム写像データベースです。
WikiView
WikiPage に対する動作、たとえば readedit の結果の出力部は YukiWiki / WalWiki とは大きく異なり、 WikiView として定義したものを使います。これによって navigation や footer などの共通の部分の管理が楽になりますし、関連頁一覧を出力しない、 のような customize も容易になりました。
組込み頁
YukiWiki / WalWiki では、 RecentChangesIndexPage などは個々に特別な code で実装されていました。 SuikaWiki2 ではこれをすべて撤廃し、 必要なら WikiPlugin を使っています。
資源
YukiWiki / WalWiki では人間可読な文字列の部分が外部ファイルに格納されていましたが、 wiki 管理者しか修正できませんでしたし、 plain text しか含められませんでした。 SuikaWiki2 では wiki のデータの一部として管理します。 また、必要な部分では書式記述により構造を持たせることができます。 HTTP内容折衝により、 (用意さえすれば) 閲覧者に合わせた言語で出力できます。
InterWiki
InterWiki のリンク先 URI の生成方法は WikiPlugin を使って自由に拡張できます。 WikiPlugin さえ用意すれば、 無作為にリンク先を選ぶことさえ可能です。
浮動誘導棒
「編集」、「最近」などのリンクはたいていの wiki では HTML 出力の最初か最後にありますが、いずれかでは不便ですから SuikaWiki2 は標準では両方に出力します (最近では世間一般でもそれが普通でしょうか)。 更に、 GeckoWinIE では浮動して表示領域の一角に常に見えるようにしています。
WikiFormat
Wiki のデータの書式は WikiPlugin で処理を定義すればどんなものでも使えます。 実際に使用されていたものの例としては、 SuikaWiki/0.9 (文書)、 CSS (スタイル・シート)、 SuikaWikiConst/0.9 (マクロ置換定義)、 plain text などがあります。
XML object
HTML / XML 出力時には XML object を使って、 最後に直列化しています。ですから、この点では XSS 脆弱性問題が起こり得ません。

[4] SuikaWiki2 の書式は、当初は YukiWiki 2 / WalWiki 2 に SuikaWiki1 の拡張を加えたものでした。 その後、更に次のような修正が行われました。

深さ制限の撤廃
YukiWiki / WalWiki では、見出し (*) や並び (-) では深さに制限がありました。この制限は SuikaWiki2 では撤廃されています。
順序並び
- の代わりに = を使うと、順序並び (HTML でいう ol) を意味します。
複数注釈入力欄
YukiWiki / WalWiki では注釈入力欄 (#comment) は WikiPage あたり1つしか使えませんが、 SuikaWiki2 では無限個使えます。
WikiForm
WalWiki 2 には InterWikiBox という、 InterWiki の引数のようなものとして form をつかうことのできる機能がありますが、 SuikaWiki ではこれを採用せず、独自の WikiForm を実装しました。 WikiForm は WikiPage 内の定型入力や外部への form 提出に使うことができる form を簡単に定義できる仕組みですが、すぐに意味的に拡張されて、 WikiPlugin の提供する任意の機能を WikiPage に埋め込むための手段となりました。
意味要素
HTMLcodekbd などに対応する意味語句要素を追加しました。
文書内の錨
段落や並びの項目に文書内で一意な番号を振ることができます。 その番号を使って 2ch 風に内外から参照できます。

修正が一段落した時点で仕様は凍結され、これを SuikaWiki/0.9 書式と呼んでいます。

[5] こうして改良を加えてきた SuikaWiki2 ですが、2003年の中頃から限界が見え始めてきました。 かなり少なくなってきたとはいえ処々に残る YukiWiki 由来の code が拡張や整理の邪魔になり、 とはいっても依存部分が多すぎて除去できなかったり、 WikiPlugin から情報を得る方法が整備されていなくて ad hoc な方法ばかりだったり、 あるいは XML object として出力を生成する部分と従来の plain text 的に XML マーク文を作成する部分が混在していたり、 対処しなければならない問題が大きくなってきました。

そこで、2003年11月に SuikaWiki2 は CVS の branch-suikawiki-1 枝 (枝名の版番号は誤り。) となり、では SuikaWiki3 の開発が始まりました。その後 SuikaWiki2 には 2004年2月までわずかな不具合の修正が行われました。 2004年3月までには、 SuikaWiki3 が実用的な状態になりました。 SuikaWiki3 からは YukiWiki / WalWiki / SuikaWiki2 由来の古い code がほぼ一掃されています。 2004年3月に、 SuikaWiki @ suika.fam.cx も SuikaWiki3 に移行しました。

メモ