概要

XML データ・ハンドラーはデータ変換モジュールで、その主な役割はビジネス・オブジェクトと XML 文書相互間の変換をすることです。XML 文書は、text/xml MIME タイプの直列化データです。 XML データ・ハンドラーは、コネクターおよびアクセス・クライアントで使用できます。

この概要のセクションでは、XML データ・ハンドラーの次の内容について説明します。

XML 文書およびビジネス・オブジェクトの処理

XML 文書では、スキーマと呼ばれるテンプレートを使用して、その構造を定義します。表 9 に、このスキーマを定義するための最も一般的なデータ・モデルを示します。

表 9. XML データ・モデル
XML データ・モデル 詳細
文書タイプ定義 (DTD) DTD を使用する XML 文書
スキーマ文書 スキーマ文書を使用する XML 文書

DTD またはスキーマ文書により XML 文書の構造が記述されるように、ビジネス・オブジェクトの構造はビジネス・オブジェクト定義により記述されます。XML データ・ハンドラーは、ビジネス・オブジェクトと XML 文書の間の変換を実行するとき、ビジネス・オブジェクト定義を使用します。XML データ・ハンドラーは、ビジネス・オブジェクト定義の構造およびアプリケーション固有情報を使用することにより、変換方法を決定します。ビジネス・オブジェクト定義を正しく作成することにより、データ・ハンドラーがビジネス・オブジェクトと XML 文書との相互の変換を正しく行うことができます。XML データ・ハンドラーが XML 文書とビジネス・オブジェクトの間の変換を実行するためには、関連するビジネス・オブジェクト定義を見つけることが必要です。

XML 文書からビジネス・オブジェクトへの変換、およびその逆の変換に XML データ・ハンドラーを使用するためには、次のステップを実行することが必要です。

表 10. XML データ・ハンドラーの使用
ステップ 詳細
1. XML 文書とビジネス・オブジェクトの構造を記述しているビジネス・オブジェクト定義が存在し、実行中の XML データ・ハンドラーから使用できること。 ビジネス・オブジェクト定義の要件
DTD からのビジネス・オブジェクト定義の作成
2. XML データ・ハンドラーが運用環境向けに構成されていること。 XML データ・ハンドラーの構成
3. 適切なデータ操作を実行するために、XML データ・ハンドラーがコネクター (またはアクセス・クライアント) から呼び出されていること。
a) データ操作: 呼び出し元からビジネス・オブジェクトを受け取り、これを XML 文書に変換し、変換結果を呼び出し元に渡します。 ビジネス・オブジェクトの XML 文書への変換
b) データ操作: 呼び出し元から XML 文書を受け取り、ネーム・ハンドラーおよび SAX パーサーを使用して、ビジネス・オブジェクトを作成します。次にデータ・ハンドラーがこのビジネス・オブジェクトを呼び出し元に戻します。 XML 文書のビジネス・オブジェクトへの変換

XML データ・ハンドラーのコンポーネント

XML データ・ハンドラーは次の 2 つのコンポーネントを使用して、XML データをビジネス・オブジェクトに変換します。

図 11 に、XML データ・ハンドラーのコンポーネントとその相互の関係を示します。これらのコンポーネントは、この後のセクションで説明します。

図 11. XML データ・ハンドラーのコンポーネント


ネーム・ハンドラー

XML データ・ハンドラーはネーム・ハンドラーを使用して、XML メッセージからビジネス・オブジェクトの名前を抽出します。 データ・ハンドラーは、XML データ・ハンドラー子メタオブジェクト内の NameHandlerClass 属性値を基に、ネーム・ハンドラーのインスタンスを呼び出します。

カスタム・ネーム・ハンドラーの作成方法については、"カスタム XML ネーム・ハンドラーの作成"を参照してください。

SAX パーサー

XML 子メタオブジェクト内 Parser 属性の Default Value プロパティーにパーサーが指定されていない 場合には、データ・ハンドラーはデフォルトの SAX パーサーを使用します。

org.apache.xerces.parsers.SAXParser
 

検証パーサーを使用するには、次のステップのいずれかを実行します。

注:
検証パーサーを使用する場合、正しい EntityResolver を使用していて、DTDPath が正しく設定されていることを確認します。確認を行うための命令については、XML データ・ハンドラーの構成を参照してください。

