REC-DOM-Level-1-19981001


附属書H 編集上の備考

DOM規定は,XMLを用いる利点を示す良い例となる。 XMLソースファイルの一つの集合から,HTML文書,Java結合,OMG IDL結合及びECMAScript結合のすべてを生成できる。 附属書Hでは, この規定をXMLでどのように書くか,及び様々な派生する作業がどのように生成するかを概説する。

H.1. 文書型定義

この規定は,XML規定のためにXML作業グループが用いたDTDに基づくDTDを使用し,XMLですべてを記述した。 XML作業グループが用いたDTDとこの規定のためのDTDとの間の主たる相違は,インタフェース規定のためのDTDモジュールを追加したことである。

インタフェース規定のためのDTDモジュールは,OMG IDL構文の拡張Backus-Naur形式(Extended Backus-Naur Form,以降EBNF)規定から XML DTD構文へのごく大雑把な翻訳となる。 翻訳に加えて,インタフェースを記述する機能も追加し,インタフェース定義のための限定した文芸的プログラミングを生成した。

このDTDモジュールは,DOM WGの目的には十分だが,型付けは非常に緩くなっている。これは,型規定に関する制約が非常に少ないことを意味する。 (型情報は,実際には,非透過な文字列として扱う。) オブジェクト間通信のためのDTDにおいては,データ型により厳密な制約を課した方が有用となる。

H.2. 作成課程

DOM規定は,XMLを用いて書く。 全文書は,XML妥当とする。 この規定のHTML版,オブジェクト索引,Javaソースコード,並びに OMG IDL及びECMAScript定義を作成するためには,XML規定を変換する

現在の変換に使用するツールは,Joe EnglishによるCOSTとする。 COSTは,nsgmlsのESIS出力を用い内部表現を生成し,スクリプト及びイベントハンドラが内部データ構造の上で動作可能とする。 イベントハンドラは,文書パタン及び関連する処理の規定を可能にする。 文書部分木の前順序走査中にパタンが一致した場合,関連する動作が実行される。 これが,変換処理の中心となる。 スクリプトは,様々な構成要素をまとめるために使用する。 例えば, (Javaコードなどの)主な派生するデータソースは,それぞれ,スクリプトの実行によって生成され, 次に,それが一つ以上のイベントハンドラを起動する。 スクリプト及びイベントハンドラは,TCLを用いて指定する。

COSTの現在の版は,公開版から多少修正した。 特に,現在では,32ビットWindowsで正しく動作し,TCL 8.0を使用し, XMLの大文字・小文字の区別を正しく処理する。 (ただし,現地言語のマーク付けは,恐らく正しく処理できない。)

James ClarkによるJadeも使用できただろう。 COSTと同様に,Jadeは,パタン及び動作を指定できる。 しかし,Jadeは,国際規格であるDSSSLに基づいている。 一方,COSTは,DSSSLには基づいていない。 Jadeは,COSTよりも多くの点で強力だが,編集者は以前にCOSTを使用したことがあるので,JadeよりもCOSTを使うほうが容易だった。 DOM規定の将来の版又は水準は,Jade又はXSL処理系を使用して作成するかもしれない。

完全なXMLソースファイルは,http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/xml-source.zipで入手可能である。

H.3. オブジェクト定義

既に述べたとおり,すべてのオブジェクト定義は,XMLで規定する。 Java結合,OMG IDL結合及びECMAScript結合は,すべて,XMLソースコードから自動的に生成される。

これは,XMLで規定する情報が,これら他の構文が必要とするものの上位集合となるので可能性となる。 これは一般的なことなので,同種の技法が多くの他の分野に適用できる。 すなわち,豊富な構造を与えれば,豊富な処理及び変換が可能となる。 Java及びOMG IDLに対しては,基本的には,構文キーワードの名前を付け直すことに過ぎない。 ECMAScriptに対しては,多少の追加処理が含まれる。

XMLでの典型的なオブジェクト定義は,次に類似したものとなる。

<interface name="foo">
  <descr><p>ここに記述を書く...</p></descr>
  <method name="bar">
    <descr><p>ここに記述を書く...</p></descr>
    <parameters>
      <param name="baz" type="DOMString" attr="in">
        <descr><p>ここに記述を書く...</p></descr>
      </param>
    </parameters>
    <returns type="void">
       <descr><p>ここに記述を書く...</p></descr>
    </returns>
    <raises>
       <!-- Throws no exceptions -->  
    </raises>
  </method>
</interface>
容易に分かるとおり,これは冗長だが,OMG IDLに似ている。 実際,XMLを用いるために規定を最初に変換したとき,OMG IDL定義は,通常のUnixテキスト操作ツールを使用して対応するXMLソースに自動的に変換された。