「HiRDB Adapter for XMLの機能と特長−定義ファイルによるXMLとデータベースの対応づけ−」に戻る
XMLからデータベースへのマッピングパターン
HiRDB Adapter for XMLでは、柔軟で高度なマッピング機能を提供するため、多種多様なXML文書を扱うことができます。
HiRDB Adapter for XMLのデータベースマッピング機能を利用し、XML文書のデータをRDBのテーブルに格納する場合のパターンをご紹介します。
1.一つのXMLファイルを1レコードに対応させる(1)
2.一つのXMLファイルを1レコードに対応させる(2)
3.ヘッダ情報がなく、エントリ多数
4.ヘッダ情報があり、エントリ多数(1)
5.ヘッダ情報があり、エントリ多数(2)
6.添付ファイルをBLOBカラムに格納する
1.一つのXMLファイルを1レコードに対応させる(1) |
マッピングの特徴
- レコードに対応するタグの内側に、カラムに対応するタグが続きます。タグは属性を持っていません。
マッピング例

マッピングの考え方
-
- TAG1が出現するたびに、ENTRYテーブルにレコードを挿入します。
- TAG1に続くITEM1タグの内容を、該当するレコードのIDカラムに格納します。
- 同じくITEM2タグの内容を、年齢カラムに格納します。
マッピング定義の仕方

|
▲このページの先頭へ |
2.一つのXMLファイルを1レコードに対応させる(2) |
マッピングの特徴
- レコードに対応するタグは、カラムに対応する属性を持っています。
マッピング例

マッピングの考え方
-
- TAG1が出現するたびに、ENTRYテーブルにレコードを挿入します。
- TAG1のid属性を、該当するレコードのIDカラムに格納します。
- 同じくTAG1のage属性を、年齢カラムに格納します。
マッピング定義の仕方

|
▲このページの先頭へ |
3.ヘッダ情報がなく、エントリ多数 |
マッピングの特徴
- 一つのファイルの中に、親子関係のない独立したエントリが多数続きます。
マッピング例

マッピングの考え方
- 1.および2.とマッピングの考え方は同じです。トリガになるタグが出現するたびに、テーブルにレコードを挿入します。
なお、このマッピングでは、ファイルが長くてもメモリ消費量が増えることはありません。
マッピング定義の仕方

|
▲このページの先頭へ |
4.ヘッダ情報があり、エントリ多数(1) |
マッピングの特徴
-
- 一つのファイルの中に,親子関係のない独立したエントリが多数続きます。
- 各レコードに共通に格納したいヘッダ情報があります。ヘッダ情報専用のテーブルはありません。
マッピング例

マッピングの考え方
- itemタグが出現するたびに、ENTRYテーブルにレコードを挿入します。
上位のタグであるitemlistタグをxpointer※で参照し、ヘッダ情報であるshop,date属性の値を取得して対応するカラムに格納します。次に、id,age,jobなどの属性の値を、対応するカラムに格納します。
注※ マッピング定義に記述するタグの属性です。xpointerを使うとDOMツリーが構築されるため、長大なXML文書の処理には適していません。長大なXML文書では、5.で説明するマッピングをお勧めします。
マッピング定義の仕方

|
▲このページの先頭へ |
5.ヘッダ情報があり、エントリ多数(2) |
マッピングの特徴
-
- 一つのファイルの中に、ヘッダ情報と、多数のエントリがあります。
- 各レコードに共通に格納したいヘッダ情報があります。また、ヘッダ情報を専用に格納するためのレコードがあります。
マッピング例

マッピングの考え方
- itemlistタグが出現するたびに、ENTRY_HEADテーブルにレコードを挿入し、shop,date属性の値を対応するカラムに格納します。
次に、その内側のitemタグが出現するたび、子レコードをENTRYテーブルに挿入します。itemlistとの結合キーは親レコードからコピーします。ENTRYテーブルの残りのカラムに、itemタグの属性の値を取得して格納します。 ヘッダ情報は、ヘッダレコードだけに格納、またはヘッダレコードと子レコードの両方に格納のどちらでもかまいません。
マッピング定義の仕方

|
▲このページの先頭へ |
6.添付ファイルをBLOBカラムに格納する |
マッピングの特徴
- XMLファイルの中にヘッダ情報が入っており、添付ファイルがパス名で指定されています。
マッピング例

マッピングの考え方
- 標準提供のユーザ関数コールバックread_from_fileを使用し、パス名に指定されたファイルを取得してBINARY型データに変換します。さらにBLOBカラムに格納します。
マッピング定義の仕方

|
▲このページの先頭へ |
|