あることについて、書きたいんだけど、その前に、予備知識がいるので、今回、書いています。
(というとで、あったりまえのことしか、書いてないので、内容に、期待しないでね ^^;)
ワープロで作成するような文書やDTPにおいて、その文書構造というのは、2種類あるわけです。
論理構造と、物理構造。
■■ 物理構造
物理構造というのは、どこのページの上何ミリ、右何ミリに、なにをおくかという構造で、こんな階層構造を持つといわれている
ドキュメント
|
ページ
|
グループ
|
枠ーーーー
| | |
段 図 写真
|
行
|
文字
グループというのは、グループ化というやつで、図形をグループにすると思う。あれのことで、枠などでも、一緒に動く枠というのがあり(そういう操作が、DTPソフトではできる)、そーいうのをまとめてクループという。
枠はDTPでは意識するけど、普通ワープロでは意識しない。しかし、意識しなくても、本文、フッダ、ヘッダと存在は、している。
なお、グループの中にグループがあったり、枠の中に枠があるという再帰的な構造も、理論的には存在する(ソフトが対応するかどうかは別問題)
■■ 論理構造
論理構造は、意味的なまとまりであり、ページをまたぐこともある。
ドキュメント
|
意味的なまとまり(小組)
|
|ーーーーーーーーーーーーーーーーーーーー|ーーーーー|
さらに細かい意味的な小さなまとまり(枠) 関連する図 関連する写真
|
さらに、さらに細かい意味的な小さなまとまり(スタイル)
|
文字
この場合、一般的にはかけない。
たとえば、株価情報と、特許申請書と、確定申告用紙と、スーパーのチラシに共通する論理構造といわれても、ちと困る。
ところが、物理構造は、紙に出力する限り明確で、上記の物理構造といえる
(一般に1出力メディアに対して、1物理構造になる)
■■ XMLでの問題点
したがって、ひとつのドキュメントにおける、1つの文字をみたとき、それは、論理構造と物理構造、両方からのリンクが必要になる。
税金で言えば、2という数字は、
(論理構造)
・確定申告の、ウィリアムのいたずらの、
年間の収入の(所得じゃないんだぜ、収入だぜ、つーか、売り上げなんだけどさあ)の、
一番上の(一番上なんだぜ;_;)の桁、百万の位の数字という意味と、
→(つまり、去年の年収は、2百万円台だった(>_<!)
(物理構造)
・確定申告申告用紙の表1のうえから、何センチ、右から何センチのところ
という2つの意味がある。
物理構造がないと、表示できないし、論理構造がないと、1文字ごとしか修正できない(し、検索できない)。
しかし、XMLは、親は1つしか持てない。さあ、どうする(>_<!)
■■ XMLにおける解決法
そこで、XMLにおいては、基本的に論理構造を持つことにしている。
(論理構造に基づき、タグを振る)
物理構造は、論理構造から生成する。
生成できない物理構造が存在する箇所だけ、論理構造内にタグとして記述する。
理由は、物理構造を持つほうが、不利になるからだ。
論理構造は、その構造を、どこの位置に、どのように表現するかという情報があれば、展開して、物理情報を生成できる。
そのために、物理構造に関しては、XSLにどの論理構造(タグ)を、どう物理的に表現するかさえ記載しておけば、それをもとに物理構造タグを生成し(XalanなどのXSLTを使い、物理構造を記述したFOを生成し)、それを(FOPなどで)出力すればいい。
一方、物理構造から論理構造を生成するのは、非常に複雑になる。。。
というのが1つの理由
もうひとつは、ワンソース、マルチユースを実現する場合(DTPでの表現、プログラム的には、ライトワンス、あれ、なんていったっけ??Javaでいわれることなんだけど・・・)。
たとえば、物理構造のページ
紙ならいいけど、Webのページとは意味違うぞ、ケータイのページって?
っていうことになってしまう。
そこで、論理構造で記述しておき、物理構造は、出力メディアごとにXSLを切り替えて、それぞれの出力デバイスにみあった物理構造データを生成し、表示する。
これを実装したのが、cocoonっていうことになる。
って、ここまで読んできて、
いまさらあたりまえのこと、なんで書いてるんだ、その程度のことわかってるよ!
とたぶん、読者のみなさまは、お怒りになっていると思います。
はい、すみません。次に書きたいことが本題なんですけど。。
なおさらすみません。もう、長くなりすぎたので、本題は、次回でーす(^^)
(思いっきり、石なげつけられそうなオチだ ^^;)