- ベストアンサー
HTMLに関する疑問:DOCTYPEとDTDについて
- HTMLのDOCTYPE宣言とDTDについて、特にxhtml-inlpres-1.modとsup要素に関して疑問があります。
- DOCTYPE宣言で使用されているxhtml-inlpres-1.modというモジュールには、sup要素の定義が含まれています。
- DTDによって定義されたsup要素では、子要素には文字または%Inline.mixに含まれる要素が0回以上出現でき、属性には%Common.attribに含まれる属性が使えると解釈できます。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
【sup 要素が使えるとすれば】,おおむね質問者様の理解で正しいかと思います。 「%...;」はパラメータ実体参照(PE)といって,「&...;」に似て(まったく同じではありません)名前を別の文字列などに置き換えます。 問題は, - なぜこのようなまだるこしい定義をしているのか - 同じ名前に 2 つ以上の定義があったらどうするのか でしょう。 前者は,たとえば, <!ELEMENT sup (#PCDATA | %Inline.mix;)* > と書けばいいのに,ということです。 これは,複数回の定義で上書きを容易にするためです。どこかで %sup.qname などの定義を書き換えれば,sup 要素相当の要素の種類名が変更されます。おそらく関係する DTD で,これを書き換えている箇所があると思われます。 また,この記法は XHTML を始めとする XML で多用されます。モジュール化を円滑にする手段でもあります。XML の運用において,通常の DTD の記法を超えてしまう部分を,PE を使って巧妙に実現しています。 後者は,これは,「より先に出てきた定義を優先する」というものです。 たとえば,お掲げの DTD 部分では,「%sup.element」が「IGNORE」「INCLUDE」2 回定義されています。ここで,先に出てきたほう,「IGNORE」が有効になります。すると,sup 要素の定義部分は IGNORE のセクションになるので,お掲げの DTD の範囲では,【sup 要素は使用できない】ことになります。 この DTD は,前述のように,モジュール化や XML としての運用のため,複雑な記法になっています。たとえば HTML 4 の DTD http://www.w3.org/TR/html4/strict.dtd は素直に書かれていますので,基本的な事項をこちらで確認なさるとよろしいかと思います。
お礼
初歩的な質問にご回答して頂き、ありがとうございます。 >より先に出てきた定義を優先する パラメータ実体定義と呼ばれるものは、JavaScriptなどの変数に値を代入する感覚とは違うんですね。 これですっきりしました。 HTMLのDTDは読みやすかったのですが、XHTMLは解らない部分が多くて苦戦しています。