ヘッダーをスキップ
Oracle XML Developer's Kitプログラマーズ・ガイド
10gリリース3(10.1.3)
B28611-01
  目次
目次
索引
索引

戻る
戻る
次へ
次へ
 

10 XDK JavaBeans

この章の内容は次のとおりです。

Oracle XDK JavaBeansの入手方法

Oracle XDK JavaBeansは、Enterprise EditionおよびStandard EditionでXDKの一部として提供されます。

リリース10.1では、次の新しいJavaBeansが追加されました。

XDK JavaBeansを使用すると、XMLアプリケーションにグラフィカル・インタフェースを簡単に追加できます。

Beanのカプセル化には、JDeveloperなどのJava統合開発環境から直接アクセスできるドキュメントおよび記述子が含まれます。


関連資料:

『Oracle XML APIリファレンス』には、すべてのJavaBeansのメソッドのリストが含まれています。

データベースへの接続性

XDK JavaBeansにはデータベースへの接続性もあります。現在、XDK JavaBeansはJDBC対応のデータベースに直接接続して、XMLファイルやXSLファイルを取得および格納できます。

XDK JavaBeansの概要

XDK JavaBeansは次のBeanによって構成されています。

DOMBuilder

DOMBuilder JavaBeanは非ビジュアルなBeanです。XML文書からDOMツリーを構築します。

DOMBuilder JavaBeanは、Beanインタフェースを使用してXML Parser for JavaのDOMParserクラスをカプセル化し、機能を拡張して非同期解析を許可します。リスナーを登録すると、Javaアプリケーションで大規模または連続したドキュメントを解析し、制御をすぐにコール元に戻すことができます。

XSLTransformer

XSLTransformer JavaBeanは非ビジュアルなBeanです。XMLファイルを受け入れ、入力XSLスタイルシートによって指定された変換を適用し、結果の出力ファイルを作成します。

XSLTransformer JavaBeanを使用すると、適切なXSLスタイルシートを適用して、XML文書をXML、HTML、DDLなど、ほぼすべてのテキストベースの形式に変換できます。

  • XSLTransformer JavaBeanを他のBeanと統合すると、アプリケーションまたはユーザーは変換の結果をすぐに表示できます。

  • XSLTransformer Beanは、サーバー側のアプリケーションまたはサーブレットがXML文書(問合せ結果のXML表現など)をブラウザで表示するためにHTMLでレンダリングするための基礎として使用できます。

DBAccess

DBAccess JavaBeanは、複数のXML文書およびテキスト・ドキュメントを含むCLOB表をメンテナンスします。

XMLDiff

XMLDiff JavaBeanは、2つのXML DOMツリーを比較します。2つのXML DOMツリーを表示して、それらのXMLツリー間の相違を示します。ノードを挿入、削除、移動または変更できます。各操作は色やスタイルを別にして表示されます。

XMLCompress

このJavaBeanは、XML圧縮機能をカプセル化したものです。サポートされる機能は、DOMParserによって取得された内部DOMツリーの圧縮、SAXパーサーによってスローされたSAXイベントの圧縮、およびXMLDocumentオブジェクトを戻すシリアライズしたXMLデータの解凍です。

XMLDBAccess

このJavaBeanはDBAcess Beanの拡張機能であり、Oracleデータベース表にXML文書が格納されるXMLType列をサポートします。メソッドは、XMLTypeインスタンスおよびそれらの表を表示、削除または取得するために提供されます。

XSDValidator

このJavaBeanはoracle.xml.parser.schema.XSDValidatorクラスをカプセル化し、DOMツリーの検証機能を追加するクラス・ファイルです。

DOMBuilder JavaBean

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%も速いレスポンス時間が記録されています。

DOMBuilder JavaBeanの使用方法

図10-1に、DOMBuilder JavaBeanの使用方法を示します。

  1. 解析するXML文書は、ファイル、文字列バッファまたはURLとして入力されます。

  2. DOMBuilder.addDOMBuilderListener(DOMBuilderListener)メソッドを入力し、DOMBuilderListenerを追加します。

  3. DOMBuilder.parser()メソッドがXML文書を解析します。

  4. オプションで、解析結果をさらに処理します。

  5. DOMBuilderOver()メソッドを使用して、DOMBuilderリスナーAPIをコールします。アプリケーションからの非同期コールを受信したときにこのリスナーがコールされます。このインタフェースは、非同期解析中のイベントに関する通知を受信するように実装する必要があります。addDOMBuilderListenerメソッドを使用して、このインタフェースを実装するクラスをDOMBuilderに追加する必要があります。

    使用可能なDOMBuilderListenerメソッドは次のとおりです。

    • domBuilderError(DOMBuilderEvent)。解析エラーが発生したときにコールします。

    • domBuilderOver(DOMBuilderEvent)。解析が完了したときにコールします。

    • domBuilderStarted(DOMBuilderEvent)。解析が開始したときにコールします。

  6. DOMBuilder.getDocument()が結果のDOM文書をフェッチし、出力します。

