この章の内容は次のとおりです。
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.*;
もインポートする必要があります。