この章では、Extensible Markup Language (XML) Pipeline Processor for Javaの使用方法について説明します。
内容は次のとおりです。
内容は次のとおりです。
この章では、次の内容を十分に理解していると想定します。
XML Pipeline Definition Language: このXML言語を使用すると、XMLリソース間の処理リレーションを記述できます。Pipeline Definition Languageの詳しい説明は、「関連ドキュメント」に記載されているXMLの資料を参照してください。
Document Object Model (DOM): DOMは、XML文書の構造を示すインメモリー・ツリー表現です。
Simple API for XML (SAX): SAXは、イベントベースのXML解析の標準です。
XMLスキーマ言語: 概要および関連資料へのリンクは、「XML Schema Processor for Javaの使用」を参照してください。
Oracle XML Pipeline Processorは、World Wide Web Consortium (W3C)ノートのXML Pipeline Definition Languageバージョン1.0に基づいています。W3Cノートでは、アプリケーション・プログラミング・インタフェース(API)ではなくXMLボキャブラリが定義されています。パイプライン仕様は次の場所にあります。
http://www.w3.org/TR/xml-pipeline/
「XDK for JavaのためのPipeline Definition Language標準」で、W3CノートとOracle XML Developer's Kit (XDK)でのOracle XML Pipeline Processorの実装との違いについて説明します。
関連項目:
Oracle XML Pipeline Processorは、XML Pipeline Definition Languageに基づいています。入力XMLパイプライン文書を受け取り、派生した依存性に基づいてパイプライン・プロセスを実行できます。XMLで記述されるパイプライン文書は、実行するプロセスを宣言方式で指定します。パイプライン文書中に<processdef/>
要素を使用して、Javaクラスをプロセスに関連付けることができます。
Pipeline Processorはマルチステージ処理に使用します。マルチステージ処理は、XMLコンポーネントを順次またはパラレルに処理するときに発生します。ある処理ステージの出力を別の処理ステージの入力にすることができます。プロセスの入力と出力を定義するパイプライン・ドキュメントを記述できます。図11-1に、可能なパイプライン・シーケンスを示します。
XML Pipeline Processor自体に加えて、XDKにはパイプライン文書内で連結できるプロセス用のAPIが提供されています。表11-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の処理」を参照してください
oracle.xml.pipeline.controller.Process
クラスは、すべてのパイプライン・プロセス定義のベース・クラスです。oracle.xml.pipeline.processes
パッケージのクラスは、このベース・クラスを拡張します。カスタマイズしたパイプライン・プロセスを作成するには、Process
クラスを拡張するクラスを作成する必要があります。
少なくとも、すべてのカスタム・プロセスは、Process
クラスの何も処理を行わないinitialize()
およびexecute()
メソッドをオーバーライドする必要があります。カスタマイズしたプロセスがSAXイベントを入力として受け入れる場合は、受信したSAXイベントを処理する適切なContentHandler
を戻すように、SAXContentHandler()
メソッドをオーバーライドする必要があります。また、適切なErrorHandler
を戻すように、SAXErrorHandler()
メソッドをオーバーライドする必要があります。表11-1に、前述のメソッドの詳細を示します。
表11-1 oracle.xml.pipeline.controller.Processクラスのメソッド
クラス | 説明 |
---|---|
|
プロセスを実行前に初期化します。
|
|
プロセスを実行します。
|
|
SAXの 他のプロセスから発生する依存性が使用可能でない場合は、 |
|
SAXの このメソッドをオーバーライドしなかった場合、JAXBプロセッサは、このクラスに実装されているデフォルト・エラー・ハンドラを使用してSAXエラーを処理します。 |
関連項目:
oracle.xml.pipeline.processes
パッケージの詳細は、 Oracle Database XML Java APIリファレンスを参照してください
内容は次のとおりです。
XML Pipeline Processorには次のパッケージを介してアクセスできます。
oracle.xml.pipeline.controller
: 依存性に基づいてパイプラインのXMLプロセスを実行するXMLパイプライン・コントローラを提供します。
oracle.xml.pipeline.processes
: XMLパイプライン・コントローラで実行できるXMLプロセスのラッパー・クラスを提供します。oracle.xml.pipelin.processes
パッケージには、パイプライン・アプリケーション・フレームワークの設計に使用できるクラスが含まれます。各クラスは、oracle.xml.pipeline.controller.Process
クラスを拡張します。
表11-2に、パッケージに含まれるコンポーネントを示します。XML Pipeline Processorとパイプライン文書を組み合せることによって、これらのコンポーネントとプロセスを連結できます。
表11-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として受け取り、 |
図11-2に、XML Pipeline Processorを使用するJavaアプリケーションにパイプライン文書を渡し、プロセッサを構成し、パイプラインを実行する方法を示します。
この場合、基本的な手順は次のようになります。
XML Pipeline Processorのデモ・プログラムは、$ORACLE_HOME/xdk/demo/java/pipeline
にあります。表11-4に、ユーティリティのテストに使用できるXMLファイルとJavaソース・ファイルを示します。
表11-4 Pipeline Processorのサンプル・ファイル
ファイル | 説明 |
---|---|
|
Pipeline Processorのデモの設定方法が記述されたテキスト・ファイル。 |
|
Pipeline Processorのサンプル・アプリケーション。このプログラムは第1引数として |
|
|
|
一連の書籍を記述したサンプルXML文書。この文書は、 |
|
|
|
|
|
|
|
|
|
パイプライン文書。このドキュメントは次の処理を指定します。(1)プロセスp1でDOMを使用して |
|
パイプライン文書。このドキュメントは次の処理を指定します。(1)プロセスp1でSAXを使用して |
|
パイプライン文書。この文書は次の処理を指定します。(1)プロセスp5でDOMを使用して |
|
パイプライン文書。このドキュメントは次の処理を指定します。(1)プロセスp1でDOMを使用して |
|
発注書を記述したサンプルXML文書。この文書は、 |
サンプル・プログラムのコンパイル方法および実行方法は、README
に示されています。この場合、基本的な手順は次のようになります。
XML Pipeline Processorのコマンドライン・インタフェースは、orapipe
と呼びます。Pipeline Processorは、Oracle Databaseにパッケージ化されています。Oracle Universal Installerを使用すると、デフォルトでディスク上の$ORACLE_HOME/bin
にユーティリティがインストールされます。
最初にユーティリティを実行する前に、「XDK for Java環境の設定」の説明に従って、環境変数が設定されていることを確認します。オペレーティング・システムのコマンドラインで、次の構文を使用してorapipe
を実行します。
orapipe options pipedoc
pipedoc
はパイプライン文書であり、必須です。表11-5に、orapipe
ユーティリティの使用可能なオプションを示します。
表11-5orapipeのコマンドライン・オプション
オプション | 用途 |
---|---|
|
ヘルプ・メッセージを出力します。 |
|
指定されたログ・ファイルにエラーおよびメッセージを書き込みます。デフォルトは |
|
情報項目をログに記録しません。デフォルトはオンです。 |
|
警告をログに記録しません。デフォルトはオンです。 |
|
パイプライン・スキーマで入力 |
|
バージョン番号を出力します。 |
|
シーケンシャル・モードでパイプラインを実行します。デフォルトはパラレルです。 |
|
ターゲットが最新の状態にある場合でもパイプラインを実行します。デフォルトでは、forceは指定されていません。 |
|
|
Oracle XML Pipeline Processorを使用するには、W3Cノートで指定されたPipeline Definition Languageの規則に従ってXML文書を作成する必要があります。
W3C仕様では、XML処理コンポーネントとプロセスの入力および出力が定義されています。XML Pipeline Processorには、次のXDKコンポーネントのサポートが含まれます。
XMLパーサー
XML Compressor
XML Schemaバリデータ
XSLTプロセッサ
XML Pipeline Processorは、パイプライン文書の規則に従って一連のXML処理を実行し、結果を戻します。例11-1に、デモ・ディレクトリに含まれているサンプル・パイプライン文書pipedoc.xml
を示します。
例11-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>
例11-1では、3つのプロセスをコールし、oracle.xml.pipeline.processes
パッケージのJavaクラスに関連付けています。パイプライン文書では、<processdef/>
要素を使用して、次の関連付けを作成しています。
domparser.p
とDOMParserProcess
クラスの関連付け
xslstylesheet.p
とXSLStylesheetProcess
クラスの関連付け
xslprocess.p
とXSLProcess
クラスの関連付け
PipelineSample
プログラムでは、例11-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
への入力を生成する必要があります。
例11-1では、複数の処理順序によってすべての依存性を満たすことができます。指定された規則から判断すると、XML Pipeline Processorはp3
を最後に処理する必要がありますが、p1
およびp2
は、どちらの順番でも処理でき、パラレルで処理することもできます。
PipelineSample.java
ソース・ファイルは、基本的なパイプライン・アプリケーションです。このアプリケーションでは、表11-4の任意のパイプライン文書を使用して、入力XML文書を解析および変換できます。
このプログラムの基本手順は次のとおりです。
XML Pipeline Processorを起動するアプリケーションは、プロセッサから受け取ったエラーを処理するPipelineErrorHandler
インタフェースを実装する必要があります。setErrorHandler()
を起動してプロセッサのエラー・ハンドラを設定します。エラー・ハンドラを作成する場合、様々なタイプのエラーに対して例外を発生させるように指定できます。
oracle.xml.pipeline.controller.PipelineErrorHandler
インタフェースは、表11-6に示すメソッドを宣言します。これらのメソッドはすべてvoid
を戻します。
表11-6 PipelineErrorHandlerメソッド
メソッド | 説明 |
---|---|
|
|
|
致命的な |
|
|
|
エラーに関するオプションの追加情報を出力します。 |
表11-6の最初の3つのメソッドは、oracle.xml.pipeline.controller.PipelineException
オブジェクトへの参照を受け取ります。特に有用なPipelineException
クラスのメソッドを次に示します。
getExceptionType()
: スローされた例外のタイプを取得
getProcessId()
: 例外が発生したプロセスIDを取得
getMessage()
: このThrowable
エラーのメッセージ文字列を戻す
PipelineSampleErrHdler.java
ソース・ファイルは、PipelineSample
プログラムで使用される基本的なエラー・ハンドラを実装します。この場合、基本的な手順は次のようになります。