[1] InterWiki は、 (URI よりも人間に優しい) 別の (wiki の外の) 文書群にリンクするための仕組みです。
SuikaWiki は、他の多くの wiki システムよりも柔軟に InterWiki を扱うことができます。
[2] SuikaWiki/0.9 形式の文書では、次のように InterWiki リンクを書くことができます。
<IW:"文書群名":"文書名">
例えば、どこかのwiki に属する InterWikiのテストという文書にリンクしたい時には、
<IW:"どこかのwiki":"InterWikiのテスト">
と書きます。 (引用符はなくても安全な時は省略できます。 安全でない時には警告が出ます。)
[3] >>2 で説明した文書群名には、
Wiki//InterWikiName
という特別な頁で定義した文書群の名前を指定します。
たとえば、
Site: @Name: RFC @URIReference: http://www.ietf.org/rfc/rfc%parameter;.txt
のような定義を Wiki//InterWikiName
に追加すると、
<IW:RFC:2822>
と書いて <http://www.ietf.org/rfc/rfc2822.txt> にリンクできます。
[4] URIReference
の欄は、
Message::Util::Formatter
形式で解釈されます。
>>3 の例の %parameter; の部分のことを
Message::Util::Formatter
では整形規則
と呼んでいます。
整形規則は SuikaWiki の WikiPlugin を使って定義されています。 従って、 wiki の管理者は (多少の知識は必要ですが) 自由に整形規則を定義して、 InterWiki のリンク先 URI を自在に生成することができます。
[5] SuikaWiki に標準で付属している整形規則を使って、 Google にリンクするための InterWiki の定義を行ってみましょう。
Site: @Name: Google @URIReference: %uri-with-query ( base => {http://www.google.com/search}, query => {%query-parameter ( name => q, value => {%parameter;}p, charset => {iso-2022-jp}, );}p, query => {ie=iso-2022-jp}, );
この定義を使うと、
<IW:Google:SuikaWiki>
は <http://www.google.com/search?q=SuikaWiki&ie=iso-2022-jp> になります。
>>3 の例のように http://www.google.com/search?q=%parameter; と定義しても良いように思えるかもしれません。 しかし、それでは、
<IW:Google:"すいかゐき">
のように仮名や漢字を含んでいる場合や、 & という記号を含んでいる場合には正しい URI が生成できません。
整形規則 uri-with-query や query-parameter は、そのような問題を解決してくれます。
[6] このほかにも、 yukiwiki のように特定の相手先の URI の生成を楽にするための整形規則も用意しています。 Wiki//InterWikiName には多くの例がありますから、 参考にしてください。
利用できる整形規則の一覧は、 Wiki//Plugin//Info にあります。 (InterWiki の定義以外の目的に使う整形規則も含まれます。) 整形規則が内部でどのような動作をしているのかは、 <IW:SuikaCVS:"suikawiki/script/lib/SuikaWiki/Plugin/"> や <IW:SuikaCVS:"suikawiki/script/misc/plugins/"> にある WikiPlugin のソースを見てもらえばわかります。
[7] HTML 出力モードでは InterWiki のリンクは <Google:SuikaWiki> のようになりますが、より柔軟に、 Google 検索: 「SuikaWiki」 などとしたり、 HTML 4 仕様書 4.1 節 (和訳) のような感じで1つの InterWiki リンク指定から複数のリンク先を出力できるようにする予定です。
また、 InterWiki の方法を応用して、 wiki 内のリンクの方法をより柔軟にできないか模索中です。
[8] Wiki//InterWikiName の編集を HTML form を使って簡単にできるようにすることも考えています。 (名無しさん 2004-06-03 07:23:33 +00:00)