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 のような接尾辞で役割を明確にしています。
.moduleINCLUDE、そうでないときは 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 を表します。