# 6 `xml.dom` -- 文書オブジェクトモデル (DOM) API

バージョン 2.0 で 新たに追加 された仕様です。

文書オブジェクトモデル、または ``DOM'' は、ワールドワイドウェブ コンソーシアム (World Wide Web Consortium, W3C) による、XML ドキュメントにアクセスしたり変更を加えたりするための、プログラミング 言語間共通の API です。DOM 実装によって、XML ドキュメントは ツリー構造として表現されます。また、クライアントコード側で ツリー構造をゼロから構築できるようになります。さらに、 前述の構造に対して、よく知られたインタフェースをもつ一連の オブジェクトを通したアクセス手段も提供します。

DOM はランダムアクセスを行うアプリケーションで非常に有用です。 SAX では、一度に閲覧することができるのはドキュメントのほんの 一部分です。ある SAX 要素に注目している際には、別の要素をアクセス することはできません。またテキストノードに注目しているときには、 その中に入っている要素をアクセスすることができません。 SAX によるアプリケーションを書くときには、プログラムがドキュメント内の どこを処理しているのかを追跡するよう、コードのどこかに記述する 必要があります。SAX 自体がその作業を行ってくれることはありません。 さらに、XML ドキュメントに対する先読み (look ahead) が必要だと すると不運なことになります。

アプリケーションによっては、ツリーにアクセスできなければ イベント駆動モデルを実現できません。もちろん、何らかのツリーを SAX イベントに応じて自分で構築することもできるでしょうが、 DOM ではそのようなコードを書かなくてもよくなります。 DOM は XML データに対する標準的なツリー表現なのです。

文書オブジェクトモデルは、W3C によっていくつかの段階、W3C の用語で 言えば ``レベル (level)'' で定義されています。 Python においては、 DOM API への対応付け は実質的には DOM レベル 2 勧告に基づいています。 現在はドラフト形式でのみ入手できる レベル 3 仕様への対応付けは、 Python XML 分科会 (Special Interest Group) により、 PyXML パッケージ の一部として 開発中です。 DOM レベル 3 サポートの現在の状態についての情報は、 PyXML パッケージに同梱されているドキュメントを参照してください。

DOM アプリケーションは、普通は XML を DOM に解析するところから始まり ます。どのようにして解析を行うかについては DOM レベル 1 では全く カバーしておらず、レベル 2 では限定的な改良だけが行われました: レベル 2 では`Document` を生成するメソッドを提供する `DOMImplementation` オブジェクトクラスがありますが、 実装に依存しない方法で XML リーダ(reader)/パーザ(parser)/文書ビルダ (Document builder) にアクセスする方法はありません。また、既存の `Document` オブジェクトなしにこれらのメソッドにアクセスする ような、よく定義された方法もありません。 Python では、各々の DOM 実装で `getDOMImplementation()` が定義されているはずです。 DOM レベル 3 ではロード(Load)/ストア(Store) 仕様が追加され、リーダの インタフェースにを定義していますが、Python 標準ライブラリではまだ 利用することができません。

DOM 文書オブジェクトを生成したら、そのプロパティとメソッドを使って XML 文書の一部にアクセスできます。これらのプロパティは DOM 仕様で定義されています; 本リファレンスマニュアルでは、 Python において DOM 仕様がどのように解釈されているかを記述しています。

W3C から提供されている仕様は、 DOM API を Java、ECMAScript、および OMG IDL で定義しています。ここで定義されている Python での対応づけは、 大部分がこの仕様の IDL 版に基づいていますが、厳密な準拠は必要と されていません (実装で IDL の厳密な対応付けをサポートするのは自由 ですが)。API への対応付けに関する詳細な議論は 8.6.3 、 ``適合性'' を参照してください。

参考:

Document Object Model (DOM) Level 2 Specification
  Python DOM API が準拠している W3C 勧告。

Document Object Model (DOM) Level 1 Specification
  `xml.dom.minidom` でサポートされている W3C の DOM に関する勧告。

PyXML
  完全な機能をもった DOM 実装を必要とするユーザは PyXML パッケージを利用すべきです。

Python Language Mapping Specification
  このドキュメントでは OMG IDL から Python への対応付けを 記述しています。