XML文書がXML Schemaで定義した構造を正しく反映しているか検証してみます。ここでは、JavaScriptとMSXML 4.0のDOMパーサを使い、XML文書の妥当性をチェックするためのコーディングを紹介します。
カテゴリ | DOM | |
関連要素 | XMLSchemaCacheオブジェクト | |
関連記事 | XML Schemaで単純型要素を定義する XML Schemaで複雑型要素を定義する XML Schemaで属性ノードを定義する |
|
必要なソフトウェア | MSXML 4.0以上 | |
別稿「XML Schemaで複雑型要素を定義する」「XML Schemaで属性ノードを定義する」ではXML Schemaの基本的な構造定義の方法について学んできました。
しかし、定義だけを学んでも、いったいこれがどのような処理に結び付くのか、実際の処理サンプルを示さなかったため、実用性が見えにくかったかもしれません。
XML Schemaは単なる文書定義言語にすぎません。実際にスキーマデータをXML文書と照合し、エラーを出力したり、その後の処理を分岐したりするのは、DOMの役割なのです。
ここではDOMとJavaScriptを利用して、XML SchemaによるXML文書の検証処理を行ってみます。パーサ(解析エンジン)がXML Schemaを解析し、XML文書との照合までを行ってくれるので、従来のように冗長なチェックロジックを書く必要はありません(チェックロジックのためだけに、これまでつらつらとif命令を書き連ねてきた方ならば、その効果のほどは実感をもって感じられるはずです)。
照合の結果、XML文書内にスキーマに合致しない不正なデータが含まれていた場合には、ブラウザにエラーが出力されます。なお、ここでは対象となるXML文書とXML Schemaとして、別稿「XML Schemaで属性ノードを定義する」で用いたbook.xmlとbook.xsdを利用することにします。
このサンプルを実行するにはMSXML 4.0をインストールする必要があります。MSXML 4.0のダウンロードサイトへアクセスし、「ダウンロード」をクリックするとダイアログが開くので、「開く」を選択し指示に従ってインストールします。
[schema.html] |
注目してほしいポイントは、以下の部分です。
var objScm=new ActiveXObject("MSXML2.XMLSchemaCache.4.0"); |
MSXML2.XMLSchemaCacheは、XML Schemaファイルを格納するためのオブジェクトです。new演算子で生成された直後の段階では、単なる空の器だと思っておけばよいでしょう。
その器に対して、スキーマ文書を追加するのがaddメソッドです。第1引数にはスキーマとXML要素とをマッピングするキーを指定します。この場合、book.xmlの<books>要素(xmlns:〜属性)に記述された値に対応します。第2引数にはマッピングするXML Schemaファイル名を指定します。この記述によって、キー“urn:bookList”で定義された要素の配下は、book.xsdのルールに従わなければなりません。
ただし、addメソッドはXML Schema文書単体としての属性を指定しているにすぎません。実際にXML文書と関連付けるのは、DOMDocumentオブジェクトのschemasプロパティです。schemasプロパティにbook.xsdを格納したXMLSchemaCacheオブジェクトをセットしたうえで、book.xmlをロードします。
これでbook.xmlとbook.xsdとのひも付けは完了です。book.xmlは、ロード時に自動的にbook.xsdで検証され、その際のエラー情報はDOMParseErrorオブジェクトに格納されます。あとはerrorCodeプロパティ(エラーコード)が0であるか否かで検証エラーの有無を判定します。エラーコードが“0”でない場合、XML文書には何らかのエラーがあったものと見なして、エラー発生行と発生理由とを出力します。
Copyright © ITmedia, Inc. All Rights Reserved.