D Oracle XML Developer's Kit JavaBeans (非推奨)
非推奨のOracle XML Developer's Kit (XDK) JavaBeansについて説明します。
ノート:
この付録で説明するXDK JavaBeansとこれに対応するXDK Javaアプリケーション・プログラミング・インタフェース(API)パッケージおよびクラスは、Oracle Database 12cリリース1 (12.1)では非推奨です。これらのコンポーネントはOracle Database 12c リリース1(12.1)でも引続きサポートされていますが、新しいアプリケーションでは使用しないことをお薦めします。この機能は、代替なしで非推奨になります。
関連項目:
非推奨になったXDK Java APIの詳細は、Oracle Database XML Java APIリファレンスを参照してください
D.1 XDK JavaBeansの概要
XDK JavaBeansは、Javaアプリケーションおよびアプレットで使用できるExtensible Markup Language (XML)コンポーネントのセットです。
D.1.1 XDK JavaBeansの使用の前提条件
XDK JavaBeansの使用の前提条件について説明します。
この付録では、次のテクノロジを十分に理解していると想定します。
- 
                           
JavaBeans。JavaBeansのコンポーネント(Bean)は、ビルダー・ツールでビジュアルに操作できる再利用可能なソフトウェア・コンポーネントです。
 - 
                           
Java Database Connectivity (JDBC)。 XDK JavaBeansにはデータベースへの接続性もあります。BeanはJDBC対応のデータベースに直接接続し、XMLおよびExtensible Stylesheet Language (XSL)ファイルを取得および格納できます。
 - 
                           
Document Object Model (DOM)。 DOMは、XML文書の構造を示すインメモリー・ツリー表現です。
 - 
                           
Simple API for XML (SAX)。 SAXは、イベントベースのXML解析の標準です。
 - 
                           
XMLスキーマ言語。概要および関連資料へのリンクは、「XML Schema Processor for Javaの使用」を参照してください。
 
D.1.2 XDK JavaBeansの標準および仕様
XDK JavaBeansには、XDKバージョン1.2以上が必要です。XDK JavaBeansは、JDK 1.2以上のすべてのバージョンで使用できます。XDK JavaBeansはSun JavaBeans仕様に準拠し、java.beans.SimpleBeanInfoを拡張する必須のBeanInfoクラスが含まれます。
                     
JavaBeans 1.01仕様は、JDK 1.1でのJavaBeansについて記述したものです。
JavaBeansコア仕様にJava 2プラットフォームへの対応が追加され、より高度なJavaBeansコンポーネントを作成する標準手段が開発者に提供されました。
関連項目:
JavaBeans仕様については、OTNのXDKを参照してください
D.1.3 XDK JavaBeansの機能
XDK JavaBeansを使用すると、グラフィカル・ユーザー・インタフェース(GUI)のXMLアプリケーションへの追加が簡単になります。Beanのカプセル化には、Oracle JDeveloperなどのJava統合開発環境(IDE)から直接アクセスできるドキュメントおよびディスクリプタが含まれます。
D.1.3.1 DOMBuilder
oracle.xml.async.DOMBuilder Beanは、XML文書からDOMツリーを構築します。DOMBuilder JavaBeanは、Beanインタフェースを使用してXMLパーサーのクラスDOMParserをカプセル化し、非同期解析をサポートします。リスナーを登録すると、Javaプログラムで大規模または複数のドキュメントの解析を開始し、制御をすぐにコール元に戻すことができます。
                        
このBeanの大きなメリットは、複数のファイルを解析する場合の効率の向上であり、ファイルが大きい場合は特に効果的です。DOMBuilderは、対話式のビジュアル・アプリケーションのバックグラウンド・スレッドで、非同期解析を行うこともできます。非同期解析を行わない場合、ドキュメントの解析が終わるまでGUIを有効に使用できません。DOMBuilderを使用すると、解析メソッドを起動した後、アプリケーションに制御が戻ります。アプリケーションでは、プログレス・バーを表示したり、ユーザーが解析を取り消したりできます。
                        
D.1.3.2 XSLTransformer
oracle.xml.async.XSLTransformer JavaBeanは、非同期変換をサポートします。これは、XML文書を受け入れて、Extensible Stylesheet Language Transformation (XSLT)スタイルシートを適用して出力ファイルを作成します。XML文書をXML、HTML、データ定義言語(DDL)などのほぼすべてのテキストベースの形式に変換できます。 
                        
このBeanは、サーバー側のアプリケーションまたはサーブレットがXML文書(問合せ結果のXML表現など)をブラウザで表示するためにHTMLでレンダリングするための基礎として使用できます。
XSLTransformer Beanの主なメリットは、複数のファイルを同時に変換できることです。DOMBuilderと同様に、このBeanをビジュアル・アプリケーションで使用すると、GUIが長い期間応答しなくなることを防止できます。XSLTransformerListenerインタフェースを実装すると、変換が完了したときに起動元のアプリケーションに通知されます。
                        
D.1.3.3 DBAccess
oracle.xml.dbaccess.DBAccess Beanは、複数のXML文書およびテキスト・ドキュメントを含むキャラクタ・ラージ・オブジェクト(CLOB)表をメンテナンスします。
                        
このBeanは、データベース内でXML文書を処理しないが、データベースにXML文書を格納し、データベースからXML文書を取得する場合に使用できます。DBAccess Beanを使用するJavaアプリケーションは、JDBCを介してデータベースに接続します。CLOB表に格納されたXML文書がXMLType型でない場合は、エンティティが展開されません。
                        
