[Oracle] XMLTypeへのXML文書の格納 | Archive Redo Blog

Archive Redo Blog

DBエンジニアのあれこれ備忘録

Oracle9iからXMLTypeというデータ型が追加されました。


これは文字通りXML文書を扱うためのデータ型ですが、XMLTypeを使うとXML文書の検証、記憶域の構造化、関数による効率的な操作など、様々な恩恵を受けることができます。


XML文書を単なるテキストではなくXML文書として操作することができるようになります。

XMLSchemaに基づくXMLTypeと基づかないXMLType
このXMLTypeデータには、XMLSchemaに基づくXMLTypeとXMLSchemaに基づかないXMLTypeがあります。
XMLSchemaに基づくXMLType
あらかじめ登録されたXMLSchemaの定義に基づいた検証済みXML文書でないと格納できません。
構造化記憶域と非構造化記憶域(CLOB)を選択することができます。
XMLSchemaに基づかないXMLType
整形式であればどんなXMLでも登録できます。
XML文書全体が1つのCLOBとして格納されます。
構造化記憶域と非構造化記憶域
XML文書を格納する場合、XML文書全体を1つのLOBとして格納する非構造化記憶域を使用するか、XMLSchemaの定義に基づいて格納する構造化記憶域を使用するかを決定しなければなりません。

構造化記憶域と非構造化記憶域には以下のような特徴があります。

構造化記憶域
スキーマの変更に対して柔軟ではない。
元のXML文書のDOM再現性だけが保証される(空白や改行の情報は失われる)。
DML操作、XPath操作のパフォーマンスが良好である。
領域やメモリーの使用量が少ない。
索引や制約を利用することができる。
非構造化記憶域
スキーマの変更に対して柔軟である(どのようなXML文書でも格納できる)。
元のXML文書の再現性が完全に保証される(空白や改行の情報も保持される)。
XML文書全体の取り出しのパフォーマンスが良好である。
大量の領域やメモリーを必要とすることがある。
どのようなXMLTypeを使用するべきか
どのようなXMLTypeを使用するべきかは、扱おうとしているXML文書の性質、そのXML文書をOracle内でどのように扱いたいのかによって違ってきます。

リソース消費量やパフォーマンス面を優先するならば、XMLSchemaに基づくXMLTypeを構造化記憶域に格納した方がいいでしょうが、XML文書の構造が頻繁に変更されるような場合には、柔軟性を優先してあえてXMLSchemaに基づかないXMLTypeを使用した方がいいということもあります。

あるいは、XMLType自体を使わない、つまりはOracle上ではXML文書として扱わないというのもありでしょう。

要は、XMLTypeが有効であると判断すれば使えばいいし、そうでなければ単なるテキストとして扱っても全く問題はないということです。



【関連エントリ】
[Oracle] XMLTypeへのXML文書の格納 2005/08/10
[Oracle] XMLSchemaに基づいたXMLType列を含む表の作成方法 2005/08/15
[Oracle] XMLSchema基づかないXMLType列を含む表の作成方法 2005/08/22
[Oracle] XMLを見やすく整形して出力する方法 2005/12/07