<html xmlns="http://www.w3.org/1999/xhtml" a0:Name="SuikaWiki" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:Version="0.9"><head></head><body><p><a0:anchor-end a0:anchor="1">[1]</a0:anchor-end>
<dfn>SuikaWiki2</dfn> は、 2002年6月から2004年2月まで開発されていた <a0:anchor>SuikaWiki</a0:anchor>
の第2世代です。</p><p><a0:anchor-end a0:anchor="6">[6]</a0:anchor-end> <strong>注意</strong>: SuikaWiki2 は既にメインテナンスされていません。
<a0:anchor>SuikaWiki3</a0:anchor> をご利用ください。</p><section><h1>歴史</h1><p><a0:anchor-end a0:anchor="2">[2]</a0:anchor-end> SuikaWiki2 の開発は、2002年6月に SuikaWiki1 を WalWiki 2.0.beta.1.wal.1
と sync したことにより始まりました。 SuikaWiki1 は <a0:anchor>YukiWiki</a0:anchor> 1 を base
にわずかな修正を加えたものでしたが、 YukiWiki 2 を base とする WalWiki 2
とは code が大きく違っていましたから、 YukiWiki 1 と SuikaWiki 1
の差分を手作業で WalWiki 2 に merge することによって SuikaWiki 2
を作りました。</p><p>その後2002年8月には WalWiki 2.0.3.wal1 を SuikaWiki 2 に merge
しました。 WalWiki の修正 (YukiWiki の修正を含む。) のうちのいくつかは、
SuikaWiki 2 で既に修正されていた<a0:anchor>クロスサイトスクリプティング脆弱性</a0:anchor>関連のものでした
(当時は丁度 XSS 脆弱性修正ブームでした)。
WalWiki の新機能のうち、 InterWikiBox や WikiAntena など一部を除いて、
手作業で SuikaWiki2 に merge しました。 <a0:anchor>InterWiki</a0:anchor>
は、 YukiWiki や WalWiki では WikiName の一部に <code>:</code>
を含める方式でしたが、当時既に SuikaWiki @ suika.fam.cx には <code>:</code>
を含む WikiName があったことから、 code は merge 
したものの使えるような使えないような、という状態でした。</p><p><a0:anchor-end a0:anchor="3">[3]</a0:anchor-end> 以後、 SuikaWiki2 は YukiWiki や WalWiki とは別の道を歩むことになります。
SuikaWiki2 で追加した機能には、次のようなものがあります。</p><dl><dt><code class="MIME"><a0:anchor>text/css</a0:anchor></code> 出力モード</dt><dd>
スタイル・シートも wiki のデータの一部にしてしまえば、
誰でも修正できるようになります。ということで <code class="MIME">text/css</code>
で出力できるようにしました。</dd><dt>魔法行</dt><dd>
ということで、 wiki のデータに従来の wiki 文書と CSS 
のスタイル・シートが混在することになります。
CSS でないものを CSS といって送り出すのは好ましくありませんから、
wiki のデータにラベルをつけておく必要があります。
ということで、データの最初の行を<dfn>魔法行</dfn>として、
書式を宣言することにしました。</dd><dt><a0:anchor>WikiPlugin</a0:anchor></dt><dd>WikiForm (<a0:anchor-internal a0:anchor="4">&gt;&gt;4</a0:anchor-internal>) を実装した際に、
form 部品やその入力を整形するための部品を自由に定義するための仕組みとして
WikiPlugin を実装しました。</dd><dt>関連頁一覧</dt><dd>Wiki 内の関連する情報のある頁や wiki
外の非参照頁へのリンクが自動的に挿入されるようにしました。
YukiWiki / WalWiki でも検索機能で実現していますが、
それは利用者の積極的な動作の結果です。 
SuikaWiki2 では情報自体が勝手に集まることをイメージしています。</dd><dt>RDF・RSS 出力</dt><dd>WikiPage 一覧などを <a0:anchor>RDF</a0:anchor> を使って出力できます。</dd></dl><p>また、次の機能等を大きく修正しています。<dl><dt>標準の文書書式</dt><dd>SuikaWiki2 の標準の記述形式は最終的に
<a0:anchor>SuikaWiki/0.9</a0:anchor> とよばれる書式となりました。 <a0:anchor-internal a0:anchor="4">&gt;&gt;4</a0:anchor-internal> を参照。</dd><dt><a0:anchor>WikiName</a0:anchor> の階層化</dt><dd>WikiName に<a0:anchor>名前空間</a0:anchor>という階層概念を取り入れました。 </dd><dt><code class="perl"><a0:anchor>Yuki</a0:anchor></code></dt><dd>:YukiWikiDBMeta]]]]:YukiWiki 2 / WalWiki 2 の 
<code class="perl"><a0:anchor>Yuki::YukiWikiDB2</a0:anchor></code> にディレクトリ構造 (WikiName 名前空間に対応)
とメタ・データを追加したファイル・システム写像データベースです。</dd><dt><a0:anchor>WikiView</a0:anchor></dt><dd>WikiPage に対する動作、たとえば <code>read</code> や <code>edit</code>
の結果の出力部は YukiWiki / WalWiki とは大きく異なり、 WikiView 
として定義したものを使います。これによって navigation や footer
などの共通の部分の管理が楽になりますし、関連頁一覧を出力しない、
のような customize も容易になりました。</dd><dt>組込み頁</dt><dd>YukiWiki / WalWiki では、 <code class="WikiPage">RecentChanges</code> や
<code class="WikiPage">IndexPage</code> などは個々に特別な code
で実装されていました。 SuikaWiki2 ではこれをすべて撤廃し、
必要なら WikiPlugin を使っています。</dd><dt>資源</dt><dd>YukiWiki / WalWiki では人間可読な文字列の部分が外部ファイルに格納されていましたが、
wiki 管理者しか修正できませんでしたし、 plain text
しか含められませんでした。 SuikaWiki2 では wiki のデータの一部として管理します。
また、必要な部分では書式記述により構造を持たせることができます。
<a0:anchor>HTTP</a0:anchor> の<a0:anchor>内容折衝</a0:anchor>により、 (用意さえすれば) 閲覧者に合わせた言語で出力できます。</dd><dt><a0:anchor>InterWiki</a0:anchor></dt><dd>InterWiki のリンク先 URI の生成方法は WikiPlugin
を使って自由に拡張できます。 WikiPlugin さえ用意すれば、
無作為にリンク先を選ぶことさえ可能です。</dd><dt>浮動誘導棒</dt><dd>「編集」、「最近」などのリンクはたいていの wiki
では HTML 出力の最初か最後にありますが、いずれかでは不便ですから SuikaWiki2
は標準では両方に出力します (最近では世間一般でもそれが普通でしょうか)。
更に、 <a0:anchor>Gecko</a0:anchor> や <a0:anchor>WinIE</a0:anchor> では浮動して表示領域の一角に常に見えるようにしています。</dd><dt><a0:anchor>WikiFormat</a0:anchor></dt><dd>Wiki のデータの書式は WikiPlugin 
で処理を定義すればどんなものでも使えます。
実際に使用されていたものの例としては、 <a0:anchor>SuikaWiki/0.9</a0:anchor> (文書)、
<a0:anchor>CSS</a0:anchor> (スタイル・シート)、 <a0:anchor>SuikaWikiConst/0.9</a0:anchor> (マクロ置換定義)、
plain text などがあります。</dd><dt>XML object</dt><dd>HTML / XML 出力時には XML object を使って、
最後に直列化しています。ですから、この点では XSS 脆弱性問題が起こり得ません。</dd></dl></p><p><a0:anchor-end a0:anchor="4">[4]</a0:anchor-end>
SuikaWiki2 の書式は、当初は YukiWiki 2 / WalWiki 2 
に SuikaWiki1 の拡張を加えたものでした。
その後、更に次のような修正が行われました。</p><dl><dt>深さ制限の撤廃</dt><dd>YukiWiki / WalWiki では、見出し (<code>*</code>) や並び (<code>-</code>) 
では深さに制限がありました。この制限は SuikaWiki2 では撤廃されています。</dd><dt>順序並び</dt><dd><code>-</code> の代わりに <code>=</code> を使うと、順序並び
(HTML でいう <code class="HTMLe"><a0:anchor>ol</a0:anchor></code>) を意味します。</dd><dt>複数注釈入力欄</dt><dd>YukiWiki / WalWiki では注釈入力欄 (<code>#comment</code>)
は WikiPage あたり1つしか使えませんが、 SuikaWiki2 では無限個使えます。</dd><dt><a0:anchor>WikiForm</a0:anchor></dt><dd>WalWiki 2 には InterWikiBox という、 InterWiki
の引数のようなものとして <a0:anchor>form</a0:anchor> をつかうことのできる機能がありますが、
SuikaWiki ではこれを採用せず、独自の WikiForm を実装しました。
WikiForm は WikiPage 内の定型入力や外部への form 提出に使うことができる
form を簡単に定義できる仕組みですが、すぐに意味的に拡張されて、
<a0:anchor>WikiPlugin</a0:anchor> の提供する任意の機能を WikiPage
に埋め込むための手段となりました。</dd><dt>意味要素</dt><dd><a0:anchor>HTML</a0:anchor> の <code class="HTMLe"><a0:anchor>code</a0:anchor></code> や <code class="HTMLe"><a0:anchor>kbd</a0:anchor></code>
などに対応する意味語句要素を追加しました。</dd><dt>文書内の錨</dt><dd>段落や並びの項目に文書内で一意な番号を振ることができます。
その番号を使って 2ch 風に内外から参照できます。</dd></dl><p>修正が一段落した時点で仕様は凍結され、これを <a0:anchor>SuikaWiki/0.9</a0:anchor>
書式と呼んでいます。</p><p><a0:anchor-end a0:anchor="5">[5]</a0:anchor-end>
こうして改良を加えてきた SuikaWiki2 ですが、2003年の中頃から限界が見え始めてきました。
かなり少なくなってきたとはいえ処々に残る YukiWiki
由来の code が拡張や整理の邪魔になり、
とはいっても依存部分が多すぎて除去できなかったり、
WikiPlugin から情報を得る方法が整備されていなくて ad hoc な方法ばかりだったり、
あるいは XML object として出力を生成する部分と従来の plain text
的に XML マーク文を作成する部分が混在していたり、
対処しなければならない問題が大きくなってきました。</p><p>そこで、2003年11月に SuikaWiki2 は CVS の <code>branch-suikawiki-1</code>
枝 (枝名の版番号は誤り。) となり、<a0:anchor>幹</a0:anchor>では <a0:anchor>SuikaWiki3</a0:anchor>
の開発が始まりました。その後 SuikaWiki2 には 
2004年2月までわずかな不具合の修正が行われました。
2004年3月までには、 SuikaWiki3 が実用的な状態になりました。
SuikaWiki3 からは YukiWiki / WalWiki / SuikaWiki2
由来の古い code がほぼ一掃されています。
2004年3月に、 SuikaWiki @ suika.fam.cx も SuikaWiki3 に移行しました。</p></section><section><h1>メモ</h1></section></body></html>