DBAccess Beanを使用すると、次のタスクを実行できます。 
                        
- 
                              
CLOB型の表の作成および削除 - 
                              
CLOB表の内容の問合せ - 
                              
CLOB表に格納されたXML文書に対するINSERT、UPDATEおよびDELETE操作の実行 
D.1.3.4 XMLDBAccess
oracle.xml.xmldbaccess.XMLDBAccess Beanは、DBAccess Beanを拡張してXMLType表に格納されたXML文書をサポートします。このクラスは、XMLTypeインスタンスおよびそれらの表を表示、削除または取得するメソッドを提供します。たとえば、getXMLXPathTextData()メソッドは、XML文書からXPath式の値を取得します。 
                        
DBAccess JavaBeanは、複数のXML文書およびテキスト・ドキュメントを保持できるXMLType表をメンテナンスします。各XML文書またはテキスト・ドキュメントは、表の行として格納されます。表は、次のStructured Query Language (SQL)文で作成されます。
                        
CREATE TABLE (FILENAME   CHAR( ) UNIQUE, 
              FILEDATA   SYS.XMLType);
FILENAMEフィールドには、その行を検索、更新または削除するためにキーとして使用される一意の文字列があります。文書のテキストはFILEDATAフィールドに格納されます。
                        
XMLDBAccess Beanが実行するタスクは次のとおりです。
                        
- 
                              
XMLType表の作成および削除 - 
                              
XMLType列の内容の表示 - 
                              
XMLType表に格納されたXML文書に対するINSERT、UPDATEおよびDELETE操作の実行 
D.1.3.5 XMLDiff
XML文書を比較する場合は、文字単位で比較しても通常は役に立ちません。ほとんどのXMLの比較は、空白の違いではなく、構造や有意なテキスト・コンテンツの相違に関する比較です。
oracle.xml.differ.XMLDiff Beanが実行するタスクは次のとおりです。
                        
- 
                              
2つの入力XML文書のDOMツリーを構築および比較して、それらの文書が異なるかどうかを示します。
 - 
                              
2つのXMLファイルの差分をグラフィカルに表示します。具体的には、ノードの挿入、削除、変更または移動を参照できます。
 - 
                              
入力XML文書の1つを他方の文書に変換できるXSLTスタイルシートを生成します。
 
 XMLDiff Beanは、特にパイプライン・アプリケーションで役立ちます。たとえば、アプリケーションでXML文書を更新し、前のバージョンの文書と比較し、それらの違いを示すXSLTスタイルシートを格納できます。
                        
D.1.3.6 XMLCompress
Oracle XML Parserには、XML文書オブジェクトをバイナリ・ストリームとしてシリアライズできる圧縮プログラムが含まれています。
詳細は、「XMLの圧縮と解凍」を参照してください。便利なツールではありますが、XMLパーサーによる圧縮には次の短所があります。
- 
                              
XMLデータをデシリアライズしたとき、再解析が必要になります。
 - 
                              
タグの中にXMLデータをカプセル化すると、サイズが大幅に増加します。
 
oracle.xml.xmlcomp.XMLCompress Beanは、XML圧縮機能をカプセル化したものです。これを使用してXMLをシリアライズおよびデシリアライズすると、次の利点があります。
                        
- 
                              
DOMをシリアライズするメソッドをカプセル化し、ストリーム形式にします。
 - 
                              
XMLプロセッサは、XMLを再解析せずに圧縮ストリームからDOMを再生成できます。
 
このBeanは、DOMParserまたはSAXParserによって解析された入力XMLの圧縮と解凍をサポートします。DOM圧縮は、XMLType型、CLOB型およびBLOB型の入力をサポートします。
                        
様々な解析オプションを使用するには、入力前に文書を解析してから、XMLDocumentオブジェクトをCompressor Beanに渡します。圧縮係数は、入力XMLファイルおよび圧縮したファイルのサイズに基づく大まかな値です。圧縮係数メソッドは、java.io.Fileオブジェクトをパラメータとして使用して圧縮を行う場合にのみ使用できます。
                        
D.1.3.7 XSDValidator
oracle.xml.schemavalidator.XSDValidator Beanは、XSDValidatorクラスをカプセル化し、DOMツリーの検証機能を追加します。
                        
このBeanの便利な機能は、検証エラーに関する機能です。アプリケーションで検証エラーが発生すると、メソッドgetStackList()によって無効なノードを示すDOMツリー・パスのリストが戻されます。エラーのあるノードはスタック・ツリーのベクターに戻され、このスタックの最上位要素がルート・ノードに相当します。子ノードは、スタックから取り出して取得できます。getStackList()を使用するには、java.util.Vectorクラスおよびjava.util.Stackクラスのインスタンス化を使用する必要があります。
                        
D.2 XDK JavaBeansの使用: 概要
このトピックでは、JavaBeansの基本的な使用方法とデモ・プログラムの実行について説明します。
D.2.1 XDK JavaBeansの使用: 基本プロセス
より有用なBeanを使用するJavaアプリケーションのプログラム・フローについて説明します。これには、DOMBuilder、XSLTransformer、XMLDBAccessおよびXMLDiffが含まれます。 
                     
D.2.1.1 DOMBuilder JavaBeanの使用: 基本プロセス
クラスDOMBuilderは、World Wide Web Consortium (W3C)勧告に準拠したXML 1.0のパーサーを実装します。XML文書を解析してDOMツリーを構築します。解析は別のスレッドで行われます。ツリーが構築されたときに通知されるようにするには、インタフェースDOMBuilderListenerを使用する必要があります。
                        
