19 XML Pipeline Processor for Javaの使用
Extensible Markup Language (XML) Pipeline Processor for Javaの使用方法について説明します。
19.1 XML Pipeline Processorの概要
このトピックでは、前提条件、標準と仕様、マルチステージ処理、およびカスタマイズしたパイプライン処理について説明します。
19.1.1 XML Pipeline Processor for Javaの使用の前提条件
XML Pipeline Processorの使用の前提条件を示します。
この章では、次の内容を十分に理解していると想定します。
-
XML Pipeline Definition Language: このXML言語を使用すると、XMLリソース間の処理リレーションを記述できます。Pipeline Definition Languageの詳しい説明は、「関連ドキュメント」に記載されているXMLの資料を参照してください。
-
Document Object Model (DOM): DOMは、XML文書の構造を示すインメモリー・ツリー表現です。
-
Simple API for XML (SAX): SAXは、イベントベースのXML解析の標準です。
-
XML Schema言語。概要および関連資料へのリンクは、「XML Schema Processor for Javaの使用」を参照してください。
19.1.2 XML Pipeline Processor for Javaの標準および仕様
Oracle XML Pipeline Processorは、World Wide Web Consortium (W3C)ノートのXML Pipeline Definition Languageバージョン1.0に基づいています。W3Cノートでは、アプリケーション・プログラミング・インタフェース(API)ではなくXMLボキャブラリが定義されています。
「XDK for JavaのためのPipeline Definition Language標準」で、W3CノートとOracle XML Developer's Kit (XDK)でのOracle XML Pipeline Processorの実装との違いについて説明します。
19.1.3 XMLのマルチステージ処理
Oracle XML Pipeline Processorは、XML Pipeline Definition Languageに基づいています。入力XMLパイプライン文書を受け取り、派生した依存性に基づいてパイプライン・プロセスを実行できます。
XMLで記述されるパイプライン文書は、実行するプロセスを宣言方式で指定します。パイプライン文書中に<processdef/>
要素を使用して、Javaクラスをプロセスに関連付けることができます。
Pipeline Processorはマルチステージ処理に使用します。マルチステージ処理は、XMLコンポーネントを順次またはパラレルに処理するときに発生します。ある処理ステージの出力を別の処理ステージの入力にすることができます。プロセスの入力と出力を定義するパイプライン・ドキュメントを記述できます。図19-1に、可能なパイプライン・シーケンスを示します。
XML Pipeline Processor自体に加えて、XDKにはパイプライン文書内で連結できるプロセス用のAPIが提供されています。表19-2に、oracle.xml.pipeline.processes
パッケージで提供されているクラスの概要を示します。
パイプラインでの一般的なXML処理ステージは次のとおりです。
-
入力XML文書を解析します。
oracle.xml.pipeline.processes
パッケージには、DOM解析用のDOMParserProcess
と、SAX解析用のSAXParserProcess
が含まれます。 -
入力XML文書を検証します。
-
入力文書をシリアライズまたは変換します。パイプライン・プロセッサではSAXパーサーをExtensible Stylesheet Language Transformation (XSLT)プロセッサに接続できません。DOMが必要です。
マルチステージ処理において、大規模なXML文書のフィルタ処理と検索にはSAXが最適です。XMLコンテンツを変更するには、または効率的に動的にアクセスするには、DOMを使用します。
関連項目:
パイプライン・アプリケーションへの入力を提供するパイプライン文書を記述する方法は、「パイプラインでのXMLの処理」を参照してください
19.1.4 カスタマイズしたパイプライン・プロセス
クラスoracle.xml.pipeline.controller.Process
は、すべてのパイプライン・プロセス定義のベース・クラスです。パッケージoracle.xml.pipeline.processes
のクラスは、このベース・クラスを拡張します。カスタマイズしたパイプライン・プロセスを作成するには、クラスProcess
を拡張するクラスを作成する必要があります。
少なくとも、すべてのカスタム・プロセスは、Process
クラスの何も処理を行わないinitialize()
およびexecute()
メソッドをオーバーライドする必要があります。カスタマイズしたプロセスがSAXイベントを入力として受け入れる場合は、受信したSAXイベントを処理する適切なContentHandler
を戻すように、SAXContentHandler()
メソッドをオーバーライドする必要があります。また、適切なErrorHandler
を戻すように、SAXErrorHandler()
メソッドをオーバーライドする必要があります。表19-1に、前述のメソッドの詳細を示します。
表19-1 クラスoracle.xml.pipeline.controller.Processのメソッド
クラス | 説明 |
---|---|
|
プロセスを実行前に初期化します。
|
|
プロセスを実行します。
|
|
SAXの 他のプロセスから発生する依存性が使用可能でない場合は、 |
|
SAXの このメソッドをオーバーライドしなかった場合、JAXBプロセッサは、このクラスに実装されているデフォルト・エラー・ハンドラを使用してSAXエラーを処理します。 |
関連項目:
パッケージoracle.xml.pipeline.processes
の詳細は、Oracle Database XML Java APIリファレンスを参照してください
19.2 XML Pipeline Processor for Javaの使用: 概要
このトピックでは、基本プロセス、デモ・プログラムの実行、およびXML Pipeline Processorコマンドライン・ユーティリティの使用について説明します。
19.2.1 XML Pipeline Processor for Javaの使用: 基本プロセス
XML Pipeline Processor for Javaの基本プロセスについて説明します。
XML Pipeline processor for Javaには次のパッケージを介してアクセスできます。
-
oracle.xml.pipeline.controller
: 依存性に基づいてパイプラインのXMLプロセスを実行するXMLパイプライン・コントローラを提供します。 -
oracle.xml.pipeline.processes
: XMLパイプライン・コントローラで実行できるXMLプロセスのラッパー・クラスを提供します。oracle.xml.pipelin.processes
パッケージには、パイプライン・アプリケーション・フレームワークの設計に使用できるクラスが含まれます。各クラスは、oracle.xml.pipeline.controller.Process
クラスを拡張します。表19-2に、パッケージに含まれるコンポーネントを示します。XML Pipeline Processorとパイプライン文書を組み合せることによって、これらのコンポーネントとプロセスを連結できます。
表19-2 oracle.xml.pipeline.processesのクラス
クラス | 説明 |
---|---|
|
圧縮されたXMLを受け取り、解析済XMLを出力します。 |
|
DOMまたはSAXによって解析されたXMLを受け取り、圧縮済XMLを出力します。 |
|
受信したXMLを解析し、DOMツリーを出力します。 |
|
受信したXMLを解析し、SAXイベントを出力します。 |
|
DOMを入力として受け入れ、XPathパターンを使用してXML |
|
XMLスキーマを解析し、検証のためのスキーマ・オブジェクトを出力します。このプロセスはXML Pipeline Processorに組み込まれています。XML文書の検証に使用されるスキーマ・オブジェクトを作成します。 |
|
ローカル・スキーマと照合して検証し、結果を分析し、必要に応じてエラーを報告します。 |
|
DOMを入力として受け入れ、XSLスタイルシートを適用し、変換の結果を出力します。 |
|
XSLスタイルシートをストリームまたはDOMとして受け取り、 |
図19-2に、XML Pipeline Processorを使用するJavaアプリケーションにパイプライン文書を渡し、プロセッサを構成し、パイプラインを実行する方法を示します。
この場合、基本的なステップは次のようになります。
関連項目
19.2.2 XML Pipeline Processorのデモ・プログラムの実行
XML Pipeline Processorのデモ・プログラムは、$ORACLE_HOME/xdk/demo/java/pipeline
にあります。
表19-4に、ユーティリティのテストに使用できるXMLファイルとJavaソース・ファイルを示します。
表19-4 Pipeline Processorのサンプル・ファイル
ファイル | 説明 |
---|---|
|
Pipeline Processorのデモの設定方法が記述されたテキスト・ファイル。 |
|
Pipeline Processorのサンプル・アプリケーション。このプログラムは第1引数として |
|
|
|
一連の書籍を記述したサンプルXML文書。この文書は、 |
|
|
|
|
|
|
|
|
|
パイプライン文書。このドキュメントは次の処理を指定します。(1)プロセスp1でDOMを使用して |
|
パイプライン文書。このドキュメントは次の処理を指定します。(1)プロセスp1でSAXを使用して |
|
パイプライン文書。この文書は次の処理を指定します。(1)プロセスp5でDOMを使用して |
|
パイプライン文書。このドキュメントは次の処理を指定します。(1)プロセスp1でDOMを使用して |
|
発注書を記述したサンプルXML文書。この文書は、 |
サンプル・プログラムのコンパイル方法および実行方法は、README
に示されています。この場合、基本的なステップは次のようになります。
19.2.3 XML Pipeline Processorコマンドライン・ユーティリティの使用
XML Pipeline Processorのコマンドライン・インタフェースは、orapipe
といいます。Pipeline Processorは、Oracle Databaseにパッケージ化されています。Oracle Universal Installerを使用すると、デフォルトでディスク上の$ORACLE_HOME/bin
にユーティリティがインストールされます。
初めてユーティリティを実行する場合は、「XDK for Java環境の設定」の説明に従って、環境変数が設定されていることを確認します。オペレーティング・システムのコマンドラインで、次の構文を使用してorapipe
を実行します。
orapipe options pipedoc
pipedoc
はパイプライン文書であり、必須です。表19-5に、orapipe
ユーティリティの使用可能なオプションを示します。
表19-5orapipeのコマンドライン・オプション
オプション | 用途 |
---|---|
|
ヘルプ・メッセージを出力します。 |
|
指定されたログ・ファイルにエラーおよびメッセージを書き込みます。デフォルトは |
|
情報項目をログに記録しません。デフォルトはオンです。 |
|
警告をログに記録しません。デフォルトはオンです。 |
|
パイプライン・スキーマで入力 |
|
バージョン番号を出力します。 |
|
シーケンシャル・モードでパイプラインを実行します。デフォルトはパラレルです。 |
|
ターゲットが最新の状態にある場合でもパイプラインを実行します。デフォルトでは、forceは指定されていません。 |
|
|
19.3 パイプラインでのXMLの処理
このトピックでは、パイプライン文書の作成、パイプライン・プロセッサ・アプリケーションの作成、およびパイプライン・エラー・ハンドラの作成について説明します。
19.3.1 パイプライン文書の作成
Oracle XML Pipeline Processorを使用するには、W3Cノートで指定されたPipeline Definition Languageの規則に従ってXML文書を作成する必要があります。W3C仕様では、XML処理コンポーネントとプロセスの入力および出力が定義されています。
XML Pipeline Processorには、次のXDKコンポーネントのサポートが含まれます。
-
XMLパーサー
-
XML Compressor
-
XML Schemaバリデータ
-
XSLTプロセッサ
19.3.1.1 パイプライン文書の例
XML Pipeline Processorは、パイプライン文書の規則に従って一連のXML処理を実行し、結果を戻します。デモ・ディテクトリにあるサンプル・パイプライン文書を示します。
例19-1 pipedoc.xml
<pipeline xmlns="http://www.w3.org/2002/02/xml-pipeline" xml:base="http://example.org/"> <param name="target" select="myresult.html"/> <processdef name="domparser.p" definition="oracle.xml.pipeline.processes.DOMParserProcess"/> <processdef name="xslstylesheet.p" definition="oracle.xml.pipeline.processes.XSLStylesheetProcess"/> <processdef name="xslprocess.p" definition="oracle.xml.pipeline.processes.XSLProcess"/> <process id="p2" type="xslstylesheet.p" ignore-errors="false"> <input name="xsl" label="book.xsl"/> <outparam name="stylesheet" label="xslstyle"/> </process> <process id="p3" type="xslprocess.p" ignore-errors="false"> <param name="stylesheet" label="xslstyle"/> <input name="document" label="xmldoc"/> <output name="result" label="myresult.html"/> </process> <process id="p1" type="domparser.p" ignore-errors="true"> <input name="xmlsource" label="book.xml "/> <output name="dom" label="xmldoc"/> <param name="preserveWhitespace" select="true"></param> <error name="dom"> <html xmlns="http://www/w3/org/1999/xhtml"> <head> <title>DOMParser Failure!</title> </head> <body> <h1>Error parsing document</h1> </body> </html> </error> </process> </pipeline>
19.3.1.1.1 パイプライン文書に指定するプロセス
パイプライン文書に指定するプロセスについて説明します。
例19-1では、3つのプロセスをコールし、oracle.xml.pipeline.processes
パッケージのJavaクラスに関連付けています。パイプライン文書では、要素processdef
を使用して、次の関連付けを作成しています。
-
domparser.p
とDOMParserProcess
クラスの関連付け -
xslstylesheet.p
とXSLStylesheetProcess
クラスの関連付け -
xslprocess.p
とXSLProcess
クラスの関連付け
19.3.1.1.2 パイプライン文書に指定する処理アーキテクチャ
パイプラインの基本設計および処理アーキテクチャについて説明します。
PipelineSample
プログラムでは、例19-1に示したpipedoc.xml
文書の他に、XML文書のbook.xml
およびbook.xsl
を入力として受け入れます。このパイプラインの基本設計は次のとおりです。
- 受信した
book.xml
文書を解析し、DOMツリーを生成します。このタスクはDOMParserProcess
によって実行されます。 book.xsl
をストリームとして解析し、XSLStylesheet
オブジェクトを生成します。このタスクはXSLStylesheetProcess
によって実行されます。book.xml
のDOMを入力として受け取り、スタイルシート・オブジェクトを適用し、myresult.html
に結果を書き込みます。このタスクはXSLProcess
によって実行されます。
パイプライン文書で使用している処理アーキテクチャについて次の点に注意してください。
-
target
パラメータのデフォルト値およびxml:base
の設定から、ターゲット情報セットはhttp://example.org/myresult.html
であると推定されます。 -
プロセス
p2
の入力はbook.xsl
です。出力パラメータにはラベルxslstyle
が使用されているため、このプロセスを実行してp3
への入力を生成する必要があります。 -
プロセス
p3
は、入力パラメータxslstyle
および文書xmldoc
に依存します。 -
プロセス
p3
の出力パラメータには、ラベルhttp://example.org/myresult.html
が使用されているため、このプロセスを実行してターゲットを生成する必要があります。 -
プロセス
p1
は、入力文書book.xml
に依存し、xmldoc
を出力します。したがって、このプロセスを実行してp3
への入力を生成する必要があります。
例19-1では、複数の処理順序によってすべての依存性を満たすことができます。指定された規則から判断すると、XML Pipeline Processorはp3
を最後に処理する必要がありますが、p1
およびp2
は、どちらの順番でも処理でき、パラレルで処理することもできます。
19.3.2 Pipeline Processorアプリケーションの作成
PipelineSample.java
ソース・ファイルは、基本的なパイプライン・アプリケーションです。
このアプリケーションでは、表19-4の任意のパイプライン文書を使用して、入力XML文書を解析および変換できます。
このプログラムの基本ステップは次のとおりです。
19.3.3 パイプライン・エラー・ハンドラの作成
XML Pipeline Processorを起動するアプリケーションは、プロセッサから受け取ったエラーを処理するPipelineErrorHandler
インタフェースを実装する必要があります。setErrorHandler()
を起動してプロセッサのエラー・ハンドラを設定します。エラー・ハンドラを作成する場合、様々なタイプのエラーに対して例外を発生させるように指定できます。
oracle.xml.pipeline.controller.PipelineErrorHandler
インタフェースは、表19-6に示すメソッドを宣言します。これらのメソッドはすべてvoid
を戻します。
表19-6 PipelineErrorHandlerメソッド
メソッド | 説明 |
---|---|
|
|
|
致命的な |
|
|
|
エラーに関するオプションの追加情報を出力します。 |
表19-6の最初の3つのメソッドは、oracle.xml.pipeline.controller.PipelineException
オブジェクトへの参照を受け取ります。特に有用なPipelineException
クラスのメソッドを次に示します。
-
getExceptionType()
: スローされた例外のタイプを取得 -
getProcessId()
: 例外が発生したプロセスIDを取得 -
getMessage()
: このThrowable
エラーのメッセージ文字列を戻す
PipelineSampleErrHdler.java
ソース・ファイルは、PipelineSample
プログラムで使用される基本的なエラー・ハンドラを実装します。この場合、基本的なステップは次のようになります。