[1] 【XHTMLモジュール】 名前空間属性の属性並び宣言での定義を入れる引数実体。
[2] ここいらは随分込み入った神業が使われてて分かりにくいんですが、、、。
まずとりあえず、 XHTML モジュールの作り方の流れについて
XHTML//名前空間
を参照。
で、関係する部分だけまとめると、
[3] 説明のまえに、 XHTML m12n の DTD の注意すべき組み立て方の特性・制限を幾つか挙げておきます。
>>4 ではややこしいことは考えずに、 XHTML + MathML + SVG 式のやり方を説明します。
[4] {修飾名モジュール} まず、個々のモジュールのそれぞれの名前空間の属性の属性並び宣言を用意します。 例: <!ENTITY % MODULE1.xmlns.decl.attrib "xmlns:MODULE1 %URI.datatype; #FIXED 'http://1.example/'">, <!ENTITY % MODULE2.xmlns.decl.attrib "xmlns %URI.datatype; #FIXED 'http://2.example/'">
追加の名前空間を簡単に追加できるように placfolder も用意しておきます。 <!ENTITY % MODULE1.xmlns.extra.attrib "">
{修飾名モジュール} 次に、引数実体 NS.decl.attrib
を定義しておきます。
ここには使える接頭辞名前空間属性
(xmlns
を除いた、
xmlns:*
) を入れておきます。
<!ENTITY % NS.decl.attrib "%MODULE1.xmlns.decl.attrib;%MODULE1.xmlns.extra.attrib;%MODULE2.xmlns.extra.attrib;">
もっとも、これは optional で、 XHTML m12n 附属書の説明にも特に書いてありません。普通 DTD 駆動器で宣言しちゃうので。でもまあ既定値として書いといて損はないでしょう。
{修飾名モジュール} 引数実体 MODULE1.xmlns.attrib
を定義します。ここには xmlns
属性の定義 (必要なら。) と、 NS.decl.attrib
の参照を書いときます。
<!ENTITY % MODULE2.xmlns.attrib "%MODULE2.xmlns.decl.attrib;%NS.decl.attrib;">
{宣言モジュール} 全ての要素型の属性並び宣言で、
MODULE.xmlns.attrib
を参照します。
<!ATTLIST %MODULE1.etype.qname; attr1 CDATA #IMPLIED %MODULE1.xmlns.attrib;>
これによってこの要素の属性で名前空間属性が使えるようになるというわけです。
[5] で、 DTD 駆動器モジュールでは必要に応じてこれを上書きするんです。 ところが宣言順序の関係から、 ほとんど全部再定義する羽目になっちゃいます。。。 この辺は DTD を無理矢理モジュール化して使う無理さが滲み出まくってます。
{DTD 駆動器モジュール} 名前空間属性を宣言 : 修飾名モジュールと同じことをします。
{DTD 駆動器モジュール} NS.decl.attrib
を定義 : 必須。
ここですべての名前空間の宣言を全部入れちゃいます。
(前述の通り >>6 は無視の方向で。)
XHTML + MathML + SVG では単なる xmlns
属性も気にせずここに入れちゃってます
(たぶん >>6 を無視すれば気にする必要がないということでしょう)。
<!ENTITY % NS.decl.attrib "%MODULE1.xmlns.decl.attrib; %MODULE1.xmlns.decl.attrib; %MODULE2.xmlns.decl.attrib; %MODULE2.xmlns.decl.attrib;">
{DTD 駆動器モジュール} MODULE.xmlns.attrib
を定義 : 前述。
これは普通に定義してあれば再定義する必要はないかも。