このBeanを使用するアプリケーションを開発する場合、次のサブパッケージをインポートする必要があります。
- 
                                 
oracle.xml.async: DOMを構築するための非同期JavaBeansを提供します。 - 
                                 
oracle.xml.parser.v2: SAX、DOMおよびXSLTのAPIを提供します。 
サブパッケージoracle.xml.parser.v2は、「XML Parsing for Java」で説明されています。表D-1に、javax.xml.asyncパッケージの最も重要なDOM関連クラスおよびインタフェースを示します。
                           
表D-1 javax.xml.asyncのDOM関連クラスおよびインタフェース
| クラス/インタフェース | 説明 | 
|---|---|
| 
                                           
  | 
                                       
                                           XMLパーサーをカプセル化し、XML文書を解析してDOMツリーを構築します。解析は別のスレッドで行われます。ツリーが構築されたときに通知されるようにするには  | 
                                    
| 
                                           
  | 
                                       
                                           
  | 
                                    
| 
                                           
  | 
                                       
                                           非同期解析時のイベントに関する通知をプログラムで受信できるようにするには、このインタフェースを実装する必要があります。  | 
                                    
| 
                                           
  | 
                                       
                                           解析例外が発生したときに送信されるエラー・イベントを定義します。  | 
                                    
| 
                                           
  | 
                                       
                                           解析中に検出されたエラーの通知をプログラムで受信できるようにするには、このインタフェースを実装する必要があります。  | 
                                    
図D-1に、DOMBuilder JavaBeanを使用するアプリケーションの基本プロセスを示します。
                           
図D-1に示されたXML処理は次のとおりです。
D.2.1.2 XSLTransformer JavaBeanの使用: 基本プロセス
XSLTransformer Beanは、Beanインタフェースを使用してJava XMLパーサーのXSLT処理エンジンをカプセル化し、その機能を拡張して非同期変換を可能にします。Javaアプリケーションは、リスナーを登録することによって、コール元にすぐに制御を返し、大規模または連続したドキュメントを解析できます。 
                        
このBeanを使用するアプリケーションを開発する場合、次のサブパッケージをインポートする必要があります。
- 
                                 
oracle.xml.async: XSLT変換のための非同期JavaBeansを提供します。 - 
                                 
oracle.xml.parser.v2: XMLを解析するSAX、DOMおよびXSLTのAPIを提供します。 
oracle.xml.parser.v2サブパッケージの詳細は、「XML Parsing for Java」を参照してください。表D-2に、javax.xml.asyncパッケージの最も重要なXSL関連クラスおよびインタフェースを示します。
                           
表D-2 javax.xml.asyncのXSL関連クラスおよびインタフェース
| クラス/インタフェース | 説明 | 
|---|---|
| 
                                           
  | 
                                       
                                           バックグラウンド・スレッドでXSLT変換を適用します。  | 
                                    
| 
                                           
  | 
                                       
                                           
  | 
                                    
| 
                                           
  | 
                                       
                                           非同期変換時のイベントに関する通知をプログラムで受信できるようにするには、このインタフェースを実装する必要があります。  | 
                                    
| 
                                           
  | 
                                       
                                           
  | 
                                    
| 
                                           
  | 
                                       
                                           非同期変換時のエラー・イベントに関する通知をプログラムで受信できるようにするには、このインタフェースを実装する必要があります。  | 
                                    
図D-2に、XSLTransformer Beanの使用方法を示します。 
                           
図D-2に示された処理は、次のとおりです。
- XSLTスタイルシートとXMLインスタンス・ドキュメントを入力します。
 - XSLTリスナーを追加します。プログラムで、
XSLTransfomer.addXSLTransformerListener()メソッドを起動します。 - スタイルシートを適用します。
XSLTransfomer.processXSL()メソッドは、XSLT変換をバックグラウンドで開始します。 - オプションで、
XSLTransformerBeanを使用してその他の処理を実行します。 - プログラムが非同期コールを受信したとき、XSLTリスナーを起動します。このリスナーは、
XSLTransformerListenerインタフェースを実装する必要があり、xslTransformerOver()メソッドの起動によってコールされます。 - 変換結果をフェッチします。
XSLTransformer.getResult()メソッドを起動して、結果文書のXML文書フラグメントを戻します。 - XML文書フラグメントを出力します。
 
D.2.1.3 XMLDBAccess JavaBeanの使用: 基本プロセス
XMLDBAccess Beanの基本的な使用方法について説明します。
                        
XMLDBAccess Beanを使用するアプリケーションを開発する場合、次のサブパッケージを使用する必要があります。
                           
- 
                                 
oracle.xml.xmldbaccess:XMLDBAccessBeanが含まれます。 - 
                                 
oracle.xml.parser.v2: XMLを解析するSAX、DOMおよびXSLTのAPIを提供します。 
oracle.xml.parser.v2サブパッケージの詳細は、「XML Parsing for Java」を参照してください。表D-3に、XMLDBAccessクラスの重要なメソッドを示します。
                           
表D-3 XMLDBAccessのメソッド
| クラス/インタフェース | 説明 | 
|---|---|
| 
                                           
  | 
                                       
                                           
  | 
                                    
| 
                                           
  | 
                                       
                                           テキスト・ファイルを  | 
                                    
| 
                                           
  | 
                                       
                                           テキスト・ファイルを  | 
                                    
