since: 31st/Aug./2001; last modified: 1st/Sep./2001
前節に引き続き、本節も最初は読まないほうが良いでしょう。自分で文書型を作成したくなったら、必要になります。
XHTML 文書において、 XHTML DTD に組み込まれていない要素タイプ、属性を利用したい場合は、次の三つの方法が考えられます:
Modularization of XHTML で必須とされているモジュールを取り込んだ文書型は XHTML ファミリー文書型と呼ばれ、 XHTML と同じ名前空間を用います。
DTD 宣言に於ける文書型の識別では、文書型は製作者所有ですから、通常は SYSTEM 識別子で識別することになります。団体の場合は PUBLIC 識別子を用いることも出来ますが、そのときは FPI の命名規則に従います。
数式用のマークアップ言語を定義する XML アプリケーションとして、 MathML と言うものがあります。
-//W3C//DTD XHTML 1.1 plus MathML 2.0//EN
http://www.w3.org/TR/MathML2/dtd/xhtml-math11-f.dtd
http://www.w3.org/1998/Math/MathML
これを同時に用いるたための、いちばん簡単な方法は、 xmlns 属性で名前空間を宣言してしまうことです。次のサンプルでは、「(a + b)
の二乗」を意味するマークアップがされており、 "(a + b)
2
" のように表示されていることが望まれます:
<body> <p> This is a perfect square:</p> <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> <msup> <mfenced> <mrow> <mi>a</mi> <mo>+</mo> <mi>b</mi> </mrow> </mfenced> <mn>2</mn> </msup> </mrow> </math> </body>
上のサンプルでは、 xmlns
属性で名前空間接頭辞を用いませんでした。従って、この属性が与えられた要素内におけるデフォルト名前空間が MathML にセットされたと言うことです。この要素内では、名前空間を示す接頭辞を使用する必要はありませんが、別の場所で MathML を使いたければ、再び名前空間を属性で与える必要があります。
次のように、接頭辞つき xmlns
属性を利用すれば、次のようにすることも出来ます:
<body xmlns:m="http://www.w3.org/1998/Math/MathML"> ... <m:math><m:mrow>...</m:mrow></m:math> ... </body>
上に挙げた二つの方法を、同時に用いることも出来ます:
<body xmlns:m="http://www.w3.org/1998/Math/MathML"> ... <m:math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow>...<mrow> </m:math> ... </body>
ここでは、 DTD 宣言に触れませんでした。以下は MathML からの引用です:
名前空間接頭辞の使用は、 MathML を埋め込む文書の DTD 妥当性検証のための問題を提起します。 DTD 妥当性検証は文書の中で使用されるリテラル(恐らく接頭辞の付いた)要素名を知ることを要求します。しかしながら、名前空間接頭辞が任意の要素に宣言されるかもしれないので、名前空間は文書中の任意のポイントで接頭辞が変更されることを可能にします。
このギャップを埋める「歴史的な」方法は、接頭辞なしで、固定接頭辞を備えた、あるいは XHTML と MathML の場合の DTD を書き、指定された形式が文書の全体にわたって使用されるに違いないと命ずることでした。しかしながら、これは別の DTDと接続する使用を意図されるモジュールの DTD を多少制限します。 これはまさに、 XHTML の中の MathML の状況です。本質的には、 MathML DTD は独力で接頭辞を割り付けなければならないし、名前衝突を回避するためには他のモジュールが同じ接頭辞を使用しないことを望まなければならないし、それにより、 XML 名前空間の主要な利点のうちの1つを失います。
この問題に取り組むための1つの戦略は、 DTD の中で、すべての要素名を実体参照によってアクセスされるようにすることです。これは、 DTD がロードされる前に接頭辞を指定するための 2、3 の実体を宣言することによって、文書作者が接頭辞を選ぶことができることを意味します。また、いくつかのモジュールを含んでいる合成 DTD は、モジュール DTD を変更せずに、衝突を回避するために各モジュールのユニークな接頭辞を指定することができます。 MathML DTD はこの手法で設計されました。
詳細は、次の勧告文書を参照ください:
W3C から提供されている 「MathML と XHTML 1.1 を混合した文書型」の DTD は、次のように識別されます:
W3C//DTD XHTML 1.1 plus MathML 2.0//EN
http://www.w3.org/TR/MathML2/dtd/xhtml-math11-f.dtd
この文書型を用いる場合の DTD 宣言は次のようになります:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 plus MathML 2.0//EN" "http://www.w3.org/TR/MathML2/dtd/xhtml-math11-f.dtd" >
例によって、上記の URI は、この DTD をローカルにコピーした場合は自由に改変可能です。
この DTD では、名前空間接頭辞は無効にされています(DTD 591, 592 行目):
<!ENTITY % NS.prefixed "IGNORE" > <!ENTITY % MATHML.prefixed "%NS.prefixed;" >
従って、この DTD 宣言を用いる文書では、 MathML のマークアップと XHTML 1.1 のマークアップは区別されません。
接頭辞を有効にしたい場合は、 DTD そのものを %MATHML.prefixed "INCLUDE"
のように書き換えても構いませんが、 DTD 宣言で指示することも出来ます:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 plus MathML 2.0//EN" "http://www.w3.org/TR/MathML2/dtd/xhtml-math11-f.dtd" [ <!ENTITY % MATHML.prefixed "INCLUDE"> ]>
このとき、 MathML の名前空間接頭辞は m
です。
表示画像 |
---|
![]() |
ファイル |
実際に文書を作成するときは、 html
要素の開始タグに XHTML の名前空間を xmlns
属性で与え、 MathML のルート要素である math
に MathML の名前空間を与えるのが良いでしょう。
MathML はモジュールとしても提供されています。次の例は、 XHTML のパラメタ実体 %Inlspecial.extra;
に、 MathML ルート要素を追加します:
<!-- File: mathml-model.mod --> <!ENTITY % XHTML1-math PUBLIC "-//W3C//DTD MathML 2.0//EN" "http://www.w3.org/TR/MathML2/dtd/mathml2.dtd" > %XHTML1-math; <!ENTITY % Inlspecial.extra "%a.qname; | %img.qname; | %object.qname; | %map.qname; | %Mathml.Math.qname;" >
次に、このモジュールを XHTML ドライバに受け渡します:
<!-- File: xhtml-mathml.dtd --> <!ENTITY % xhtml-model.mod SYSTEM "mathml-model.mod" > <!ENTITY % xhtml11.dtd PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd" > %xhtml11.dtd;
SYSTEM 識別子が mathml-model.mod
となっていますが、これは相対 URI として適宜変更すべきです。
この xhtml-mathml.dtd
を実際に利用する文書からは、ローカルにコピーした DTD を、 SYSTEM 識別子で識別します。
これは、 XHTML ファミリー文書型を、モジュールの追加により実現する例です。このように、モジュール化 XHTML では、 DTD をモジュールファイルに取り込み、これをドライバから参照して取り込むことが出来ます。結果として、 DTD 開発者は、モジュールファイルや DTD ドライバファイルを修正することなしに、新しい DTD ドライバファイルを作成するだけで、 DTD を開発することができます。
モジュール化されたことによって、文書型定義の作成は簡単になりました。利用できるかどうかは、処理系の実装如何です。 W3C 勧告では、通常の文書製作者として想定されているのは、メーカーの開発者・設計者、団体のデータ管理者などであり、個人の文書製作者ではありません。
XHTML 1.1 は事実上 HTML 4 Strict であり、多くのユーザは不満を持ち、実際の利用に躊躇うでしょう。従って、 WWW ブラウザは、 XHTML 1.1 で取り込まれなかった XHTML モジュールをフルセットでサポートすると同時に、モジュール化のパラメタ実体、ドライバはサポートしないかもしれません。こうなると、文書製作者は、文書型を宣言しないで XHTML モジュールを自由に使うしかないでしょう。
或いは、メーカーは独自の DTD ドライバ・ファイルを作成して公開するかもしれませんし、 W3C もフルセット・モジュールを取り込んだ "Roose DTD", "Frameset DTD" を勧告するかもしれません。
このような将来的な拡張の土台として、 XHTML 1.1 が用意されたとされています。
例えば、携帯端末、 PDA などのためには、 XHTML Basic を基にした文書型が開発、実用化されています。
主要アプリケーションソフトのサポート状況が大勢を決するまでは、個人の文書製作者は、文書型として XHTML 1.0 Transitional 及び XHTML 1.0 Frameset を利用し、目的に応じて MathML などの XML アプリケーションを習得することが望ましいかもしれません。
W3C は、 TeX に対する LaTeX のような状況を理想としているのかもしれません。 W3C では、メーカーの自由度を認め、最低限度の互換性を XHTML コアモジュールで果たそうとしているようです。