あるいは、IBM 提供の検証用でない SAX パーサーを使用する方法もあります。このパーサーを使用するには、XML 子メタオブジェクトの Parser 属性 の Default Value プロパティーを値 com.ibm.xml.parsers.SAXParser に設定します。

エンティティー・リゾルバー

エンティティー・リゾルバーにより、SAX パーサーによる XML データ内の外部参照 (DTD およびスキーマ文書の参照など) の解決方法を指定します。 XML 文書にエンティティー参照が含まれている場合、SAX パーサーは XML データ・ハンドラー構成メタオブジェクト内の EntityResolver 属性を使用してエンティティー・リゾルバーのインスタンスを起動します。

外部参照の処理は、EntityResolver で指定されるエンティティー・リゾルバーのクラスにより異なります。表 11 は、XML データ・ハンドラーが提供するエンティティー・リゾルバーのクラスを表しています。

表 11. XML データ・ハンドラーのエンティティー・リゾルバーのクラス
エンティティー・リゾルバーのクラス 説明
DefaultEntityResolver
 

デフォルトのエンティティー・リゾルバーのクラスです。このエンティティー・リゾルバーが呼び出されると、すべての外部参照は無視されます。

LocalEntityResolver
 

このローカル・エンティティー・リゾルバーは、外部参照をローカル・ファイル名として処理します。検証用に使用するデータ・モデルにより、振る舞いが異なります。

  • 検証用に DTD を使用する場合、ローカル・エンティティー・リゾルバーは、systemIDfile:// または http:// で始まり、DTDPath 属性が設定されていれば、systemID 内のパスを DTDPath メタオブジェクト属性の値で置き換えます。 systemID がパス名でないか、または DTDPath 属性が設定されていない場合、外部参照は無視されます。
  • 検証用にスキーマ文書を使用する場合、ローカル・エンティティー・リゾルバーは、パスが file:// または http:// で始まるか、DOS ファイル名 (例えば、「D:¥xmlschemas¥test」) を含んでいれば、schemaLocation または noNamespaceSchemaLocation 属性が指定するパスを DTDPath メタオブジェクト属性の値に置き換えます。
URIEntityResolver
 

このエンティティー・リゾルバーは、外部参照をローカル・ファイル名またはダウンロード可能 URL として処理します。外部参照は次のいずれかのケースで動的に解決されます。

  • 検証用に DTD を使用する場合: DOCTYPEhttp:// または file:// で始まる SYSTEM 値を含んでいるとき。
  • 検証用にスキーマ文書を使用する場合: schemaLocation または noNamespaceSchemaLocation 属性が http:// または file:// で始まるとき。

次にエンティティー・リゾルバーは、HTTP 接続を開き、指定された Web サイトから DTD またはスキーマ文書をダウンロードします。

重要: XML データ・ハンドラーは DTD またはスキーマ文書をキャッシュに入れません。データ・ハンドラーがエンティティー・リゾルバーとして、URIEntityResolver クラスを使用する場合、XML 文書を構文解析するたびに HTTP 接続を開きます。したがって、ネットワーク・トラフィックにより XML データ・ハンドラーのパフォーマンスが影響されます。

注:
表 11 のエンティティー・リゾルバーのクラスには必ず、次のクラス・プレフィックスが付いています。
com.crossworlds.DataHandlers.xml
 

XML 文書でスキーマ文書を使用する場合、そのスキーマ文書に組み込まれているすべての外部スキーマは、外部エンティティーとしても取り扱われます。したがって、SAX パーサーは、これらの組み込まれたスキーマ文書を解決するために、エンティティー・リゾルバーを呼び出します。XML 文書がスキーマ・ロケーションを指定するために schemaLocation または noNamespaceSchemaLocation を使用する場合は、EntityResolver 属性を LocalEntityResolver または URIEntityResolver のいずれかに、(組み込み済みまたはインポート済みの) 外部スキーマ文書の検証用として、設定が可能です。

別の方法を使用して外部エンティティーを検出する必要がある場合は、カスタム・エンティティー・リゾルバーを作成する必要があります。カスタム・エンティティー・リゾルバーの作成の詳細については、カスタム・エンティティー・リゾルバーの作成を参照してください。

Copyright IBM Corp. 2004