| 
                                           
  | 
                                       
                                           指定された文字列で開始する名前を持つXML表をすべて取得します。  | 
                                    
| 
                                           
  | 
                                       
                                           
  | 
                                    
| 
                                           
  | 
                                       
                                           XPath式に基づいて  | 
                                    
図D-3に、一般的なXMLDBAccess Beanの使用方法を示します。これは、DBAccess Beanを使用して、XMLTypeで格納されたXML文書をメンテナンスおよび操作する方法です。
                           
たとえば、XMLDBAccessプログラムでは、次のようにXML文書を処理できます。
                           
XMLType表を作成します。データベース接続情報および表名を渡して、createXMLTypeTable()を起動します。XMLType表のリストを作成します。データベース接続情報および空の文字列を渡して、getXMLTypeTableNames()を起動します。- 表にXMLデータをロードします。データベース接続情報、表名、XMLファイル名およびXMLを含む文字列を渡して、
replaceXMLTypeData()を起動します。 - XMLデータを
Stringとして取得します。接続情報、表名およびXMLファイル名を渡して、getXMLTypeData()を起動します。 - XPath式に基づいてXMLデータを取得します。接続情報、表名、XMLファイル名およびXPath式を渡して、
getXMLXPathTextData()を起動します。 - 接続を終了します。
 
D.2.1.4 XMLDiff JavaBeanの使用: 基本プロセス
XMLDiff Beanの基本的な使用方法について説明します。
                        
XMLDiff Beanを使用するアプリケーションを開発する場合、一般的に使用するサブパッケージは次のとおりです。
                           
- 
                                 
oracle.xml.xmldiff:XMLDiffBeanが含まれます。 - 
                                 
oracle.xml.parser.v2: XMLを解析するSAX、DOMおよびXSLTのAPIを提供します。 - 
                                 
oracle.xml.async: DOMを構築するための非同期JavaBeansを提供します。 
サブパッケージoracle.xml.parser.v2の詳細は、「XML Parsing for Java」を参照してください。表D-4に、クラスXMLDiffの重要なメソッドを示します。
                           
表D-4 XMLDiffのメソッド
| クラス/インタフェース | 説明 | 
|---|---|
| 
                                           
  | 
                                       
                                           2つの入力XMLファイルまたは2つのXMLDocumentオブジェクトの差分を検出します。  | 
                                    
| 
                                           
  | 
                                       
                                           2つの入力XMLファイルの差分を表すXSLファイルを生成します。生成されたスタイルシートを使用して、最初のXMLファイルを2つ目のXMLファイルに変換できます。2つのXMLファイルが同じである場合は、生成されたXSLで最初のXMLファイルを2つ目のXMLファイルに変換でき、ここで最初のファイルと2つ目のファイルは同等です。 関連メソッドは、  | 
                                    
| 
                                           
  | 
                                       
                                           比較するXMLファイルを設定します。  | 
                                    
| 
                                           
  | 
                                       
                                           最初のXMLツリーのドキュメント・ルートを  | 
                                    
| 
                                           
  | 
                                       
                                           テキスト・パネルを、最初のXMLファイルの差分をビジュアルに表示する  | 
                                    
図D-4に、一般的なXMLDiff Beanの使用方法を示します。これは、XMLDiff Beanを使用して入力XML文書を比較し、差分を表示する方法です。
                           
たとえば、XMLDiffプログラムでは、次のようにXML文書を処理できます。
                           
XMLDiffオブジェクトを作成します。- 比較するファイルを設定します。入力ファイルの
Fileオブジェクトを作成し、XMLDiff.setFiles()にオブジェクトへの参照を渡します。 - 文書を比較します。XMLファイルが同一の場合は
diff()メソッドからfalseが戻り、異なる場合はtrueが戻ります。 - 入力XML文書が同一であるか異なるかに応じて対処します。たとえば、同一である場合は、
JOptionPane.showMessageDialog()を起動してメッセージを出力します。 - 入力XML文書の差分を示すXSLTスタイルシートを生成します。たとえば、
generateXSLDoc()は、XSLスタイルシートをXMLDocumentとして生成します。 XMLDiffによって作成されたDOMツリーを表示します。
D.2.2 XDK JavaBeanのデモ・プログラムの実行
XDK SJavaBeansのデモ・プログラムは、ディレクトリ$ORACLE_HOME/xdk/demo/java/transviewerにあります。
                     
デモでは、「XDK JavaBeansの機能」で説明しているXDK Bean、および非推奨となった一部のビジュアルなBeanの使用方法を示します。デモで使用されているBeanは、次のとおりです。
- 
                              
XSLTransformer - 
                              
DOMBuilder - 
                              
DBAccess - 
                              
XMLDBAccess - 
                              
XMLDiff - 
                              
XMLCompress - 
                              
XSDValidator - 
                              
oracle.xml.srcviewer.XMLSourceView(非推奨) - 
                              
oracle.xml.treeviewer.XMLTreeView(非推奨) - 
                              
oracle.xml.transformer.XMLTransformPanel(非推奨) - 
                              
oracle.xml.dbviewer.DBViewer(非推奨) 
ビジュアルなBeanは非推奨ですが、学習用として役に立ちます。非推奨のBeanはそのために$ORACLE_HOME/lib/xmldemo.jarに含まれています。推奨のBeanは$ORACLE_HOME/lib/xml.jarにあります。
                        
