cloudy and rain

UNIXやLINUX、時事放談など気になったことを無作為に書きつらねています。 The topic which becomes matter of concern of UNIX and LINUX and society is written on world wide.

Thursday, August 09, 2007

DTDについて

前回、DTDはライセンスの記述程度なら良いんじゃないかと書きましたが、それというのもDTDは、スキーマの中でも、要素の出現回数だとか、要素定義を外部に参照する程度で柔軟性に乏しい。しかし共通の文書などは出力するのにたいしたスタイルシートは用意したくないので、ドキュメントとしてなら要素の回数や属性でページも管理しやすいだろうと・・。で、実際XHTMLのDTDを見たが、<!ENTITY % 実体名 ”実体”>の中で実体に文字列が書いてあるモノがズラズラ・・。???意味無いんじゃないかなと正直思いました。うーん・・CDATAってねぇ。内容としては要素の間には冗長な文字列が来るのがHTMLだからかまわないんだろうけど、
!--================== Imported Names ====================================-->

%<!ENTITY % ContentType "CDATA">
<!-- media type, as per [RFC2045] -->

<!ENTITY % ContentTypes "CDATA">
<!-- comma-separated list of media types, as per [RFC2045] -->

<!ENTITY % Charset "CDATA">
<!-- a character encoding, as per [RFC2045] -->

<!ENTITY % Charsets "CDATA">
<!-- a space separated list of character encodings, as per [RFC2045] -->

<!ENTITY % LanguageCode "NMTOKEN">
<!-- a language code, as per [RFC3066] -->

<!ENTITY % Character "CDATA">
<!-- a single character, as per section 2.2 of [XML] -->

<!ENTITY % Number "CDATA">
<!-- one or more digits -->

<!ENTITY % LinkTypes "CDATA">
<!-- space-separated list of link types -->

<!ENTITY % MediaDesc "CDATA">
<!-- single or comma-separated list of media descriptors -->

<!ENTITY % URI "CDATA">
<!-- a Uniform Resource Identifier, see [RFC2396] -->%
とこの辺りを見るにつけ、要素に対して実体が共通なのばっかしってやっぱりおかしい。
パラメータで指定する内容じゃない。

DTDは内容には一切関知しない仕様なのにこれじゃアベコベじゃねえか?
<!ELEMENT 要素 パラメータ>として要素指定でやればいいのに。HTMLの変換はdtdの仕事じゃない。ウーン何を目的にxmlを作ろうとしてんだか・・。

XMLをXHTMLとして利用するのに限定しようというのなら、タグがクソいっぱいあるんだから、全部外部で要素として、.modでDTDで呼び出せばいいことで、頭1行で済むハナシじゃねえのかな?これじゃ実際DTDがクソ重いだけジャン。

なんで
<!ENTITY % 実体名
              |実体

              |実体
        
              |実体 


として出力の方はどうせインラインもクソもねえxhtmlだし。

パラメータ実体参照なのに実体が共通でしかも単なる文字列なら、ELEMENTとして外部.modとしてもまったくおなじことだわな。

XHTMLだけの仕様に限っての定義でしょうけど、これじゃカスタマイズもクソもないね。無駄じゃないけど凡庸じゃない上に転用が無理。xmlとしてこれじゃあんまりですな。

DTDは正直言って内容ではなくあくまでも”要素”の指定だけに限った仕様です。
要素の数が多いのに、内容が共通なら指定する意味はありません。当たり前ですよ。要素の内容は文字列がデフォルトですから。混在は一切出来ません。

DTDはルールの規定を定めるモノですが、回数とか出現する順番ですとか、ある条件で出現する要素を決めるとかそういったことしか出来ません。だから単なる文書は良いんですよ。
例えばHTMLの<p>というのはありますが、これは別にその内容がタイトルだろうが、本文だろうが関係ありません。普通なら200字のタイトルとか、一文字の段落なんてありえませんよね?でも拡張に過ぎないXHTMLは結局その結果として、タグの内容に関しては何の制約もありません。順番だけ。
だから、PDFで書式を定めようとか、ある会計フォーマットのみで済むような純粋なドキュメント、それも文字だけの”読み物”なら簡単にxmlからXSLTで加工できます。だから、DTDはXMLが参照するモノではあるけれども、(言い換えればそういうことと同じです。XMLは共通の書式を制定する仕組みですから)複雑で冗長なら、他のスキーマの方が実用的なのはいうまでもありません。
常識で済むようなハナシは定義するだけ無駄だ。ということ。モジュール化すればいいだけなら、実体参照乱用は単に文書を重くするだけです。
悪しき一例として上記をあげました。ホントに何故、.modをつかわんのか不思議です。

何かを参照したんでしょうが、オリジナルをかなりねじ曲げて解釈しています。
逆に考えることはそんなに難しいことでしょうか? 

Powered by ScribeFire.

0 Comments:

Post a Comment

Subscribe to Post Comments [Atom]

<< Home