4. 文書型の作成

since: 31st/Aug./2001; last modified: 1st/Sep./2001

前節に引き続き、本節も最初は読まないほうが良いでしょう。自分で文書型を作成したくなったら、必要になります。

Contents

  1. DTD の開発
  2. MathML との混合
  3. XHTML plus MathML DTD
  4. MathML モジュール

DTD の開発

XHTML 文書において、 XHTML DTD に組み込まれていない要素タイプ、属性を利用したい場合は、次の三つの方法が考えられます:

1. Modularization of XHTML で用意されているモジュールを利用する。
目的のモジュールを取り込むように、 DTD ドライバを自分で定義します。
2. 新しいモジュールを作成し、要素定義、属性宣言を作成する。
DTD モジュールと DTD ドライバを自分で定義します。既存の DTD モジュールを編集することも出来ます。
3. XHTML 以外の XML 文書型(MathML など)を利用する。
文書型宣言を変更するか、名前空間を指定します。このとき、名前空間接頭辞を無効にして、 XHTML 要素と同様に記述することも出来ます。複数の名前空間を組み合わせた文書型を混合文書型と呼びます。

Modularization of XHTML で必須とされているモジュールを取り込んだ文書型は XHTML ファミリー文書型と呼ばれ、 XHTML と同じ名前空間を用います。

DTD 宣言に於ける文書型の識別では、文書型は製作者所有ですから、通常は SYSTEM 識別子で識別することになります。団体の場合は PUBLIC 識別子を用いることも出来ますが、そのときは FPI の命名規則に従います。

MathML DTD と XHTML 1.1 DTD の統合

数式用のマークアップ言語を定義する XML アプリケーションとして、 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 はこの手法で設計されました。

詳細は、次の勧告文書を参照ください:

XHTML 1.1 plus MathML 2.0

W3C から提供されている 「MathML と XHTML 1.1 を混合した文書型」の DTD は、次のように識別されます:

XHTML 1.1 plus MathML 2.0 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 です。

文書実例
表示画像
MathML の画面サンプル: W3C amaya 使用
ファイル

実際に文書を作成するときは、 html 要素の開始タグに XHTML の名前空間を xmlns 属性で与え、 MathML のルート要素である math に MathML の名前空間を与えるのが良いでしょう。

モジュールとしての 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 コアモジュールで果たそうとしているようです。


Copyright © 2001, SUGAI, Manabu. All rights reserved. 著作権は放棄していません。