表D-5に、デモ・ディレクトリにあるサンプル・プログラムを示します。表の最初の列に、非推奨のBeanがどのサンプル・プログラムで使用されているかを示します。
表D-5 JavaBeanのサンプルJavaソース・ファイル
| サンプル | ファイル名 | 説明 | 
|---|---|---|
| 
                                        
 (非推奨)  | 
                                    
                                        
  | 
                                    
                                        このビジュアル・アプリケーションでは、  | 
                                 
| 
                                        
 (非推奨)  | 
                                    
                                        
  | 
                                    
                                        このサンプルのビジュアル・アプリケーションでは、  | 
                                 
| 
                                        
  | 
                                    
                                        
  | 
                                    
                                        この非ビジュアル・アプリケーションでは、  | 
                                 
| 
                                        
 (非推奨)  | 
                                    
                                        
  | 
                                    
                                        このビジュアル・アプリケーションでは、  | 
                                 
| 
                                        
 (非推奨)  | 
                                    
                                        
  | 
                                    
                                        この  | 
                                 
| 
                                        
 (非推奨)  | 
                                    
                                        
  | 
                                    
                                        この  | 
                                 
| 
                                        
  | 
                                    
                                        
  | 
                                    
                                        この非ビジュアル・アプリケーションでは、 
  | 
                                 
| 
                                        
 (非推奨)  | 
                                    
                                        
  | 
                                    
                                        このビジュアル・アプリケーションでは、  | 
                                 
| 
                                        
 (非推奨)  | 
                                    
                                        
  | 
                                    
                                        
  | 
                                 
| 
                                        
 (非推奨)  | 
                                    
                                        
  | 
                                    
                                        
  | 
                                 
| 
                                        
 (非推奨)  | 
                                    
                                        
  | 
                                    
                                        このビジュアル・アプリケーションでは、  | 
                                 
| 
                                        
 (非推奨)  | 
                                    
                                        
  | 
                                    
                                        GUIの情報をBeanにパイプする単純なクラスです。このクラスは、  | 
                                 
| 
                                        
 (非推奨)  | 
                                    
                                        
  | 
                                    
                                        
  | 
                                 
| 
                                        
 (非推奨)  | 
                                    
                                        
  | 
                                    
                                        
  | 
                                 
| 
                                        
 (非推奨)  | 
                                    
                                        
  | 
                                    
                                        
  | 
                                 
| 
                                        
 (非推奨)  | 
                                    
                                        
  | 
                                    
                                        このビジュアル・アプリケーションでは、  | 
                                 
| 
                                        
 (非推奨)  | 
                                    
                                        
  | 
                                    
                                        解析済のXMLインスタンス・ドキュメントをツリーとして表示する  | 
                                 
| 
                                        
 (非推奨)  | 
                                    
                                        
  | 
                                    
                                        このビジュアル・アプリケーションでは、  | 
                                 
| 
                                        
 (非推奨)  | 
                                    
                                        
  | 
                                    
                                        
  | 
                                 
| 
                                        
  | 
                                    
                                        
  | 
                                    
                                        このアプリケーションは、  | 
                                 
表D-6に、デモ・プログラムで使用されるその他のファイルを示します。
表D-6 JavaBeanのサンプル・ファイル
| ファイル名 | 説明 | 
|---|---|
| 
                                        
  | 
                                    
                                        
  | 
                                 
| 
                                        
  | 
                                    
                                        
  | 
                                 
| 
                                        
  | 
                                    
                                        このXML文書は、  | 
                                 
| 
                                        
  | 
                                    
                                        
  | 
                                 
| 
                                        
  | 
                                    
                                        
  | 
                                 
| 
                                        
  | 
                                    
                                        
  | 
                                 
| 
                                        
  | 
                                    
                                        
  | 
                                 
| 
                                        
  | 
                                    
                                        
  | 
                                 
| 
                                        
  | 
                                    
                                        
  | 
                                 
| 
                                        
  | 
                                    
                                        
  | 
                                 
サンプル・プログラムのコンパイル方法および実行方法は、同じディレクトリにあるREADMEに示されています。この場合、基本的なステップは次のようになります。
                        
D.2.2.1 sample1の実行
sample1は、XMLTransViewer Beanを使用するプログラムです。
                        
次のように手動でプログラムを実行できます。
java XMLTransformPanelSample
このプログラムを使用して、OracleデータベースのXMLファイルをインポートおよびエクスポートし、データベースにXSL変換ファイルを格納し、XMLにスタイルシートを対話式に適用できます。このプログラムでデータベース接続機能を使用するには、データベースを実行しているコンピュータのネットワーク名、ポート(通常は1521)およびOracleインスタンスの名前(通常はorcl)を把握しておく必要があります。また、CREATE TABLE権限を持つアカウントも必要です。サンプル・スキーマをインストールした場合は、アカウントhrを使用できます。XMLTransViewerプログラムを使用して、XMLファイルにスタイルシート変換を適用し、結果を表示できます。表示されるパネルの上部および下部にはタブがあります。上部にある最初の2つのタブを使用して、XMLバッファとXSLTバッファを切り替えることができます。3つ目のタブでは、XMLバッファに対してXSLT変換を実行し、結果を表示します。下部にある最初の2つのタブを使用して、Oracleデータベースおよびファイル・システムのデータをロードおよび保存できます。下部の残りのタブでは、現在のコンテンツの表示をツリー表示、XMLソース、編集モードまたはHTML(変換後の結果の表示の場合)に切り替えます。
                           
