未知のボキャブラリのタグをどう表示するか
» Permanent link | |
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 を書けばいいのだが、ドキュメントが少なくて僕にはできなかった。
ラベル: xml
0 Comments:
コメントを投稿
<< Home