アプリ版:「スタンプのみでお礼する」機能のリリースについて

http://www.wapforum.org/DTD/xhtml-mobile10.dtd
このファイルの中に
<!ENTITY % sub.element "IGNORE">
<!ENTITY % sub.attlist "IGNORE">
<!ENTITY % sup.element "IGNORE">
<!ENTITY % sup.attlist "IGNORE">
<!ENTITY % tt.element "IGNORE">
<!ENTITY % tt.attlist "IGNORE">
<!ENTITY % xhtml-inlpres.mod PUBLIC "-//W3C//ELEMENTS XHTML Inline Presentation 1.0//EN"
"http://www.w3.org/TR/xhtml-modularization/DTD/xh …
%xhtml-inlpres.mod;
の部分があります。

http://www.w3.org/TR/xhtml-modularization/DTD/xh …
では、
<!ENTITY % sup.element "INCLUDE" >
<![%sup.element;[
<!ENTITY % sup.content
"( #PCDATA | %Inline.mix; )*"
>

<!ENTITY % sup.qname "sup" >
<!ELEMENT %sup.qname; %sup.content; >

<!ENTITY % sup.attlist "INCLUDE" >
<![%sup.attlist;[
<!ATTLIST %sup.qname;
%Common.attrib;
>

などと書かれています。
このDTDを使ってホームページを作ったときにsupの子供要素に文字又は%Inline.mixに含まれる要素が0回以上出現でき、supの属性には、%Common.attribに含まれる属性が使えると解釈するのが正しいのでしょうか?

A 回答 (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
は素直に書かれていますので,基本的な事項をこちらで確認なさるとよろしいかと思います。
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/12/30 09:32

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!