• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:HTMLの素朴な疑問です。)

HTMLに関する疑問:DOCTYPEとDTDについて

このQ&Aのポイント
  • HTMLのDOCTYPE宣言とDTDについて、特にxhtml-inlpres-1.modとsup要素に関して疑問があります。
  • DOCTYPE宣言で使用されているxhtml-inlpres-1.modというモジュールには、sup要素の定義が含まれています。
  • DTDによって定義されたsup要素では、子要素には文字または%Inline.mixに含まれる要素が0回以上出現でき、属性には%Common.attribに含まれる属性が使えると解釈できます。

質問者が選んだベストアンサー

  • ベストアンサー
  • elttac
  • ベストアンサー率70% (592/839)
回答No.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 は素直に書かれていますので,基本的な事項をこちらで確認なさるとよろしいかと思います。

cyokokichi
質問者

お礼

初歩的な質問にご回答して頂き、ありがとうございます。 >より先に出てきた定義を優先する パラメータ実体定義と呼ばれるものは、JavaScriptなどの変数に値を代入する感覚とは違うんですね。 これですっきりしました。 HTMLのDTDは読みやすかったのですが、XHTMLは解らない部分が多くて苦戦しています。

関連するQ&A