図10-1 DOMBuilder JavaBeanの使用方法

図10-1の説明が続きます
「図10-1 DOMBuilder JavaBeanの使用方法」の説明

XSLTransformer JavaBean

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: データ変更時のみのHTMLの再生成

このシナリオは、XSLTransformer JavaBeanを適用する一例です。

  1. SQL問合せを作成します。選択したXMLデータをCLOB表に格納します。

  2. XSLTransfomer JavaBeanを使用して、XSLスタイルシートを作成し、データが希望どおりに表示されるまでこのスタイルシートをXMLデータに対話式に適用します。出力は、XSL変換で生成されたHTMLになります。

  3. 必要なSQL(データ選択)とXSL(データ表示)を取得したら、SQL問合せで使用する表またはビューでトリガーを作成します。トリガーはストアド・プロシージャを実行できます。ストアド・プロシージャでは、次の操作を実行します。

    • 問合せの実行

    • スタイルシートの適用

    • 結果のHTMLをCLOB表に格納

  4. ソース・データ表を更新すると必ずこのプロセスが繰り返されます。

    CLOB表に格納されたHTMLは、問合せ中の表に格納されている最新のデータを常に反映します。JSP(JavaServer Page)はHTMLを表示できます。

    このシナリオでは、複数のエンド・ユーザーは、データベースの使用が増える一因となる複数のデータ問合せを生成しません。基礎となるデータの変更時のみ、HTMLが再生成されます。

XSLTransformer JavaBeanの使用方法

図10-2に、XSLTransformer Beanの使用方法を示します。

図10-2 XSLTransformer JavaBeanの使用方法

図10-2の説明が続きます
「図10-2 XSLTransformer JavaBeanの使用方法」の説明

  1. XSLTransfomer.addXSLTransformerListener (XSLTransformerListener)メソッドを使用して、XSLスタイルシートとXML文書をXSLTransformerに入力します。リスナーが追加されます。

  2. XSLTransfomer.processXSL()メソッドは、XSLT変換をバックグラウンドで開始します。

  3. オプションで、XSLTransformer Beanにその他の作業を割り当てられます。

  4. 変換が完了すると、非同期コールが行われ、XSLTransformerListener.xslTransformerOver()メソッドをコールします。このインタフェースは、非同期変換中にイベントに関する通知を受信するように実装する必要があります。addXSLTransformerListenerメソッドを使用して、このインタフェースを実装するクラスをXSLTransformerイベント・キューに追加する必要があります。

  5. XSLTransformer.getResult()メソッドが結果文書のXML文書フラグメントを戻します。

  6. XML文書フラグメントを出力します。

DBAccess JavaBean

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が実行するタスクは次のとおりです。

DBAcess JavaBeanの使用方法

図10-3に、DBAccess Beanの使用方法を示します。これは、DBAccess BeanがCLOBに格納されるXML文書をメンテナンスおよび操作する方法です。

図10-3 DBAccess JavaBeanの使用方法

図10-3の説明が続きます
「図10-3 DBAccess JavaBeanの使用方法」の説明

XMLDiff JavaBean

XMLDiff JavaBeanは、2つのXML DOMツリーを比較します。2つのXML DOMツリーを表示して、それらのXMLツリー間の相違を示します。ノードを挿入、削除、移動または変更できます。次に示すように、各操作は異なる色やスタイルで表示されます。

移動は、削除操作または挿入操作としてビジュアルに表示されます。

XSLコードの形式で2つのXMLツリー間の相違を生成できます。生成したXSLコードを使用して、1つ目のXMLファイルを2つ目のXMLファイルに変換できます。


注意:

現在、GUI表示はカスタマイズできません。

XMLCompress JavaBean

このBeanクラスは、XML圧縮機能を単純にカプセル化したものです。このクラスでサポートされる機能は、原則的にDOMParserで取得する内部DOMツリーの圧縮、SAXパーサーでスローされたSAXイベントの圧縮、およびXMLDocumentオブジェクトを戻すシリアライズしたXMLデータの解凍です。圧縮の入力は、InputStream、Java文字列、データベースのCLOBオブジェクトまたはXMLTypeオブジェクトからになります。どの場合でも、outputStreamに圧縮したデータが書き込まれるように前もってoutputStreamを設定する必要があります。入力データが未解析の場合、その解析は検証なしで行われます。

様々な解析オプションを使用するには、入力前に文書を解析してから、XMLDocumentオブジェクトをCompressor Beanに渡します。圧縮係数は、入力XMLファイルおよび圧縮したファイルのサイズに基づく大まかな値です。圧縮係数メソッドの制限は、java.io.Fileオブジェクトをパラメータとして使用して圧縮を行う場合にのみ使用できます。