D.2.2.2 sample2の実行
sample2は、XMLSourceViewおよびXMLTreeView BeanのGUIベースのデモで、非推奨です。ViewSampleプログラムでは、booklist.xmlファイルが、ソース表示とツリー表示に別々に示されます。
                        
次のように手動でプログラムを実行できます。
java ViewSampleD.2.2.3 sample3の実行
sample3は、非同期のDOMBuilder BeanおよびXSLTransformer Beanの非ビジュアルなデモです。AsyncTransformSampleプログラムは、現在のディレクトリ内のすべての*.xmlファイルにdoc.xsl XSLTスタイルシートを適用します。結果は、拡張子が.logであるファイルに書き込まれます。 
                        
次のように手動でプログラムを実行できます。
java AsyncTransformSample
D.2.2.4 sample4の実行
sample4はDBViewer Beanのビジュアルなデモで、非推奨です。
                        
これは、次のように実行されます。
JDBC接続情報は、デモで使用されるクラスを実装するDBViewClaims.javaソース・ファイルにハードコードされています。特に、USERID、PASSWORDおよびその他の値は、Makefileに設定された値であることが前提になっています。使用する構成が異なる場合は、DBViewClaims.javaの92行にナビゲートし、setUsername()、setPassword()およびその他を現在のOracleデータベース構成を反映した値に変更します。
                           
D.2.2.5 sample5の実行
Sample5は、XMLDBAccess Beanの非ビジュアルなデモです。これは、XMLTypeオブジェクトを使用してXML文書をデータベース内に格納します。次のプログラムでは、Javaシン・クライアントを使用してデータベースに接続し、XMLType表を作成してbooklist.xmlからデータをロードします。 
                        
このプログラムを実行するには、次の情報をコマンドライン引数として指定する必要があります。
- 
                                 
ホスト名(たとえば、
myhost) - 
                                 
ポート番号(たとえば、
1521) - 
                                 
データベースのSID(たとえば、
ORCL) - 
                                 
表を作成するためのデータベース・アカウント(たとえば、
hr) - 
                                 
データベース・アカウントのパスワード(たとえば、
hr) 
たとえば、次のようにプログラムを実行できます。
java XMLDBAccessSample myhost 1521 ORCL hr hr
次のテキストは、dbaccess.logからのサンプル出力です。
                           
Demo for createXMLTypeTables():
Table +'testxmltype' successfully created.
 
Demo for listXMLTypeTables():
tablenamename=TESTXMLTYPE
 
Demo for replaceXMLTypeData() (similar to insert):
XML Data from +'booklist.xml' successfully replaced in table 'testxmltype'.
 
Demo for getXMLTypeData():
XMLType data fetched:
<?xml version="1.0"?>
<booklist>  
  <book isbn="1234-123456-1234">    
    <title>C Programming Language</title>    
    <author>Kernighan and Ritchie</author>    
    <publisher>EEE</publisher>    
    <price>7.99</price>  
  </book>
...
  <book isbn="1230-23498-2349879">    
    <title>Emperor's New Mind</title>    
    <author>Roger Penrose</author>    
    <publisher>Oxford Publishing Company</publisher>    
    <price>15.99</price>  
  </book>
</booklist>
 
Demo for getXMLTypeXPathTextData():
Data fetched using XPath exp '/booklist/book[3]':
<book isbn="2137-598354-65978">
  <title>Twelve Red Herrings</title>
  <author>Jeffrey Archer</author>
  <publisher>Harper Collins</publisher>
  <price>12.95</price>
</book>D.2.2.6 sample6の実行
sample6プログラムは、XMLDiff Beanのビジュアルなデモです。
                        
 XMLDiffSampleクラスによってGUIが起動され、XMLファイルの比較を選択すると、「ファイル」メニューから入力データ・ファイルを選択できます。「変換」メニューを使用して、生成されたXSLTを最初の入力XMLに適用できます。「ファイル」メニューの「別名保存」を選択して、出力XMLファイルを保存します。このファイルは、2つ目の入力ファイルと同じになります。デフォルトでは、XMLDiffData1.txtがXMLDiffData2.txtと比較され、XSLT出力がXMLDiffSample.xslとして格納されます。 
                           
次のように手動でプログラムを実行できます。
java -mx50m XMLDiffSample XMLDiffData1.txt XMLDiffData2.txt
ファイアウォールの外側の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");
/* You will also have to import java.util.*; */D.2.2.7 sample7の実行
sample7のビジュアル・デモでは、XMLCompress Beanの使用方法を示します。クラスcompviewerを使用すると、GUIを起動して、XMLファイルとデータベースから取得したデータを圧縮および解凍できます。ロード・オプションにより、データをファイル・システムまたはデータベースから取得できます。
                        
このアプリケーションでは、データベースからの圧縮データのロードおよび保存はサポートされません。圧縮係数は、XMLデータの圧縮率を示す大まかな値です。
次のように手動でプログラムを実行できます。
java compviewer
D.2.2.8 sample8の実行
sample8デモでは、XMLTreeViewer Beanを使用します。XMLSchemaTreeViewerプログラムを使用すると、XMLDocumentをツリー形式で表示できます。ユーザーは、XMLスキーマ・ドキュメントを入力して、インスタンス・ドキュメントをスキーマに対して検証できます。ドキュメントが無効な場合は、無効なノードが強調表示され、エラー・メッセージが表示されます。
                        
