HITP 広島工業大学専門学校

ホームページの基礎(1. XHTML 編)

← 1.12 ブロックとインライン  目 次  1.14 DTDの読み方(要素編の復習) →

  1. 1.13 DTDの読み方(要素編)
    1. 1.13.1 要素の定義
    2. 1.13.2 要素名
    3. 1.13.3 内容モデル
    4. 1.13.4 パラメータ実体参照

1.13 DTDの読み方(要素編)

DTDにもいろいろな種類がありますが,ここではXHTML 1.0 のstrict.dtdを例に説明を進めることにします。

1.13.1 要素の定義

DTDでの要素定義は,まずは「<!ELEMENT」で始まる部分を探します。見つかれば,その部分は,次の形式で記述されています。

<!ELEMENT 要素名 内容モデル>

これまで学習してきた要素の例を以下に示します。

<!ELEMENT p %Inline;>

<!ELEMENT h1 %Inline;>
<!ELEMENT h2 %Inline;>
<!ELEMENT h3 %Inline;>
<!ELEMENT h4 %Inline;>

<!ELEMENT h5 %Inline;>
<!ELEMENT h6 %Inline;>

<!ELEMENT br EMPTY>

<!ELEMENT em %Inline;>
<!ELEMENT strong %Inline;>
<!ELEMENT dfn %Inline;>
<!ELEMENT code %Inline;>
<!ELEMENT samp %Inline;>

<!ELEMENT kbd %Inline;>
<!ELEMENT var %Inline;>
<!ELEMENT cite %Inline;>
<!ELEMENT abbr %Inline;>
<!ELEMENT acronym %Inline;>
<!ELEMENT q %Inline;>
<!ELEMENT sub %Inline;>
<!ELEMENT sup %Inline;>

1.13.2 要素名

要素名で指定されたものがタグを指定する場合の名前となります。

1.13.3 内容モデル

内容モデルは,その要素が持つことができる他の要素を定義します。もし,内容モデルに「EMPTY」と記述されている場合は,その要素は,空要素であることを意味します。つまり,EMPTY以外の指定がある場合,その要素は,必ず開始タグと終了タグを持つことになる訳です。

<!ELEMENT br EMPTY>

EMPTY以外の内容モデルは,以下の書式で定義されます。

書式意味
a a要素を必ず1個持つ(必須ということ)ことを意味します。
a? a要素を0個または1個持つ(オプションということ)ことを意味します。
a+ a要素を必ず1個以上持つ(必須ということ)ことを意味します。
a* a要素を0個以上持つ(任意ということ)ことを意味します。
a , b a要素の次にb要素が出現することを意味します。
a | b a要素とb要素が任意の順序で出現することを意味します。
#PCDATA 解析対象となる文字列を意味します。

解析対象文字列(#PCDATA)とは,タグその他の文字列を含んだもので,もし,それがタグであれば要素と解釈し,そうでなければ単純な文字列と解釈される文字列を意味します。例えば,

<p>abc<em>123</em>def</p>

の場合,最初に全体が解析対象となりp要素として解析されます。次にその内容「abc<em>123</em>def」が解析され,次のように解釈されます。

abcem要素def

そのため,em要素の部分を要素ではなく文字列「<em>123</em>」と表示したい場合,実体参照と呼ばれるものを使用します。

文字実体参照
&lt;
&gt;
&amp;
&quot;
&apos; (XHTMLのみ)

つまり,次のようなコードになります。

<p>abc&lt;em&gt;123&lt;/em&gt;def</p>

この場合は,「abcem要素def」ではなく,「<em>123</em>」のようにタグと解釈せずに単純な文字列として解釈されます。

1.13.4 パラメータ実体参照

これまでの要素のうちbr要素以外の内容モデルは,「%Inline;」と指定されています。これはパラメータ実体参照と呼ばれるものです。このパラメータ実体参照は以下のようなルールで記述されています。

%実体名;

これによって実体名を参照し,そこで指定されている置換テキストに置き換えて定義されます。このパラメータ実体参照の置換テキスト定義は「<!ENTITY」を探します。

<!ENTITY % 実体名 "置換テキスト">

例えば,「%Inline;」のパラメータ実体参照の置換テキスト定義を探すと,次のように定義されています。

<!ENTITY % Inline "(#PCDATA | %inline; | %misc;)*">

これにより,内容モデルには,解析対象文字列(#PCDATA),パラメータ実体参照(%inline; と %misc)が任意の順序で0回以上記述できることを意味します。いま,%misc; を無視して残りの%inline;を探すと次のようになります。

<!ENTITY % inline "a | %special; | %fontstyle; | %phrase; | %inline.forms;">

同様に%special; と %phrase;を探して,残りの部分を無視すると次のようになります。

<!ENTITY % special "br | span | bdo | object | img | map">
<!ENTITY % phrase "em | strong | dfn | code | q | sub | sup |
                   samp | kbd | var | cite | abbr | acronym">

これを逆に置き換えて行くと%Inline;は次のように置き換えられます(なお,無視した部分は含んでいません)。

<!ENTITY % Inline "(#PCDATA | br | span | bdo | object |
                   img | map | em | strong | dfn | code | q | sub | sup |
                   samp | kbd | var | cite | abbr | acronym)*">

このようにDTDを読むことにより,p要素,見出し要素のそれぞれの内側にp要素,見出し要素が記述できないことも分かります。

(C)Copyright 2010 HIROTAKA.YAMASHITA. HITP 広島工業大学専門学校. All Rights Reserved.