3. DTD の読み方

since: 30th/Aug./2001; last modified: 30th/Aug./2001

本節は、最初は読まないうほうが良いでしょう。自分で文書型を作成したくなったら、必要になります。

Contents

  1. DTD ドライバ
  2. Image Module の取り込み
  3. パラメタ実体
  4. パラメタ実体の接尾辞
  5. 要素タイプ宣言と属性宣言

DTD ドライバ

XHTML 1.1 は、 Modularization of XHTML に基づいて構築されています。

具体的には、 Modularization of XHTML で定義されているモジュールを適当に選んで組み合わせることで、文書型を定義しています。従って、 XHTML 1.1 DTD は、既存のモジュールの参照のリストです。このような DTD を、 Modularization of XHTML では、DTD ドライバと呼んでいます。

Image Module の取り込み

例えば、文書へ画像を埋め込む要素タイプ img 要素に対応する DTD ドライバの断片は次のようになっています:

<!-- Image Module  ............................................... -->
<!ENTITY % xhtml-image.module "INCLUDE" >
<![%xhtml-image.module;[
<!ENTITY % xhtml-image.mod
     PUBLIC "-//W3C//ELEMENTS XHTML Images 1.0//EN"
            "http://www.w3.org/TR/xhtml-modularization/DTD/xhtml-image-1.mod" >
%xhtml-image.mod;]]>

一行目の <!-- から --> まではコメント部分です。後続の内容が Image Module に付いて記述していることを補足説明しています。

二行目の %xhtml-image.module; は、当該のモジュールを取り込むか、無視するかを定義する変数です。一般にパラメタ実体と呼びます。値が "INCLUDE" となっているのは、取り込むことを意味しています。

三行目から、取り込むモジュールの定義が始まっています。

四行目からは、取り込むモジュールを表すパラメタ実体の定義です。パラメタ実体は %xhtml-image.mod; です。

五行目と六行目が、 %xhtml-image.mod; の識別子です。五行目は公開識別子で、六行目がシステム識別子です。

通常モジュールはファイル単位で存在し、 URI で参照することが出来ます。このディレクトリ内にも Image Module のファイルをコピーしてありますので、参照してください(ファイル)。

パラメタ実体

上で挙げた例では、二つのパラメタ実体が登場しました。

%xhtml-image.module;
xhtml-image モジュールを取り込むかどうか定義するパラメタ実体。取り込む場合は INCLUDE で、そうでない場合は IGNORE
%xhtml-image.mod;
xhtml-image モジュールを表すパラメタ実体。

そして、これらのパラメタ実体の内容を表現する書式として、 DTD では次のように記述します:

<!ENTITY % xhtml-image.module ...>
<!ENTITY % xhtml-image.mod ...>

DTD ではパラメタ実体が頻出しますが、上記の規則は普遍的です。

%*.module は、モジュールの取り込みを管理するパラメタ実体であり、 %*.mod は、モジュールを表現するパラメタ実体です。

そしてパラメタ実体 (%PE.suffix;) は、次のように内容を定義されます:

<!ENTITY % PE.suffix ...>

パラメタ実体の接尾辞

パラメタ実体は、 .module.mod のような接尾辞で役割を明確にしています。

.module
当該モジュールを取り込むかどうか管理する。内容は IGNORE と INCLUDE のみで、取り込むときは INCLUDE、そうでないときは IGNORE
.mod
DTD モジュールを表す。
.qname
名前空間内で、更に要素を特定するために用いる要素の名前を定義する。要素タイプ宣言はこの実体パラメタを用いる。
.content
当該要素タイプの内容モデルを定義する。要素タイプ宣言では、内容モデルはこの実体パラメタを用いる。
.class
複数の要素タイプを便宜的に分類したときの集合。
.mix
複数の .class に含まれる要素タイプの集合。
.attrib
属性リスト宣言中で用いる、複数の属性定義の集合。
.element
モジュール中で用いられ、当該要素が定義する要素タイプを取り込むかどうか管理する。値は .module と同じ。
.attlist
モジュール中で用いられ、当該要素の属性宣言を取り込むかどうか管理する。値は .module と同じ。

要素タイプ宣言と属性宣言

モジュールでは、要素タイプと属性が宣言されます。

要素タイプ宣言

一般に、要素タイプ宣言は、次のように始まり、

<!ENTITY % img.element  "INCLUDE" >
<![%img.element;[

終了は次のように示される:

<!-- end of img.element -->]]>

内容も記述すると、次のようになります:

<!ENTITY % img.element  "INCLUDE" >
<![%img.element;[
<!ENTITY % img.content  "EMPTY" >
<!ENTITY % img.qname  "img" >
<!ELEMENT %img.qname;  %img.content; >
<!-- end of img.element -->]]>

このモジュールは、「 img 要素タイプを定義しており、その内容は空 (EMPTY) である」ことが分かります。

属性宣言

一般に、属性宣言は、次のように始まり、

<!ENTITY % img.attlist  "INCLUDE" >
<![%img.attlist;[
>!ATTLIST %img.qname;

次のように終了する:

>
<!-- end of img.attlist -->]]>

内容も記述すると、次のようになります:

<!ENTITY % img.attlist  "INCLUDE" >
<![%img.attlist;[
<!ATTLIST %img.qname;
      %Common.attrib;
      src          %URI.datatype;           #REQUIRED
      alt          %Text.datatype;          #REQUIRED
      longdesc     %URI.datatype;           #IMPLIED
      height       %Length.datatype;        #IMPLIED
      width        %Length.datatype;        #IMPLIED
>
<!-- end of img.attlist -->]]>

このモジュールは、パラメタ実体 %img.qname; 即ち img 要素タイプの属性が、次のようになると宣言しています:

属性値に許される型
%Common.attrib;
src%URI.datatype;必須
alt%Text.datatype;必須
longdesc%URI.datatype;
height%Length.datatype;
longdesc%Length.datatype;

ここでも実体パラメタが登場しました。 %Common.attrib は、多くの要素に共通に定義されている属性の集合で、実体パラメタ %Core.attrib; + %Events.attrib; + %I18N.attrib; + %Style.attrib; に展開されます。これらの、属性集合を表す実体パラメタは、属性に展開されます。

一方、 %URI.datatype;%Text.datatype; などは、値のデータタイプを定義しています。例えば、 %URI.datatype; は URI を表します。


Copyright © 2001, SUGAI, Manabu. All rights reserved. 著作権は放棄していません。
SEO [PR] !uO z[y[WJ Cu