この章の内容は次のとおりです。
Oracle XDK JavaBeansは、Enterprise EditionおよびStandard EditionでXDKの一部として提供されます。
リリース10.1では、次の新しいJavaBeansが追加されました。
XSDValidator - oracle.xml.parser.schema.XSDValidatorクラスをカプセル化し、DOMツリーを検証するための機能を追加します。
XMLCompress - XML圧縮機能をカプセル化します。
XMLDBAccess - DBAccess JavaBeanの拡張機能であり、Oracleデータベース表にXML文書が格納されるXMLType列をサポートします。
XDK JavaBeansを使用すると、XMLアプリケーションにグラフィカル・インタフェースを簡単に追加できます。
Beanのカプセル化には、JDeveloperなどのJava統合開発環境から直接アクセスできるドキュメントおよび記述子が含まれます。
|
関連資料: 『Oracle XML APIリファレンス』には、すべてのJavaBeansのメソッドのリストが含まれています。 |
XDK JavaBeansにはデータベースへの接続性もあります。現在、XDK JavaBeansはJDBC対応のデータベースに直接接続して、XMLファイルやXSLファイルを取得および格納できます。
XDK JavaBeansは次のBeanによって構成されています。
DOMBuilder JavaBeanは非ビジュアルなBeanです。XML文書からDOMツリーを構築します。
DOMBuilder JavaBeanは、Beanインタフェースを使用してXML Parser for JavaのDOMParserクラスをカプセル化し、機能を拡張して非同期解析を許可します。リスナーを登録すると、Javaアプリケーションで大規模または連続したドキュメントを解析し、制御をすぐにコール元に戻すことができます。
XSLTransformer JavaBeanは非ビジュアルなBeanです。XMLファイルを受け入れ、入力XSLスタイルシートによって指定された変換を適用し、結果の出力ファイルを作成します。
XSLTransformer JavaBeanを使用すると、適切なXSLスタイルシートを適用して、XML文書をXML、HTML、DDLなど、ほぼすべてのテキストベースの形式に変換できます。
XSLTransformer JavaBeanを他のBeanと統合すると、アプリケーションまたはユーザーは変換の結果をすぐに表示できます。
XSLTransformer Beanは、サーバー側のアプリケーションまたはサーブレットがXML文書(問合せ結果のXML表現など)をブラウザで表示するためにHTMLでレンダリングするための基礎として使用できます。
XMLDiff JavaBeanは、2つのXML DOMツリーを比較します。2つのXML DOMツリーを表示して、それらのXMLツリー間の相違を示します。ノードを挿入、削除、移動または変更できます。各操作は色やスタイルを別にして表示されます。
このJavaBeanは、XML圧縮機能をカプセル化したものです。サポートされる機能は、DOMParserによって取得された内部DOMツリーの圧縮、SAXパーサーによってスローされたSAXイベントの圧縮、およびXMLDocumentオブジェクトを戻すシリアライズしたXMLデータの解凍です。
DOMBuilderクラスは、World Wide Web Consortium(W3C)勧告に準拠したXML 1.0のパーサーを実装しており、XML文書を解析してDOMツリーを構築します。解析は別のスレッドで行われ、ツリーが構築されたときに通知されるようにするにはDOMBuilderListenerインタフェースを使用する必要があります。
DOMBuilder Beanは、Beanインタフェースを使用してXML Parser for Javaをカプセル化し、その機能を拡張して非同期解析を可能にします。Javaアプリケーションは、リスナーを登録することによって、ドキュメントを解析し、コール元に制御を戻すことができます。
バックグラウンド・スレッドでの非同期解析は、ビジュアル・アプリケーションで対話式に使用できます。たとえば一般的なパーサーで大きなファイルを解析すると、ユーザー・インタフェースは解析が完了するまでフリーズします。DOMBuilder Beanではこの問題を回避できます。DOMBuilder Bean解析メソッドをコールした後、アプリケーションは制御をすぐに回復でき、「解析中です。お待ちください。」と表示されます。「取消」ボタンがある場合は、操作を取り消すこともできます。バックグラウンドの解析タスクが完了したら、DOMBuilder BeanによってdomBuilderOver()メソッドをコールすると、アプリケーションを引き続き実行できます。
大量のファイルを解析する場合、DOMBuilder JavaBeanで時間を節約できます。ファイルを1つずつ解析するよりも最大で40%も速いレスポンス時間が記録されています。
図10-1に、DOMBuilder JavaBeanの使用方法を示します。
解析するXML文書は、ファイル、文字列バッファまたはURLとして入力されます。
DOMBuilder.addDOMBuilderListener(DOMBuilderListener)メソッドを入力し、DOMBuilderListenerを追加します。
DOMBuilder.parser()メソッドがXML文書を解析します。
オプションで、解析結果をさらに処理します。
DOMBuilderOver()メソッドを使用して、DOMBuilderリスナーAPIをコールします。アプリケーションからの非同期コールを受信したときにこのリスナーがコールされます。このインタフェースは、非同期解析中のイベントに関する通知を受信するように実装する必要があります。addDOMBuilderListenerメソッドを使用して、このインタフェースを実装するクラスをDOMBuilderに追加する必要があります。
使用可能なDOMBuilderListenerメソッドは次のとおりです。
XSLTransformer JavaBeanはXMLファイルを受け入れ、入力XSLスタイルシートによって指定された変換を適用し、ファイルを作成および出力します。このJavaBeanを使用すると、XSLスタイルシートを適用して、XML文書をXML、HTML、DDLなど、ほぼすべてのテキストベースの形式に変換できます。
XSLTransformer JavaBeanを他のBeanと統合すると、アプリケーションまたはユーザーは変換の結果をすぐに表示できます。
XSLTransformer Beanは、サーバー側のアプリケーションまたはサーブレットがXML文書(問合せ結果のXML表現など)をブラウザで表示するためにHTMLでレンダリングするための基礎として使用できます。
XSLTransformer Beanは、Beanインタフェースを使用してJava XMLパーサーのXSLT処理エンジンをカプセル化し、その機能を拡張して非同期変換を可能にします。Javaアプリケーションは、リスナーを登録することによって、コール元にすぐに制御を返し、大規模または連続したドキュメントを解析できます。
XSL変換は時間がかかる場合があります。大量のファイルを変換するアプリケーションでXSLTransformer Beanを使用すると、複数のファイルを同時に変換できます。
XSLTransformer Beanは、反応が速いユーザー・インタフェースのビジュアル・アプリケーションに使用できます。DOMBuilderとの類似点があります。
XSLTransformerListener()メソッドを実装すると、変換が完了したときにコール元のアプリケーションに通知できます。アプリケーションは、変換をリクエストしてから受信するまでの間、他のタスクを自由に実行できます。
このシナリオは、XSLTransformer JavaBeanを適用する一例です。
SQL問合せを作成します。選択したXMLデータをCLOB表に格納します。
XSLTransfomer JavaBeanを使用して、XSLスタイルシートを作成し、データが希望どおりに表示されるまでこのスタイルシートをXMLデータに対話式に適用します。出力は、XSL変換で生成されたHTMLになります。
必要なSQL(データ選択)とXSL(データ表示)を取得したら、SQL問合せで使用する表またはビューでトリガーを作成します。トリガーはストアド・プロシージャを実行できます。ストアド・プロシージャでは、次の操作を実行します。
問合せの実行
スタイルシートの適用
結果のHTMLをCLOB表に格納
ソース・データ表を更新すると必ずこのプロセスが繰り返されます。
CLOB表に格納されたHTMLは、問合せ中の表に格納されている最新のデータを常に反映します。JSP(JavaServer Page)はHTMLを表示できます。
このシナリオでは、複数のエンド・ユーザーは、データベースの使用が増える一因となる複数のデータ問合せを生成しません。基礎となるデータの変更時のみ、HTMLが再生成されます。
図10-2に、XSLTransformer Beanの使用方法を示します。
XSLTransfomer.addXSLTransformerListener (XSLTransformerListener)メソッドを使用して、XSLスタイルシートとXML文書をXSLTransformerに入力します。リスナーが追加されます。
XSLTransfomer.processXSL()メソッドは、XSLT変換をバックグラウンドで開始します。
オプションで、XSLTransformer Beanにその他の作業を割り当てられます。
変換が完了すると、非同期コールが行われ、XSLTransformerListener.xslTransformerOver()メソッドをコールします。このインタフェースは、非同期変換中にイベントに関する通知を受信するように実装する必要があります。addXSLTransformerListenerメソッドを使用して、このインタフェースを実装するクラスをXSLTransformerイベント・キューに追加する必要があります。
XSLTransformer.getResult()メソッドが結果文書のXML文書フラグメントを戻します。
XML文書フラグメントを出力します。
DBAccess JavaBeanは、複数のXML文書およびテキスト・ドキュメントを保持できるCLOB表をメンテナンスします。各表の作成には次の文を使用します。
CREATE TABLE tablename FILENAME CHAR(16) UNIQUE, FILEDATA CLOB) LOB(FILEDATA) STORE AS (DISABLE STORAGE IN ROW)
各XML文書またはテキスト・ドキュメントは、表の行として格納されます。FILENAMEフィールドには、その行を検索、更新または削除するためにキーとして使用される一意の文字列があります。文書のテキストはFILEDATAフィールドに格納されます。これはCLOBオブジェクトです。DBAccess Beanが実行するタスクは次のとおりです。
CLOB表の作成および削除
CLOB表のコンテンツのリスト作成
CLOB表でのテキスト・ドキュメントの追加、置換または削除
図10-3に、DBAccess Beanの使用方法を示します。これは、DBAccess BeanがCLOBに格納されるXML文書をメンテナンスおよび操作する方法です。
XMLDiff JavaBeanは、2つのXML DOMツリーを比較します。2つのXML DOMツリーを表示して、それらのXMLツリー間の相違を示します。ノードを挿入、削除、移動または変更できます。次に示すように、各操作は異なる色やスタイルで表示されます。
赤 - 変更されたノードまたは属性を示します。
青 - 新しいノードまたは属性を示します。
黒 - 削除されたノードまたは属性を示します。
移動は、削除操作または挿入操作としてビジュアルに表示されます。
XSLコードの形式で2つのXMLツリー間の相違を生成できます。生成したXSLコードを使用して、1つ目のXMLファイルを2つ目のXMLファイルに変換できます。
|
注意: 現在、GUI表示はカスタマイズできません。 |
このBeanクラスは、XML圧縮機能を単純にカプセル化したものです。このクラスでサポートされる機能は、原則的にDOMParserで取得する内部DOMツリーの圧縮、SAXパーサーでスローされたSAXイベントの圧縮、およびXMLDocumentオブジェクトを戻すシリアライズしたXMLデータの解凍です。圧縮の入力は、InputStream、Java文字列、データベースのCLOBオブジェクトまたはXMLTypeオブジェクトからになります。どの場合でも、outputStreamに圧縮したデータが書き込まれるように前もってoutputStreamを設定する必要があります。入力データが未解析の場合、その解析は検証なしで行われます。
様々な解析オプションを使用するには、入力前に文書を解析してから、XMLDocumentオブジェクトをCompressor Beanに渡します。圧縮係数は、入力XMLファイルおよび圧縮したファイルのサイズに基づく大まかな値です。圧縮係数メソッドの制限は、java.io.Fileオブジェクトをパラメータとして使用して圧縮を行う場合にのみ使用できます。
このJavaBeanはDBAcess Beanの拡張機能であり、Oracleデータベース表にXML文書が格納されるXMLType列をサポートします。メソッドは、XMLTypeインスタンスおよびそれらの表を表示、削除または取得するために提供されます。
このクラス・ファイルは、oracle.xml.parser.schema.XSDValidatorクラスをカプセル化し、DOMツリーの検証機能を追加します。スキーマ文書は定数であり、InputStream、URLなどとして渡されるXML文書に対して検証が行われます。
どのような場合でも、検証はDOMツリーが構築された後にのみ行われます。エラーのあるノードはスタック・ツリーのベクターに戻され、このスタックの最上位要素がルート・ノードに相当します。子ノードは、スタックの要素を取り出して取得されます。
XDK JavaBeanのサンプル・ディレクトリ/xdk/demo/java/transviewer/には、JavaBeansの使用方法を示すサンプル・アプリケーションがあります。
表10-1に、サンプル・ファイルを示します。次の項では、これらのサンプルのインストール方法を示します。
表10-1 JavaBeanのサンプル・ファイル
| ファイル名 | 説明 |
|---|---|
|
|
|
|
|
|
|
|
ビジュアルなサンプル・アプリケーションでは、 |
|
|
SQL問合せ、CLOBまたはXMLType表から取得したデータベースのXMLファイルまたはXMLデータを圧縮する |
|
|
|
JavaBeanの最小要件はJDK 1.2.2です。
次に、サンプル実行ファイルを生成するための手順を示します。
XDK JavaBeansで使用する次のコンポーネントをダウンロードおよびインストールします。
シン・クライアント用のOracle JDBC Driver(classes12.zipファイル)
Oracle XML SQL Utilityy(xsu12.jar)
XMLType定義を含むJARファイル(file xdb.jar)
これらのコンポーネントをインストールしたら、CLASSPATHにファイルを含めます。
MakefileのJDKPATHを、JDKパスを指すように変更します。ORACLE_HOMEセットが存在しない場合、ORACLE_HOMEをXDK JavaBeansインストールのルート・ディレクトリに設定します。
.classファイルを生成します。Makefileファイルのラベルを使用するサンプル・プログラムを次のコマンドで実行します。
gmake sample3 gmake sample5 gmake sample6 gmake sample7 gmake sample10
|
関連資料: READMEには、sample3からsample10までのラベルの付いた様々なプログラムの詳細が含まれています。 |
Sample6は、XMLDiff JavaBeanのデモです。これは、XMLファイルの比較アイテムを使用して「ファイル」メニューから入力データ・ファイルを選択できるGUIを起動します。生成されたXSLTは、「変換」メニューを使用して入力XML file1に適用できます。結果のXMLファイル(入力file2と同じ)は、「ファイル」メニューの「別名保存」で保存できます。デフォルトでは、XMLDiffData1.txtおよびXMLDiffData2.txtの2つのXMLファイルが比較され、出力XSLTはXMLDiffSample.xslとして格納されます。
ファイアウォールの外側のURLにアクセスするDTDを入力XMLファイルで使用する場合は、XMLDiffSample.javaを変更して、setFiles()コールの前にプロキシ・サーバーの設定を含めます。
/* Set proxy to access dtd through firewall */
Properties p = System.getProperties();
p.put("proxyHost", "www.proxyservername.com");
p.put("proxyPort", "80");
p.put("proxySet", "true");
java.util.*;もインポートする必要があります。