DOMDOMとは、Document Object Model の略で、プラットフォームやプログラム言語に依存しない XML文書の標準的なプログラミングインターフェイスを定義した仕様を指します。
つまり、プログラム中からXML文書にアクセスする際のインターフェイスが DOMです。XML文書へのアクセスインターフェイスが標準化されていることにより、プログラムの再利用化、移植が容易になる便利さを持っています。
参考資料
http://www.w3.org/DOM/ W3C Document Object Model (DOM)
XMLは、「パーサ」と呼ばれる読み込みプログラムを利用することにより、DOMツリー構造で XML文書をメモリ上に展開することができます。DOM」と呼びます。DOMでメモリ上に展開された 。XMLデータは、DOMの標準的な API でアクセスすることが可能になります。XMLデータをメモリ上でオブジェクトとして管理し、標準的な API でアクセスすることにより、アプリケーションの部品化が進み、また、複数のアプリケーション間でプログラムを容易に流用することができるようになります。
DOMには、DOM1、DOM2、そして DOM3 までが W3C によって勧告されています。DOM1で用意されているインターフェイスには、Core と呼ばれる部分と、HTML と呼ばれる2種類があります。CoreXMLと HTMLのオブジェクトで共通的に利用できる基本インターフェイスと、XMLのオブジェクトのみで利用できる拡張インターフェイスの2種類があります。HTMLHTMLのオブジェクトのみで利用できる高水準のインターフェイスが用意されています。DOM2仕様は実際には、Core、View、Event、Style、Traversal と Range、HTML という別々の6つのインターフェイスを持った勧告となっています。DOM3仕様では、Core、Load&Save、Validation、Event、XPath などのインターフェイスが勧告されています。DOM1 を中心に解説しています。古くて申し訳ありません、勉強します。)DOM1の Core部分には、基本インターフェイスと拡張インターフェイスの2種類があります。これらのインターフェイスを使って XML文書にアクセスし、文書の内容を参照したり、操作することができます。XMLと HTMLのオブジェクトで共通に利用できるインターフェイスで、以下の表の通りです。| Interface | 内容 |
| DocumentXML | 文書全体のルートを示すオブジェクトを操作する。 |
| DocumentFlagment | ツリー構造のルートを示すオブジェクトを操作する。 |
| DOMImplementation | XML宣言を操作する。 |
| Comment | コメント文を示すオブジェクトを操作する。 |
| Node | ツリー構造中の単一のツリー部分を示すオブジェクトを操作する。 |
| NodeList | 同じ階層上のノードの集合を示すオブジェクトを操作する。 |
| Element | 要素を示すオブジェクトを操作する。 |
| Atrr | 要素の属性を示すオブジェクトを操作する。 |
| NamedNodeMap | 要素の中の属性の集合を示すオブジェクトを操作する。 |
| Text | 要素の内容や属性の値を示すオブジェクトを操作する。 |
| CharacterData | 要素の内容や属性の値の文字列を操作する。 |
XMLのオブジェクトのみで利用できるインターフェイスを提供するもので、以下の表のインターフェイスがあります。| Interface | 内容 |
| CDATASectionCDATA | セクションを示すオブジェクトを操作する。 |
| ProcessingInstruction | 処理命令を示すオブジェクトを操作する。 |
| DocumentTypeDTD | DTDを示すオブジェクトを操作する。 |
| Notation | 記法宣言を示すオブジェクトを操作する。 |
| Entity | エンティティ宣言を示すオブジェクトを操作する。 |
| EntityReference | エンティティ参照を示すオブジェクトを操作する。 |
XML文書を DOMの API で扱いたい場合、まず、Documentオブジェクトの生成と、XML文書の読み込みを行う必要があります。XML文書の内容はあらかじめファイルで作成しておく方法と、JavaScript の中で作成する方法があります。特に、マイクロソフトの「Internet Explorer」で JavaScriptを使用する場合、ActiveXサーバを生成するための処理を記述します。
ver Documentオブジェクト名=
new ActiveXObject("ActiveサーバのプログラムID");
ActiveXサーバのプログラムIDでは、「Microsoft XMLDOM」が割り当てられます。JavaScriptでは、そのプログラムの中で、あらかじめ作成された XML文書を読み込む方法があります。XML文書の読み込み
ver 戻り値 = Documentオブジェクト名.load(XML文書の URI);
true (読み込み成功)、false (読み込み失敗) となる。
var retNumber = magazineinfoDocument.load('magazineinfo.xml");
if (retNumber != true) {
window.alert("magazineinfoDocument Load Error!");
}
magazineinfo.xml といったような読み込みさせたい XML文書のファイルを指定し、読み込みが成功すると、XML文書はツリー構造でメモリ上に展開されます。
ただし、読み込まれた XML文書を Webブラウザで表示させたい場合には、XML以外に、HTML、XSL などのファイルが別途必要となります。
HTML文書がメインとなり、JavaScriptの関数を呼び出すことで、XML文書と XSLスタイルシートの読み込みと表示が行われている流れの様子を示したものです。JavaScriptを利用した documentオブジェクトの生成サンプルを用意したいと思います。Documentオブジェクトは、XML文書全体のツリー構造のルートオブジェクトになります。XML文書を操作する場合には、まず、Documentオブジェクトから操作することになります。Documentオブジェクトから参照する場合、その文書が XML文書なのか、あるいは HTML文書なのかという文書の種別とバージョンを確認する方法について述べます。DOMImplementationオブジェクトの参照処理を行い、次に DOMImprementationオブジェクトのテスト処理を行います。var DOMImplementationオブジェクト名 = Documentオブジェクト名.implementation;
var 戻り値 = DOMImplementationオブジェクト名.
hasFeature("文書種別","バージョン");
hasFeature では、戻り値の文書種別が「XML」で、versionが「1.0」であれば1を返します。このテストで、文書の種別が特定できます。
var DOMImplementationObject = DocumentObject.implementation;
var RetNumber = DOMImplementationObject.hasFeature("XML","1.0");
if (RetNumber != true ) {
window.alert("magazineinfoImplement Error!");
}
Documentオブジェクトでは、DTD(文書型定義)に記述されているルート要素の名前や、エンティティ宣言、記法宣言の内容を参照することができます。DocumentTypeオブジェクトの参照処理を行い、次に DTDのルート要素の名前の参照処理を行います。DocumentTypeオブジェクトの参照
var DocumentTypeオブジェクト名 = Documentオブジェクト名.doctype;
DTDのルート要素の名前の参照
var ルート要素名 = DocumentTypeオブジェクト名.name;
var DocumentTypeObject = DocumentObject.doctype; var RootElementName = DocumentTypeObject.name;
DocumentTypeオブジェクトから参照処理を行った後に、エンティティ宣言のリストの参照処理を行います。NamedNodeMapオブジェクトによって参照処理を行います。var NamedNodeMapオブジェクト名 = DocumentTypeオブジェクト名.entities;
var システム識別子 =
NamedNodeMapオブジェクト名.item(マップの位置).systemId;
var 公開識別子 =
NamedNodeMapオブジェクト名.item(マップの位置).publicId;
var 記法名 =
NamedNodeMapオブジェクト名.item(マップの位置).notationName;
var DocumentTypeObject = DocumentObject.doctype; var NamedNodeMapObject = DocumentTypeObject.entities; var SystemId = NamedNodeMapObject.item(0).systemId; var PublicId = NamedNodeMapObject.item(0).publicId; var NotationName = NamedNodeMapObject.item(0).natationName;
NamedNodeMapオブジェクトを利用して、記法宣言のリストの参照処理を行います。最後に、システム識別子や公開識別子の参照処理を行います。
var NamedNodeMapオブジェクト名 =
DocumentTypeオブジェクト名.notations;
var DocumentTypeObject = DocumentObject.doctype; var NamedNodeMapObject = DocumentTypeObject.notations; var SystemId = NamedNodeMapObject.item(0).systemId; var PublicId = NamedNodeMapObject.item(0).publicId;
Documentオブジェクトから、ルート要素の名前を参照するには、ルート要素のオブジェクトの参照処理を行った後に、ルート要素の名前の参照処理を行います。
var Elementオブジェクト名 =
Documentオブジェクト名.documentElement;
var ルート要素名 = Elementオブジェクト名.tagName;
var ElementObject = DocumentObject.documentElement; var RootElementName = ElementObject.tagName;
| オブジェクト | 内容 |
| DOMImplementation | インターフェイスとは、ドキュメントオブジェクトモデルの特定のインスタンスに依存しない処理を実行するための多くのメソッドをアプリケーションに提供します。 |
| DocumentType | DOM Level1Coreでの DocumentTypeインタフェースは文書のために定義されたエンティティのリストへのインターフェースを提供します。 |
| NamedNodeMap | NamedNodeMapインターフェースを実装しているオブジェクトは、名前によりアクセスすることができるノードの集合体を表わすために使われます。 |
| Element | Elementインターフェースにはルート要素、及びルート要素で示される Attr(属性)オブジェクトを名前によって取り出したり、属性の値を名前で取り出すためのメソッドを提供しています。 |
Nodeオブジェクトについて(未完)