Oracle® Fusion Middleware Oracle Data Integrator接続およびナレッジ・モジュール・ガイド 12c (12.1.3) E59387-01 |
|
![]() 前 |
![]() 次 |
この章では、Oracle Data IntegratorでのXMLファイルの使用方法について説明します。
この章には次の項が含まれます:
Oracle Data Integratorでは、Oracle Data Integrator Driver for XMLを介したXMLファイル統合がサポートされます。
XMLの概念は、次のようにOracle Data Integratorの概念にマップされます。1つのXMLファイルは、Oracle Data Integratorの1つのデータ・サーバーに対応します。このデータ・サーバー内で、単一のスキーマがXMLファイルの内容にマップされます。Oracle Data Integrator Driver for XML (XMLドライバ)により、XMLファイルの階層構造がリレーショナル・スキーマにロードされます。このリレーショナル・スキーマは、SQLを使用した問合せまたは変更が可能なスキーマ内にある一連の表です。XMLドライバでは、リレーショナル・スキーマをXMLファイルにアンロードして戻すこともできます。リレーショナル・スキーマは、表、列および制約とともに、ODIでデータ・モデルとしてリバース・エンジニアリングされます。このモデルは、ODI内で通常のリレーショナル・データ・モデルと同様に使用されます。リレーショナル・スキーマ内で変更されたデータをXMLファイルに書き込む必要がある場合は、XMLドライバによりリレーショナル・スキーマをファイルに同期化する機能が提供されています。
このドライバの詳細は、付録B「Oracle Data Integrator Driver for XMLの参照情報」を参照してください。
Oracle Data Integratorには、XMLデータを処理するためのIKM XML Control Appendが用意されています。このナレッジ・モジュールは、固有のXMLナレッジ・モジュールです。これには、リレーショナル・スキーマからファイルへデータを同期化するための固有のオプションが備えられています。
このKM以外に、XMLデータ・サーバーを任意のSQLデータ・サーバーとして使用することもできます。XMLデータ・サーバーでは、SQLデータ・サーバーをソース指定またはターゲット指定するテクノロジ固有のKMと汎用KMの両方がサポートされています。これらのKMの詳細は、第4章「汎用SQL」またはテクノロジの章を参照してください。
XMLナレッジ・モジュールの使用を開始する前に、この項の情報を必ず読んでください。
インストールを実行する前に、システム要件および動作要件のドキュメントを読んで、使用する環境がインストールする製品の最低インストール要件を満たすことを確認する必要があります。
サポートされているプラットフォームおよびバージョンのリストには、次のOracle Technical Network (OTN)からアクセスできます。
http://www.oracle.com/technology/products/oracle-data-integrator/index.html
Oracle Data IntegratorでXMLファイルを使用するためのテクノロジ固有の要件はありません。
この項では、XMLデータベースに接続するための要件をリストします。
Oracle Data Integrator Driver for XML
XMLファイルへのアクセスは、Oracle Data Integrator Driver for XMLを介して行われます。このJDBCドライバはOracle Data Integratorとともにインストールされるもので、その他のコンポーネントのインストールや構成は不要です。
システム管理者から次の接続情報を入手する必要があります。
使用するXMLファイルに関連付けられているDTDまたはXSDファイルの場所
使用するXMLファイルの場所
トポロジの設定には次が含まれます。
各XMLデータ・サーバーは、Oracle Data Integratorにアクセス可能な1つのXMLファイルに対応します。
『Oracle Data Integratorでの統合プロジェクトの開発』のデータ・サーバーの作成に関する項の説明に従って、標準の手順を使用してXMLテクノロジ用のデータ・サーバーを作成します。この項では、ファイル・データ・サーバーの定義に関する必須または固有のフィールドのみについて説明します。
「定義」タブ:
名前: Oracle Data Integratorに表示されるデータ・サーバーの名前。
ユーザー/パスワード: これらのフィールドは、XMLデータ・サーバーでは使用しません。
使用するドライバに応じて、「JDBC」タブに次の値を入力します。
JDBCドライバ: com.sunopsis.jdbc.driver.xml.SnpsXmlDriver
JDBC URL: jdbc:snps:xml?[property=value&property=value...]
表5-1に、Oracle Data Integrator Driver for XMLの主なプロパティをリストします。これらのプロパティは、JDBC URL内で指定できます。
これらのプロパティの詳細、およびすべてのプロパティの包括的なリストは、付録B「Oracle Data Integrator Driver for XMLの参照情報」を参照してください。
表5-1 JDBCドライバのプロパティ
プロパティ | 値 | 説明 |
---|---|---|
f |
<XMLファイルの場所> |
XMLファイル名。パス名には、バックスラッシュ"\"ではなくスラッシュ"/"を使用します。HTTP、FTPまたはファイルのURLを使用してファイルの場所を示すことができます。URLによって示されたファイルは読取り専用です。 |
d |
<DTD/XSDファイルの場所> |
記述ファイル。このファイルはDTDまたはXSDファイルです。HTTP、FTPまたはファイルのURLを使用してファイルの場所を示すことができます。URLによって示されたファイルは読取り専用です。 DTDまたはXSDファイルが存在しない場合、リレーショナル・スキーマはXMLファイルの内容のみを使用して作成されることに注意してください。DTDまたはXSDに記述されている使用可能な要素が1つのXMLファイル・インスタンスにすべて含まれていないことで、データ・モデルが不完全になる可能性があるため、このような構造からデータ・モデルをリバース・エンジニアリングすることはお薦めしません。 |
re |
<ルート要素> |
スキーマのルート表として選択する要素の名前。この値では大/小文字が区別されます。このプロパティは、WSDLファイルから特定のメッセージ定義をリバース・エンジニアリングする場合や、使用可能なルート要素がXSDファイル内に複数存在する場合などに使用できます。 |
ro |
true | false |
trueの場合は、XMLファイルが読取り専用モードで開きます。 |
s |
<スキーマ名> |
XMLファイルのロード先となるリレーショナル・スキーマの名前。このプロパティが欠落している場合、XMLファイル名の最初の5文字を名前とするスキーマが自動的に作成されます。 |
cs |
true | false |
大/小文字を区別するモードまたは区別しないモードで、XMLファイルがロードされます。区別しないモードの場合は、DTDファイル内のすべての要素名を区別できることが必要です(たとえば、同じファイル内にAbcとabcが存在する場合は、名前の競合が発生します)。 |
これらのプロパティを次の例に示します。
products.xsd
によって説明される、PRODUCTSスキーマ内のPROD20100125_001.xml
に接続する場合の例は次のとおりです。
jdbc:snps:xml?f=/xml/PROD20100125_001.xml&d=/xml/products.xsd&s=PRODUCTS
staff_internal.dtd
によって説明されるstaff_internal.xml
ファイルに読取り専用モードで接続する場合の例は次のとおりです。スキーマ名はstaff
になります。
jdbc:snps:xml?f=/demo/xml/staff_internal.xml&d=/demo/xml/staff_internal.dtd&ro=true&s=staff
XMLデータベースを使用してプロジェクトを設定するには、標準の手順に従います。『Oracle Data Integratorでの統合プロジェクトの開発』の統合プロジェクトの作成に関する項を参照してください。
XMLでの作業を開始するにあたり、使用するプロジェクトに次のナレッジ・モジュールをインポートすることをお薦めします。
LKM SQL to SQL
LKM File to SQL
IKM XML Control Append
この項には次のトピックが含まれます:
XMLファイル・モデルによって、一連のデータストアがグループ化されます。通常、各データストアはXMLファイル内の1つの要素を表します。
『Oracle Data Integratorでの統合プロジェクトの開発』のモデルの作成に関する項の説明に従って、標準の手順を使用してXMLモデルを作成します。XMLテクノロジおよびトポロジの構成時に作成されたXML論理スキーマを選択します。
XMLでは、XMLドライバの機能のみを使用する標準のリバース・エンジニアリングがサポートされています。
URLのdtdまたはdパラメータでDTDまたはXSDファイルを参照して、XMLファイル構造の包括的な説明から構造をリバース・エンジニアリングすることをお薦めします。XSDまたはDTDのいずれも使用できない場合は、XMLインスタンス・ファイルを使用してリバース・エンジニアリングできます。この場合、リレーショナル・スキーマの構造は、XMLファイルに含まれるデータから推測されます。
標準のリバース・エンジニアリング
XMLで標準のリバースエンジニアリングを実行するには、『Oracle Data Integratorでの統合プロジェクトの開発』のモデルのリバースエンジニアリングに関する項の説明に従って、通常の手順を使用します。
標準のリバース・エンジニアリング・プロセスでは、XMLドライバによって生成されたリレーショナル・スキーマから表が自動的にリバース・エンジニアリングされます。これらの表には、自動的に次のものが含められます。
主キー(PK列): 要素の親子関係を保持します。
外部キー(FK列): 要素の親子関係を保持します。
順序識別子(ORDER列): XMLファイル内の要素の順序を保持します。
これらの追加の列により、階層XML構造のリレーショナル・スキーマへのマッピングが可能になります。詳細は、付録B「Oracle Data Integrator Driver for XMLの参照情報」の「XMLからSQLへのマッピング」を参照してください。
XMLをマッピングのソースまたはターゲットとして使用できます。
マッピングまたはチェック用に選択したKMによって、このマッピングまたはチェックの機能およびパフォーマンスが決まります。この項に示す推奨事項は、XMLデータ・サーバーに関連する様々な状況でのKMの選択に役立ちます。
マッピングでXMLを使用する前に、次の注意事項をよく読んでください。
XMLモデルのデータストアをマッピングのターゲットとして使用する場合は、XML階層の親子関係および順序を保持するためにドライバで生成される列が確実にロードされるようにしてください。たとえば、リレーショナル・スキーマのREGION表に対応するregion
要素のレコードを例5-1のようなXML構造に入力する場合は、REGION表の列REGION_IDおよびREGION_NAMEをロードする必要があります。これらの2つの列は、XML属性に対応します。
<country COUNTRY_ID="6" COUNTRY_NAME="Australia"> <region REGION_ID="72" REGION_NAME="Queensland"> </country>
例5-1では、XMLドライバによってREGION表に自動的に作成された追加の列もロードする必要があります。それらの列は次のとおりです。
REGIONPK: この列により、各<region>
要素を識別できます。
REGIONORDER: この列により、XMLファイル内で<region>
要素を順序付けできます(レコードは、リレーショナル・スキーマでは順序付けされませんが、XML要素では順序付けされます)。
COUNTRYFK: この列により、<region>
要素を<country>
親要素との関係で配置できます。この値は、COUNTRY表のAustraliaレコードのCOUNTRY.COUNTRYPK値と同じです。
XMLファイルのデータとXMLスキーマのデータを完全に同期化するには、次のコマンドをコールする必要があります。
データの読取りまたは更新のためにXMLモデルの表を使用する前に、XML論理スキーマでSYNCHRONIZE FROM FILE
コマンドを使用することをお薦めします。この操作によって、XML階層のデータがXMLリレーショナル・スキーマに再ロードされます。このスキーマは、最初のアクセス時に組込みまたは外部のデータベース記憶域にロードされます。その後に行ったファイルへの変更は、このコマンドを発行しないかぎり、自動的にはスキーマへ同期されません。
リレーショナル・スキーマへの変更を行った後、XML論理スキーマでSYNCHRONIZE ALL
またはSYNCHRONIZE FROM DATABASE
コマンドをコールして、このスキーマをXML階層データにアンロードする必要があります。IKM XML Control Appendにはこの同期化コマンドが実装されています。
XMLスキーマを操作するマッピングおよびプロシージャの前(および後)に、パッケージ内のプロシージャでこれらのコマンドを実行する必要があります。
これらのコマンドの詳細は、付録B「Oracle Data Integrator Driver for XMLの参照情報」を参照してください。
Oracle Data Integratorでは、サイズが大きいXMLファイルを高いパフォーマンスで処理できます。
デフォルトのドライバ構成では、リレーショナル・スキーマがメモリーの組込みエンジンに格納されます。サイズの大きいXMLファイルを処理する場合は、外部データベース記憶域の使用を検討することをお薦めします。
これらのコマンドの詳細は、B.2.3.1項「スキーマの格納」を参照してください。
XMLファイルは、マッピングのソースまたはターゲットとして使用できます。「ロード・ナレッジ・モジュール」タブでの、XMLファイルと別のタイプのデータ・サーバー間でデータをロードするためのLKMの選択は、マッピングのパフォーマンスに関してきわめて重要です。
汎用SQL KMまたは関係するもう一方のテクノロジ固有のKMを使用して、XMLデータベースからターゲットまたはステージング領域のデータベースへデータをロードします。
XMLソースからステージング領域へのロードに使用できるKMの例を表5-2に示します。
XMLをマッピングのターゲットとして使用できます。XMLでのデータ統合戦略は、ステージング領域からXMLへのロードに関係します。「統合ナレッジ・モジュール」タブのIKMの選択によって、統合のパフォーマンスおよび可能性が決まります。
IKM XML Control Appendでは、データがXMLスキーマに統合されるほか、データをファイルに同期するオプションを使用できます。このKM以外に、汎用SQL KMまたは関係するもう一方のテクノロジ固有のKMも使用できます。汎用KMまたはテクノロジ固有のKMを使用する場合は、スキーマで行われた変更をXMLファイルに書き込むための同期化操作を手動で実行する必要があります。
次のデータ統合に使用できるKMの例を表5-4に示します。
ステージング領域からXMLターゲットへの統合
XMLステージング領域からXMLターゲットへの統合。この場合、ステージング領域はXMLターゲット上にあります。
この項では、Oracle Data IntegratorでのXMLの使用時に発生する可能性がある問題のトラブルシューティングに関する情報を提供します。この章の内容は、次のとおりです。
通常、Oracle Data Integratorではエラーは次のように表示されます。
java.sql.SQLException: No suitable driver
at ...
at ...
...
このjava.sql.SQLExceptioncode
は、JDBCドライバを介して問合せが行われ、エラーが戻されたことを単純に示しています。このエラーはデータベースまたはドライバのエラーであることが多く、次のように解明する必要があります。
まず、太字のテキスト部分のみに注目してください。これは、XMLドライバのドキュメントで検索する必要があります。ここで示されているように、固有のエラー・コードが含まれている場合は、エラーをすばやく識別できます。
このようなエラーが実行ログで検出された場合は、データベースに送信されたSQLコードを分析して、エラーの原因を特定する必要があります。このコードは、エラーのあるタスクの「説明」タブに表示されます。
この項では、XMLの最も一般的なエラーおよび主な原因について説明します。この章の内容は、次のとおりです。
No suitable driver
JDBC URLが不正です。URL構文が有効であることを確認してください。
File <XML file> is already locked by another instance of the XML driver
.
XMLファイルが別のユーザーまたはアプリケーションによってロックされています。XMLファイルを使用している可能性があるすべてのアプリケーションを閉じてください。該当するアプリケーションがクラッシュした場合は、XMLファイルのディレクトリに残っている.lckファイルを削除してください。
The DTD file "xxxxxxx.dtd" doesn't exist
この例外は、コマンドLOAD FILEを使用してXMLファイルをロードしようとしたときに発生する可能性があります。このエラー・メッセージの原因として、次の2つが考えられます:
DTDファイルのパスが間違っています。
対応するXMLファイルが(接続時などに)別のスキーマによってすでに開かれています。
Table not found: S0002 Table not found: <table name> in statement [<SQL statement>]
アクセスしようとしている表がスキーマに存在しません。
Column not found: S0022 Column not found: <column name> in statement [<SQL statement>]
アクセスしようとしている列が、文の中で指定された表に存在しません。