XMLDBAccess JavaBean

このJavaBeanはDBAcess Beanの拡張機能であり、Oracleデータベース表にXML文書が格納されるXMLType列をサポートします。メソッドは、XMLTypeインスタンスおよびそれらの表を表示、削除または取得するために提供されます。

XSDValidator JavaBean

このクラス・ファイルは、oracle.xml.parser.schema.XSDValidatorクラスをカプセル化し、DOMツリーの検証機能を追加します。スキーマ文書は定数であり、InputStream、URLなどとして渡されるXML文書に対して検証が行われます。

どのような場合でも、検証はDOMツリーが構築された後にのみ行われます。エラーのあるノードはスタック・ツリーのベクターに戻され、このスタックの最上位要素がルート・ノードに相当します。子ノードは、スタックの要素を取り出して取得されます。

JavaBeanのサンプル

XDK JavaBeanのサンプル・ディレクトリ/xdk/demo/java/transviewer/には、JavaBeansの使用方法を示すサンプル・アプリケーションがあります。

表10-1に、サンプル・ファイルを示します。次の項では、これらのサンプルのインストール方法を示します。

表10-1 JavaBeanのサンプル・ファイル

ファイル名 説明

AsyncTransformSample.java

XSLTransformer BeanおよびDOMBuilder Beanを使用する非ビジュアルなサンプル・アプリケーション。現在のディレクトリ内のすべての.xmlファイルに対して、doc.xslで指定されたXSLTスタイルシートを適用します。結果は、拡張子が.logのファイル内にあります。

XMLDBAccessSample.java

XMLDBAccess BeanのGUI以外のサンプル。XMLDBAccess BeanのAPIを使用して、XMLType表によってデータベース内のXML文書を格納および取得できる方法を示します。

XMLTypeを使用するには、Oracle9i以上のインストールとxdb.jarが必要です。Sample5は、Makefileで定義したように、HOSTNAMEPORTSIDUSERIDおよびPASSWORDの値を使用してXMLDBAccessSampleを実行します。これらは必要に応じて変更する必要があります。booklist.xmlファイルは、データベースへのデータの挿入に使用されます。出力はxmldbaccess.logにコピーされます。

XMLDiffSample.java

ビジュアルなサンプル・アプリケーションでは、XMLDiff Beanを使用して、2つのXMLファイルの差分を検出し、XSLスタイルシートを生成します。このスタイルシートを使用して、最初の入力XMLファイルを2つ目の入力XMLファイルに変換できます。「XMLDiffSample.java」を参照してください。

compviewer.java

SQL問合せ、CLOBまたはXMLType表から取得したデータベースのXMLファイルまたはXMLデータを圧縮するXMLCompress Beanを使用するビジュアルなサンプル・アプリケーション。このアプリケーションでは、圧縮ストリームを解凍し、結果のDOMツリーを表示することもできます。

XSDValidatorSample.java

XSDValidator Beanのサンプル・アプリケーション。入力として、XMLファイルおよびスキーマ・ファイルの2つの引数を取ります。検証中に発生したエラーが、行番号を含めて表示されます。「XSDValidatorSample.java」を参照してください。


JavaBeanのサンプルのインストール

JavaBeanの最小要件はJDK 1.2.2です。

次に、サンプル実行ファイルを生成するための手順を示します。

  1. XDK JavaBeansで使用する次のコンポーネントをダウンロードおよびインストールします。

    • シン・クライアント用のOracle JDBC Driver(classes12.zipファイル)

    • Oracle XML SQL Utilityy(xsu12.jar

    • XMLType定義を含むJARファイル(file xdb.jar

    これらのコンポーネントをインストールしたら、CLASSPATHにファイルを含めます。

  2. MakefileJDKPATHを、JDKパスを指すように変更します。ORACLE_HOMEセットが存在しない場合、ORACLE_HOMEをXDK JavaBeansインストールのルート・ディレクトリに設定します。

  3. .classファイルを生成します。Makefileファイルのラベルを使用するサンプル・プログラムを次のコマンドで実行します。

    gmake sample3
    gmake sample5
    gmake sample6
    gmake sample7
    gmake sample10
    
    

関連資料:

READMEには、sample3からsample10までのラベルの付いた様々なプログラムの詳細が含まれています。

XMLDiffSample.java

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.*;もインポートする必要があります。

XSDValidatorSample.java

Sample10は、XSDValidator JavaBeanのデモンストレーションです。デフォルトとしてデータ・ファイルpurchaseorder.xmlpurchaseorder.xsdスキーマ・ファイルを取得します。出力には、検証エラーが表示されます。