yohei-y:weblog

XML と REST/Web サービス関連の話題が中心の weblog です

2004-12-07

未知のボキャブラリのタグをどう表示するか

xfy の話の続きである。

とりあえずユーザ登録して xfy をダウンロード、で使ってみた。単なる XHTML 編集環境としては、まあこんなもんかという感じである。やはり独自ボキャブラリを定義してこそ、意味のあるものであろう。ということで、自分が持っていた XHTML + 独自ボキャブラリのファイルを読み込ませてみた。これは比較的大きな XHTML ファイルで、170KB くらいあるが、そこそこ快適に開いて動作させることができた。僕の定義した独自ボキャブラリは単純で、脚注タグ <book:fn>と索引タグ <book:index>の二つである。どちらも XHTML のインライン要素に混ぜて使うことができる、という仕様だ。XHTML インスタンスの断片はたとえば、以下のようになる。

<p><book:index>XSLT</book:index> の名前空間は
"http://www.w3.org/1999/XSL/Transform" である。
ここでは XSLT の名前空間接頭辞として xsl を用いているが <book:fn>
この接頭辞は歴史的な理由で xsl を用いている。</book:fn>、
もちろんこれは正しく宣言されていれば、何でも構わない。</p>

サンプルで明らかだが、book:fn 要素は脚注としてレンダリングされることを期待しており、book:index 要素は索引からリンクされることを期待している。これを何の設定もせず、そのまま xfy に読ませてみた。するとレンダリング結果は以下のような感じになった。

?
の名前空間は "http://www.w3.org/1999/XSL/Transform" である。
ここでは XSLT の名前空間接頭辞として xsl を用いているが
?
、もちろんこれは正しく宣言されていれば、何でも構わない。

ここで注目して欲しいのは xfy にとって未知のタグ (book:fn と book:index) は、"?" という箱でレンダリングされたところである。すなわち、xfy は通常の Web ブラウザのように、知らないタグは無視するのではなく、「知らないタグである」というしるしを表示しているのだ。

これはボキャブラリ設計者(僕自身である)の気持ちとしてはどうなって欲しいかというと、book:index 要素に関してはタグを無視して内容を表示してほしくて、book:fn タグに関しては、できれば脚注らしく表示、それが難しかったら book:fn を示すicon が段落のインラインで表示されてほしい、というところである。

たとえば以下のような感じだ。

XSLT の名前空間は "http://www.w3.org/1999/XSL/Transform" である。
ここでは XSLT の名前空間接頭辞として xsl を用いているが(*)、
もちろんこれは正しく宣言されていれば、何でも構わない。

このように、XHTML + αのαの部分をどう表示するかは、法則があるわけではなく、その要素の意味で決まるので実装は難しいのだ。xfy の実装は、完璧ではないにせよかなりイイ線である。

…というようなことは実は僕のオリジナルではなく、"Java World 特別編集 XML World 第一弾" という雑誌の中の"XML 実践活用の手引き Part1 XML ボキャブラリ作成のポイントを知る"という記事で、"タグは読み飛ばしてもよいのか?" という囲み記事(54ページ左下)として檜山正幸さんが指摘している問題そのものである。

ここでの檜山さんは、「タグの無視」が DOM ツリーの構造を破壊することを指摘したうえで、次のように結論付けている。

妥協できる線としては、「知らない要素(タグではない)を無視したうえで、そこ に要素があった痕跡(例えば、疑問符が描かれたボックス)を残し、ユーザーが明示的に『タグを無視した表示』を選択したら表示する」といった動作が考えられる。

xfy の実装は前半部(無視しないで "?" ブロックで表示)はこのとおりだが、後半部(無視するかどうかユーザが選択可能)は実装していないようだった。おそらく VCD を書けばいいのだが、ドキュメントが少なくて僕にはできなかった。

ラベル: