since: 30th/Aug./2001; last modified: 30th/Aug./2001
本節は、最初は読まないうほうが良いでしょう。自分で文書型を作成したくなったら、必要になります。
XHTML 1.1 は、 Modularization of XHTML に基づいて構築されています。
具体的には、 Modularization of XHTML で定義されているモジュールを適当に選んで組み合わせることで、文書型を定義しています。従って、 XHTML 1.1 DTD は、既存のモジュールの参照のリストです。このような DTD を、 Modularization of XHTML では、DTD ドライバと呼んでいます。
例えば、文書へ画像を埋め込む要素タイプ 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;
INCLUDE
で、そうでない場合は IGNORE
。%xhtml-image.mod;
そして、これらのパラメタ実体の内容を表現する書式として、 DTD では次のように記述します:
<!ENTITY % xhtml-image.module ...> <!ENTITY % xhtml-image.mod ...>
DTD ではパラメタ実体が頻出しますが、上記の規則は普遍的です。
%*.module
は、モジュールの取り込みを管理するパラメタ実体であり、 %*.mod
は、モジュールを表現するパラメタ実体です。
そしてパラメタ実体 (%PE.suffix;
) は、次のように内容を定義されます:
<!ENTITY % PE.suffix ...>
パラメタ実体は、 .module
や .mod
のような接尾辞で役割を明確にしています。
.module
INCLUDE
、そうでないときは IGNORE
。.mod
.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 を表します。