内容
本節は参考的。
XHTML モジュールと一般的なモジュール化の方法論を定義することの、最初の目的は、 XHTML に基づく文書型の開発を容易にすることだ。 これらの文書型は、追加的な能力(すなわち、 [SMIL])を統合することで XHTML を拡張して良く、また特定のデバイスで用いる XHTML のサブセットを定義しても良い。 本節は、このモジュール化アーキテクチャの XML DTD 実装の優位性を利用するために、文書型設計者が使わなければならない技術について述べている。 それは、本質的に異なるモジュールから完全な文書型を創り上げるところで最高潮に達するような、漸次的により複雑化する方法で、 XHTML モジュール化技術を適用することで実行される。
これらの例で、 XHTML 提供モジュール ファイル実体 自身の修正を要求する場合は全くないことに注意されたい。 XHTML モジュール・ファイル実体は、完全にパラメタ化されており、その結果、個別のモジュール定義と ドライバ・ファイルを通して、個々の要素とその階層について、定義と内容モデルをカスタマイズすることが出来る。
最後に、XHTML のほとんどのユーザは DTD 作者であると 期待されない ということを覚えておいてください。 DTD 作者は一般に、可読性を改善しようと特殊なマークアップを定義し、文書の演出を単純化し、あるいは文書の機械処理を容易化する人であり、あるいは、彼らはその特定のクライアント専用の DTD を定義する必要のあるクライアント・デザイナーです。これらの場合を考慮してください:
ある組織が、ウェブ・インタフェース経由で加入者の情報を提供する。 この組織は XML に基づいたデータ・ベースにその加入者情報を格納している。 この情報をデータ・ベースからウェブへ報告する一つの方法は、 XHTML 文書にデータ・ベースからの XML レコードを直接埋め込むことである。 レコードを単に埋め込むことが可能ならば、この組織はそのレコードについて記述する DTD モジュールを定義し、XHTML DTD にそのモジュールを付け加え、そのページの為の完全な DTD を作成できるだろう。 このとき、組織は、その新しい要素内のデータに、ドキュメント・オブジェクト・モデル [DOM] を通してアクセスし、ドキュメントを妥当性検証し、カスケーディング・スタイル・シート [CSS2] を用いて継承する要素のスタイル定義を提供することなどができる。 本節に定義されたプロセスを使用して、自分のデータ構造を定義し、 DTD を作成するための時間をかけることによって、この組織は、 XML の十分な利点を実現することができる。
あるインターネット・クライアント開発者が、専門のデバイスを設計する。 そのデバイスは、 XHTML サブセットのサポートしかできず、また、デバイスは常に、クライアントへ渡す前にコンテンツを妥当性検証する Proxy サーバーを通して、インターネットにアクセスするものとする(クライアント上のエラーの扱いを最小限にするため)。 コンテンツが妥当であることを確かにするために、開発者は、本節に定義されたプロセスを使用して、XHTML のサブセットである DTD を作成する。 その後、彼らは Proxy サーバーおよびデバイスにおいて新しい DTD を使用し、さらに、コンテンツ開発者に対して、かれらが自分のコンテンツを利用可能にする前に妥当化できるように、その DTD を利用可能にする。 わずかの単純なステップの実行によって、クライアント開発者は、彼らの DTD 開発費を大幅に緩和し、かつ 彼らが取り込むことに決めた XHTML のサブセットを全面的にサポートすることを保証するために、この文書に定義されたアーキテクチャーを使用することができる。
ある場合には、 XHTML の拡張が、追加属性と同じくらい単純になり得る。 属性は、要素の追加属性リスト宣言を指定するだけで、その要素に加えることができる、例えば:
<!ATTLIST %a.qname; %MyModule.pfx;myattr CDATA #IMPLIED %MyModule.xmlns.extras.attrib; >
上の例は、 "%MyModule.pfx" で定義されるオプションの接頭辞を持ち、属性値が CDATA である "myattr" 属性を、 "a" 要素に追加するだろう。 これが働くのは、 XML が、 DTD 中の任意の場所で、要素の属性リストの定義や拡張を許すからである。 限定名 (qualified names) および名前空間接頭辞の議論に関しては、モジュールの名前空間の定義を参照せよ。
当然ながら、 DTD に属性を加えることは、任意のクライアントのための、如何なる新しい挙動も、定義されることを意味しない。 しかしながら、コンテンツ開発者は、(例えば)ドキュメント・オブジェクト・モデルを通して関連するスクリプトによって、アクセスされる情報を格納するために、余分な属性を利用することが出来るだろう。
追加要素の定義は、定義する追加属性より、ほんのわずか複雑である。基本的に、 DTD 作者は、各要素に要素宣言を書くべきである:
<!-- In the qname sub-module --> <!ENTITY % MyModule.myelement.qname "%MyModule.pfx;myelement" > <!ENTITY % MyModule.myotherelement.qname "%MyModule.pfx;myotherelement" > <!-- In the declaration sub-module --> <!ELEMENT %MyModule.myelement.qname; ( #PCDATA | %MyModule.myotherelement.qname; )* > <!ATTLIST %MyModule.myelement.qname; myattribute CDATA #IMPLIED > <!ELEMENT %MyModule.myotherelement.qname; EMPTY >
要素が定義された後、それらを、内容モデルへ統合する必要がある。内容モデルへ新しい要素あるいは要素のセットを統合するための戦略は、次のセクション中で扱われている。
XHTML モジュールの内容モデルは完全にパラメタ化されているので、 DTD 作者は全てのモジュールの中の全ての要素のための内容モデルを修正して良い。 DTD モジュール・インタフェースの詳細は DTD モジュールの構築 の中で定義されている。 基本的に、この修正には2つの方法がある:
この得られた戦略は、結合したモジュールの性質、および統合された要素の性質に依存するだろう。 このセクションの残りは、モジュールの2つの異なるクラスの統合のために技術について記述している。
モジュール(また、モジュールは他のモジュールの集合であり得ることを思い出せ)が、お互いをそれらの内容モデルで参照するだけの要素しか含んでいないとき、このモジュールは「内部完成 ("internally complete") 」と言われる。 そのようなときは、モジュールは単独で使用することができる;(例えば、そのモジュールそのものであり、ルート要素としてその要素のうちの1つを使用する DTD を定義することができるだろう)。 XHTML へそのようなモジュールを統合することは、3段階のプロセスである:
上で定義された要素を付け加えることを考える。 その例においては、要素 myelement はルートである。 この要素を、 XHTML の img 要素の下、即ち img 要素だけに付け加えるために、下記は働くだろう:
<!ENTITY % img.content "( %MyModule.myelement.qname; )*">
この内容モデルで定義された DTD は、次の断片のような文書を許すだろう:
<img src="..."> <myml:myelement >This is content of a locally defined element</myml:myelement> </img>
img
要素が、通常は内容モデル EMPTY
を持っていることに注目することが重要である。
その内容モデルに myelement を加えることによって、私たちは、実際に EMPTY
を myelement
で単に置き換えている。
既に内容モデルを定義する他の要素の場合には、要素の追加は、 myelement
に加えて、既存の内容モデルを再び述べることを要求するだろう。
このモジュールを %Flow.mix 内容モデルグループが許されるあらゆる場所に付け加えるために、上記の例を拡張することは、以下のようなものを要求するだろう:
<!ENTITY % Misc.extra "| %MyModule.myelement.qname;" >
%Misc.extra 内容モデル・クラスが %Misc.class パラメタ実体の中で使用され、そのパラメーター実体が XHTML モジュールの全体に渡って使用されるので、新しいモジュールは拡張 XHTML 文書型全体に渡って利用可能になるだろう。
本節中のここまでの例は、 XHTML および XHTML の内容モデルを拡張する方法について記述してきた。 一度これが終われば、次の段階は、単体の DTD ドライバーへ DTD を包含するモジュールを集めることであり、結果として、それらが基礎的な XHTML 定義を上書きして拡大するように、新しい定義を適切に組込む。
上記の極単純な例を利用して、 XHTML モジュールを、かなり容易に利用し拡張する、新しい DTD を定義することが可能である。 まず、モジュールの、新しい要素とそれらの内容モデルを定義する:
<!-- File: simpleml-model-1.mod --> <!-- このモジュールで使用される、全ての外部名前空間を定義する パラメタ実体 (PE) を宣言する --> <!-- このモジュールの全ての属性リスト宣言で使われる PE を設定する。 xhtml-qname モジュールで NS.prefixed.attrib が初期化され、 SimpleML DTD ドライバファイルで SimpleML.ns.noprefix.attrib が期化される。--> <!ENTITY % SimpleML.xmlns.attrib "%NS.decl.attrib;" > <!ENTITY % SimpleML.Common.attrib "%SimpleML.xmlns.attrib; id ID #IMPLIED" > <!ENTITY % SimpleML.element.qname "%SimpleML.pfx;element" > <!ENTITY % SimpleML.otherelement.qname "%SimpleML.pfx;otherelement" > <!ELEMENT %SimpleML.element.qname; ( #PCDATA | %SimpleML.otherelement.qname; )* > <!ATTLIST %SimpleML.element.qname; myattribute CDATA #IMPLIED %SimpleML.Common.attrib; > <!ELEMENT %SimpleML.otherelement.qname; EMPTY > <!ATTLIST %SimpleML.otherelement.qname; %SimpleML.Common.attrib; > <!ENTITY % SimpleML.img.myattr.qname "%SimpleML.pfx;myattr" > <!ATTLIST %img.qname; %SimpleML.img.myattr.qname; CDATA #IMPLIED > <!-- XHTML 内容モデルに我々の要素を追加する --> <!ENTITY % Misc.class "| %SimpleML.element.qname;" > <!-- ここで XHTML Basic 内容モデルに持ち込む --> <!ENTITY % xhtml-basic-model.mod PUBLIC "-//W3C//ENTITIES XHTML Basic 1.0 Document Model 1.0//EN" "http://www.w3.org/TR/xhtml-basic/xhtml-basic10-model-1.mod" > %xhtml-basic-model.mod;
次に、新しい言語のための DTD ドライバを定義する:
<!-- file: simpleml-1_0.dtd --> <!-- XHTML データ型に持ち込む --> <!ENTITY % xhtml-datatypes.mod PUBLIC "-//W3C//ENTITIES XHTML Datatypes 1.0//EN" "http://www.w3.org/TR/xhtml-modularization/DTD/xhtml-datatypes-1.mod" > %xhtml-datatypes.mod; <!-- このモジュールのための有効な名前空間を宣言する --> <!ENTITY % SimpleML.xmlns "http://www.example.com/xmlns/simpleml1" > <!-- デフォルトでは、新しいモジュールの接頭辞は利用不可 --> <!ENTITY % NS.prefixed "IGNORE" > <!ENTITY % SimpleML.prefixed "%NS.prefixed;" > <!-- モジュールの要素と属性のデフォルト接頭辞 --> <!ENTITY % SimpleML.prefix "simpleml" > <!-- このモジュールの名前空間が接頭辞だった場合 --> <![%SimpleML.prefixed;[ <!ENTITY % SimpleML.pfx "%SimpleML.prefix;:" > ]]> <!ENTITY % SimpleML.pfx "" > <![%SimpleML.prefixed;[ <!ENTITY % SimpleML.xmlns.extra.attrib "xmlns:%SimpleML.prefix; %URI.datatype; #FIXED '%SimpleML.xmlns;'" > ]]> <!ENTITY % SimpleML.xmlns.extra.attrib "" > <!ENTITY % XHTML.xmlns.extra.attrib "%SimpleML.xmlns.extra.attrib;" > <!-- 我々の言語の内容モデル設定 --> <!ENTITY % xhtml-model.mod SYSTEM "simpleml-model-1.mod" > <!-- 全ての仕事のための xhtml basic の DTD の実装 --> <!ENTITY % xhtml-basic.dtd PUBLIC "-//W3C//DTD XHTML Basic 1.0//EN" "http://www.w3.org/TR/xhtml-basic/xhtml-basic10.dtd" > %xhtml-basic.dtd;
この DTD を使用する場合、 XML 名前空間接頭辞の使用を可能にすることができる。そうするときは、この新しい DTD を使用する文書の最初は、次のような感じになるかもしれない:
<!DOCTYPE html SYSTEM "simpleml-1_0.dtd" [ <!ENTITY % SimpleML.prefixed "INCLUDE"> ]> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:simpleml="http://www.example.com/xmlns/simpleml1" > <head> <title>デフォルトを使った例</title> </head> <body> <p>ここは XHTML 名前空間内の内容。</p> <simpleml:element> ここは SimpleML 名前空間内の内容 <simpleml:otherelement /> </simpleml:element> <p><img src="missing" alt="画像が出ない" simpleml:myattr="value"/></p> </body> </html>
次に、 XHTML(あるいは XHTML のサブセット)に完全で、付加的で、複雑なモジュールが追加される場合がある。 本質的には、これは上記の極単純な例と同じ物であり、追加されるモジュールのただ一つの違いは、DTD に明示的に新しい定義を含むのではなく、参照によって DTD に組み込まれることである。
そのような複雑なモジュールの1つは [MATHML] のための DTD である。 単一の DTD へ MathML と XHTML を組み合わせるために、作者は、 MathML 内容が文書内のどこで有効であるべきかを単に決定して、 MathML ルート要素をその場所で内容モデルに単に追加するだろう。 まず、 MathML DTD を実装し、それを内容モデルに接続する、内容モデル・モジュールを定義する:
<!-- 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;" >
次に、この DTD の内容モデルとして我々の新しい内容モデル・モジュールを識別し、(例えば) XHTML 1.1 ドライバに処理を受け渡す DTD ドライバを定義する:
<!-- 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;
DTD 作者が XHTML モジュールを利用するかもしれない別の方法は、 XHTML ファミリー文書型のサブセットである DTD を定義することである(例えば、彼らが XHTML のサブセットしかサポートできないデバイスやソフトウェアを構築している場合)。 こうすることは、前の例よりほんのわずかに複雑である。従うべき基本的な手順は次の通り:
例えば、 XHTML モジュールは利用できるが、フレームと表は除くデバイスを考えてみる。そのようなデバイスのための DTD はこのようになるだろう:
<!-- File: xhtml-simple.dtd --> <!ENTITY % xhtml-form.module "IGNORE" > <!ENTITY % xhtml-table.module "IGNORE" > <!ENTITY % xhtml-table.module "IGNORE" > <!-- 基本表モジュールを持ち込む --> <!ENTITY % xhtml-basic-table.mod PUBLIC "-//W3C//ELEMENTS XHTML Basic Tables 1.0//EN" "http://www.w3.org/TR/xhtml-modularization/DTD/xhtml-basic-table-1.mod" > %xhtml-basic-table.mod; <!ENTITY % xhtml11.mod PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd" > %xhtml11.mod;
XHTML 1.1 DTD の内容モデルは実際には修正していないことに注意せよ。しかしながら、 XML は定義されていない内容モデルの要素は無視するので、 form 要素と table 要素は内容モデルから自動的に落とされる。
最後に、何人かの DTD 作者は、新しいマークアップ言語の構築のためのツールキットとして XHTML Modularization フレームワークを使用して、全くゼロから出発したいと思うかもしれない。 この言語は、 XHTML の、最小、必須のモジュールから構成されるに違いない。 さらに、それは、作者が使用したい、他の XHTML 定義のモジュールや、他の何かのモジュールも含んでいるかもしれない。 この例において、我々は XHTML を必須モジュールにとり、幾つかの XHTML 定義のモジュールを追加し、さらに、私たちが上に定義したモジュールに追加することにする。
最初の手順は、我々の新しい要素のための限定名 (qualified name) と名前空間を定義するために修正された、新しい限定名モジュール (qualified name module) のための、 XHTML で提供される template を利用することである。
<!-- file: myml-qname-1.mod --> <!-- データタイプの持込 - xmlns 属性宣言のために、 URI.datatype パラメタ実体 (PE) を使う。 --> <!ENTITY % MyML-datatypes.mod PUBLIC "-//W3C//ENTITIES XHTML Datatypes 1.0//EN" "http://www.w3.org/TR/xhtml-modularization/DTD/xhtml-datatypes-1.mod" > %MyML-datatypes.mod; <!-- デフォルトで、このモジュールの接頭辞使用不可 --> <!ENTITY % NS.prefixed "IGNORE" > <!ENTITY % MyML.prefixed "%NS.prefixed;" > <!-- このモジュールの実際の名前空間の宣言 --> <!ENTITY % MyML.xmlns "http://www.example.com/xmlns/myml" > <!-- このモジュールのデフォルト接頭辞の宣言 --> <!ENTITY % MyML.prefix "myml" > <!-- このモジュールの名前空間が接頭辞だった場合 --> <![%MyML.prefixed;[ <!ENTITY % MyML.pfx "%MyML.prefix;:" > ]]> <!ENTITY % MyML.pfx "" > <!-- このモジュールで利用される 任意の名前空間を定義するパラメタ実体 (PE) の宣言 --> <!ENTITY % MyML.xmlns.extra.attrib "" > <!-- MyML で利用するための xmlns 属性を定義する PE の宣言 --> <![%MyML.prefixed;[ <!ENTITY % MyML.xmlns.attrib "xmlns:%MyML.prefix; %URI.datatype; #FIXED '%MyML.xmlns;' %MyML.xmlns.extra.attrib;" > ]]> <!ENTITY % MyML.xmlns.attrib "xmlns %URI.datatype; #FIXED '%MyML.xmlns;' %MyML.xmlns.extra.attrib;" > <!-- MyML 名前空間属性が XHTML に含まれることを 確実にする --> <![%NS.prefixed;[ <!ENTITY % XHTML.xmlns.extra.attrib "%MyML.xmlns.attrib;" > ]]> <!ENTITY % XHTML.xmlns.extra.attrib "" > <!-- ここで要素名を宣言する --> <!ENTITY % MyML.myelement.qname "%MyML.pfx;myelement" > <!ENTITY % MyML.myotherelement.qname "%MyML.pfx;myotherelement" >
次に、 template で提供される XHTML を用いて、要素と属性を定義するモジュールを定義する。
<!-- ...................................................................... --> <!-- My Elements Module ................................................... --> <!-- file: myml-elements-1_0.mod PUBLIC "-//MY COMPANY//ELEMENTS XHTML MyML Elements 1.0//EN" SYSTEM "http://example.com/DTDs/myml-elements-1_0.mod" xmlns:myml="http://example.com/DTDs/myml-1_0.dtd" ...................................................................... --> <!-- My Elements Module myelement myotherelement このモジュールは、或る PCDATA 内容を構造に与える以外の目的は全くない --> <!ELEMENT %MyML.myelement.qname; ( #PCDATA | %MyML.myotherelement.qname; )* > <!ATTLIST %MyML.myelement.qname; myattribute CDATA #IMPLIED %MyML.xmlns.attrib; > <!ELEMENT %MyML.myotherelement.qname; EMPTY > <!ATTLIST %MyML.myotherelement.qname; %MyML.xmlns.attrib; > <!ENTITY % MyML.img.myattr.qname "%MyML.pfx;myattr" > <!ATTLIST %img.qname; %MyML.img.myattr.qname; CDATA #IMPLIED %MyML.xmlns.attrib; > <!-- myml-elements-1_0.mod 終了 -->
ここで、他の XHTML 要素へ、新しい要素と属性を引っ掛ける内容モデル記述を構築せよ。次の例は、 XHTML Basic の内容モデルにならって作られているが、完全な独立している内容モデル・モジュールである:
<!-- ...................................................................... --> <!-- MyML Model Module ................................................... --> <!-- file: myml-model-1.mod PUBLIC "-//MY COMPANY//ELEMENTS XHTML MyML Model 1.0//EN" SYSTEM "http://example.com/DTDs/myml-model-1_0.mod" xmlns:myml="http://www.example.com/xmlns/myml" ...................................................................... --> <!-- Misc.extra の内容モデルを定義 --> <!ENTITY % Misc.class "| %MyML.myelement.qname; "> <!-- .................... インライン要素 ...................... --> <!ENTITY % HeadOpts.mix "( %meta.qname; )*" > <!ENTITY % I18n.class "" > <!ENTITY % InlStruct.class "%br.qname; | %span.qname;" > <!ENTITY % InlPhras.class "| %em.qname; | %strong.qname; | %dfn.qname; | %code.qname; | %samp.qname; | %kbd.qname; | %var.qname; | %cite.qname; | %abbr.qname; | %acronym.qname; | %q.qname;" > <!ENTITY % InlPres.class "" > <!ENTITY % Anchor.class "| %a.qname;" > <!ENTITY % InlSpecial.class "| %img.qname; " > <!ENTITY % Inline.extra "" > <!-- %Inline.class; includes all inline elements, used as a component in mixes --> <!ENTITY % Inline.class "%InlStruct.class; %InlPhras.class; %InlPres.class; %Anchor.class; %InlSpecial.class;" > <!-- %InlNoAnchor.class; は全ての非アンカーインラインを含み、 混成時に部品として使われる --> <!ENTITY % InlNoAnchor.class "%InlStruct.class; %InlPhras.class; %InlPres.class; %InlSpecial.class;" > <!-- %InlNoAnchor.mix; は全ての非アンカーインラインを含む。 --> <!ENTITY % InlNoAnchor.mix "%InlNoAnchor.class; %Misc.class;" > <!-- %Inline.mix; 全てのインライン要素を含み、 %Misc.class; も含む。 --> <!ENTITY % Inline.mix "%Inline.class; %Misc.class;" > <!-- ..................... ブロック要素 ...................... --> <!ENTITY % Heading.class "%h1.qname; | %h2.qname; | %h3.qname; | %h4.qname; | %h5.qname; | %h6.qname;" > <!ENTITY % List.class "%ul.qname; | %ol.qname; | %dl.qname;" > <!ENTITY % BlkStruct.class "%p.qname; | %div.qname;" > <!ENTITY % BlkPhras.class "| %pre.qname; | %blockquote.qname; | %address.qname;" > <!ENTITY % BlkPres.class "" > <!ENTITY % Block.extra "" > <!-- %Block.class; は全てのブロック要素を含み、 混成時に部品として使われる。 --> <!ENTITY % Block.class "%BlkStruct.class; %BlkPhras.class; %BlkPres.class; %Block.extra;" > <!-- %Block.mix; 全てのブロック要素と %Misc.class; を含む --> <!ENTITY % Block.mix "%Heading.class; | %List.class; | %Block.class; %Misc.class;" > <!-- ................ 全内容要素 .................. --> <!-- %Flow.mix; 葉全てのテキスト内容、ブロック及びインラインを含む --> <!ENTITY % Flow.mix "%Heading.class; | %List.class; | %Block.class; | %Inline.class; %Misc.class;" > <!-- pre 要素の特殊な内容モデル --> <!ENTITY % pre.content "( #PCDATA | %Inline.class; )*" > <!-- myml-model-1.mod 終了 -->
最後に、新しい DTD のために XHTML に提供される template を用い、我々の新しいマークアップ言語のための適切な修正を受ける:
<!-- ....................................................................... --> <!-- MYML DTD ............................................................. --> <!-- file: myml-1_0.dtd --> <!-- これは myml 1.0. のための DTD ドライバである。 これを識別するために、次の公式公開識別子を使われたい: "-//MY COMPANY//DTD XHTML MYML 1.0//EN" myml-unique 要素のために、次の名前空間を使われたい: xmlns:myml="http://www.example.com/xmlns/myml" --> <!ENTITY % XHTML.version "-//MY COMPANY//DTD XHTML MYML 1.0//EN" > <!-- 文書プロファイルでの利用のために予約 --> <!ENTITY % XHTML.profile "" > <!-- qname ドライバとして我々の限定名モジュールを使うように フレームワークに命じる --> <!ENTITY % xhtml-qname-extra.mod SYSTEM "myml-qname-1.mod" > <!-- 利用するフレームワークの内容モデルを定義 --> <!ENTITY % xhtml-model.mod SYSTEM "myml-model-1.mod" > <!-- 双方向テキストサポート不可 --> <!ENTITY % XHTML.bidi "IGNORE" > <!-- XHTML フレームワークを持ち込む --> <!ENTITY % xhtml-framework.mod PUBLIC "-//W3C//ENTITIES XHTML Modular Framework 1.0//EN" "http://www.w3.org/TR/xhtml-modularization/DTD/xhtml-framework-1.mod" > %xhtml-framework.mod; <!-- 基本テキストモジュール(必須) ............................... --> <!ENTITY % xhtml-text.mod PUBLIC "-//W3C//ELEMENTS XHTML Basic Text 1.0//EN" "http://www.w3.org/TR/xhtml-modularization/DTD/xhtml-text-1.mod" > %xhtml-text.mod; <!-- ハイパーテキストモジュール(必須) ................................. --> <!ENTITY % xhtml-hypertext.mod PUBLIC "-//W3C//ELEMENTS XHTML Hypertext 1.0//EN" "http://www.w3.org/TR/xhtml-modularization/DTD/xhtml-hypertext-1.mod" > %xhtml-hypertext.mod; <!-- リストモジュール(必須) .................................... --> <!ENTITY % xhtml-list.mod PUBLIC "-//W3C//ELEMENTS XHTML Lists 1.0//EN" "http://www.w3.org/TR/xhtml-modularization/DTD/xhtml-list-1.mod" > %xhtml-list.mod; <!-- My Elements モジュール ........................................ --> <!ENTITY % MyML-elements.mod SYSTEM "myml-elements-1.mod" > %MyML-elements.mod; <!-- XHTML 画像モジュール ........................................ --> <!ENTITY % xhtml-image.mod PUBLIC "-//W3C//ELEMENTS XHTML Images 1.0//EN" "http://www.w3.org/TR/xhtml-modularization/DTD/xhtml-image-1.mod" > %xhtml-image.mod; <!-- 文書メタ情報モジュール ............................ --> <!ENTITY % xhtml-meta.mod PUBLIC "-//W3C//ELEMENTS XHTML Metainformation 1.0//EN" "http://www.w3.org/TR/xhtml-modularization/DTD/xhtml-meta-1.mod" > %xhtml-meta.mod; <!-- 文書構造モジュール(必須) ....................... --> <!ENTITY % xhtml-struct.mod PUBLIC "-//W3C//ELEMENTS XHTML Document Structure 1.0//EN" "http://www.w3.org/TR/xhtml-modularization/DTD/xhtml-struct-1.mod" > %xhtml-struct.mod;
一度新しい DTD が開発されれば、如何なる文書中でも用いることが出来る。 DTD の利用は、文書の DOCTYPE 宣言中でこれを参照するだけと言う単純なものである:
<!DOCTYPE html SYSTEM "myml-1_0.dtd" > <html xmlns="http://www.w3.org/1999/xhtml" > <head> <title>デフォルト利用の例</title> </head> <body> <p>ここは XHTML 名前空間の内容。</p> <myelement> ここは SimpleML 名前空間の内容。 <myotherelement /> </myelement> <p><img src="missing" alt="画像が見つからない" myattr="value"/></p> </body> </html>
この文書は、 XHTML 名前空間の外部で、それらを接頭辞化することで、要素を利用することもまた出来る:
<!DOCTYPE html SYSTEM "myml-1_0.dtd" [ <!ENTITY % MyML.prefixed "INCLUDE" > ]> <html xmlns="http://www.w3.org/1999/xhtml" > <head> <title>デフォルト利用の例</title> </head> <body> <p>ここは XHTML 名前空間の内容。</p> <myml:myelement> ここは myml 名前空間の内容。 <myml:myotherelement /> </myml:myelement> <p><img src="missing" alt="画像が見つからない" myml:myattr="value" /></p> </body> </html>
この邦訳は、私 SUGAI, Manabu が私的な勉強のために作成したものです。訳文の正確さは保証できません。特に技術的な利用においては、 W3C の原典を参照してください。
last modified: 20th/Aug./2001; Translated by SUGAI, Manabu.