また、すべてのライン情報のログが専用のパネルに表示され、このパネルを使用してインスタンス・ドキュメントを編集および再評価できます。サンプル・ファイルpurchaseorder.xmlおよびpurchaseorder.xsdを使用して、このプログラムをテストします。インスタンス・ドキュメントpurchaseorder.xmlは、purchaseorder.xsdで定義されたスキーマに準拠していません。
                           
次のように手動でプログラムを実行できます。
java XMLSchemaTreeViewer
D.2.2.9 sample9の実行
sample9デモでは、SourceViewer Beanを使用します。XMLSrcViewerプログラムでは、構文の強調表示を有効にして、XML文書またはDTDを表示できます。入力したXMLスキーマまたはDTDに対して文書を検証できます。内部または外部のDTDを使用できます。
                        
検証が成功した場合は、「ソース表示」ペインでインスタンス・ドキュメントおよびXMLスキーマまたはDTDを表示できます。スキーマ検証でエラーが検出された場合は、「エラー」ペインにエラー・ログと行番号が表示されます。「ソース表示」ペインには、エラー・ノードがハイライトされた状態でXML文書が表示されます。サンプル・ファイルpurchaseorder.xmlおよびpurchaseorder.xsdをは、XMLスキーマ検証のエラーをテストするために使用できます。note_in_dtd.xmlをDTD検証モードで使用すると、検証エラーとともに内部DTDを表示できます。次のように手動でプログラムを実行できます。
                           
java XMLSrcViewer
D.2.2.10 sample10の実行
sample10のデモでは、XSDValidator Beanの使用方法を示します。 
                        
XSDValidatorSampleプログラムの2つの入力引数は、XML文書とその関連XMLスキーマです。このプログラムでは、検証中に発生したエラーが、行番号を含めて表示されます。
                           
次のプログラムでは、purchaseorder.xsdを使用してpurchaseorder.xmlの内容を検証します。
                           
java XSDValidatorSample purchaseorder.xml purchaseorder.xsd
このXML文書は、スキーマ検証で失敗します(予定どおりの動作)。次のエラーが表示されます。
Sample purchaseorder.xml purchaseorder.xsd <Line 2, Column 41>: XML-24523: (Error) Invalid value 'abc' for attribute: 'orderDate' #document->purchaseOrder <Line 7, Column 27>: XML-24525: (Error) Invalid text 'CA' in element: 'state' #document->purchaseOrder->shipTo->state->#text <Line 8, Column 25>: XML-24525: (Error) Invalid text 'sd' in element: 'zip' #document->purchaseOrder->shipTo->zip->#text <Line 14, Column 27>: XML-24525: (Error) Invalid text 'PA' in element: 'state' #document->purchaseOrder->billTo->state->#text <Line 17, Column 22>: XML-24534: (Error) Element 'coment' not expected. #document->purchaseOrder->coment <Line 29, Column 31>: XML-24534: (Error) Element 'shipDae' not expected. #document->purchaseOrder->items->item->shipDae
D.3 XDK JavaBeansでのXMLの処理
このトピックでは、DOMBuilder BeanとXSLTransformer Beanを使用したXML文書の非同期処理、およびXmlDiff Beanを使用したXML文書の比較について説明します。
                  
D.3.1 DOMBuilder BeanおよびXSLTransformer BeanによるXMLの非同期処理
XDK JavaBeansを使用して、XMLの非同期処理を実行できます。
詳細は、「XSLTransformer」を参照してください。
AsyncTransformSample.javaプログラムは、DOMBuilder BeanおよびXSLTransformer Beanの使用方法を示します。このプログラムは次のメソッドを実装します。
                        
- 
                              
runDOMBuilders() - 
                              
runXSLTransformer() - 
                              
saveResult() - 
                              
makeXSLDocument() - 
                              
createURL() - 
                              
init() - 
                              
exitWithError() - 
                              
asyncTransform() 
プログラムの基本的なアーキテクチャは次のとおりです。
- 
                              
このプログラムは、クラスで使用されるフィールドを宣言および初期化します。入力XSLTスタイルシートは、
doc.xslとしてプログラムにハードコードされています。クラスでは次のフィールドを定義します。String basedir = new String ("."); OutputStream errors = System.err; Vector xmlfiles = new Vector(); int numXMLDocs = 1; String xslFile = new String ("doc.xsl"); URL xslURL; XMLDocument xsldoc - 
                              
main()メソッドがinit()メソッドを起動して初期設定が実行されます。現在のディレクトリ内のファイルがリストされ、拡張子.xmlで終わるファイルが見つかった場合は、Vectorオブジェクトに追加されます。init()メソッドの実装は次のとおりです。boolean init () throws Exception { File directory = new File (basedir); String[] dirfiles = directory.list(); for (int j = 0; j < dirfiles.length; j++) { String dirfile = dirfiles[j]; if (!dirfile.endsWith(".xml")) continue; xmlfiles.addElement(dirfile); } if (xmlfiles.isEmpty()) { System.out.println("No files in directory were selected for processing"); return false; } numXMLDocs = xmlfiles.size(); return true; } - 
                              
main()メソッドは次のようにAsyncTransformSampleをインスタンス化します。AsyncTransformSample inst = new AsyncTransformSample();
 - 
                              
main()メソッドがasyncTransform()メソッドを起動します。asyncTransform()メソッドの主なタスクは次のとおりです。- 
                                    
makeXSLDocument()を起動して入力XSLTスタイルシートを解析します。 - 
                                    
