DTDを読んでみましょう

DTDは何故必要か

私達がHTML文書を書く上で、文字列毎全てに適切な要素を割り当て、マークアップをしていますが、実は、そこには元となる規則 (W3Cが定めた文書型定義)が存在しているのです。HTMLのDTDに書いてある事が一番正確なHTMLの仕様書でもあるからです。

そのDTD(文書型定義)は幾つかのルールを覚えれば読めない事もありません。 (以下 HTML 4.01 Transitional について話を進めます。)

DTDは何処にあるの

URI:http://www.w3.org/TR/1999/PR-html40-19990824/ にアクセスしてみてください。 「W3C HTML 4.01 Specification」 が開きます。
「Quick Table of Contents」の「22.Transitional Document Type Definition」 を開いてみましょう。

はじめにHTMLの基本構造が示してあります。1行目は、DTD文書型指定で、ここでは、HTML 4.01 Transitional英語版を指定しています。 2行目は、その文書型の外部フアイル参照です。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
            "http://www.w3.org/TR/html40/loose.dtd">
    <html>
    <head>
    ...
    </head>
    <body>
    ...
    </body>
    </html>

DTDの内容

HTMLのDTDは、多数の宣言から構成されています。その内容は、 どんな構成要素があるのか 要素の出力順序、出現回数 要素の親子関係 の定義などから成り立っています。

DTDの構成

ページをダウンして眺めると、矢鱈と[<!ENTITY %...]が並んでいます。これは、「パラメータ実体定義」と言いまして、 属性や値の名称(実体名)を定義している部分です。これが、要素や属性の説明段階で、「パラメータ実体参照」により繰り返し、 繰り返し参照されることになります。

そこで、DTDの構成は、「パラメータ実体定義」「要素宣言」「属性宣言」の3つから構成されていると言うことができます。 1/4程経過した、<!--===== Document Body =====-->から、各要素の宣言と、その要素に対する属性の宣言があります。 (もう、[<!ENTITY %...]の用語は殆ど見当たらなくなります。) Document Bodyの2つ上の<!--=====Text Markup=====-->欄にも数個の要素記述があります、[br] 要素はその中にあります。 下に[p]要素と[br]要素の記述例を2つ程挙げました。

----------------------------------------------------------------------
<!ELEMENT P - O (%inline;)*         -- paragraph -->
<!ATTLIST P
  %attrs;                              -- %coreattrs, %i18n, %events --
  %align;                              -- align, text alignment --
  >
----------------------------------------------------------------------
<!ELEMENT BR - O EMPTY                 -- forced line break -->
<!ATTLIST BR
  %coreattrs;                          -- id, class, style, title --
  > 
----------------------------------------------------------------------

第1行目は要素の宣言です。

要素の宣言は <!キーワード...>の形で行われます。

  1. 「< 」は開始区切り子です。
  2. キーワードは【!ELEMENT】です。
  3. 次、要素名
  4. 次、開始タグ [-]は必須、[o]は省略可を表します。
  5. 次、終了タグ [-]は必須、[o]は省略可を表します。
  6. 次、要素の定義の最後は「内容モデル」の指定です。
    内容モデル 別途定義された要素型名や実体名を使って、「子の要素」を指定すると共に、どんな順序で何回出現できるかを定義します。 これによって要素の親子関係が決まります。出現順序や回数は下記のような記号(演算子)で表示します。 上記 P 要素のようにパラメータ実体参照を含むものもあります。)
  7. 次、DTD全般に渡って使用される、両端を[--]に囲まれた文字列(-- 文字列 --)は単なるコメントに過ぎず、 DTD の宣言に直接関係ありません。
  8. 行末は「>」で、「要素宣言」が終了します。

「内容モデル」の出現順序、出現回数

第2行目は当該要素に対する属性の宣言です。

属性の宣言は <!キーワード...>の形で行われます。
(パラメータ実体参照から始まるものもあります。)

  1. 「< 」は開始区切り子です。
  2. キーワードは【!ATTLIST】です。
  3. 次、要素名、([!ATTLIST 要素名]で 当該要素が取り得る属性を宣言しています。)

第3行目は各属性の定義です。

上の[p],[br]要素の場合は【%attrs;】とか【%coreattrs;】のように、共に「パラメータ実体参照」で始まっています。 しかし、9割以上が【%attrs;】で始まります。

パラメータ実体参照

キーワードは【%...;】(...は実体名)で、この形で表示されるものを、「パラメータ実体参照」といいます。
[%]はDTD構成の「実体の定義」で既に定義済みのものを参照せよの意味です。リンク機能が付いています。
文字実体参照 &...; 同様,最後のセミコロンは省略可能です。

パラメータ実体参照から導かれる、パラメータ実体の定義

「パラメータ実体参照」の参照先には、「パラメータ実体」が表示されます。
キーワードは【<!ENTITY % ... "...">】です。%から半角スペースをおいて(...)は実体名です。この中でも更にパラメータ実体参照が含まれるものもあり、 次々へと展開されていきます。

「属性の値」と「属性省略時の値」

このシリーズで使用した要素のピックアップ

まとめ

  1. タグはすべて要素宣言、キーワード【!ELEMENT】で定義されています。
    そこで、知りたい要素を探しましょう。
  2. パラメータ実体参照を使って内容を定義するものがありますから、キーワード【%実体名;】が出てきたら、クリックして、 キーワード【!ENTITY % 実体名】 という実体宣言を調べます。
  3. 更に、そこでもまた、実体参照が使われている場合もあります。その時は理解できるまでその実体を遡る必要があります。

トップへ戻る     スタイルシート目次へ戻る
フォームへ戻る     XHTMLへの移行へ進む

inserted by FC2 system