DOM
DOM
とは、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種類があります。Core
XML
と HTM
Lのオブジェクトで共通的に利用できる基本インターフェイスと、XML
のオブジェクトのみで利用できる拡張インターフェイスの2種類があります。HTML
HTML
のオブジェクトのみで利用できる高水準のインターフェイスが用意されています。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
オブジェクトについて(未完)