runDOMBuilders()を起動して、インスタンス・ドキュメント(変換されるドキュメント)の解析を開始し、解析後にドキュメントを変換します。 
XMLの処理が開始すると、プログラムに制御が戻り、バックグラウンドで処理が実行されるまで待機します。最後のリクエストが完了すると、メソッドが終了します。
次のコードは、
asyncTransform()メソッドの実装を示します。void asyncTransform () throws Exception { System.err.println (numXMLDocs + " XML documents will be transformed" + " using XSLT stylesheet specified in " + xslFile + " with " + numXMLDocs + " threads"); makeXSLDocument (); runDOMBuilders (); // wait for the last request to complete while (rm.activeFound()) Thread.sleep(100); } - 
                                    
 
D.3.1.1 入力XSLTスタイルシートの解析
XSLTスタイルシートの解析について説明します。
メソッドmakeXSLDocument()は、スタイルシートの単純なDOM解析を実行します。非同期解析は使用しません。方法は、「基本的なDOM解析の実行」で説明している方法と同じです。
                           
メソッドは次のステップを実行します。
D.3.2 XMLDiff JavaBeanによるXML文書の比較
XDK JavaBeansを使用して、XML文書の構造および有意なコンテンツを比較できます。
詳細は、「XMLDiff」を参照してください。
XMLDiffSample.javaプログラムは、XMLDiff Beanの使用方法を示します。このプログラムは次のメソッドを実装します。
                        
- 
                              
showDiffs() - 
                              
doXSLTransform() - 
                              
createURL() 
プログラムの基本的なアーキテクチャは次のとおりです。
- 
                              
このプログラムは、クラスで使用されるフィールドを宣言および初期化します。
XMLDiffFrame型のフィールドが1つあります。これはXMLDiffFrame.javaデモで実装されるクラスです。クラスでは次のフィールドを定義します。protected XMLDocument doc1; /* DOM tree for first file */ protected XMLDocument doc2; /* DOM tree for second file */ protected static XMLDiffFrame diffFrame; /* GUI frame */ protected static XMLDiffSample dfxApp; /* XMLDiff sample application */ protected static XMLDiff xmlDiff; /* XML diff object */ protected static XMLDocument xslDoc; /* parsed xsl file */ protected static String outFile = new String("XMLDiffSample.xsl"); /* output xsl file name */ - 
                              
main()メソッドで次のようにXMLDiffSampleオブジェクトを作成します。dfxApp = new XMLDiffSample();
 - 
                              
main()メソッドが、比較の結果を表示するためのJFrameを追加および初期化します。次のコード部分は、この方法を示します。diffFrame = new XMLDiffFrame(dfxApp); diffFrame.addTransformMenu();
 - 
                              
main()メソッドがXMLDiffBeanをインスタンス化します。次のコード部分は、この方法を示します。xmlDiff = new XMLDiff();
 - 
                              
main()メソッドがshowDiffs()メソッドを起動します。このメソッドは、次のタスクを実行します。- 
                                    
XMLDiff.diff()を起動して、入力XML文書を比較します。 - 
                                    
入力文書の1つを他の文書に変換できるXSLTスタイルシートを生成し、表示します。
 
次のコード部分は、
showDiffs()メソッドの起動を示します。if (args.length == 3) outFile = args[2]; if(args.length >= 2) dfxApp.showDiffs(new File(args[0]), new File(args[1])); diffFrame.setVisible(true);
 - 
                                    
 
D.3.2.1 XMLファイルの比較とスタイルシートの生成
メソッドshowDiffs()は、XMLDiff Beanの使用方法を示します。
                        
メソッドは次のステップを実行します。
- 
                                 
XMLDiffプロセッサに対してファイルを設定します。この方法を示す文は次のとおりです。xmlDiff.setFiles(file1, file2);
 - 
                                 
ファイルを比較します。
diff()メソッドは、入力文書の構造および内容が同一であるかどうかを示すブール値を戻します。同一である場合は、XMLDiffFrameクラスで実装されたJFrameにメッセージが出力されます。次のコード部分は、この方法を示します。if(!xmlDiff.diff()) { JOptionPane.showMessageDialog ( diffFrame, "Files are equivalent in XML representation", "XMLDiffSample Message", JOptionPane.PLAIN_MESSAGE ); } - 
                                 
2つのドキュメントの差分を示すXSLTスタイルシート用にDOMを生成します。次のコード部分は、この方法を示します。
xslDoc = xmlDiff.generateXSLDoc();
 - 
                                 
XMLDiffFrameで実装されたJFrameにドキュメントを表示します。XMLSourceViewBeanをインスタンス化するXMLDiffFrameは、非推奨です。メソッドは次のステップを実行します。- 
                                       
入力ドキュメントのためのソース・ペインを作成します。次に示すように、
diffFrameオブジェクトに2つのドキュメントのDOMハンドルを渡して、ソース・ペインを作成します。diffFrame.makeSrcPane(xmlDiff.getDocument1(), xmlDiff.getDocument2());
 - 
                                       
ドキュメントの差分を表示するペインを作成します。次に示すように、テキスト・ペインへの参照を
diffFrameに渡します。diffFrame.makeDiffSrcPane(new XMLDiffSrcView(xmlDiff.getDiffPane1()), new XMLDiffSrcView(xmlDiff.getDiffPane2())); - 
                                       
XSLTスタイルシートのペインを作成します。次のように、スタイルシートのDOMを渡します。
diffFrame.makeXslPane(xslDoc, "Diff XSL Script"); diffFrame.makeXslTabbedPane();
 
 - 
                                       
 



