銀杏(仮)パッケージは最終的に以下の三つのサブパッケージから成る: 1. ContentSupplier(Java サーブレット/Ruby・XSLT 1.0・EXSLT・様々な XML データ)(完成度:70%) リクエストから URL 解析・データ処理・レスポンスまでを司る。フォーマットや自然言語に依存しない『パーマリンク』をリッチなメタデータとともにインデックスしておき、サーバー環境変数やクライアント毎の Accept フィールドなどから適切な XSLT テンプレートを選択し、処理の結果を HTTP ヘッダとともに返す。 パーマリンクは XML だけならず画像やムービーも含む。たとえば ttp://example.com/icho/demo という URL をリクエストしたら、icho_demo.avi ファイルが埋め込められた XHTML が返ってくるかもしれない。 後々の非・Java 環境への移植も考えて、現状で Saxon(*1)という Java で書かれた XSLT プロセッサを必要とする XSLT 2.0 ではなく、多くのプロセッサにネイティブサポートされている XSLT 1.0、そして EXSLT(*2)を使う。独自関数を作れないとお話にならないので、EXSLT の function モジュールは必須だ。例:my:getMetaByID(xs:ID dataID)、my:getDocumentByTags(xs:string space-separated-tags)、my:hasWriter(xs:string writerID)、etc. 2. XMLEditor(JavaScript(Ajax)・XForms?・XML Schema?)(完成度……たったの 5% か……ゴミめ……) XML データのウェブページ上での新規作成・編集を司る。編集画面の静的作成は ContentSupplier サブパッケージが、そして動的生成・入力援助には Ajax 技術(*3)を用いたクライアントサイドスクリプト『FormFormer』が担う。ContentSupplier は編集前の XML コード全文が入った textarea 要素を持つ (X)HTML を提供し、FormFormer はそこに加え、作成・編集する様々な XML の法則を前もって記したフォーム定義ファイル(XForms×XML Schema?)に即した input・textarea・select 要素などをページの再読み込み無しに生成する。ユーザーが FormFormer の生成したフォームに入力したデータと ContentSupplier がもともと作っておいた textarea 内のデータはリアルタイムで同期され、最終的に textarea 内の XML コード全文をプログラムに POST メソッドで渡し、元々の XML ファイルに上書きすることになる。FormFormer のフォームに頼らず、テキストエディタなどを使って書いたものを textarea にペーストして即座に POST するのも自由だ。フォームではデータ型などを動的に、送信後の確認画面では静的に、スキーマファイルに基づいたバリデーション(入力されたデータの正当性評価)を行う。こうしてフォーム一つ一つの生成がプログラムから分離されていることにより、FOAF・RSS・XHTML などの異なる XML 語彙の編集に特化したフォームをユーザーが自由に作れる。フォーム定義ファイルを書くためのフォームを FormFormer に生成させるフォーム定義ファイルは最初から組み込まれているだろう。 細かい設計はまだまだこれから。どなたかクロスブラウザな JavaScript を書くことに挑戦してくださる方を募集しています。 3. MetadataNavigator(JavaScript(Ajax)・RDF(RSS))(完成度:15%) (X)HTML の head 要素及び外部 RDF ファイルを基にしての、リッチなメタ情報を含んだサイトナビの動的生成を司る。ContentSupplier サブパッケージは body 要素には文字通り「本文」のみ、そして head 要素・外部サイトマップ(RSS 1.0+リソース関係を示す独自 RDF スキーマ)にはパーマリンクごとのメタ情報を記述する役目を担い、Ajax 技術(*3)を用いたクライアントサイドスクリプト『MetadataNavigator』はそれらメタデータの取得・(X)HTML への加工・スクリーン内への配置・表示を担う。 JavaScript を使用出来ない環境のために配備する head 要素内メタ情報には、作者・日付・キーワード・概要・主要なページ(自身・ホーム・前後・検索・著作権・ヘルプ・代替)の URI・ページ内フラグメント(見出し・フォーム)の URI などが含まれる。MetadataNavigator はこれらに加え、同じようにして関連付けられた外部サイトマップ(<link rel="index" href="/index" type="application/rdf+xml" title="サイトインデックス"/>)を非同期的に取得し、サイト内全体のリソース及びメタデータにアクセス可能となる。 ウェブマスターは本文――実際のコンテンツ内容――の提供のみにこそ集中し、ナビやヘッダ情報などは本文から排除され、そして閲覧者の望む形で常に「そこ」にあるべきだ。そのユーザーインターフェース(UI)はページ非依存・環境依存――作成者ではなく閲覧者にとってこそ親しみ深いものでなければならない。「最高の UI」とは使い手が使い方を知った UI だ。ページ毎に異なっていては最高とはなり得ない。よって MetadataNavigator の UI のデフォルトの装飾にはなるべく OS システムカラーを用い、それを必要に応じて作成者(ウェブマスター)ではなく閲覧者が表示の有無・装飾・配置をユーザースタイルシートで自由に変更するだろう。 /* デフォルトスタイル(仮) */ #MetadataNavigator { position : absolute; top : 0; left : 0; color : WindowText; background-color : Window; } (X)HTML の head 要素から情報を取り出し加工するというその基本特性から、ユーザー JavaScript パッケージとして配布し、外部サイトマップを提供しない(銀杏ベースでない)ウェブサイトでもメタ情報ツリーを表示することが可能になるだろう。 *1 Saxon(The SAXON XSLT and XQuery Processor:http://saxon.sourceforge.net/) *2 EXSLT(EXSLT:http://www.exslt.org/) *3 Ajax(Ajaxとは 【Asynchronous JavaScript + XML】 ─ 意味・解説 : IT用語辞典:http://e-words.jp/w/Ajax.html)