E. 定義されたモジュールと拡張されたモジュールを持つ DTD の開発
(Developing DTDs with defined and extended modules)

内容

本節は参考的

XHTML モジュールと一般的なモジュール化の方法論を定義することの、最初の目的は、 XHTML に基づく文書型の開発を容易にすることだ。 これらの文書型は、追加的な能力(すなわち、 [SMIL])を統合することで XHTML を拡張して良く、また特定のデバイスで用いる XHTML のサブセットを定義しても良い。 本節は、このモジュール化アーキテクチャの XML DTD 実装の優位性を利用するために、文書型設計者が使わなければならない技術について述べている。 それは、本質的に異なるモジュールから完全な文書型を創り上げるところで最高潮に達するような、漸次的により複雑化する方法で、 XHTML モジュール化技術を適用することで実行される。

これらの例で、 XHTML 提供モジュール ファイル実体 自身の修正を要求する場合は全くないことに注意されたい。 XHTML モジュール・ファイル実体は、完全にパラメタ化されており、その結果、個別のモジュール定義と ドライバ・ファイルを通して、個々の要素とその階層について、定義と内容モデルをカスタマイズすることが出来る。

最後に、XHTML のほとんどのユーザは DTD 作者であると 期待されない ということを覚えておいてください。 DTD 作者は一般に、可読性を改善しようと特殊なマークアップを定義し、文書の演出を単純化し、あるいは文書の機械処理を容易化する人であり、あるいは、彼らはその特定のクライアント専用の DTD を定義する必要のあるクライアント・デザイナーです。これらの場合を考慮してください:

E.1. 追加属性の定義 (Defining additional attributes)

ある場合には、 XHTML の拡張が、追加属性と同じくらい単純になり得る。 属性は、要素の追加属性リスト宣言を指定するだけで、その要素に加えることができる、例えば:

<!ATTLIST %a.qname;
      %MyModule.pfx;myattr   CDATA        #IMPLIED
      %MyModule.xmlns.extras.attrib;
>

上の例は、 "%MyModule.pfx" で定義されるオプションの接頭辞を持ち、属性値が CDATA である "myattr" 属性を、 "a" 要素に追加するだろう。 これが働くのは、 XML が、 DTD 中の任意の場所で、要素の属性リストの定義や拡張を許すからである。 限定名 (qualified names) および名前空間接頭辞の議論に関しては、モジュールの名前空間の定義を参照せよ。

当然ながら、 DTD に属性を加えることは、任意のクライアントのための、如何なる新しい挙動も、定義されることを意味しない。 しかしながら、コンテンツ開発者は、(例えば)ドキュメント・オブジェクト・モデルを通して関連するスクリプトによって、アクセスされる情報を格納するために、余分な属性を利用することが出来るだろう。

E.2. 追加要素の定義 (Defining additional elements)

追加要素の定義は、定義する追加属性より、ほんのわずか複雑である。基本的に、 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 >

要素が定義された後、それらを、内容モデルへ統合する必要がある。内容モデルへ新しい要素あるいは要素のセットを統合するための戦略は、次のセクション中で扱われている。

E.3. モジュール集合の内容モデル定義 (Defining the content model for a collection of modules)

XHTML モジュールの内容モデルは完全にパラメタ化されているので、 DTD 作者は全てのモジュールの中の全ての要素のための内容モデルを修正して良い。 DTD モジュール・インタフェースの詳細は DTD モジュールの構築 の中で定義されている。 基本的に、この修正には2つの方法がある:

  1. 各要素の ".content" パラメタ実体の再定義。
  2. 一つ以上のグローバル内容モデル実体の再定義(通常は、 ".extras" パラメタ実体を通して再定義する)。

この得られた戦略は、結合したモジュールの性質、および統合された要素の性質に依存するだろう。 このセクションの残りは、モジュールの2つの異なるクラスの統合のために技術について記述している。

E.3.1. スタンド・アローン・モジュールの XHTML への統合 (Integrating a stand-alone module into XHTML)

モジュール(また、モジュールは他のモジュールの集合であり得ることを思い出せ)が、お互いをそれらの内容モデルで参照するだけの要素しか含んでいないとき、このモジュールは「内部完成 ("internally complete") 」と言われる。 そのようなときは、モジュールは単独で使用することができる;(例えば、そのモジュールそのものであり、ルート要素としてその要素のうちの1つを使用する DTD を定義することができるだろう)。 XHTML へそのようなモジュールを統合することは、3段階のプロセスである:

  1. どの要素が新しいモジュールのルート要素であると考えるのか決定する。(訳注:文書のルート要素自体はもちろん一つでなければならないが、モジュールが定義する「ルート要素」は複数ある場合も考えられる。)
  2. これらの要素が XHTML 内容ツリー (content tree) のどこに付け加えられるのか決定する。
  3. 次に、内容ツリーの付け加えた点に対して、 XHTML 要素の内容定義に、そのルート要素を追加する。

で定義された要素を付け加えることを考える。 その例においては、要素 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 を加えることによって、私たちは、実際に EMPTYmyelement で単に置き換えている。 既に内容モデルを定義する他の要素の場合には、要素の追加は、 myelement に加えて、既存の内容モデルを再び述べることを要求するだろう。

E.3.2. XHTML のモジュール全体にわたった新しいモジュールの混合 (Mixing a new module throughout the modules in XHTML)

このモジュールを %Flow.mix 内容モデルグループが許されるあらゆる場所に付け加えるために、上記の例を拡張することは、以下のようなものを要求するだろう:

<!ENTITY % Misc.extra
     "| %MyModule.myelement.qname;" >

%Misc.extra 内容モデル・クラスが %Misc.class パラメタ実体の中で使用され、そのパラメーター実体が XHTML モジュールの全体に渡って使用されるので、新しいモジュールは拡張 XHTML 文書型全体に渡って利用可能になるだろう。

E.4. 新しい DTD の作成 (Creating a new DTD)

本節中のここまでの例は、 XHTML および XHTML の内容モデルを拡張する方法について記述してきた。 一度これが終われば、次の段階は、単体の DTD ドライバーへ DTD を包含するモジュールを集めることであり、結果として、それらが基礎的な XHTML 定義を上書きして拡大するように、新しい定義を適切に組込む。

E.4.1. 単純な DTD の作成 (Creating a simple DTD)

上記の極単純な例を利用して、 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>

E.4.2. 拡張 XHTML による DTD の作成 (Creating a DTD by extending XHTML)

次に、 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;

E.4.3. XHTML モジュールの削除、交換による DTD の作成 (Creating a DTD by removing and replacing XHTML modules

DTD 作者が XHTML モジュールを利用するかもしれない別の方法は、 XHTML ファミリー文書型のサブセットである DTD を定義することである(例えば、彼らが XHTML のサブセットしかサポートできないデバイスやソフトウェアを構築している場合)。 こうすることは、前の例よりほんのわずかに複雑である。従うべき基本的な手順は次の通り:

  1. 新しい文書型(我々は XHTML 1.1 を使用するだろう)の基礎として XHTML ファミリー DTD をとる。
  2. その DTD から削除するモジュールを選ぶ。
  3. そのモジュールを「無視する ("IGNOREs")」新しい DTD を定義する。
  4. 幾つかの新しいモジュールを導入する。

例えば、 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 要素は内容モデルから自動的に落とされる。

E.4.4. 新しい DTD の作成 (Creating a new DTD)

最後に、何人かの 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;

E.5. 新しい DTD の利用 (Using the new DTD)

一度新しい 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.

SEO [PR] !uO z[y[WJ Cu