ヘッダーをスキップ

Oracle Containers for J2EE サービス・ガイド
10g(10.1.3.1.0)

B31858-01
目次
目次
索引
索引

戻る 次へ

8 Oracle XML Query Service

この章では、Oracle XML Query Service(XQS)の使用方法について説明します。XQSサービスはエンタープライズ・データの取得、分析、統合および変換に役立つユーザー・モデルを提供します。この章には、次の項目が含まれます。

Oracle XML Query Serviceの概要

この項では、XQSおよびXQSの基盤となる関連テクノロジの概略を提供し、Oracle XML Query Serviceについて説明します。内容は次のとおりです。

XQSの概要

XQSとは、OC4Jサービスの1つで、XQuery(XML問合せ言語)で作成されており、エンタープライズ・データの統合ビューを作成するための簡単な宣言方式を提供します。

通常、XQSなどのサービスがなければ、XQueryはXML文書にしかアクセスできません。XQSを使用することで、SOAPやJDBCなどのアクセス・メカニズムを介して、XML以外のドキュメント、リレーショナル・データベース、およびXML以外のその他のエンタープライズ情報システムからもデータを取得できます。

XQSを使用すると、プログラミング作業が簡略化されます。計画の段階では、XQuery式の設計(問合せ、組込みファンクション・コールまたはユーザー定義ファンクション・コール)およびデータ構造のみに集中して作業できます。データソースへのアクセスの詳細は、構成設定によって後で決定されます。XQuery式とアクセスするデータ間のバインドは、この構成設定で発生します。その後、XQSによって、XQS関数と呼ばれる外部XQuery関数が作成されます。この関数は、目的のソースからデータを取得するために使用します。

XQSは、非定型問合せ(実行時に渡されるXQuery式)またはXQSビュー(以前作成して保存した問合せ)をサポートします。ビューはXQuery関数になり、後で名前でアクセスできます。(XQuery自体は、ビューの概念をサポートしていません。)ビューを使用することで、XQuery式を再利用し、強力で保守しやすい階層問合せを作成できます。

XQSは、多様なクライアント・インタフェースを提供します。そのため、EJB、JSPタグ・ライブラリ、JavaクラスまたはWebサービスを介してXQuery式を実行できます。

XQS関連のテクノロジ

この項では、XQSの基盤となるテクノロジの概要を説明します。

XQueryの概略

XQueryは、XMLデータの問合せと変換に使用できる宣言型言語です。目的の条件を使用してXMLソースをインテリジェントに問い合せ、要素と属性、およびそれらに含まれるデータを取得し、解析できます。これは、XMLデータベースやXML文書などの多種多様なXMLソースで幅広く適用される、柔軟性の高い標準テクノロジです。XQueryは、SQLと類似した機能を持ち、リレーショナル・データベースの問合せにおけるSQLのような役割を果します。

XQueryでは、データの問合せだけでなく、XMLデータの変換も行えます。そのため、XSLTの補足機能または代替として使用できます。

XPath 2.0に基づく式のデータ・モデルでは、XQueryの基本的な構成メンバーは式です。それぞれのXQueryの結果は、XML順序として戻されます。XML順序は、0(ゼロ)個以上の連続したデータ項目の列で、各項目はスカラー値、XMLノードまたはXML文書です。項目のタイプの定義は、XML Schema標準に基づきます。

各問合せは、1つ以上の、モジュールと呼ばれる部分で構成され、各モジュールは、1つのプロローグおよびそれに続く1つの問合せボディで構成されます。プロローグは、モジュールの処理環境を定義する一連の宣言およびインポートです。

XQueryに含まれる問合せの一般的なモデルは、for-let-where-order-return(FLWOR)式です。次の疑似コードは、FLWOR式で可能な処理の例を示しています。

For each department in depts.xml
Let [variable] represent each employee in each department
Where the headcount of employees in a department is at least 10
Order by average salary of department
Return headcount and average salary of each department

XQueryでは、定義および事前定義済関数を使用して問合せを実行することもできます。複雑な問合せの場合は、外部関数を別途提供し、XQuery定義から宣言および起動できます。外部関数は、JavaやSQLなどの様々な言語で実装できます。

外部関数の使用は、XQS機能の重要な部分です。独自のデータに対して目的の問合せが実行できるように、XQS構成に従って外部関数が作成されます。


注意

  • XQuery 1.0はXPath 2.0の拡張機能です。そのため、同じデータ・モデル、関数および構文を共有します。データ・モデルは、XSLT 2.0にも共通しています。

  • XQueryの詳細は、次のWebサイトにある「XQuery 1.0: An XML Query Language」の仕様を参照してください。

    http://www.w3.org/TR/xquery/
    
 

Oracle XQueryの実装

JavaでのOracle XQueryの実装は、XQSの基礎となるエンジンであり、Oracle XML Query Serviceの一部として提供されます。このOracle XQuery実装は、Oracleデータベース製品のOracle XML DBの一部であるOracle XQuery実装と起点や機能が共通していますが、この2つを混同しないようにしてください。

XML項目タイプ

OracleのXQuery実装では、タイプoracle.xml.xqxp.datamodel.XMLItemを使用して、問合せ結果のXML順序に含まれる個々の項目が表されます。

事前定義済の名前空間および接頭辞

次の表に、XQueryおよびXQSで使用できる、事前定義済の名前空間および接頭辞を示します。

表8-1    事前定義済の名前空間および接頭辞 
接頭辞  名前空間  説明 

ora 

http://xmlns.oracle.com/xdb 

Oracle XML DBの名前空間 

ユーザーが選択した任意の接頭辞 

urn:oracle.bpel.xq 

Oracle BPEL環境におけるXQSビューのデフォルトの名前空間 

local 

http://www.w3.org/2003/11/xpath-local-functions 

XPathローカル関数宣言の名前空間 

fn 

http://www.w3.org/2003/11/xpath-functions 

XPath関数の名前空間 

xdt 

http://www.w3.org/2003/11/xpath-datatypes 

XPathデータ型の名前空間 

xml 

http://www.w3.org/XML/1998/namespace 

XMLの名前空間 

xs 

http://www.w3.org/2001/XMLSchema 

XML Schemaの名前空間 

xsi 

http://www.w3.org/2001/XMLSchema-instance 

XML Schemaインスタンスの名前空間 

これらの接頭辞は、XQuery式のプロローグで宣言せずにXQuery式で使用できます。また、xml以外は、すべてプロローグ内で再定義できます。oraおよびurn以外のすべての接頭辞は、XQuery標準で事前定義済です。

Oracle XQueryの拡張関数

JavaバージョンのOracle XQueryには、このデータベース・バージョンで最初に導入されたora拡張関数のサポートが含まれています。サポート対象は次のとおりです。

これらの関数の詳細は、『Oracle XML DB開発者ガイド』を参照してください。


注意

今回のリリースの時点では、まだ、W3C XQueryワーキング・グループによってXQueryの勧告が公開されていませんでした。オラクル社は、XQuery標準が勧告になるまで、その進化を継続して追跡します。その間、オラクル社では、XQuery標準の進化に対応するために、以前のリリースまたはパッチ・セットとの下位互換性がないXQuery実装の更新をリリースすることを余儀なくされる可能性があります。オラクル社は、XQuery勧告が公開されるまでの間、XQuery実装にかかわるデータベース・リリース間またはパッチ・セット間のすべての下位互換性を保証しません。XQuery標準が勧告になった後、オラクル社は、XQuery勧告の実装を組み込んだリリースまたはパッチ・セットを作成します。それ以後は、下位互換性にかかわるオラクル社の標準ポリシーがOracle XQuery実装に適用されます。XQueryのステータスに関する最新の情報は、http://www.w3.orgを参照してください。  


XQuery標準で指定された実装の選択肢

暗黙的タイムゾーンのサポート: XQSのXQueryでは、暗黙的タイムゾーンは常にZとみなされます。

実装のXQuery標準からの逸脱

+0と-0の境界条件の相違: XQuery標準では正のゼロと負のゼロが区別されますが、XQSのXQueryでは区別されません。両方とも0と表示され、同様に処理されます。

XQueryのオプション機能

W3Cによって定義されているXQueryのオプション機能を次に示します。ただし、これらの機能は現時点ではサポートされていません。

これらの定義済のオプション機能に加えて、W3C仕様では、実装によって、実装定義のプラグマおよび拡張機能が提供されます。提供されるものは次のとおりです。

Oracle実装では、このようなプラグマや拡張機能は要求されません。

XQueryの関数および演算子のサポート

XQSでは、最新の仕様に含まれるほとんどのXQuery関数とXQuery演算子がサポートされていますが、次のものはサポートされていません。

XQuery関数docおよびcollection

XQuery組込み関数fn:docおよびfn:collectionは、本質的に実装定義済です。XQSでは、これらの関数はサポートされています。関数docは、URI引数によって対象に指定されたローカル・ファイル・システムからファイルを取得します。ファイルは、整形式のXMLデータである必要があります。関数collectionも同様ですが、ファイルではなくフォルダを取得します(フォルダ内の各ファイルは整形式のXMLデータである必要があります)。

fn:docおよびfn:collectionのXQS実装では、次に示すファンクション・コールのように、引数はプロトコルがfileで、ローカル・ファイル・システムにあるファイルへのパスを指定するURLである必要があります。

   fn:doc("C:/MyDocuments/XQS/myView.xq")

URLのプロトコル部分は省略できます。プロトコルは、デフォルトではfileです。

fn:doc()関数のかわりに、XQSドキュメント関数を使用し、Oracle Application Serverがサポートする任意のURLを介してドキュメントにアクセスできます。たとえば、HTTPプロトコルを使用してXMLドキュメントにアクセスするには、次の構成で<document-source>を定義します。

   <document-source>
         <function-name prefix="ns"> genericFile </function-name>
   </document-source>

次に示すように、XQS関数genericFile()は問合せ式の一部にすることも可能です。

declare namespace ns = "…"; 
declare function ns:genericFile() external; 
for $i in ns:genericFile("http://www.acme.com/repository/item137560.xml") return ...

XQSとXQuery API for Javaの比較

XQuery API for Java(XQJ)は、JavaアプリケーションからXQuery式を実行するための、進化中の標準です。(JSR-225を参照してください。)また、JDBCに相当する低水準プログラム・インタフェースです。ただし、XQJはまだ標準ではないため、Oracle Application Serverでは、サポートされていません。

XQSでは、同様の基礎機能のための高水準APIが提供されます。データソースに接続するためのコードを記述せずにJavaからXQuery式を実行したり、XQuery式のオブジェクトを作成するなどの処理が可能です。

XQS使用の利点

XQSは様々な用途に使用できます。WebサービスおよびJavaアプリケーションだけでなく、XMLデータやXML以外のデータへのアクセスにも役立ちます。

また、XQSを使用すると、低水準のXQJインタフェースを使用してXQuery式を実行するなどの、コーディング手順を行う必要がありません。プログラム的でない構成を介したデータソース・アクセスのXQSモデルにより、より迅速に、より便利に開発が行えます。さらに、XQSによって作成される外部関数のライブラリの登録は自動的に処理され、名前空間の割当ては自由に制御できます。

データを取得するだけでなく、XQSは、XMLデータを変換したり、複数のソースからのデータを結合するための便利なメカニズムとしての機能を果します。

これ以外にも、XQSには次の利点と利便性があります。

「XQSのパフォーマンス機能および最適化機能の概要」も参照してください。

要件、制限事項および特記事項

XQS実装には、次の要件、制限事項および特記事項があります。

XQSの機能の概要

この項では、XQSの重要な機能の概要を説明します。詳細は、この章で後述しています。

XQSデータソースのサポート

前述のように、XQSでは、数種類のデータソースがサポートされています。この項には、次の関連項目が含まれます。

データソースのサポート対象カテゴリ

XQSでは、多様なアクセス・プロトコルが要求されるデータソースは、WSDLドキュメントを介して記述されます。これは、XQSのサポートにより、一般に普及しているApache Web Services Invocation Framework(WSIF)(SOAPやHTTPの背後にあるWebサービス・メカニズムの拡張機能)で、すべてのカスタム起動プロトコルが組み込まれるためです。このメカニズムにより、XQSは、SOAPベースのWebサービスではなく、WSDLベースのソースをサポートします。XQSでは、SQLで記述されたXQSビューのメカニズムを使用し、JDBCを介してリレーショナル・データベースにアクセスすることもできます。

XQSによってサポートされるすべてのデータソースのカテゴリは、次のとおりです。これらのデータソースには、SQLベースのビューまたはWSDLドキュメントを介して多様なソースにアクセスするための特別な機能があります。

WSDLソース用に指定したWSDLドキュメントでは、適切なバインディングを使用して、一連のコール可能な操作が記述され、ソースへの接続に関する詳細が提供されます。XQS構成では、各操作の名前を参照し、WSDLをポイントして操作の説明を参照します。WSDLには作業URLが必要です。作業URLは、XQS構成で指定します。XQSでは、WSDLをフェッチする際にこのURLに移動します。また、XQSでは、WSDL URLをXQuery名前空間として使用することや、WSDLポートの個々の操作をその名前空間のローカル名として処理することが可能です。

XQuery関数を介したデータソース・アクセス

データソースへのアクセスと操作の実行には、前述の、XQS関数と呼ばれる外部XQuery関数が使用されます。XQSは、XQS構成に基づいて、自動的に作成および起動されます。構成内で、関数の名前と名前空間、およびその他の関連項目(入力パラメータなど)を指定します。問合せでデータソースを使用する際には、XQueryプロローグで、関連するXQS関数を外部関数として宣言する必要があります。

名前空間は、関数オブジェクトを含む1つの関数ライブラリに対応します。各関数オブジェクトは、1つの操作に対応します。たとえば、SOAPバインディングを伴うWSDLソースの場合、WSDLドキュメント内の各操作に対して1つの関数オブジェクトがあります。XQSビュー・ソースでは、各関数オブジェクトは個々のストアド・クエリーに対応しています。

データソース関数オブジェクトの役割

XQSによって作成されたそれぞれの関数オブジェクトは、XQS構成に従ってインスタンス化され、次の基本タスクを実行します。

  1. XQueryエンジンから渡された入力引数を受け入れます。許容される入力タイプは、XML順序で許容されるものに準じます。すなわち、Javaプリミティブ型およびXMLノードです。XQSでは、JavaオブジェクトとXMLのマッピングを実行できませんが、Oracle TopLinkを使用するなどして、問合せの前にマッピングを実行できます。

  2. 基礎となるデータソースに対して問合せを起動します。XQSにより、関数名が対応するXQS構成要素にマップされ、データソースの接続情報が検出されて、接続が作成されます。

  3. 結果を受け取り、パッケージ化します。XQSは、同期的にデータソースからXML書式で結果を受け取り、受け取った結果をXML順序にパッケージ化します。

  4. エラー(データソース・アクセスの問題や型の不一致など)を処理し、エラー処理の構成に従ってエラー情報を戻します。

データソースの準備の概要

XQSで使用できるほとんどのデータソースには、必要な準備手順があります。次に例を示します。

詳細は、「データソースを使用するための準備」を参照してください。

XQSの構成および構成ファイルの概要

XQS構成ファイルはxqs-config.xmlです。XQSは、アプリケーションEARファイルのトップレベルにあるxqs-resources.jarファイル(OC4Jパッケージ化ユーティリティで作成)で、この構成ファイルを検索します。この構成ファイルを使用して、XQS関数およびデータソースの情報を指定します。

xqs-config.xmlのトップレベルの要素は次のとおりです。

XQSは、構成ファイルから情報を読み取り、その情報を使用して、データソースにアクセスするXQS関数オブジェクトを移入します。

構成の更新時には、OC4Jの再起動は不要ですが、アプリケーションを再デプロイする必要があります。(詳細は、『Oracle Containers for J2EEデプロイメント・ガイド』を参照してください。)

追加情報は、「XQS関数の構成方法」を参照してください。


注意

Oracle Application Serverでは、Oracle Enterprise Manager 10g Application Server Controlコンソールに、XQS構成のページはまだ含まれていません。XQS構成は、xqs-config.xmlファイルで直接管理できます。 


XQSクライアント・インタフェースの概要

XQSでは、XQuery機能の実装に使用できる、次のクライアント・インタフェースがサポートされています。各インタフェースの使用方法および例は、「アプリケーション・コードの開発方法: XQSクライアント・インタフェースを使用した場合」を参照してください。


注意

問合せにいずれかのXQSクライアントAPIを使用する場合、問合せの実行によって結果が定義されますが、すべての結果がただちにメモリーに格納されるとはかぎりません。メモリーにただちに、および完全に格納される一連の結果は、「マテリアライズされている」(実体がある)と表現されます。これに対して、暗黙カーソルを介し、次の項目を処理するための(next item)機能を使用して1回(バッチの場合は複数回)にアクセスされる一連の結果は、「マテリアライズされていない」(実体がない)と表現されます。マテリアライズされていない結果は、いつ取得されてメモリーに書き込まれるのかが保証されません。次の項目を処理する(next item)コールによって、次の結果項目を作成するXQuery式の評価がトリガーされます。

後続の説明のように、XQSクライアントAPIでは、マテリアライズされた結果に対してステートレス・クライアント・オブジェクトを使用するか、マテリアライズされていない結果に対してステートフル・クライアント・オブジェクトを使用するかを選択できます。

これらの概念の詳細および重要な考慮事項は、「ステートフル・クライアントとステートレス・クライアント」を参照してください。 


OC4JPackagerの概要

XQSで提供されるOC4JPackagerは、XQS関連のファイルをJ2EEアプリケーションまたはWebアプリケーションでパッケージ化し、そのアプリケーションでXQS機能を使用できるようにするコマンドラインJavaツールです。

通常は、XQSクライアントAPI(XQSFacadeIインタフェース、EJBクライアントAPIまたはJSPタグ・ライブラリ)の1つを介してXQSをコールするWebアプリケーションを書き込みます。また、関連するデータソースおよびXQSビューをポイントするXQS構成ファイルxqs-config.xmlを作成し、ビューが配置されているディレクトリであるXQSリポジトリを選択します。その後、アプリケーション、XQS構成ファイルおよびXQSリポジトリをEARファイルにバンドルします。このファイルは後でデプロイします。

コマンドライン・パラメータを介してOC4JPackagerに命令が出されると、すべてのバンドルの手順が自動的に完了します。具体的には、次の処理が行われます。

  1. xqs-config.xmlおよびすべてのXQSリポジトリ・ファイルを、xqs-resources.jarというファイルにバンドルします。

  2. アプリケーションに関連付けられている各アーカイブ(WARファイルやEJB JARファイルなど)を開き、マニフェスト(MANIFEST.MF)内のClass-Path属性を変更して、xqs-resources.jarを含めます。

  3. すべてのアプリケーション・アーカイブ・ファイルおよびxqs-resources.jarで構成されるEARアーカイブをバンドルします。

  4. EARアーカイブ内のorion-application.xmlファイルを(必要に応じて)作成または変更し、EARのすべてのコンポーネントがアクセスできるライブラリのリストにxqs-resources.jarを追加します。

OC4JPackagerを実行する際には、次のいずれかを含むディレクトリを指定します。

Webサービス操作として公開するXQSビューに対し、OC4JPackagerにより、Webサービス操作の起動がXQSビューに委譲され、追加のタスクが実行されます。操作は、自動的に生成されるWSDLドキュメントに追加されます。詳細は、「XQSビューをWebサービス操作として公開するためのOC4JPackagerの追加の出力」を参照してください。

一般的なOC4JPackagerの詳細は、「OC4JPackagerを使用したXQSアプリケーションのパッケージ方法」および「OC4JPackagerのリファレンス」を参照してください。

XQSアプリケーションのセキュリティ

XQS自体では、セキュリティ層はまったく追加されません。この点で、XQSは本質的にJ2EEアプリケーションと似ています。セキュリティは、使用するXQSクライアントおよびアクセスするデータソースのタイプに応じて、必須のWebおよびJ2EEの標準セキュリティ機能を介して、OC4Jによって提供されます。

たとえば、SQLバインディングを伴うSQLベースのXQSビューを使用する場合は、データソース・セキュリティ機能を使用します。XQS EJBクライアント・インタフェースを使用する場合は、標準のEJBセキュリティを使用します。XQS JSPタグ・ライブラリを使用する場合は、標準のHTTP接続認証を使用します。その他を使用する場合も、それぞれのセキュリティ機能を使用します。

XQSのパフォーマンス機能および最適化機能の概要

XQSでは、パフォーマンスを向上させる次の機能が提供されます。

詳細は、「XQSパフォーマンス機能の使用方法」を参照してください。


注意

XQSでは、Oracle XQueryエンジンおよびXDKと密接に連携してデータ・フローが最適化されますが、問合せの最適化は行われません。 


XQSエラー処理の概要

XQSアプリケーションの実行時には、入力パラメータをデータソースで要求されるタイプに変換する際や、データソースによって戻されたデータをXMLに変換する際などに、XQS外部関数および基礎となるデータソースに関連する問題が発生する場合があります。また、データソースが使用できない場合や、エラーが戻されることもあります。XQSのデフォルトの動作では、このような状況でXQuery動的エラーが発生します。それによって問合せの実行が停止し、結果が戻されなくなります。

XQS構成属性(onError)を使用して、より影響の少ない動作を選択すると、XQSを続行して、発生したエラーに関する追加情報を取得できます。使用できるエラー処理モードは次のとおりです。

emptySequenceモードまたはerrorMessageモードを使用した場合、そのモードの設定対象となったXQS外部関数の実行時にエラーが発生しても、問合せの実行は停止せず、必要に応じて後で取得できるようにXQSによって保存されます。XQSにより、空のXML順序(emptySequenceモードの場合)または1つのエラー・メッセージで構成される単一項目のXML順序(errorMessageモードの場合)が戻されます。errorMessageモードでは、XQS構成で固定エラー・メッセージを事前に構成しておくか、データソースから戻されたエラー・メッセージをそのまま使用することができます。

XQS外部関数の抑止されたエラーの情報は、XQSによって、XQSErrorIオブジェクトのイテレータ内に戻されます。

XQSでは、XQS関数内部のエラーにのみ、特別な処理が適用されます。構文エラーやタイプの不一致などの通常のXQueryエラーの場合は、いずれのXQSエラー・モードでも、問合せの実行が停止します。

XQSエラー・モードは、XQS関数ごとに個別に構成します。1つの関数のエラー・モードが、同じ問合せ内の他のXQS関数の動作に影響することはありません。

詳細は、「XQSエラー処理モードおよびAPIの使用方法」を参照してください。

XQSの主な使用手順の要約

XQSを使用する場合の主な手順を次に示します。各手順の詳細を記述した項へのリンクも提供しています。

  1. 必要に応じてデータソースを準備します。たとえば、ドキュメント・ソースの場合は、XML以外をXMLに変換するための設定などを行います。XQSビューの場合は、問合せの定義や保存などを行います。データベースなどのソースへのアクセスにも、特別な設定が必要になる場合があります。「データソースを使用するための準備」を参照してください。

  2. XQSを構成します。xqs-config.xmlファイルを使用して、アクセスするデータソースおよび実行する問合せの指定と構成を行い、問合せのデータソースを表すXQS関数へのマッピングを作成します。「XQS関数の構成方法」を参照してください。

  3. 問合せを設計します。「問合せの設計方法」を参照してください。

  4. アプリケーションを開発します。開発では主に、XQSによって提供されるいずれかのAPIを使用して、XQuery式を実行し、戻されたXML結果を処理することが要求されます。「アプリケーション・コードの開発方法: XQSクライアント・インタフェースを使用した場合」を参照してください。

  5. アプリケーションをパッケージ化し、デプロイします。XQSに付属のパッケージャを使用します。「OC4JPackagerを使用したXQSアプリケーションのパッケージ方法」を参照してください。


    注意

    ここに示した手順は単純化されたものです。通常、特にXQSビューが含まれている複数のソースでは、これらの手順をモジュール的に順番に行って完了させることはできません。実際には、処理の繰り返しが必要になります。たとえば、このようになります。最初にデータベース・ソースの準備を行い、次にそのソースの問合せを設計します。その後、問合せをXQSビューとして保持します。つまり、XQSビュー・ソースを準備します。さらに、そのビューを使用する別の問合せを設計します。 


データソースを使用するための準備

XQSで使用するほとんどのデータソースには、必要な準備手順があります。この項には、次の項目が含まれます。

XML以外のドキュメント・ソースを使用するための準備

ドキュメントの中には、ネイティブのメッセージ書式としてXMLを使用せず、バイトおよび文字の構造化された記録などのネイティブ書式を使用するものがあります。この例として、Excelのカンマ区切り(CSV)ファイルがあります。XQSおよびXQueryでXML以外のデータが理解されるには、XQSで適切な変換ツールを使用できることが必要です。そのためには、事前定義済の、構造化された一連の規則にデータが従っている必要があります。このような構造化された書式のデータは処理が可能なため、取得されてからXML書式に変換され、アプリケーションで使用できるようになります。

XML以外のドキュメントを使用できるように、XQS実装では、Oracle Data Definition Description Language(D3L)をサポートしています。XQSでXML以外のドキュメントを使用するための準備として、次の手順を行います。

  1. XML以外のデータに、D3L変換メカニズムとの互換性があることを確認します。

  2. D3Lによってデータが解析および変換されるように、D3Lにデータ書式の指示を出すスキーマ・ファイルを指定します。

  3. スキーマ・ファイルの名前および場所を指定して、D3Lを使用できるようにXQSを構成します。

次の各項では、D3Lおよびその使用方法の概要を示します。

D3Lとは

D3Lには、ネイティブの、XML書式以外のドキュメントが従う必要がある構造が記述されます。これにより、特定のOracleの中間層コンポーネント(OracleAS Integration InterConnectが一般的ですが、ここではXQS)で処理されるようになります。

D3Lによって提供されるものは、次のとおりです。

D3Lスキーマ・ファイルは、D3L Document Type Definition(DTD)によって定義された構文に準拠している必要があります。XQS構成を介して、使用するD3Lスキーマ・ファイルを指定します。


重要

D3Lを使用するには、基礎となるネイティブ書式データ内のフィールド数が固定され、認識されていることが必要です。D3Lは、任意の構造を持つデータ(標準のXMLなど)、名前/値ペアのデータ、または解析にトークンの先読みを必要とする条件付きデータ構造には適しません。 


D3Lスキーマ・ファイル

D3Lスキーマ・ファイルには、D3L変換エンジンがデータを解析してXMLに変換するために必要な、データ型、書式およびデリミタが記述されています。このスキーマ・ファイルは、d3l.dtdの仕様に準拠する必要があります。

D3Lスキーマ・ファイルの詳細および作成方法は、『Oracle Application Server Integration InterConnectユーザーズ・ガイド』を参照してください。ここでは、このファイルの概要がわかるように、ファイルの一部分を示します。

<?xml version="1.0" encoding="US-ASCII"?>
<!DOCTYPE message SYSTEM "d3l.dtd">
<message name="replyFlight" type="BookingReplyType" object="Booking"
         header="D3L-Header" value="replyOptions">
   <unsigned4 id="u4" />
   <unsigned2 id="u2" />
   <struct id="DateTimeRecord">
      <field name="DateInfo">
         <date format="MMDDYY">
            <pfxstring id="datstr" length="u4" />
         </date>
      </field>
      <field name="TimeHour"><limstring delimiter="*" /></field>
      <field name="TimeMinute"><limstring delimiter="*" /></field>
   </struct>
...
</message>

D3Lを使用するためのXQSの構成

XML以外のドキュメント・ソースに対し、XQSでD3Lの変換メカニズムを使用するには、次の手順を行います。

  1. <document-source><XMLTranslate>サブ要素を使用して、D3Lを使用するようにXQSに対して指定します。(後で、その他のツールもサポートして、同様に指定することができます。)

  2. <XMLTranslate><schema-file>サブ要素を使用して、データ解析に使用するD3Lのスキーマ・ファイルを指定します。

次に、PersonalInfoD3L.xmlという名前のD3Lスキーマ・ファイルを使用するためのXQS構成を示します。

<document-source ... >
   ...
   <XMLTranslate method="D3L">
      <schema-file>http://host:port/xqs/PersonalInfoD3L.xml</schema-file>
   </XMLTranslate>
   ...
</document-source>


注意

 

XQSビューを使用するための準備

前述のように、XQSビューとは、将来使用できるように格納された問合せです。XQSでは、ビュー自体がソースとして扱われるため、ビューの構成は、<xqsview-source>要素を介して行います。問合せをXQSビューとして使用するための準備手順は、次のとおりです。

  1. 問合せで要求される入力パラメータを考慮します。XQSビューのパラメータは、XQueryのプロローグでそのパラメータを外部変数として宣言することで指定できます。

  2. 問合せを設計します。これには、入力パラメータに対して外部変数を宣言することも含まれます。設計した問合せを.xqファイルとして保存します。(「問合せの設計方法」も参照してください。)

  3. .xqファイルの保存場所を考慮します。.xqファイルの保存場所は、XQSリポジトリと呼ばれます。この場所は、XQS構成を介して(<repository>要素を使用して)指定できるほか、OC4JPackagerの実行時に-repositoryオプションを介して指定した場所を使用することもできます。

  4. Webサービス操作としてXQSビューを公開するかどうかを考慮します。この処理は、XQS構成ファイルにある<xqsview-source>要素のWSDLvisibility属性を介して行います。これにより、1つの操作としてWebサービスにビューが含められ、XQSによってアプリケーションに追加されます。Webサービス操作としてビューを公開する場合は、XMLの出力タイプに注意してください。この出力タイプを、構成に含まれる<xqsview-source><output-element>サブ要素に反映することをお薦めします。(追加情報として、「Webサービス操作として公開されたXQSビューの使用方法」も参照してください。)

次に示すのは、XQSビューに使用するXQuery式です。この式では、外部変数locが受け入れられ、ファイルから注文(purchase order)データを読み取る関数readFileに渡されます。.xqファイルの保存時には目的の名前を付け、XQS構成でその名前を指定できます。ビューを実行するためにXQSが実装するXQS関数にも、目的の名前を指定する必要があります。ファイル名と関数名は別個のものですが、必要に応じて、デフォルトで関数名をファイルのベース名として使用できます。

declare variable $loc external;
declare namespace xqs = "http://xmlns.oracle.com/ias/xqs";
declare function xqs:readFile($l as xs:string) external;
for $po in xqs:readFile($loc)//po return $po//total

通常、XQS構成の<xqsview-source>要素の中では、少なくとも次のものを使用します。

データベース・ソースを使用するための準備(SQLベースのXQSビュー)

SQLベースのXQSビューを使用すると、リレーショナル・データベースから取得したデータに(XMLのサポートも含め)XQueryを使用できます。データはJDBC経由で取得されます。SQLベースのXQSビューは、SQL言語で記述されたストアド・クエリーです。XQSでは、SQLベースのビュー自体がソースとして扱われます。ビューは、<xqsview-source>要素を介して構成されます。

SQL問合せをXQSビューとして使用するには、次の手順を実行します。

  1. SQL問合せに使用するデータベースとスキーマを決定します。接続を表すOC4J data-sources.xml構成ファイルで、適切な<managed-data-source>または<data-source>要素を探すか定義します。そのデータソースのJNDI名を、<xqsview-source>構成要素の参照として使用します。データソースのJNDI名は、<xqsview-source>要素の<dataSource>サブ要素に明示的に指定します。XQSでは、JDBC接続の確立にデータソースを使用します。SQL問合せに基づいたXQSビューの場合、<dataSource>構成要素は必須です。

  2. 問合せに必要な入力パラメータを検討します。SQL言語で記述された問合せの場合は、問合せパラメータとして、:1:2:3などの位置指定のバインド変数を使用します。

  3. 必要なデータベース・オブジェクト(表、ビュー、ストアド・プロシージャまたはPL/SQLパッケージ)を決定します。その後、問合せを記述して、入力パラメータの位置指定のバインド変数を指定します。XQSでは、SQL問合せ文(SELECT文)のみが実行されます。問合せでは、JavaまたはPL/SQLストアド・プロシージャを起動できます。INSERTUPDATEのSQL文、またはデータ定義言語(DDL)文は使用できません。問合せを.sqlファイルとして保存します。

  4. データベース問合せで、データをリレーショナル(表)またはXML形式のいずれで戻すかを決定します。Oracle XMLデータベースを使用していて、問合せ結果がXMLType型の場合、XQSでは結果はそのまま使用され、変換は行われません。結果がすでにXML形式であることを指定するには、XMLTypeSQLResultType属性を設定します(データベースへの追加のラウンドトリップが必要で、パフォーマンスが低下するため、XQSでは問合せの独自の分析は行われません)。

    データベース問合せでデータをリレーショナル形式で戻す場合は、SQLResultType属性がrelationalに設定されている必要があります(これはデフォルトでもあります)。この場合、XQSはOracle XML-SQLユーティリティ(XSU)を使用して、リレーショナルの結果をXMLに変換します。XSUでは、結果セットのすべての行がXML要素に変換されます。デフォルトの要素名はROWです。デフォルトの要素は、<xqsview-source>構成要素のrowTag属性を設定することでカスタマイズできます。行要素は、ユーザーが選択した属性で番号付けできます。XSUでは、デフォルトでは行要素には番号は割り当てられません。行を番号付けする場合は、<xqsview-source>構成要素のrowIdAttr属性を指定します。rowIdAttr属性の値は、結果の行要素の番号付け属性の名前です。行は1から開始して、123のように番号付けされます。

    XSUでは、リレーショナルの結果の各列を、行要素にネストする要素に変換します。要素タグは、列名から導出されます。列要素名はカスタマイズできません。ただし、SQL問合せでリレーショナルの結果を作成する場合には、列に別名を割り当てられます。

    たとえば、デフォルトのOracle Order EntryスキーマOEで実行される次のようなSQL問合せがあるとします。

    select PRODUCT_ID,PRODUCT_NAME,PRODUCT_STATUS,LIST_PRICE from
    PRODUCT_INFORMATION where product_id < :1
    

    rowTag="product"およびrowIdAttr="record_num"属性が設定されている場合、このSQLベースのビューの実行結果は次のようになります。

    <product record_num="1">
       <product_id>1726<product_id>
       <product_name>LCD Monitor 11/PM<product_name>
       <product_status>under development<product_status>
       <list_price>259<list_price>
    </product>
    <product record_num="2">
       <product_id>1729<product_id>
       <product_name>Chemicals - RCP<product_name>
       <product_status>orderable<product_status>
       <list_price>80<list_price>
    </product>
    

    SQL問合せを記述する際には、前述のXML変換も考慮してください。

  5. .sqlファイルを保存する場所を決定します。.sqlファイルの保存場所は、XQSリポジトリと呼ばれます。場所はビュー・ソースのXQS構成を介して(<repository>要素を使用して)指定します。または、OC4JPackagerユーティリティの実行時に-repositoryオプションを使用して指定します。同じリポジトリに複数の.xqおよび.sqlファイルを保存できます。

    前の例のSELECT文は、SQLベースのXQSビューで使用される式です。SQLバインド変数:1を受け入れてSQL問合せを実行し、結果を要素のXML順序の形式で戻します。.sqlファイルは任意の名前で保存し、XQS構成に指定できます。ビューを実行するXQSビュー関数の名前は、getProductInfoです。.sqlファイルの名前と関数名は別個のものですが、関数名はファイルのデフォルトのベース名と同一にできます。

次に示す要素および属性は、通常、SQLベースのXQSビュー用のXQS構成で使用されます。要素は、<xqsview-source>要素のサブ要素です。

次に示す<xqsview-source>要素の属性はオプションです。属性が設定されていない場合は、デフォルト値が使用されます。

SOAPバインディングを伴うWSDLソースを使用するための準備

Webサービス操作を介してデータソースにアクセスするには、WebサービスのWSDLドキュメントを指定し、XQS構成でWSDLの場所を指定する必要があります。1つのXQSビュー関数は、XQSによって実装される1つのWebサービス操作に対応します。

WSDLを調査します。XQS構成ファイルに含まれる<wsdl-source>要素およびそのサブ要素を使用して、XQS関数を構成します。その際、次に示すように、WSDLエントリに対応する構成設定(一部はオプション)を使用します。

また、XQSからWSDLドキュメントへのアクセス方法を考慮し、<wsdlURL>要素を使用してドキュメントの場所を指定します。


注意

 

カスタム・クラスまたはEJBを使用するための準備(JavaまたはEJBのバインディングを伴うWSDLソース)

Java用またはEJB用のWSIFプロバイダを使用すると、カスタムJavaクラスまたはEJBを介してデータソースにアクセスできます。これは、Apache Foundationの公開テクノロジであるため、XQSによる特別な動作は行われません。必要な手順は次のとおりです。

XQS構成に関するWSDLの一般的な考慮事項は、「SOAPバインディングを伴うWSDLソースを使用するための準備」を参照してください。

クラスまたはBeanの実装方法は、『Oracle Application Server Web Services開発者ガイド』、また、Java用およびEJB用のWSIFプロバイダの情報は、『Oracle Application Server Web Servicesアドバンスト開発者ガイド』を参照してください。


注意

「WSDLソースにアクセスするXQS関数の構成」も参照してください。 


Javaバインディングを伴うWSDLドキュメントの一部を例として示します。これを使用すると、操作名に基づいて、JavaメソッドreadEntry()などを起動できます。WSDLの<format:typeMapping>の仕様は、XQS構成の<typeMap>要素に対応することに注意してください。

< definitions>
  ...
  <binding name="JavaBinding" type="tns:AddressBook">
    <java:binding /> 
    <format:typeMapping encoding="Java" style="Java">
       <format:typeMap typeName="typens:address"
             formatType = "localjava.client.stub.addressbook.wsiftypes.Address" /> 
       <format:typeMap typeName="xsd:string"
             formatType="java.lang.String" /> 
    </format:typeMapping>
    <operation name="readEntry">
        <java:operation methodName="readEntry" 
              parameterOrder = "name" 
              methodType = "instance" /> 
        <input name="ReadEntryWholeNameRequest" /> 
    <operation name="readAllMatchingEntries">
     ...
    </operation>
  </binding>
  <service name="AddressBookService">
     <port name="JavaPort" binding="tns:JavaBinding">
        <java:address 
          className = "localjava.service.AddressBookImpl" /> 
     </port>
  </service>
  ...
</definitions>

XQS関数の構成方法

すべてのXQuery式で使用されるそれぞれのXQuery外部関数、つまり、XQSによって実装されるそれぞれのXQS関数に対して、アプリケーションのXQS構成内に、問合せ、アクセスするデータソースおよび入力パラメータに使用されるXQS関数の詳細(名前など)を指定する1つのエントリが必要になります。構成には、ドキュメント・ソース、XQSビュー、WSDLソースの3つの基本カテゴリがあります。また、これらに対応する<document-source><xqsview-source><wsdl-source>という3つの高レベルの構成要素があります。

この項には、次の項目が含まれます。

XQS構成ファイルの関連する概要は、「XQSの構成および構成ファイルの概要」を参照してください。

この項で説明した構成要素のリファレンス情報は、「XQS構成ファイルのリファレンス」を参照してください。

ドキュメント・ソースにアクセスするXQS関数の構成

この項では、ドキュメント・ソースにアクセスするXQS関数の構成方法を説明し、最後に例を示します。この項に出てくる要素は、<document-source>要素のサブ要素です。追加情報は、「<document-source>」を参照してください。すべてのサブ要素の情報へのリンクも含まれています。

必須

ドキュメント・ソースに対して、少なくとも次の要素を構成する必要があります。

対応するXQueryの宣言と使用方法は次のとおりです。

declare namespace xqs = "http://xmlns.oracle.com/ias/xqs";
declare function xqs:myFileSource() external;
for $po in xqs:myFileSource()//po
return $po
オプション(場合によっては必須)

場合により必須または適切であるドキュメント・ソースの要素は、次のとおりです。

パフォーマンスとエラー処理

エラー処理の設定を行い、キャッシングやラージ・データセットの特別な処理などのパフォーマンス機能の使用を指定できます。これらの設定には、<document-source>の属性isCachedlargeDataonError、およびサブ要素の<cache-properties><error-message>を使用します。これらの機能の構成は、ここでは省略します。「XQSエラー処理モードおよびAPIの使用方法」および「XQSパフォーマンス機能の使用方法」を参照してください。

それぞれの例では、キャッシング、ラージ・データおよびエラー処理のデフォルト設定が使用されています。これは、<document-source>属性がisCached="false"largeData="false"およびonError="dynamicError"と設定されていることと同じです。

固定の場所にあるXML文書のソースの例を示します。

<document-source>
   <function-name namespace="http://xmlns.oracle.com/ias/xqs">
      myFileSource
   </function-name>
   <documentURL>
      http://host:port/xqsdemos/Repository/pos-2KB.xml
   </documentURL>
</document-source>

D3L変換ツールおよびpaymentInfoD3L.xml D3Lスキーマ・ファイルを使用する、XML書式以外のドキュメント・ソースの例を示します。

<document-source>
   <function-name prefix="xqs">
      paymentStatusInfo
   </function-name>
   <documentURL>http://host:port/xqsdemos/paymentInfo.csv</documentURL>
   <XMLTranslate method="D3L">
      <schema-file>
         http://host:port/xqsdemos/paymentInfoD3L.xml
      </schema-file>
   </XMLTranslate>
</document-source>

XQSビューを使用するXQS関数の構成

この項では、XQSビューを使用するXQS関数の構成方法を説明し、最後に例を示します。この項に出てくる要素は、<xqsview-source>要素のサブ要素です。追加情報は、「<xqsview-source>」を参照してください。すべてのサブ要素の情報へのリンクも含まれています。

使用するXQSビューの作成方法などの準備手順は、「XQSビューを使用するための準備」を参照してください。

WSDLvisibilityの設定

<xqsview-source>の属性設定WSDLvisibility="true"を使用すると、XQSビューをWebサービス操作として公開できます。XQSによって生成されるWSDLに、その操作が追加されます。Webサービス操作は、そのアプリケーションのWebサービスの一部になります。WSDLvisibility属性はオプションで、デフォルト値はfalseです。


注意

バインド変数を使用するSQLインジェクションのリスクを最低限に抑えるため、XQSではSQLベースのXQSビューをWebサービス操作として公開することはできません。SQLベースのXQSビュー機能、つまりSQL問合せに渡す前に、すべてのユーザー入力をアプリケーションでフィルタ処理および検証する必要があります。SQLベースのビューでWSDLVisibility属性がtrueに設定されている場合、XQSにより警告が発行され、その設定は無視されます。  


XQSビューをWebサービスとして公開する場合の詳細情報は、「XQSビューをWebサービス操作として公開するためのOC4JPackagerの追加の出力」を参照してください。

必須

後述の説明は、次に示す例がXQSビューとしてmytotals.xqに保存されていることを前提としています。この例では、ファイルからデータを読み取る関数が使用されており、入力パラメータloc(ファイルの場所を示す文字列変数)を取得して関数に渡し、整数の合計を戻します。

declare variable $loc external;
declare namespace xqs = "http://xmlns.oracle.com/ias/xqs";
declare function xqs:readFile($l as xs:string) as xs:int external;
for $po in xqs:readFile($loc)//po return $po//total

XQSビューを使用するには、少なくとも次の要素を構成する必要があります。

SQLベースのビューのバインド変数は、:1:2などの位置で示されます。同一の<input-parameters>および<part>構成要素を使用します。<part>には名前属性を指定する必要がありますが、名前の値は無視されます。SQLバインド変数は、1つ目の位置の引数は:1に、2つ目の位置の引数は:2などのように、実際の引数の位置によってそれぞれの値にバインドされます。

次の例では、問合せでのXQSビューの使用方法を示します。XQueryの宣言および使用方法は、前述の<function-name>および<input-parameters>の説明に対応しています。

declare namespace xqs = "http://xmlns.oracle.com/ias/xqs";
declare function xqs:totals($loc as xs:string) as xs:int external;
for $t in xqs:totals("C:¥MyPurchaseOrders.xml") return 
<outstanding_balance> fn:sum($t) </outstanding_balance>
オプション(場合によっては必須)

場合により必須または適切であるXQSビューの要素は、次のとおりです。

<output-element>を使用する際の考慮事項

WSDLvisibility属性をtrueに設定すると、ビューのWebサービス操作が生成され、WSDLドキュメントにこの操作の定義が含められます。次に示すように、<xqsview-source><output-element>の内容により、WSDL操作の出力メッセージのタイプが決定されます。

SQLベースのXQSビューに固有の考慮事項(必須)

<dataSource>: XQSにデータベース接続情報を提供します。SQL問合せに基づいたXQSビューには、<dataSource>構成要素が必須です。OC4J data-sources.xml構成ファイルの<managed-data-source>または<data-source>要素に定義されているように、<dataSource>要素にはデータソースのJNDI名が含まれている必要があります。

パフォーマンスとエラー処理

エラー処理の設定を行い、キャッシングやラージ・データセットの特別な処理などのパフォーマンス機能の使用を指定できます。これらの設定には、<xqsview-source>の属性isCachedlargeDataonError、およびサブ要素の<cache-properties><error-message>を使用します。これらの機能の構成は、ここでは省略します。「XQSエラー処理モードおよびAPIの使用方法」および「XQSパフォーマンス機能の使用方法」を参照してください。

次の例では、前に示したそれぞれの部分を1つにまとめてXQS関数totalsが構成されています。また、文字列変数loc(ファイルの場所用)を使用して整数の結果が出力されます。便宜上、ここでもXQSビューmytotals.xqを使用します。

declare variable $loc external;
declare namespace xqs = "http://xmlns.oracle.com/ias/xqs";
declare function xqs:readFile($l as xs:string) external;
for $po in xqs:readFile($loc)//po return $po//total

次の例では、キャッシング、ラージ・データおよびエラー処理のデフォルト設定が使用されています。これは、<xqsview-source>属性がisCached="false"largeData="false"およびonError="dynamicError"と設定されていることと同じです。XQSは、Webサービスとして公開されません。

<xqsview-source WSDLvisibility="false">
   <function-name namespace="http://xmlns.oracle.com/ias/xqs">
      totals
   </function-name>   
   <input-parameters type-match="none" >
      <part position="1" name="loc">
         <schema-type prefix="xs">string</schema-type>
      </part>
   </input-parameters>
   <repository>META-INF/xqs/mydir</repository>
   <queryName>mytotals</queryName>
   <output-element prefix="xs">int</output-element>
</xqsview-source>

WSDLソースにアクセスするXQS関数の構成

この項では、WSDLベースのソースにアクセスするXQS関数の構成方法について説明し、最後にWSDLドキュメントの一部分の例および対応する構成を示します。この項に出てくる要素は、<wsdl-source>要素のサブ要素です。追加情報は、「<wsdl-source>」を参照してください。すべてのサブ要素の情報へのリンクも含まれています。

使用するWSDLソースのタイプにより、「SOAPバインディングを伴うWSDLソースを使用するための準備」または「カスタム・クラスまたはEJBを使用するための準備(JavaまたはEJBのバインディングを伴うWSDLソース)」も参照してください。

必須

WSDLソースに対して、少なくとも次の要素を構成する必要があります。

前述の例で使用された<function-name>および<input-parameters>の例に対応する、関数の宣言の例を示します。

declare namespace xqs = "http://xmlns.oracle.com/ias/xqs";
declare function xqs:getmySearchCachedPage ($key as xs:string, $url as xs:string)
        as xs:base64Binary external;
オプション(場合によっては必須)

場合により必須または適切であるWSDLソースの要素は、次のとおりです。

パフォーマンスとエラー処理

エラー処理の設定を行い、キャッシングの使用を指定できます。これらの設定には、<wsdl-source>の属性isCachedonError、およびサブ要素の<cache-properties><error-message>を使用します。これらの機能の構成は、ここでは省略します。「XQSエラー処理モードおよびAPIの使用方法」および「XQSキャッシングの構成」を参照してください。

この例では、前に示したそれぞれの部分のいくつかを1つにまとめて、(この後に説明する)mySearch.wsdlで定義されるWebサービス操作のXQS関数が構成されます。

次の例では、キャッシングおよびエラー処理のデフォルト設定が使用されています。これは、<wsdl-source>属性がisCached="false"およびonError="dynamicError"と設定されていることと同じです。

<wsdl-source>
   <function-name namespace="http://xmlns.oracle.com/ias/xqs">
      getmySearchCachedPage
   </function-name>
   <wsdlURL>http://api.mySearch.com/mySearch.wsdl</wsdlURL>
   <operation>doGetCachedPage</operation>
   <service namespace="urn:mySearch">mySearchService</service>
   <port namespace="urn:mySearch">mySearchPort</port> 
   <input-parameters>
      <part position="1" name="key" >
         <schema-type prefix="xs">string</schema-type>
      </part>
      <part position="2" name="url" >
         <schema-type prefix="xs">string</schema-type>
      </part>
   </input-parameters>
</wsdl-source>
mySearch.wsdl

次に示すのは、前述の構成に関連するmySearch.wsdlの各部分です。WSDLの太字で示した部分は、構成要素に対応します。

<?xml version="1.0" ?> 
 
<definitions name="mySearch" targetNamespace="urn:mySearch"
   xmlns:typens="urn:mySearch"
   xmlns:xs="http://www.w3.org/2001/XMLSchema"
   xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
   xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
   xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
   xmlns="http://schemas.xmlsoap.org/wsdl/">
   ...
   <message name="doGetCachedPage">
      <part name="key" type="xs:string" /> 
      <part name="url" type="xs:string" /> 
   </message>
   <message name="doGetCachedPageResponse">
      <part name="return" type="xs:base64Binary" />
   </message>
   ...
   <portType name="mySearchPort">
      <operation name="doGetCachedPage">
         <input message="typens:doGetCachedPage" /> 
         <output message="typens:doGetCachedPageResponse" /> 
      </operation>
      ...
   </portType>
   ...
   <binding name="mySearchBinding" type="typens:mySearchPort">
      <soap:binding style="rpc" 
                    transport="http://schemas.xmlsoap.org/soap/http" /> 
      <operation name="doGetCachedPage">
         <soap:operation soapAction="urn:mySearchAction" /> 
         <input>
            <soap:body use="encoded" namespace="urn:mySearch"
               encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" /> 
         </input>
         <output>
            <soap:body use="encoded" namespace="urn:mySearch"
               encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" /> 
         </output>
      </operation>
      ...
   </binding>
   ...
   <service name="mySearchService">
      <port name="mySearchPort" binding="typens:mySearchBinding">
         <soap:address location="http://api.mySearch.com/search/beta2" /> 
      </port>
   </service>
</definitions>

問合せの設計方法

この章の内容は、開発者がすでにXQuery言語および効果的で効率的な問合せの設計方法の基礎を理解していることを前提としていますが、この項では、XQSを使用する際の特別な考慮事項など、重要なポイントを要約し、問合せの例を示します。この項には、次の項目が含まれます。

問合せの考慮事項

最初の手順として、当然ながらデータソースを考慮する必要があります。これには、アクセス方法や含まれるデータのタイプも含まれます。一部のデータソースに対して行う必要がある準備手順は、「データソースを使用するための準備」で前述しています。

次に、問合せ自体の様々な側面を考慮する必要があります。これには、次のことが含まれます。

前述のように、XQSでは、データソースにアクセスするための外部XQuery関数が実装されます。XQSによって作成されるこの関数の宣言を、選択した関数名を使用してXQueryのプロローグに含める必要があります。また、このプロローグは、適切な名前空間を参照する必要があります。宣言する関数名は、データソースの構成時に<function-name>要素で指定した名前と一致する必要があります。(「XQS関数の構成方法」を参照してください)。

問合せの例

XML文書からデータを取得する、単純な問合せを次に示します。このドキュメントの場所は、実行時にXQS関数に渡されます。

declare namespace xqs = "http://xmlns.oracle.com/ias/xqs"; 
declare function xqs:get_poSQ($bind as xs:string) external;
for $po in xqs:get_poSQ("http://host:port/xqsdemos/Repository/pos-2KB.xml") 
return  $po

XQSでは、XQS構成に基づいて関数が実装されます。関数名(この例ではget_poSQ)は、ユーザーが選択する名前です。この関数は、ドキュメント・ソースpos-2KB.xmlの名前と場所を示す文字列を入力として使用し、このファイルから注文(purchase order)データを戻します。

次に、XQueryコードを介してパラメータ値を渡す問合せの例を示します。このXQS関数はexampleで、構成に基づいてXQSによって実装されます。

declare namespace xqs = "http://xmlns.oracle.com/ias/xqs";
declare function xqs:example($i as xs:int, $d as xs:duration, 
                             $h as xs:hexBinary, $bin as xs:base64Binary, 
                             $t as xs:boolean) external;

for $result in xqs:example(xs:int(1),
                           xs:duration("P1Y2MT2H"),
                           xs:hexBinary("0FB7"),
                           xs:base64Binary("vYrfOJ39673//-BDiIIGHSPM=+"),  
                           xs:boolean("true"))
return $result;

次に、より複雑な問合せの例を示します。この問合せでは、顧客の名前を指定すると、その顧客の注文に関する支払記録が検索されます。そして、顧客の情報および注文が戻されます。この例には、2つのデータソースが関係しています。1)顧客情報はWSIFのカスタム拡張機能myeisを介してアクセスされます。2)支払情報はExcelシート(XML以外のドキュメント・ソース)に保存されています。顧客情報のデータソースへのアクセスには、XQS関数customerInfoが使用され、顧客名を示す文字列が入力として使用されます。この関数は、顧客情報のデータソースにアクセスし、指定された顧客の情報(顧客キーを含む)を生成します。その後、XQS関数paymentStatusInfoを使用して支払情報のExcelファイルにアクセスし、顧客情報のデータソースと同じキーを持つ顧客の注文情報を戻します。このXQueryコードには、結果のXML変換が含まれています。

declare namespace xqs = "http://xmlns.oracle.com/ias/xqs";
(: returns payment info for all customers:)
declare function xqs:paymentStatusInfo() external;
 
(: returns customer info given customer name :)
declare function xqs:customerInfo ($name as xs:string) external;
 
(: customer name passed in to query :)
declare variable $custName external;
 
let $custInfo := xqs:customerInfo($custName)
for $custOrderInfo in xqs:paymentStatusInfo()/excel/Row[CustomerKey eq $custInfo/key] 
return 
   <result>
      <MYEIS_RESULT>
         <Row>
            <Name> { $custInfo/name } </Name>
            <Company> { $custInfo/company} </Company>
            <Address> { $custInfo/address} </Address>
            <City> { $custInfo/city} </City>
            <State> { $custInfo/state} </State>
            <Zip> { $custInfo/zip} </Zip>
         </Row>
      </MYEIS_RESULT>
      <EXCEL_RESULT>
         <Row>
            <OrderID>{$custOrderInfo/OrderId}</OrderID>
            <Amount>{$custOrderInfo/Amount}</Amount>
            <PaymentStatus>{$custOrderInfo/PaymentStatus}</PaymentStatus> 
         </Row>
      </EXCEL_RESULT>
   </result>

入力パラメータのタイプ・チェック

WSDLソースまたはXQSビューで、基礎となるデータソースに入力引数を送る前に、XQueryによる追加のタイプ・チェックの手順を実行する場合は、次の手順を行います。

  1. <input-parameters>要素の下にある<part>サブ要素を介して、構成内で適切なXQS関数に対して指定した入力パラメータごとに、パラメータ・タイプを指定します。XQSビュー・ソースの場合は、必要に応じて、次のいずれかを介して指定します。

    • <part><schema-type>サブ要素

    • 入力順序の場合は、<part><xquery-sequence>サブ要素、および<xquery-sequence><itemType>サブ要素

    WSDLソースの場合は、順序は入力としてサポートされないため、関係があるのは<schema-type>のみです。

    (これらの各要素の詳細は、この章の後半部分に含まれているリファレンス・ドキュメントを参照してください。)

  2. XQueryのプロローグで関数を宣言する際に、パラメータ・タイプを含めます。

  3. 入力パラメータがユーザー定義タイプの場合は、タイプ定義を含むスキーマまたはファイルをインポートします。

次に例を示します。最初はXQS構成です。

<wsdl-source isCached="false">
   <function-name namespace="http://xmlns.oracle.com/ias/xqs">
      SplitRatio
   </function-name>
   ...
   <input-parameters>
      <part position="1" name="parameters">
         <schema-type namespace="http://www.xignite.com/services/">
            GetSplitRatio
         </schema-type>
      </part>
   </input-parameters>
</wsdl-source>

次は、対応するXQuery式です。

import schema namespace xignite="http://www.xignite.com/services/" 
       at "http://www.xignite.com/xSecurity.asmx?wsdl"
declare namespace xqs="http://xmlns.oracle.com/ias/xqs";
declare function xqs:SplitRatio($params as xignite:GetSplitRatio)
        as xignite:GetSplitRatioResponse external;

let $in := <xignite:GetSplitRatio> .....</xignite:GetSplitRatio>

let $y := xqs:SplitRatio($in) return <split>$y//xignite:Ratio</split>

実行時に、xqs:SplitRatioに渡された引数のタイプが、インポートされたスキーマのタイプxignite:GetSplitRatioであることがXQueryによって確認されます。

アプリケーション・コードの開発方法: XQSクライアント・インタフェースを使用した場合

この項では、(「XQSクライアント・インタフェースの概要」で最初に説明した)XQSで提供されるクライアントAPIを使用する場合の手順について説明し、例を示します。ここでは、JavaクライアントAPI、EJBクライアントAPIおよびJSPタグ・ライブラリについて説明します。Webサービス・クライアントに関して、XQSビューをWebサービス操作として公開するXQSの詳細は、パッケージ化の項で後述しています(「XQSビューをWebサービス操作として公開するためのOC4JPackagerの追加の出力」を参照)。それ以外では、XQSによってSOAP 1.1バインディングを伴う標準のWSDLが生成されます。ここに示す内容は、Webサービス・クライアントの作成に関する知識があることを前提としています。


注意

XQSでは、Webサービス・クライアント用のJavaコードは生成されません。各ユーザーの責任において、Webサービスを動的に起動するか、WSDLに基づいてクライアント起動コードを生成してください。 


この項には、次の項目が含まれます。

サポートされている問合せパラメータのタイプ

XQSのoracle.xqs.client.QueryParameterIインタフェースは、XQSのJavaクライアントAPIおよびEJBクライアントAPIで、問合せ用のバインド・パラメータの配列に使用します。このクラスは、XQSのJSPタグ・ライブラリでも、背後で使用されます。(追加情報は、「XQS QueryParameterIリファレンス」を参照してください。)表8-2は、XQSでサポートされているXML型、およびQueryParameterIインタフェースのインスタンスを介して入力値を渡すために使用するJava型の対応を示しています。

表8-2    バインド・パラメータ用にXQSでサポートされている型 
サポートされているXML型  QueryParameterIインタフェースの対応するJava型 

boolean 

boolean 

string 

java.lang.String 

int 

int 

integer 

int、long、java.math.BigInteger 

long 

long 

float 

float 

double 

double 

decimal 

java.math.BigDecimal 

base64Binary 

java.lang.String 

hexBinary 

java.lang.String 

anyURI 

java.net.URI 

dateTime 

java.util.GregorianCalendar

(前提条件: カレンダ値のタイムゾーンが適切に初期化されていること)

java.lang.String

(dateTimeの字句表現。説明はhttp://www.w3.org/TR/xmlschema-2/#dateTimeを参照。) 

duration 

java.lang.String

(期間の字句表現。説明はhttp://www.w3.org/TR/xmlschema-2/#durationを参照。) 

dayTimeDuration 

double

(dayTime期間の秒単位の表現) 

yearMonthDuration 

int

(yearMonth期間の月単位の表現) 

anyType、ユーザー定義のXML型 

org.w3c.dom.Node 

XQSクライアントAPIを使用するための一般的なコーディング手順

XQSクライアントAPIを使用するためには、次に示す、基本的なコーディング手順を行います。

  1. 問合せを作成します。非定型問合せを使用する場合は、問合せをハードコードするか、ユーザー入力からの問合せを受け入れるコードを記述します。XQSビューを使用する場合は、.xqファイルに問合せを保存します。「問合せの設計方法」も参照してください。

  2. 静的メソッドgetXQSFacade()を使用して、またはJSPページにXQS JSPタグ・ライブラリを含めることで、XQSFactoryファクトリからXQSFacadeIインタフェースのインスタンスを取得します。

  3. 入力パラメータを指定します。JavaクライアントAPIまたはEJB APIの場合は、タイプoracle.xqs.client.QueryParameterIの配列を作成し、静的メソッドgetQueryParameter()を使用してXQSFactoryファクトリからQueryParameterIインタフェースのインスタンスを取得して、その配列を移入します。(「XQS QueryParameterIリファレンス」を参照してください。)JSPタグ・ライブラリの場合は、executeまたはexecuteCursorparamサブタグを使用します。(「XQS paramタグ」を参照してください。)前項の「サポートされている問合せパラメータのタイプ」も参照してください。

  4. 問合せを実行します。

  5. 結果を読み取り、処理します。ステートレス・クライアントの場合は、XQSによって、java.util.Vectorインスタンス内に一度にすべての結果が戻されるか、(JSPタグを使用している場合は)java.util.ArrayListインスタンスとXML文書が戻されます。ステートフル・クライアントの場合は、Oracle XQueryタイプoracle.xml.xqxp.datamodel.XMLItemを使用するか、(JSPタグを使用している場合は)java.lang.ObjectインスタンスとXML文書のノードを使用して、アイテムごとに結果を取得します。XQS EJB APIおよびJSPタグ・ライブラリの場合は、ステートレスとステートフルのいずれかのアクセス・パターンを選択して使用できます。

    XQSFacadeIインタフェースでは、ステートフル・アクセス・パターンを使用します。XQSFacadeIインタフェースの使用に関する情報は、「Javaインタフェース・クライアントAPIの使用方法」を参照してください。

  6. 必要に応じて、エラーを取得し処理します。問合せのXQS関数の実行中にエラーが発生した場合でも処理が続行されるようにXQSを構成した場合は、エラーに関する情報を取得できます。「XQSエラー処理モードおよびAPIの使用方法」を参照してください。

  7. ステートフル・クライアントの使用時には、クライアント・オブジェクトをクローズして、問合せに関連付けられているすべてのリソースを解放します。


    注意

    ここでは、セキュリティまたはパフォーマンスの考慮事項については言及しません。これらの項目の情報は、「XQSアプリケーションのセキュリティ」および「XQSパフォーマンス機能の使用方法」を参照してください。 


ステートフル・クライアントとステートレス・クライアント

XQSクライアントAPIは、問合せ結果をXML順序として戻します。この順序には1つ以上のXML項目が含まれ、各項目は、XML文書、XMLノードまたはプリミティブ値になります。問合せを実行することで、結果は定義されますが、すべての結果項目が即座にマテリアライズされてプロセス・メモリーに格納されるわけではないことを認識しておくことが重要です。リレーショナル問合せの結果セットのように、XML順序でのカーソルの位置は、最初の項目の前になるように暗黙的に維持されており、次へ移動するための(next)操作で移動できます。暗黙カーソルを使用して次へ(next)の操作のコールを繰り返すことでXML順序にアクセスした場合は、次への操作をコールするたびに、要求された次の項目を作成するためのXQuery式の評価が、実際にトリガーされる可能性があります。XQueryによって式が評価される正確なタイミング、また、評価が段階的に行われるか一度に全部行われるかは、そのXQuery式およびXQuery実装の最適化レベルによって異なります。XQSクライアントAPIでは、このようにカーソルでアクセスするかわりに、シングル・ステップですべての問合せ結果を読み取り、プロセス・メモリーに格納することもできます。

シングル・ステップ・モードおよびカーソル・モードの実行には、それぞれ長所と短所があります。ほとんどの状況では、シングル・ステップによる実行が適しています。これは、関連するリソース(基礎となるデータソースへの接続、およびその式専用の内部XQueryリソース)が、実行の完了後にただちに解放されるためです。また、データソースへ繰り返しアクセスすることによるパフォーマンスへの潜在的な影響を受けることもありません。ただし、結果順序に含まれる項目の全体のサイズが大きすぎて、順序全体を一度にマテリアライズするとプロセス・メモリーが不足する場合には、シングル・ステップによる実行を使用できません。このような場合は、問合せが結果を項目ごとに提供するのを妨げるもの(たとえば集計式など)がないかぎり、カーソル・モードが唯一の手段になります。

シングル・ステップ・モードまたはカーソル・モードを選択できるように、XQSでは2種類のクライアントAPIを用意しています。シングル・ステップ・モード用のステートレスおよびカーソル・モード用のステートフルです。(この場合の「ステート」は、XQueryエンジンの内部状態を指します。)これらのクライアントAPIは、次のように動作します。

XQS EJBクライアントAPIおよびJSPクライアントAPIには、それぞれステートレス実行用の機能とステートフル実行用の機能があります。XQS Javaインタフェース(XQSFacadeI)クライアントAPIは、ステートフル・アクセスを提供します。すべての結果項目をただちに取得し、クライアント・オブジェクトを解放することで、ステートレス・アクセスをシミュレートできます。

Javaインタフェース・クライアントAPIの使用方法

「XQSクライアントAPIを使用するための一般的なコーディング手順」を参照してください。(問合せの作成後に)XQS JavaクライアントAPIを使用してこれらの手順を適用するには、次の手順に従います。

  1. 静的メソッドgetXQSFacade()を使用して、XQSFactoryファクトリからXQSFacadeIインタフェースのインスタンスを取得します。次の各手順のメソッド・コールは、このインスタンスからコールされます。

  2. 入力パラメータ用のQueryParameterI配列を作成し、静的メソッドgetQueryParameter()を使用してXQSFactoryファクトリからQueryParameterIインタフェースのインスタンスを取得して、その配列を移入します。

  3. execute()メソッドを使用して非定型問合せを実行するか、executeView()メソッドを使用してXQSビューを実行し、問合せとQueryParameterI配列(入力パラメータがない場合はnull)を渡します。executeView()を使用する場合は、そのビューのXQS関数の名前空間も渡します。

  4. 問合せ内で使用したデータソースの構成にemptySequenceエラー・モードまたはerrorMessageエラー・モードを使用した場合は、必要に応じてgetErrors()メソッドを使用して、問合せの実行時に発生したエラーを取得できます。これにより、XQSErrorIオブジェクトのコレクションに対するイテレータが戻されます。エラーの構成と処理の詳細は、「XQSエラー処理モードおよびAPIの使用方法」を参照してください。

  5. getNextItem()メソッドを繰り返し使用して、項目ごとに結果を取得します。各項目は、XMLItemインスタンス内に戻されます。必要に応じてこれらの項目を処理します。

  6. close()メソッドを使用して、問合せに関連付けられているすべてのリソースを解放します。

これらの手順は、次の例の中で示されています。「XQSFacadeIリファレンス」も参照してください。

例1: XQSFacadeI API

この例は、XQSFacadeI APIの一般的な使用方法を示しています。この問合せでは、バインド・パラメータが順序内に戻され、バインド方法とデータの取得方法が示されます。関数が使用されないため、構成は不要です。

問合せ結果を処理するために、コードには(oracle.xml.xqxp.datamodelパッケージ内で)XMLItemクラスが使用されています。

import oracle.xml.xqxp.datamodel.XMLItem;
import oracle.xml.parser.v2.XMLDocument;
import oracle.xml.parser.v2.XMLElement;
import oracle.xqs.client.XQSFacadeI;
import oracle.xqs.client.QueryParameterI;
import oracle.xqs.client.XQSErrorI;
import java.util.Vector;

public class XQSFacadeITest {
public static void main(String[] args) throws Exception {
 try{
          //get XQSFacadeI
          XQSFacadeI facade = XQSFactory.getXQSFacade();
          String xquery = "declare variable $bind1 external;\n"+
             "declare variable $bind2 external;\n"+
             "declare variable $bind3 external;\n"+
             "declare variable $bind4 external;\n"+
             "declare variable $bind5 external;\n"+
             "declare variable $bind6 external;\n"+
             "declare variable $bind7 external;\n"+
             "declare variable $bind8 external;\n"+
             "declare variable $bind9 external;\n"+
             "declare variable $bind10 external;\n"+
             "declare variable $bind11 external;\n"+
             "declare variable $bind12 external;\n"+
             "declare variable $bind13 external;\n"+
             "declare variable $bind14 external;\n"+
             "declare variable $bind15 external;\n"+
             "declare variable $bind16 external;\n"+
             "("+"$bind1,$bind2,$bind3,$bind4,$bind5,$bind6,$bind7,\n"+
             "$bind8,$bind9,$bind10,$bind11,$bind12,$bind13,$bind14,$bind15,
                $bind16)";

          QueryParameterI params[] = new QueryParameterI[16];
          params[0]=XQSFactory.getQueryParameter ("bind1");
          params[0].setString("test");
          params[1]=XQSFactory.getQueryParameter ("bind2");
          params[1].setInteger(new BigInteger("100"));
          params[2]=XQSFactory.getQueryParameter ("bind3");
          params[2].setBoolean(true);
          params[3]=XQSFactory.getQueryParameter ("bind4");
          params[3].setFloat(-1);
          params[4]=XQSFactory.getQueryParameter ("bind5");
          params[4].setDuration("P1Y2M3DT10H30M");
          params[5]=XQSFactory.getQueryParameter ("bind6");
          params[5].setDouble(-11.0);

          TimeZone LAtz = new SimpleTimeZone(-28800000,
          "America/Los_Angeles",
                Calendar.APRIL, 1, -Calendar.SUNDAY,
                7200000,
                Calendar.OCTOBER, -1, Calendar.SUNDAY,
                7200000,
                3600000);
          GregorianCalendar cal = new GregorianCalendar(LAtz);

       params[6]=XQSFactory.getQueryParameter ("bind7");
       params[6].setDateTime(cal,true);

       URI uri = new URI("http://www.test.com");

       params[7]=XQSFactory.getQueryParameter ("bind8");
       params[7].setAnyURI(uri);
       params[8]=XQSFactory.getQueryParameter ("bind9");
       params[8].setInt(-7);
       params[9]=XQSFactory.getQueryParameter ("bind10");
       params[9].setLong(50l);
       params[10]=XQSFactory.getQueryParameter ("bind11");
       params[10].setDecimal(new BigDecimal(999999));
       params[11]=XQSFactory.getQueryParameter ("bind12");
       XMLDocument document = new XMLDocument();

          Element elem = document.createElementNS("http://client.xqs.oracle/",
             "tns:result");
          document.appendChild(elem);

       params[11].setNode(elem);
       params[12]=XQSFactory.getQueryParameter ("bind13");
       params[12].setBase64Binary("vYrfOJ39673//-BDiIIGHSPM=+");
       params[13]=XQSFactory.getQueryParameter ("bind14");
       params[13].setHexBinary("0FB7");
       params[14]=XQSFactory.getQueryParameter ("bind15");
       params[14].setDayTimeDuration(60.5);
       params[15]=XQSFactory.getQueryParameter ("bind16");
       params[15].setYearMonthDuration(13);

       facade.execute(xquery, params);
       // lookup functions
       XMLItem item = facade.getNextItem();
 
       while(item != null) {
         if (item.instanceOfType(XMLItem.XMLITEM_STRING)) {
            System.out.println("string item value: expected: \"test\", 
            actual:", item.getString());
         }
         else if (item.instanceOfType(XMLItem.XMLITEM_INT)) {
            System.out.println("int item value: expected: \"-7\", actual: ",
            item.getInt());
         }
         else if (item.instanceOfType(XMLItem.XMLITEM_LONG)) {
            System.out.println("long item value: expected: \"501\", actual: ",
            item.getInt());
         }
         else if(item.instanceOfType(XMLItem.XMLITEM_INTEGER)) {
            if(item.intFormat())
               System.out.println("integer item value: expected: \"100\",
               actual:", item.getInt());
            else
              System.out.println("integer item value: expected: \"100\",
              actual: ", item.getDecimal().intValue());
            }
            else if(item.instanceOfType(XMLItem.XMLITEM_BOOLEAN)) {
               System.out.println("boolean item value: expected: \"true\", 
               actual: ", item.getBoolean());
            }
            else if(item.instanceOfType(XMLItem.XMLITEM_FLOAT)) {
               System.out.println("float item value: expected: \"-1\",
               actual: ",(float)item.getDouble());
            }
            else if (item.instanceOfType(XMLItem.XMLITEM_XDT_DAYTIMEDURATION)) {
               System.out.println("dayTimeDuration item value: expected: \"60.5 
               seconds\", actual: ", item.getDayTimeDuration());
            }
            else if (item.instanceOfType(XMLItem.XMLITEM_XDT_YEARMONTHDURATION)) {
               System.out.println("yearMonthDuration item value: expected: \"13
               months\", actual: ",  item.getYearMonthDuration());
            }
            else if (item.instanceOfType(XMLItem.XMLITEM_DURATION)) {
               System.out.println("duration item value: expected: \"
               P1Y2M3DT10H30M \", actual: ", item.getLexicalValue());
            }
            else if(item.instanceOfType(XMLItem.XMLITEM_DOUBLE)) {
               System.out.println("double item value: expected: \" -11.0\",
               actual: ", item.getDouble());
            }
            else if(item.instanceOfType(XMLItem.XMLITEM_DATETIME)) {
               System.out.println("dateTime item value: expected Timezone:
               \"Pacific (Latz) \", actual: ", item.getCalendar().getTimeZone());
            }
            else if (item.instanceOfType(XMLItem.XMLITEM_ANYURI)) {
               System.out.println("anyURI item value: expected:
               \"http://www.test.com\", actual: ", item.getString());
            }
            else if (item.instanceOfType(XMLItem.XMLITEM_DECIMAL)) {
               System.out.println("decimal item value: expected: \"999999 \",
               actual: ", item.getDecimal().intValue());
         }
         else if(item.instanceOfType(XMLItem.XMLITEM_NODE)) 
         {
            XMLElement node = (XMLElement)item.getNode();

            //when obtained from document function, it returns XMLDocument
            if(node instanceof XMLDocument)
               node = (XMLElement)node.getFirstChild();
            System.out.println("node item value: expected namespace: \"
               http://client.xqs.oracle \", actual: ",node.getNamespaceURI());
            System.out.println("node item value: expected local name: \"result\",
               actual: ",node.getLocalName());
         }
         else if (item.instanceOfType(XMLItem.XMLITEM_HEXBINARY)) {
            System.out.println("hexBinary item value: expected: \"0FB7\", 
               actual: ", item.getString());
         }
         else if (item.instanceOfType(XMLItem.XMLITEM_BASE64BINARY)) {
            System.out.println("base64Binary item value: expected: \"
               vYrfOJ39673//-BDiIIGHSPM=+ \", actual: ", item.getString());
         }
         else 
            {
            System.out.println("item type not supported:"+item.getLexicalValue());
            }
            item = facade.getNextItem();
         }
      }catch(Exception ex){
         ex.printStackTrace();
         fail(ex.getMessage());
         assertTrue("xquery execution failed", false);
    } 
    facade.close();
  }
}

例2: XQSFacadeI APIを使用した非定型問合せ

この項では、Javaクラスを使用して、クライアント・コード内のXQSFacadeI APIおよび関連するXQS構成の使用の手順を示します。この例の非定型問合せでは、XQSソースが使用されます。また、このXQSソースでは、ドキュメント・ソースが使用されます。

問合せ

この例では、次の非定型問合せが使用されます。

declare namespace xqs="http://xmlns.oracle.com/ias/xqs";
declare function xqs:get_poSQ($bind as xs:string) external;
for $po in xqs:get_poSQ("http://localhost:8888/myrepository/pos-2KB.xml")
    return $po
構成

次に、この問合せで、次の例に示すように構成されたXQSビュー・ソースに対応するXQS関数get_poSQが使用されます。.xqファイルの名前と場所を(<queryName>要素および<repository>要素を介して)構成内で指定しなかった場合、デフォルトでは、ファイル名は関数名、ファイルの場所はOC4JPackagerの実行時に-repositoryオプションを介して指定した場所であるとみなされます。

<xqsview-source>
   <function-name prefix="xqs">get_poSQ</function-name>
   <input-parameters>
      <part position="1" name="bind" >
         <schema-type prefix="xs">string</schema-type>
      </part>
   </input-parameters>
</xqsview-source>

ファイルget_poSQ.xqで定義されたXQSビューget_poSQでは、ドキュメント・ソースが使用されます。このドキュメント・ソースは、次のように定義されます。

declare namespace xqs = "http://xmlns.oracle.com/ias/xqs";
declare variable $bind external;
declare function xqs:genericFile($bind as xs:string) external;
for $po in xqs:genericFile($bind)//po
   return $po

また、ドキュメント・ソースgenericFileは、次のように構成されます。

<document-source>
   <function-name namespace="http://xmlns.oracle.com/ias/xqs">
      genericFile
   </function-name>
</document-source>

genericFile関数では、ドキュメントURLが入力として使用されるため、<documentURL>要素は使用されていません。

Javaコード

次はコードです。このコードは、次のことを行う完全なクラスです。

例3: XQSFacadeI APIを使用したXQSビュー

この項では、XQSFacadeI APIを使用し、executeView()コールを介してXQSビューを直接実行する場合の例を示します。

構成

BasicFileWSという名前のXQSビューの構成を示します。

<xqsview-source WSDLvisibility="true" isCached="false" onError="errorMessage">
   <function-name  prefix="xqs">BasicFileWS</function-name>
   <input-parameters type-match="none" >
      <part position="1" name="custName">
         <schema-type prefix="xs">string</schema-type>
      </part>
   </input-parameters>
   <output-element namespace="http://xmlns.oracle.com/ias/xqs/CustomerDemo" 
                location="http://host:port/xqsdemos/MyTypes.xsd" 
type="CustomerOrdersType">
   </output-element>
</xqsview-source>

<queryName>要素がないため、.xqファイルの名前は、(指定された関数名と同じ)BasicFileWS.xqとみなされます。このビューでは、文字列のパラメータcustNameが入力として使用されます。

次に、ビューBasicFileWS.xq「問合せの例」で前述した問合せ)の定義を示します。顧客名を入力として使用するための変数も含まれます。このビューでは、データソースに対して2つのXQS関数が使用されます。このデータソースの構成は、この例の後に示しています。

declare namespace xqs = "http://xmlns.oracle.com/ias/xqs" ;
(: returns payment info for all customers:)
declare function xqs:paymentStatusInfo () external;
 
(: returns customer info given customer name :)
declare function xqs:customerInfo ($name as xs:string) external;
 
(: customer name passed in to query :)
declare variable $custName external;
 
let $custInfo := xqs:customerInfo($custName)
for $custOrderInfo in xqs:paymentStatusInfo()/excel/Row[CustomerKey eq $custInfo/key] 
return 
   <result>
      <MYEIS_RESULT>
         <Row>
            <Name> { $custInfo/name } </Name>
            <Company> { $custInfo/company} </Company>
            <Address> { $custInfo/address} </Address>
            <City> { $custInfo/city} </City>
            <State> { $custInfo/state} </State>
            <Zip> { $custInfo/zip} </Zip>
         </Row>
      </MYEIS_RESULT>
      <EXCEL_RESULT>
         <Row>
            <OrderID>{$custOrderInfo/OrderId}</OrderID>
            <Amount>{$custOrderInfo/Amount}</Amount>
            <PaymentStatus>{$custOrderInfo/PaymentStatus}</PaymentStatus> 
         </Row>
      </EXCEL_RESULT>
   </result>

次に、関数paymentStatusInfoに関連付けられているドキュメント・ソースの構成を示します。このドキュメントはXMLではないため、変換にD3Lが使用されます。(「XML以外のドキュメント・ソースを使用するための準備」を参照してください。)

<document-source isCached="false">
   <function-name prefix="xqs">paymentStatusInfo</function-name>
   <documentURL>http://host:port/xqsdemos/paymentInfo.csv</documentURL>
   <XMLTranslate method="D3L"> 
      <schema-file>
         http://host:port/xqsdemos/paymentInfoD3L.xml
      </schema-file>
   </XMLTranslate>
</document-source>

次に、関数customerInfoに関連付けられているWSDLソースの構成を示します。これには、JavaとXMLの型マッピングに関する情報も含まれます。

<wsdl-source isCached="false">
   <function-name  namespace="http://xmlns.oracle.com/ias/xqs">
      customerInfo
   </function-name>
   <wsdlURL>http://host:port/xqsdemos/CustomerInfo.wsdl</wsdlURL>
   <operation>getCustomer</operation>
   <service prefix="myeis">CustomerInfoMYEISService</service>
   <port prefix="myeis">CustomerInfo</port>
   <input-parameters>
      <part position="1" name="name"> 
         <schema-type prefix="xs">string</schema-type>
      </part>
   </input-parameters>
   <typeMap>
      <mapping typeClass="org.w3c.dom.Node">
         <xmlType prefix="myeis">
            Customer
         </xmlType>
      </mapping>
   </typeMap>
</wsdl-source>
Javaコード

この項では、ビューBasicFileWSを実行するためのJavaコードを使用し、次のことを行う完全なクラスを示します。

EJBクライアントAPIの使用方法

「XQSクライアントAPIを使用するための一般的なコーディング手順」を参照してください。XQS EJBクライアントAPIの場合は、(問合せの作成後に)ステートフル・セッションとステートレス・セッションのどちらを選択するかによって、次に示すように手順の詳細が異なります。

  1. 検索の実行、EJBローカル・ホーム・インタフェースの取得、ローカル・インタフェースの作成などを行って、Beanインスタンスの適切な作成手順を完了します。次の各手順のメソッド・コールは、このインスタンスからコールされます。ステートフルBeanとステートレスBeanの作成方法は、次項「ステートフル・セッション用およびステートレス・セッション用のEJBクライアント」を参照してください。

  2. 入力パラメータ用のQueryParameterI配列を作成し、静的メソッドgetQueryParameter()を使用してXQSFactoryファクトリからQueryParameterIインタフェースのインスタンスを取得して、その配列を移入します。

  3. execute()メソッドを使用して非定型問合せを実行するか、executeView()メソッドを使用してXQSビューを実行し、問合せとQueryParameterI配列(入力パラメータがない場合はnull)を渡します。executeView()を使用する場合は、そのビューのXQS関数の名前空間も渡します。

  4. ステートフルBeanの場合は、getNextItem()メソッドを繰返し使用して、項目ごとに結果を取得します。各項目は、XMLItemインスタンス内に戻されます。必要に応じてこれらの項目を処理します。

    ステートレスBeanの場合は、問合せ結果がベクターjava.util.Vectorとして完全にマテリアライズされ、XMLItemインスタンスが含まれます。必要に応じてこれらの項目のベクターを処理します。

  5. 問合せ内で使用したデータソースの構成にemptySequenceエラー・モードまたはerrorMessageエラー・モードを使用した場合は、必要に応じてgetErrors()メソッドを使用し、問合せの実行時にこれらのデータソース内で発生したエラーを取得できます。これにより、XQSErrorIオブジェクトのコレクションに対するイテレータが戻されます。エラーの構成と処理の詳細は、「XQSエラー処理モードおよびAPIの使用方法」を参照してください。

  6. ステートフルBeanの場合は、close()メソッドを使用して、問合せに関連付けられているすべてのリソースを解放します。この手順は、ステートレスBeanには適用されません。

これらの手順は、次の例の中で示されています。「XQS EJBクライアントAPIリファレンス」も参照してください。

ステートフル・セッション用およびステートレス・セッション用のEJBクライアント

ステートフル・セッションとステートレス・セッションの使い分けの詳細は、「ステートフル・クライアントとステートレス・クライアント」を参照してください。

ステートフルEJBとステートレスEJBのどちらを取得するかは、JNDI検索および使用するXQSパッケージで決まります。次の例では、ステートフルBeanが取得されます。

//Look up and create the EJB to execute the query.
InitialContext ic = new InitialContext();
//Use Local client.
oracle.xqs.client.ejb.stateful.XQSClientLocalHome home = 
   (oracle.xqs.client.ejb.stateful.XQSClientLocalHome)ic.lookup
                                        ("java:comp/env/XQSClientStatefulLocal");
oracle.xqs.client.ejb.stateful.XQSClientLocal bean = home.create();

次の例では、ステートレスBeanが取得されます。

//Look up and create the EJB to execute the query.
InitialContext ic = new InitialContext();
//Use Local client.
oracle.xqs.client.ejb.stateless.XQSClientLocalHome home = 
   (oracle.xqs.client.ejb.stateless.XQSClientLocalHome)ic.lookup
                                        ("java:comp/env/XQSClientStatelessLocal");
oracle.xqs.client.ejb.stateless.XQSClientLocal bean = home.create();

前述のように、ステートレスEJBセッションで問合せ(非定型またはビュー)を実行すると、XMLItemインスタンスを含むベクターとして、結果が完全にマテリアライズされます。また、このベクターは、必要に応じて後で処理します。ステートフル・セッションの場合は、問合せの実行後に、getNextItem()メソッドを使用して項目を1つずつ取得します。これにより、タイプXMLItemの項目が戻されます。

ステートフル・セッションでのEJBクライアントAPIの使用

XQS EJBステートフル・クライアントAPIは、XQSFacadeI APIと同じです。前の項で示したBean作成用のコード以外にも、ステートフルEJBクライアントのコード例は、「例2: XQSFacadeI APIを使用した非定型問合せ」および「例3: XQSFacadeI APIを使用したXQSビュー」で示したXQSFacadeIの例と類似します。getNextItem()メソッドを繰返し使用して、項目を1つずつ、XMLItemインスタンスとして取得し、処理します。

制限事項

ステートフルEJBと関連付けられているXQSの問合せ状態は、非アクティブ化および後続の再アクティブ化では維持されません。問合せ状態は、execute()またはexecuteView()メソッドの起動後に確立されます。問合せ状態には問合せの実行計画を管理する内部構造が含まれ、項目の取得後には、結果順序の現在の項目の位置も含まれます。ステートフルBeanインタフェースを使用すると、毎回サーバー・セッションに接続することで、結果項目を一度に1つずつフェッチできます。

このオプションは、各項目のサイズまたは結果順序の合計サイズが大きすぎて、一度のラウンドトリップでは送信できない場合に重要です。また、最初の項目をすぐに戻すことによる迅速なレスポンスが必要な場合にも便利です。このオプションのデメリットは、サーバーによってBeanが非アクティブ化され、処理中の問合せの状態が失われる可能性があることです。

問合せ状態が失われ、クライアントにより後続のgetNextItem()のコールが試行されると、XQSによりエラー・コードがXQS 0088のXQSExceptionがスローされます。この制限を緩和する方法の1つは、キャッシュ済のXQSビューとしてステートフルBeanに起動される問合せを構成することです。キャッシュ済のXQSビューを使用すると、getNextItem()のコールを複数回実行して結果順序の目的の位置まで移動することにより、問合せを即座に再実行し、中断する前に現在の位置であった場所からフェッチを再開できます。

例: ステートレス・セッションでEJBクライアントAPIを使用したXQSビュー

このステートレスEJBの例では、「例3: XQSFacadeI APIを使用したXQSビュー」で使用したBasicFileWS XQSビューを再使用しており、そのコードの一部が繰り返されています。ビューとその構成は、この項を参照してください。

JNDI参照およびステートレスBeanの作成に加えて、このステートレスEJBの例とXQSFacadeIの例の重要な違いは、結果の処理にあります。ステートレス・セッションの結果は、XMLItemインスタンスを含むベクターとして完全にマテリアライズされます。XMLItemインスタンスを取得するためのgetNextItem()メソッドがBean内にあるのとは対照的に、その後、そこから項目を1つずつ取得し、XMLItemとしてキャストします。ただし、処理の基本的な性質は変わりません。

...
//lookup and create the EJB to execute the xquery
InitialContext ic = new InitialContext();
 
oracle.xqs.client.ejb.stateless.XQSClientLocalHome home =
                 (oracle.xqs.client.ejb.stateless.XQSClientLocalHome)
                 ic.lookup("java:comp/env/XQSClientStatelessLocal");
oracle.xqs.client.ejb.stateless.XQSClientLocal bean = home.create();
 
String xqueryView = "BasicFileWS";
QueryParameterI param = XQSFactory.getQueryParameter("custName");
param.setString("John Ford");
QueryParameterI[] params = new QueryParameterI[1];
params[0] = param;
 
java.util.Vector  result = 
     bean.executeView(xqueryView,"http://xmlns.oracle.com/ias/xqs",params);
 
java.util.Enumeration resultEnum = result.elements();
while(resultEnum!=null && resultEnum.hasMoreElements()) {
    XMLItem item = (XMLItem)resultEnum.nextElement();
    if(item.instanceOfType(XMLItem.XMLITEM_STRING)) {
       resultBuf.append(item.getString());
    }
    else if(item.instanceOfType(XMLItem.XMLITEM_INT)) {
       resultBuf.append(item.getInt());
    }
    else if(item.instanceOfType(XMLItem.XMLITEM_LONG)) {
       resultBuf.append(item.getInt());
    }
    else if(item.instanceOfType(XMLItem.XMLITEM_INTEGER)) {
       if(item.intFormat())
           resultBuf.append(item.getInt());
       else
           resultBuf.append(item.getDecimal().intValue());
    }
    else if(item.instanceOfType(XMLItem.XMLITEM_BOOLEAN)) {
       resultBuf.append(item.getBoolean());
    }
    else if(item.instanceOfType(XMLItem.XMLITEM_FLOAT)) {
       resultBuf.append((float)item.getDouble());
    }
    else if(item.instanceOfType(XMLItem.XMLITEM_DOUBLE)) {
       resultBuf.append(item.getDouble());
    }
    else if(item.instanceOfType(XMLItem.XMLITEM_XDT_DAYTIMEDURATION)) {
       resultBuf.append(item.getDayTimeDuration());
    }
    else if(item.instanceOfType(XMLItem.XMLITEM_YEARMONTHDURATION)) {
       resultBuf.append(item.getYearMonthDuration());
    }
    else if(item.instanceOfType(XMLItem.XMLITEM_DURATION)) {
       resultBuf.append(item.getLexicalValue());
    }
    else if(item.instanceOfType(XMLItem.XMLITEM_DATETIME)) {
       resultBuf.append(item.getCalendar().getTime());
    }
    else if(item.instanceOfType(XMLItem.XMLITEM_ANYURI)) {
       resultBuf.append(item.getString());
    }
    else if(item.instanceOfType(XMLItem.XMLITEM_DECIMAL)) {
       resultBuf.append(item.getDecimal().intValue());
    }
    else if(item.instanceOfType(XMLItem.XMLITEM_NODE)) {
       resultBuf.append(item.getNode().getNodeName());
    }
    else if(item.instanceOfType(XMLItem.XMLITEM_HEXBINARY)) {
       resultBuf.append(item.getString());
    }
    else if(item.instanceOfType(XMLItem.XMLITEM_BASE64BINARY)) {
       resultBuf.append(item.getString());
    }
// Here is where you might use a bean.getErrors() call and process errors.
// (Assuming appropriate configuration.)
}
...

JSPタグ・ライブラリの使用方法

「XQSクライアントAPIを使用するための一般的なコーディング手順」を参照してください。XQS JSPタグ・ライブラリの場合は、(問合せの作成後に)ステートフル・アクセス・モードとステートレス・アクセス・モードのどちらを選択するかによって、次に示すように手順の詳細が異なります。

  1. taglibを介して、TLD URIおよび目的の接頭辞を指定してXQS JSPタグ・ライブラリをインポートします。

  2. executeCursorタグを使用してステートフル・モードで問合せを実行するか、executeタグを使用してステートレス・モードで問合せを実行します。executeCursorタグまたはexecuteタグで次の処理を行います。

    • xqueryString属性を使用して非定型問合せを指定するか、xqsViewName属性およびnamespace属性を使用してXQSビューを指定します。

    • 問合せ結果の出力変数を定義します。出力先は、XML文書(toXMLDoc属性を使用)、および結果のjava.util.ArrayListインスタンス(resultItems属性を使用)です。必要に応じて、JSP出力ストリーム(toWriter属性を使用)に出力することもできます。結果は、表8-2「バインド・パラメータ用にXQSでサポートされている型」に基づいて、Javaオブジェクト型で表されます。

    • 問合せ内で使用したデータソースの構成にemptySequenceエラー・モードまたはerrorMessageエラー・モードを使用した場合は、必要に応じてerrors属性を使用し、問合せの実行時にこれらのデータソース内で発生したエラーを処理できます。これにより、XQSErrorIオブジェクトのコレクションに対するイテレータが戻されます。エラーの構成と処理の詳細は、「XQSエラー処理モードおよびAPIの使用方法」を参照してください。

  3. executeCursorタグまたはexecuteタグでは、各入力パラメータに対してparamサブタグを使用します。必要に応じて、paramタグのlocalNamenamespacevalueおよびtypeの各属性を使用します。

  4. executeCursorタグの場合は、関連するnextタグを使用して結果を項目ごとに取得するか、結果をバッチで取得して出力媒体に送ります。

    executeタグの場合は、結果が完全にマテリアライズされて、出力媒体に送られます。

  5. 1つ以上の出力媒体で繰返し処理を行い、結果を処理します。使用できる出力媒体(JSP出力ストリーム、XML文書、Javaのリスト)は標準であるため、これはXQS固有の手順ではありません。nextを1回実行するたびに、その結果を処理する必要があることに注意してください。処理せずに再びnextを実行すると、結果が上書きされます。

  6. executeCursorタグの場合は、closeタグを使用して、問合せに関連付けられているすべてのリソースを解放します。この手順は、executeタグには適用されません。

これらの手順は、次の例の中で示されています。「XQS JSPタグ・ライブラリのリファレンス」も参照してください。


注意

必要に応じて、JSPページでJSTLタグを使用して結果を変換することもできます。 


ステートフル・アクセス用およびステートレス・アクセス用のJSPタグ

ステートフル・アクセスとステートレス・アクセスの使い分けの詳細は、「ステートフル・クライアントとステートレス・クライアント」を参照してください。

XQSを使用するJSPページでは、ステートフル・アクセスとステートレス・アクセスのどちらを使用するかは、使用するタグによって決まります。executeCursorタグの場合はステートフル・アクセスを使用しますが、executeタグの場合はステートレス・アクセスを使用します。

前述のように、問合せ(非定型またはビュー)をステートレスJSPアクセス・パターンで実行すると、結果が完全にマテリアライズされて、属性の設定(XML DOMドキュメント、Object[]配列、およびオプションのJSP出力ストリーム)を介して選択した出力媒体に送られます。その後、これらの結果を必要に応じて処理します。ステートフル・アクセス・パターンの場合は、問合せの実行後に、nextタグを使用して、1つずつ項目を取得して処理します。

例: ステートフル・アクセス・パターンでJSPタグを使用したXQSビュー

このステートフルJSPの例では、「例3: XQSFacadeI APIを使用したXQSビュー」BasicFileWS XQSビューを再使用しています。ビューとその構成は、この項を参照してください。

この項のコード例では、次のことが実行されます。

例: ステートレス・アクセス・パターンでJSPタグを使用した非定型問合せ

この例では、XQS JSP executeタグを使用して非定型問合せが実行され、ステートレス・アクセス・パターンが使用されます。この例の主な目的は、前述のステートフル・アクセスの使用例と比較することで、次の事項を比較および対比させることにあります。

Webサービス操作として公開されたXQSビューの使用方法

XQSでは、自動生成されたサーブレットを介して実装されたWebサービスを使用して、XQSビューをWebサービス操作として公開できます。詳細および関連する詳細は、「XQSビューをWebサービス操作として公開するためのOC4JPackagerの追加の出力」を参照してください。

Webサービス・クライアントは、独自に提供する必要があります。

OC4JPackagerを使用したXQSアプリケーションのパッケージ方法

この項では、OC4JPackagerを使用してXQS関連ファイルをアプリケーションにバンドルする方法について説明します。概要は、「OC4JPackagerの概要」を参照してください。

OC4JPackagerでは、他のEARのようにOC4Jにデプロイできる、EARファイルが作成されます。一般情報は、『Oracle Containers for J2EEデプロイメント・ガイド』を参照してください。

この項には、次の項目が含まれます。

OC4JPackagerの使用手順

この項では、J2EEアプリケーションでOC4JPackagerを実行し、XQS機能を使用できるようにするための基本的な準備および実行の手順を示します。ここに出てくるOC4JPackagerのパラメータおよびJavaのプロパティに関する一般情報は、「OC4JPackagerのリファレンス」を参照してください。


注意

OC4JPackagerでは、ディレクトリ名またはファイル名でのスペースの使用はサポートされていません。 


OC4JPackagerを実行するための準備

OC4JPackagerを実行するには、次の準備手順を完了してください。

  1. 通常どおりに、アプリケーション・コンポーネントのJARファイル(Webモジュール用WARファイル、EJBモジュール用EJB JARファイルなど)を作成します。その際、すべてのファイルに、適切な標準J2EE構成ファイル(web.xmlおよびejb-jar.xmlなど)を使用します。その後、必要に応じてこれらのファイルをOC4JPackagerのEARファイルにバンドルするか、他の関連ファイル(application.xmlなど)とともに、EARファイルの構造と内容を反映するディレクトリ構造に置いておきます。

  2. アプリケーションの目的のディレクトリを選択し、(必要に応じて)EARファイルまたは構造化されたEARの内容をそのディレクトリに配置します。

    -appArchivesパラメータ(必須)を介して、OC4JPackagerにそのディレクトリを指定します。

  3. すべてのXQSビュー(.xqまたは.sql)ファイルが配置されるXQSリポジトリとして目的のディレクトリを選択し、XQSビュー(.xqまたは.sql)ファイルをそこに配置します。

    -repositoryパラメータを介して、OC4JPackagerにそのディレクトリを指定します。

  4. xqs-config.xmlファイルの目的のディレクトリを選択し、ファイルをそのディレクトリに配置します。ただし、XQS構成が完了していることが前提条件になります(「XQS関数の構成方法」を参照)。

    -xqsConfigパラメータ(必須)を介して、OC4JPackagerにそのディレクトリを指定します。

OC4JPackagerの実行: 必須およびオプションのパラメータとプロパティ

OC4JPackagerの実行時には、必要に応じて次を指定します。例は、次項「コマンドラインでのOC4JPackagerの実行」を参照してください。

プログラム・パラメータ
  1. 必須の-appArchivesパラメータを使用して、アプリケーションが配置されている場所(EARファイルの場所、つまりEAR構造のトップレベル・ディレクトリ)を指定します。

  2. オプションの-repositoryパラメータを使用して、XQSリポジトリのディレクトリを指定します。

  3. 必須の-xqsConfigパラメータを使用して、アプリケーションのxqs-config.xmlファイルへのフルパス(ファイル名を含む)を指定します。

  4. 必須の-nameパラメータおよび-outputパラメータを使用して、OC4JPackagerによって作成されるEARファイルの名前と出力ディレクトリを指定します。

  5. アプリケーションによって使用されるXQS機能用ファイルがOC4JPackagerに含まれるように、またはファイルが除外されるように、該当するフラグを使用して指定します。

    • XQS JSPタグ・ライブラリを使用する場合は、-jspフラグを使用します。

    • XQSステートフルEJBクライアントAPIを使用する場合は、-sfフラグを使用します。

    • XQSステートレスEJBクライアントAPIを使用する場合は、-slフラグを使用します。

    • OC4JPackagerがWebサービスを生成しないようにする場合は、-no_wsフラグを使用します。

    XQSFacadeIインタフェースは常に含まれます。)

Java VMプロパティ
  1. 必須のJavaプロパティjava.homeを使用して、Javaのホーム・ディレクトリを指定します。OC4JPackagerによって、このディレクトリから、タスクに必要なjavaコマンドが実行されます。

  2. OC4JPackagerに(必要に応じてEARファイルのバンドル解除およびバンドルを行う)特定の作業ディレクトリを使用させる場合は、オプションのJavaプロパティxds.packager.work.dirを使用します。デフォルトは、user.home Javaプロパティで指定されたディレクトリです。

  3. オプションのJavaプロパティjava.util.logging.properties.fileを使用して、Javaのロギング設定(OC4JPackagerのロギング・レベルを含む)を指定するロギング・プロパティ・ファイルを指定します。ロギング・プロパティは、次の場所で説明されているように、標準のJ2SEロギングによって定義されます。

    http://java.sun.com/j2se/1.4.2/docs/guide/util/logging/
    
  4. Oracleホーム・ディレクトリを示す場合は、オプションのJavaプロパティoracle.homeを使用します。この処理は、OC4JPackagerフラグ-jsp-sf-sl「OC4JPackagerのパラメータ」を参照)、および関連するJARファイルを使用する場合には必須です。

コマンドラインでのOC4JPackagerの実行

OC4JPackagerは、OC4JPackager.jarを起動するjavaコマンド(コマンド・プロンプトは%)を使用して、コマンドラインから実行できます。

% java -jar OC4JPackager.jar ...

OC4JPackager.jarは、XQS配布のxds/toolsディレクトリにあり、OC4Jコンテナ内のインストール場所から使用する必要があります。

次に例を示します($ORACLE_HOMEはOracleインストールのホーム・ディレクトリとして設定されており、\は行折返しを示します)。この例は、XQS JSPタグ・ライブラリおよびステートフルEJBクライアントAPIを使用するアプリケーション用です。現在のディレクトリからの相対パス、または絶対パスを指定できます。

% java -jar OC4JPackager.jar \
       -Djava.home=/home/myjavainstall \
       -Dxds.packager.work.dir=$ORACLE_HOME/temp \
       -Doracle.home=$ORACLE_HOME \
       -Djava.util.logging.properties.file=myfile.properties \
       -appArchives $ORACLE_HOME/myapp \
       -xqsConfig $ORACLE_HOME/xds/myconfig/xqs-config.xml \
       -repository $ORACLE_HOME/xds/repository \
       -output $ORACLE_HOME/xds/mystaging -name myxqsapp.ear \
       -jsp -sf

もしくは、次の項で説明するように、Antを介してOC4JPackagerを実行できます。

「OC4JPackagerの基本的な出力」も参照してください。

Antを介したOC4JPackagerの実行

前の項で説明したように、コマンドラインからOC4JPackagerを実行するかわりに、標準のAnt javaタスクを介して、Antを使用したビルド処理の一部としてOC4JPackagerを実行できます。Antの一般情報は、ApacheのWebサイトhttp://ant.apache.org/manual/を参照してください。(また、OC4J固有のAntタスクに関する情報は、『Oracle Containers for J2EEデプロイメント・ガイド』を参照してください。)

例として次に示すAntビルド・ファイルの一部では、OC4JPackagerが起動されます。この例は、前項で示した例のコマンドラインに対応しています。

<java jar="OC4JPackager.jar" fork="true" failonerror="true">
   <jvmarg value="-Doracle.home=${ORACLE_HOME}"/>
   <jvmarg value="-Djava.home=/home/myjavainstall"/>
   <jvmarg value="-Dxds.packager.work.dir=${ORACLE_HOME}/temp"/>
   <jvmarg value="-Djava.util.logging.properties.file=myfile.properties"/>
   <arg line="-appArchives ${ORACLE_HOME}/myapp"/>
   <arg line="-xqsConfig ${ORACLE_HOME}/xds/myconfig/xqs-config.xml"/>
   <arg line="-repository ${ORACLE_HOME}/xds/repository"/>
   <arg line="-output ${ORACLE_HOME}/xds/mystaging" />
   <arg line="-name myxqsapp.ear"/>             
   <arg line="-jsp"/>
   <arg line="-sf"/>
</java>


重要

上に示したように、OC4JPackagerパラメータを設定する<arg>要素では、value属性のかわりにline属性を使用します。 


OC4JPackagerの基本的な出力

OC4JPackagerで作成されたEARファイルは標準的な構造を持ち、少なくとも1つの追加コンポーネントがあります。このコンポーネントはxqs-resources.jarという名前のファイルで、XQS構成ファイルおよびXQSリポジトリ・ファイル(XQSビューの.xqファイル)のディレクトリが含まれます。


注意

Webサービス操作として公開するXQSビューが存在する場合は、EARファイルに追加のコンポーネントが含まれます。次項「XQSビューをWebサービス操作として公開するためのOC4JPackagerの追加の出力」を参照してください。 


WebモジュールmywebappおよびEJBモジュールmyejbで構成されるアプリケーションでは、OC4JPackagerによって次のようなEARファイルの内容が作成されます。

META-INF/
   application.xml
   orion-application.xml
   data-sources.xml
mywebapp.war
myejb.jar
xqs-resources.jar

xqs-resources.jar以外にも、アプリケーションには、application.xmlファイル、必要に応じてオプションのorion-application.xmlファイルとdata-sources.xmlファイル、Webモジュール用WARファイル、EJBモジュール用EJB JARファイルなどがすでに含まれている必要があります。

xqs-resources.jarの構造は次のとおりです。

   APP-REPOSITORY/
      filename.xq
      filename.xq
      filename.xq
      ...
   xqs-config.xml
   xds-application.properties

ファイルxds-application.propertiesは、XQSによって内部的に使用されます。

XQSビューをWebサービス操作として公開するためのOC4JPackagerの追加の出力

XQS構成でWSDLvisibility="true"と設定されたXQSビュー(SQLベースのビューを除く)では、XQSによって、ビューがWebサービス操作として公開されます。いずれのWebサービスでも、操作を起動するWebサービス・クライアントが必要です。


注意

WSDLvisibilityプロパティがtrueに設定された状態でXQSビューがWebサービス操作として公開されてしまうため、OC4JPackagerによってアプリケーションにWebサービス・モジュールが作成および追加されないようにする場合は、次のようにして、OC4JPackagerの実行時に-no_wsフラグを指定します。

% java -jar OC4JPackager.jar ... -no_ws

このフラグはオプションです。デフォルトでは、Webサービス・モジュールが追加されます。 


OC4JPackagerによって、Webサービスの実装、および公開される各XQSビューの操作を定義するWSDLドキュメントが作成されます。その後、OC4JPackagerによって、次の内容を含むWARファイルが作成されます。

また、OC4JPackagerによって、アプリケーションのapplication.xmlファイルが更新され、追加のWebモジュールのエントリが作成されます。

XQSビューWebサービスを表す追加のWebモジュールの名前、コンテキスト・ルートおよびWAEファイルは、アプリケーションの名前に対応します。アプリケーションmyappの場合は次のようになります。

生成されたWSDLファイルは、常にxqsview-WS.wsdlになります。

Webサービスを表し、Oracle Webサービスのテスト・ページにつながるサーブレットのURLパターンは、常に/xqs-wsです。

つまり、XQSビューWebサービスのWSDLのURLは、http://host:port/myapp-WS/xqs-ws?WSDLとなります。


注意

追加のWARファイルには、Webサービスのクライアント起動コードは含まれません。このコードは、サーバー上のアプリケーション・デプロイメントの一部になる予定です。 


WSDLドキュメントでは、wsdl:operationの名前は、XQS構成(<xqsview-source><function-name>サブ要素)で定義された対応するXQS関数の名前と同じになります。各wsdl:inputメッセージ・タイプは、XQS構成(<xqsview-source><input-parameters>サブ要素)で定義された入力パラメータ・タイプに対応するXML型にマップされます。各wsdl:outputメッセージ・タイプは、XQS構成(<xqsview-source><output-element>サブ要素)で定義された出力要素に対応するXML要素または型にマップされます。これらは、stringintなどの単純型、またはユーザーが定義した複合型のどちらかになります。バインディングは、SOAPドキュメント/ラップ・バインディングになります。

次の例は、次のすべての項の内容を合せたものです。

例: Webサービス操作としてビューを公開するための構成

この章で前述した次の構成では、WSDLvisibility="true"の設定を介して、ビューBasicFileWSがWebサービス操作として公開されます。

<xqsview-source WSDLvisibility="true"  isCached="false">
   <function-name  prefix="xqs">BasicFileWS</function-name>
   <input-parameters type-match="none" >
      <part position="1" name="custName">
         <schema-type prefix="xs">string</schema-type>
      </part>
   </input-parameters>
   <output-element namespace="http://xmlns.oracle.com/ias/xqs/CustomerDemo" 
                location="http://host:port/xqsdemos/MyTypes.xsd" 
type=CustomerOrdersType>customerOrders </output-element>
</xqsview-source>

後述の説明は、この例がmyappというアプリケーションの一部であることを前提としています。

例: Webサービス操作として公開されるビューのEARファイル

アプリケーションmyappmywebapp.warおよびmyejb.jarで構成されており、1つ以上のXQSビューがWebサービス操作として公開されると仮定します。OC4JPackager実行後のアプリケーションEARファイルの関連する内容は、次のようになります。

META-INF/
   application.xml
mywebapp.war
myejb.jar
myapp-WS-web.war
xqs-resources.jar

WARファイルmyapp-WS-web.warは、公開されるビューのWebサービス操作の自動作成済サーブレット実装用です。この内容は、次の項を参照してください。

例: Webサービス操作として公開されるビューのWARファイル

公開されるビューのWebサービス操作のサーブレット実装用に作成されたmyapp-WS-web.warの内容は、次のとおりです。

WEB-INF/
   web.xml
   oracle-webservices.xml
   wsdl/
      xqsview-WS.wsdl

特に、WSDLドキュメントに注意してください。WSDLの部分的な例は、次項「例: Webサービス操作として公開されるビューのWSDLドキュメント」を参照してください。

例: Webサービス操作として公開されるビューのWSDLドキュメント

この項では、Webサービスとして公開されるXQSビュー用のOC4JPackagerによって生成されるWSDLドキュメントの一部を示します。この例では、BasicFileWSという名前のビューに関連する部分を示します。

...
<definitions xmlns="http://schemas.xmlsoap.org/wsdl/"
    xmlns:xqscwsNsPref="xqs-client-ws"
    xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
    xmlns:xqs0="http://xmlns.oracle.com/ias/xqs" xmlns:tns="xqs-
    client-ws_myapp-WS" name="myapp-WS" targetNamespace="xqs-
    client-ws_myapp-WS">
<types>
...
<schema targetNamespace="http://xmlns.oracle.com/ias/xqs"
xmlns:xqs1="http://xmlns.oracle.com/ias/xqs/CustomerDemo" 
xmlns:tns="http://xmlns.oracle.com/ias/xqs"
...
>
<import namespace="xqs-client-ws"/>
<import namespace="http://xmlns.oracle.com/ias/xqs/CustomerDemo" 
schemaLocation="http://host:port/xqsdemos/MyTypes.xsd"/>
 
<complexType name="BasicFileWSType">
      <sequence>
          <element name="custName" type="string" 
              nillable="true" /> 
      </sequence>
   </complexType>
   <complexType name="BasicFileWSResultType">
       <sequence>
         <element name="return" nillable="true">
           <complexType>
             <sequence>
               <element name="result" nillable="true">
                 <complexType>
                   <sequence>
                     <element name="customerOrders"
                        type="xqs1:CustomerOrdersType"
                        minOccurs="0" maxOccurs="unbounded" />
                  </sequence>
                 </complexType>
               </element>
             <element name="errors" nillable="true" minOccurs="0">
               <complexType>
                 <sequence>
                    <element name="xqserror" 
                      type="xqscwsNsPref:XQSErrorType" 
                      maxOccurs="unbounded" /> 
                  </sequence>
                </complexType>
              </element>
            </sequence>
          </complexType>
        </element>
      </sequence>
    </complexType>
<element name="BasicFileWS" type="tns:BasicFileWSType" /> 
<element name="BasicFileWSResult" type="tns:BasicFileWSResultType" /> 
       
</schema>
</types>
<message name="BasicFileWSRequest">
 <part name="parameters" element="xqs0:BasicFileWS" />
</message>
<message name="BasicFileWSResponse">
 <part name="return" element="xqs0:BasicFileWSResult" /> 
</message>
<portType name="XQSViewWebServices">
   <operation name="BasicFileWS">
      <input message="tns:BasicFileWSRequest" /> 
      <output message="tns:BasicFileWSResponse" /> 
    </operation>
    </portType>
      <binding name="HttpSoap11Binding"  type="tns:XQSViewWebServices">
          <soap:binding style="document"
            transport="http://schemas.xmlsoap.org/soap/http" /> 
        <operation name="BasicFileWS">
           <soap:operation /> 
          <input>
              <soap:body use="literal" parts="parameters" /> 
           </input>
          <output>
              <soap:body use="literal" parts="return" /> 
           </output>
         </operation>
    </binding>
   <service name="XQSView-WS">
       <port name="HttpSoap11" binding="tns:HttpSoap11Binding">
           <soap:address xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
             location="http://host:port/myapp-WS/xqs-ws" /> 
       </port>
   </service>
</definitions>

XQSパフォーマンス機能の使用方法

この項では、XQSで提供されるパフォーマンス機能について説明します。この項には、次の項目が含まれます。

ステートレスまたはステートフルのXQSクライアントAPIを使用する際のパフォーマンスの考慮事項

前述のように、XQSクライアントAPIでは、結果が完全にマテリアライズされてプロセス・メモリーに格納されるステートレス問合せの実行、またはカーソルを介して結果が段階的にアクセスされるステートフル問合せの実行を選択できます。どちらの方法にも、長所と短所があります。

ほとんどの状況では、ステートレス実行が適しています。これは、評価が完了した直後に、関連付けられているリソースが解放されるためです。ただし、結果順序に含まれる項目の全体のサイズが大きすぎて、順序全体を一度にマテリアライズするとプロセス・メモリーが不足する場合には、ステートレス実行を使用できません。このような場合は、問合せが結果を項目ごとに提供するのを妨げるもの(たとえば集計式など)がないかぎり、カーソル・モードが唯一の手段になります。

追加情報は、「ステートフル・クライアントとステートレス・クライアント」を参照してください。

XQSキャッシングの構成

この項では、XQS使用時のキャッシュの構成方法を詳しく説明し、関連する考慮事項を示します。

XQSキャッシュ設定

XQSキャッシングは、XQS関数ごとに(本質的には、アクセスするデータソースごとに)個別に構成されます。特定のXQS関数に対してキャッシングを使用するには、次の手順を行います。

考慮すべき対策は、次項「XQSキャッシングの対策」を参照してください。すべての要素と属性に関する完全な説明は、「XQS構成ファイルのリファレンス」を参照してください。

  1. <document-source>要素、<xqsview-source>要素または<wsdl-source>要素のisCached属性を介して、キャッシングを有効化します。次に例を示します。

    <document-source isCached="true">
       ...
    </document-source>
    


    重要

    isCachedの値がfalse(デフォルト)に設定されている場合は、XQS関数のその他のキャッシュ設定がすべて無視されます。 


  2. <document-source>要素、<xqsview-source>要素または<wsdl-source>要素の<cache-properties>サブ要素を使用します。time-to-live属性には、キャッシュ・エントリの期限が切れるまでの保持時間(秒単位)を決定する整数値が使用されます。次に例を示します。

       <cache-properties time-to-live="600">
          ...
       </cache-properties>
    
  3. <cache-properties><in-memory>サブ要素を使用し、useSpool属性およびuseDiskCache属性を介して、使用するキャッシュ・モードを指定します。単純なメモリーベースのキャッシングの場合は、useSpooluseDiskCacheの両方をfalseに設定します。メモリー不足になると必要に応じてキャッシュ・データをディスクにスプールできるメモリーベースのキャッシングの場合は、useSpooltrueに設定し、useDiskCachefalseに設定します。ディスクベースのキャッシングの場合は、useDiskCachetrueに設定し、useSpoolfalseに設定します。(関連する考慮事項は、次項「XQSキャッシングの対策」を参照してください。)次の例では、必要に応じてスプーリングを使用する、メモリーベースのキャッシングが使用されています。

          <in-memory useSpool="true" useDiskCache="false"/>
    

次に、完全なキャッシュ構成の例を示します。

<document-source isCached="true">
   ...
   <cache-properties time-to-live="600">
      <in-memory useSpool="true" useDiskCache="false"/>
   </cache-properties>
   ...
</document-source>

XQSキャッシングの対策

XQSキャッシングに関して、次の考慮事項に注意してください。

キャッシングと非決定的な結果

「要件、制限事項および特記事項」で説明しているXQS関数とノードIDの問題は、一部の例外的または特殊な状況で発生し、キャッシングを使用しているかどうかによって、問合せ結果が異なる場合があることに注意してください。ただし、ほとんどの問合せが(ノードではなく)値が等しいことに依存するため、通常はこの問題は発生しません。

ラージ・データ用のXQSドキュメント・ソースの構成

システム容量や一般的なメモリー節約オプションの使用に関係なく、データセットが大きいためにメモリーによる制限を受ける場合があります。この問題を解決するには、背後で作業単位方式を使用します。この方法では、取得されるデータの合計量に関係なく、一定量のメモリーが使用されます。XQSは、Oracle XDK内の依存するテクノロジおよび中間層のXQueryと連携しているため、XQSの実行中は常に、このスケーラブルな解決方法が提供されます。

ただし、この作業単位方式でも解決できないほどデータセットが大きい場合もあります。ドキュメント・ソースについてこのような状況が発生した場合は、データソースによって大量のメモリー・リソースが消費されるため、メモリー節約の内部最適化オプションを使用するように、XQSに指示することができます。次の例のように、<document-source>要素の属性であるlargeDataフラグを使用します。

<document-source largeData="true">
   ...
</document-source>

サイズの大きいドキュメント・ソースをメモリーにロードできないときは、このフラグを有効化することで可能になる場合があります。


重要

  • largeDataフラグはXQSビューおよびWSDLソースには適用されません。

  • largeData="true"を使用すると、処理速度が低下します。この設定は、必要な場合のみ使用してください。このような理由から、デフォルト値はfalseに設定されています。

 

XQSエラー処理モードおよびAPIの使用方法

「XQSエラー処理の概要」で示したように、XQS関数を構成して、(データソースを使用できない、またはデータ変換の問題などの)エラーが発生しても処理を続行することができます。処理を続行するようにXQS関数を構成した場合は、後でoracle.xqs.client.XQSErrorIオブジェクトのイテレータとして戻されるエラーを取得し、エラーの情報を入手できます。

XQSでは、XQS関数内部のエラーにのみ、特別な処理が適用されます。構文エラーやタイプの不一致などの通常のXQueryエラーの場合は、いずれのXQSエラー・モードでも、問合せの実行が停止します。

XQSエラー・モードは、XQS関数ごとに個別に構成します。1つの関数のエラー・モードが、同じ問合せ内の他のXQS関数の動作に影響することはありません。

次の各項では、処理を続行してエラー情報を戻すためのXQS関数の構成方法、およびエラー情報の取得に使用できるメソッドについて説明します。

XQS関数のエラー処理の構成

xqs-config.xmlで構成する各データソースについて、ソース要素<document-source><xqsview-source>または<wsdl-source>onError属性を介して、XQSのエラー処理を指定できます。サポートされている設定は次のとおりです。

特定のデータソースに対するXQSエラー処理の構成手順は、場合によって2つになります。

  1. <document-source>要素、<xqsview-source>要素または<wsdl-source>要素のonError属性の設定を指定します。

  2. errorMessageモードを使用する場合は、必要に応じて<document-source><xqsview-source>または<wsdl-source><error-message>サブ要素を使用します。これにより、問合せ結果に対して戻される単一項目のXML順序に、XQSのエラー・メッセージが含まれるように、エラー・メッセージが事前構成されます。

次に、emptySequenceモードを使用するソースの例を示します。

<document-source onError="emptySequence">
   ...
</document-source>

次に、事前構成済のメッセージを使用するerrorMessageモードの使用例を示します。

<wsdl-source onError="errorMessage">
   ...
   <error-message>No information available</error-message>
   ...
</wsdl-source>

errorMessageモードの場合、事前構成済のメッセージを指定しないと(つまり、<error-message>要素を使用しないと)、データソースによって戻されたメッセージがそのままXQSによって使用され、そのメッセージが、関数の結果として戻された単一項目のXML順序に含められます。データソースのエラー・レポート機能が不十分な場合には、意味のあるエラー・メッセージを取得することが不可能になることがあります。この場合は、事前構成済のメッセージが指定されていないと、エラー・メッセージが空の状態で戻されます。

戻される順序に含まれる単一項目のタイプは、xs:stringまたはxs:nodeのどちらかになります。

XQSにより、関数のタイプ情報に基づいて、そのエラー項目により適したタイプが選択されます。

注意事項および考慮事項

XQSエラー・オブジェクトの取得

XQS関数がemptySequenceまたはerrorMessageのエラー処理モードを使用するように構成されていれば、XQSクライアントAPIの機能を使用して、エラー・オブジェクトのイテレータを取得でき、このイテレータから、問合せ中に発生した問題に関する情報を入手できます。概要は次のとおりです。

どちらの場合も、oracle.xqs.client.XQSErrorIオブジェクトを含むイテレータを取得できます。次に例を示します。

...
XQSFacadeI bean = XQSFactory.getXQSFacade();
...
bean.executeView(viewname, namespace, queryparams);
...
ListIterator errorIt = bean.getErrors();
XQSErrorI error = null;
while(errorIt.hasNext()) {
   error = (XQSErrorI)errorIt.next();
   (Process errors)
}
...
bean.close();
...

次に、JSPの例を示します。

XQSErrorI error=null;
...
<xq:executeCursor ... errors="errorIt" ... >
   ...
</xq:executeCursor>
...
<xq:next ... />
while(errorIt.hasNext()) {
   error = (XQSErrorI)errorIt.next();
   (Process errors)
}

詳細およびエラー情報取得の例は、次の「XQSエラー・オブジェクトからの情報の取得」および「例: エラーの取得および処理」の各項を参照してください。

XQSエラー・オブジェクトからの情報の取得

前項の「XQSエラー・オブジェクトの取得」で、oracle.xqs.client.XQSErrorIオブジェクトを含むjava.util.ListIteratorインスタンスの取得方法について説明しました。

このイテレータ・インスタンスを処理すると、個々のXQSErrorIオブジェクトを取得できます。ListIteratorタイプには、次のメソッドが含まれます。

その後、個々のXQSErrorIインスタンスを使用して、問合せ中に発生した各エラーの情報を取得できます。


注意

  • XQSによってXQSErrorIオブジェクトが戻されるのは、問合せで使用する1つ以上のXQS関数を、デフォルト以外のemptySequenceモードまたはerrorMessageモードを使用して構成した場合のみです。エラーが発生しなかった場合は、ListIteratorは空になります。

  • XQSErrorI Javaオブジェクトをタイプxs:nodeのエラー項目と混同しないでください。「XQS関数のエラー処理の構成」で説明しているように、後者は、場合によって、エラー発生時にXQS関数の戻り値としてXQSによって構成されます。XQSErrorIは、XMLノードではなくJavaオブジェクトです。XQSErrorIオブジェクトは、XQSのクライアントに戻されます。一方、XMLエラー・ノードは、XQuery実行に戻されます。また、エラー・モードがemptySequenceであっても、XQSErrorIオブジェクトが戻されます。これに対して、XMLエラー・ノードは、エラー・モードがerrorMessageの場合のみ構成されます。

 

この項では、エラー情報を取得するためのXQSErrorIメソッドを要約し、XQSエラーのタイプを要約します。完全な情報は、「XQSErrorIリファレンス」を参照してください。

XQSErrorIインスタンスでは、次の処理を行えます。ここに示す例では、xqserrというXQSErrorIインスタンスを使用しています。

  1. エラーを戻したXQS関数の修飾名を取得します。

    String funcname = xqserr.getFunctionQName();
    
  2. エラー・タイプを取得します(タイプの詳細は次の項を参照してください)。

    int errortype = xqserr.getErrorType();
    
  3. エラー・タイプの文字列表現を取得します。

    String typeStr= XQSErrorI.typeNames(xqserr.getErrorType()
    
  4. エラー・メッセージを取得します。

    String errormessage = xqserr.getErrorMessage();
    
  5. エラー・メッセージとは別にエラー・コードを提供するデータソース(OracleデータベースのORA-xxxxxコードなど)について、エラー・コードを取得します。

    String errorcode = xqserr.getErrorCode();
    
  6. 必要に応じて、ユーティリティ・メソッドを使用して関数名、エラー・タイプ、エラー・メッセージおよびエラー・コードを1つの文字列に一体化します。この文字列は、XML文字列(適切なXMLマークアップを含む文字列)またはXMLノードです。

    String errorstring = xqserr.toString();
    ...
    String errorxmlstring = xqserr.toXMLString();
    ...
    org.w3c.dom.node errornode = xqserr.toXMLNode();
    

エラー・タイプの整定数の要約は、次のとおりです。

これらの定数の追加情報は、「XQSErrorIリファレンス」を参照してください。

例: エラーの取得および処理

この項では、単純なエラー処理の例および対応する構成を示します。

構成

「XQS関数のエラー処理の構成」で説明したように)XQSアプリケーションでXQSErrorIオブジェクトを使用するには、データソースがエラー・モードemptySequenceまたはerrorMessage用に構成されている必要があります。次の例では、errorMessageモードが使用されています。

<xqsview-source ... onError="errorMessage">
   <function-name prefix="xqs">BasicFileWS</function-name>
<output-element namespace="myNS">myElement</output-element>
   ...
</xqsview-source>

<error-message>要素が使用されていないため、戻される単一項目のXML結果順序には、事前定義済メッセージが含まれず、かわりにデータソースから取得されるメッセージがそのまま転送されます。XQSビュー関数で実際にエラーが発生すると、XQSによって<xqserror> XMLノードが構成され、そのノードが関数の結果として戻されます。エラー・メッセージは、<xqserror>ノードのテキスト値になります。XQSビュー構成によって<output-element>構成内のユーザー定義の要素が指定されるため、XMLのノード表現が選択されます。

Javaコード

次の例は、ビューを実行してから次のエラー処理を行うコードの一部分です。

BPEL環境でのXQSの使用

XQueryおよびXQSは、Oracle Application Server上で実行されているOracle BPEL Process Managerから使用できます。


注意

この項では、Oracle BPEL Process Managerに採用されている概念について記述します。この項では、Oracle BPELにおけるXQueryおよびXQSの使用に固有の概念のみを説明します。ここに記載される一般的なBPELおよびOracle BPELの概念の詳細は、『Oracle BPEL Process Manager開発者ガイド』を参照してください。 


Oracle BPELには、Oracle BPEL Process ManagerによるXQueryベースのXML問合せを可能にするXPath機能があります。問合せはXQSビューに保存できます。XQSビューはフォルダ(2階層まで)および名前空間に編成できます。XQSビューを使用すると、あるXQSビューを他のXQSビューから呼び出すことで複雑な問合せを作成する機能が改善されるだけでなく、アプリケーションのモジュール性も向上します。


注意

BPEL環境から起動される問合せは、XQSビューと同じように動作します。ただし、BPEL環境で使用可能な機能は、Oracle Application Serverで実行されている汎用J2EEアプリケーションのXQSビューと比べて制限されています。 


この項には、次の項目が含まれます。

XQuery用のBPEL XPath機能の登録

Oracle BPELには、次に示すように、orabpel¥domains¥default¥config¥xpath-functions.xmlファイルに登録されているJavaクラス(com.collaxa.cube.xml.xpath.functions.xml.GetElementFromXQueryFunction)が用意されています。

<function id="processXQuery">
   <classname>
      com.collaxa.cube.xml.xpath.functions.xml.GetElementFromXQueryFunction
   </classname>
   <comment>
      <![CDATA[This function returns result of XQuery execution. The
         signature of this function is
         <i>ora:processXQuery('view_name','context_node'?)</i>.]]>
   </comment>
   <property id="namespace-uri">
      <value>http://schemas.oracle.com/xpath/extension</value>
      <comment>Namespace URI for this function</comment>
   </property>
   <property id="namespace-prefix">
      <value>ora</value>
      <comment>Namespace prefix for this function</comment>
   </property>
</function>

この例では、GetElementFromXQueryFunction.classファイルをorabpel¥system¥classes¥com¥collaxa¥cube¥xml¥xpath¥functions¥xmlディレクトリに配置したことを前提としています。ora:processXQuery関数は、BPELプロセス定義のその他のXPath関数と同じように使用されています。次に例を示します。

<assign name="runXQuery">
   <copy>
      <from expression="'Associated Press'"/>
      <to variable="publisher"/>
   </copy>
   <copy>
      <from>
      <category xmlns="http://samples.otn.com">Computing</category>
      </from>
      <to variable="category"/>
   </copy>
   <copy>
      <from expression="ora:processXQuery
         ('books.xq',bpws:getVariableData('input','payload'))"/>
      <to variable="output" part="payload"/>
   </copy>
</assign>

BPEL XQuery関数のパラメータの使用

前の例(ora:processXQuery)で示されたOracle BPEL XQuery関数には2つのパラメータがあります。

view_nameパラメータは必須で、文字列である必要があります。このパラメータでは、実行する保存済のXQueryファイル(XQSビューとも呼ばれる)の名前を指定します。オプションで、ファイル名にはファイル拡張子.xqを指定することもできます。1つ目の引数が.xqで終わらない場合は、ファイルを検索する前にXQSによってファイル拡張子が追加されます。

context_nodeパラメータはオプションです。指定する場合、値はXMLノードである必要があります。このXMLノードは、実行される問合せのコンテキスト項目になります。詳細は、「XQueryを使用したコンテキスト項目へのアクセス」を参照してください。

XQueryを使用したコンテキスト項目へのアクセス

外部変数にバインドせずに、XMLドキュメントをXQuery式に渡すことができます。これは、ドキュメントのコンテキスト項目へのバインドと呼ばれます。問合せ式内では、コンテキスト項目には特別な構文(.)を使用してアクセスします。

たとえば、コンテキスト項目がルート要素<books>および一連の<book>子要素を持つドキュメントにバインドされている場合は、次の式が有効です。

for $i in ./book/title return $i

XMLドキュメントをXQueryコンテキスト項目としてバインドするには、BPEL XQuery関数のcontext_nodeパラメータを使用します。


注意

コンテキスト項目は、Oracle BPEL環境でのみXQSによって実行されたXQueryに提供されます。この機能は、XQSを使用する汎用のJ2EEアプリケーションでは使用できません。ただし、XMLノードは、通常の問合せパラメータおよびXQS関数の引数としてXQueryに渡すことができます。 


BPELにおけるXQSビュー機能の使用

XQSを使用すると、XQSビューと呼ばれるファイルに保存された問合せという形で、標準のXQuery言語を拡張できます。XQSには名前および関連付けられたXQuery式があります。

ビューの実装は、そのビューと関連付けられたXQuery式です。次に示す問合せ式を、ファイルmyView.xqと関連付けることができます。

for $i in  fn:doc("/dir/file.xml") return $i/line-item[@id=10]

トップレベルのビュー

トップレベルのビューは、BPELプロセスから直接起動されます。次の例では、myTopViewという名前のビューが、processXQuery XPath関数を使用してBPELプロセスから起動されています。

<copy>
   <from expression="ora:processXQuery('myTopView.xq'))"/>
   <to variable="output" part="payload"/>
</copy>

トップレベルのビューには次の規則が適用されます。

例として、myTopViewの内容を次に示します。

for $i in fn:doc("/dir/file.xml") return $i/line-item[@id=$bpelVar]

外部変数$bpelVarは宣言されておらず、BPELプロセス変数とみなされています。

ネストされたビュー

ネストされたビューは、別のXQSビューから呼び出されたXQSビューです。XQuery言語の構文に合せるため、呼出し元のビューはネストされたビューを外部関数として参照します。ネストされたビューでは、ビューの名前は外部関数の名前でもあり、そのビューを使用する別の問合せ式で宣言されます。次の例では、myViewがネストされたビューの名前です。

declare namespace bpel="urn:oracle.bpel.xq";
declare function bpel:myView($arg as xs:integer) as node()* external;

外部関数myView()が問合せ式で呼び出されるたびに、XQSが関数の整数パラメータをmyView()内の外部関数にバインドし、前の問合せを実行します。結果順序は、外部関数呼出しの結果です。

XQSビューは、基本的にストアド・クエリーであり、あるXQueryを別のXQuery内に埋め込むことができます。同時に、ネストされた問合せを他から分離し、モジュール化して個別に変更できるようにします。たとえば、外側(埋込み先)の問合せは次のようになります。

declare namespace bpel="urn:oracle.bpel.xq";
declare function bpel:myView($arg as xs:integer) as node()* external;
for $i in bpel:myView(2301) return $i/shipping-status

外部のXQSビュー関数は、関数と同じ名前のテキスト・ファイルを介して問合せと関連付けられます。ファイル拡張子は.xqです。たとえば、myView.xqという名前のファイルには次のテキストが含まれます。

declare variable $x as xs:integer external;
for $i in  fn:doc("/dir/file.xml") return $i/line-item[@id=$x]

これまでの例からわかるように、ネストされたすべてのビューはいずれかの名前空間に属します。この名前空間は、デフォルトのOracle BPELの名前空間urn:oracle.bpel.xq、またはユーザー定義の名前空間です。ネストされたビューをユーザー定義の名前空間にグループ化する方法は、「XQSビュー用のBPEL名前空間およびフォルダの使用」で説明します。

外部XQuery変数の使用

XQueryの外部変数を使用すると、XQuery式を別のXQuery式に埋め込む環境からの入力値を渡すことができます。この概念は、SQLのバインド変数に似ています。次に、3つの外部変数($x$yおよび$z)を宣言する単純な問合せの例を示します。問合せでは、変数の値が順番に戻されます。

declare variable $x as xs:string external; 
declare variable $y as xs:integer external;
declare variable $z external;
($x, $y, $z)

外部変数のタイプの宣言は、変数$zで示されているようにオプションです。問合せに対する追加の静的および動的タイプ・チェックが実行され、アプリケーションがより堅牢になるため、あらかじめタイプがわかる場合にはタイプを指定して外部変数を宣言することをお薦めします。

また、XQueryでは外部変数を暗黙的に宣言できます。前もって宣言せずにXQuery式で変数表記($)が使用された場合、変数は暗黙的に宣言された外部変数とみなされます。次のXQuery式は、3つの外部変数が暗黙的に宣言されていること以外は前の例と同じです。

($x, $y, $z)


注意

暗黙的に宣言された外部変数は、BPEL環境でのみ使用可能です。XQSを使用する汎用のJ2EEアプリケーションでは、問合せの中で明示的に宣言された外部変数のみを使用します。 


XQuery評価では、すべての外部変数が実際の値にバインドされている必要があります。暗黙的に宣言された外部変数と明示的に宣言された外部変数では処理が異なります。

外部変数が暗黙的に宣言されている場合、その名前は現在対象範囲内にあるBPELプロセス変数の名前と一致する必要があります。BPEL Process ManagerおよびXQSにより、プロセス変数の値が同じ名前の外部変数にバインドされます。


注意

暗黙的に宣言された外部変数を使用できるのは、BPEL XQuery関数から直接呼び出されたビューでのみで、ネストされたXQSビューでは使用できません。

XQSビューでBPELプロセス変数を使用するその他の例は、「XQSビューにおけるBPELプロセス変数の使用」を参照してください。 


XQueryの外部変数が問合せ内で明示的に宣言されている場合、そのビューで外部変数が宣言されている順序に従って、変数の値はXQSビュー関数に対する引数から取得されます。別のビューからXQS関数として起動されたXQSビューは、ネストされたビューと呼ばれます。


注意

BPEL環境では、明示的に宣言された外部変数は、ネストされたビューでのみ使用されます。 


まとめると、XQSビューがBPEL XQuery関数から直接起動された場合、そのビューで使用するのは暗黙的に宣言された外部変数のみの必要があります。また、その値は、XQuery関数が呼び出された際に対象範囲であった同じ名前のBPELプロセス変数から取得されます。次に例を示します。

topLevelView.xq XQSビュー・ファイル内の問合せ

for $b in $bpelVar1/a/b return $b[@id = $bpelVar2]

この問合せは、変数$bpelVar1および$bpelVar2が対象範囲であるBPELプロセスで起動されます。

<copy>
   <from expression="ora:processXQuery('topLevel.xq')"/>
   <to variable="output" part="payload"/>
</copy>

XQSの外部変数を使用してXQSビューが別のXQSビューから起動された場合、そのビューで使用されるのは明示的に宣言された外部変数のみである必要があります。XQSビュー関数の引数の値は引数が渡された順序で取得され、そのビューで変数が宣言された順序で外部変数に割り当てられます。nestedView.xq XQSビュー・ファイルの例を示します。

declare variable $x as element() external;
declare variable $y as xs:integer external;
for $b in $x/a/b return $b[@id = $y]

nestedView問合せは、topViewという別のビューから起動されます。topView.xqの内容は次のとおりです。

declare namespace ns1="folder1";
declare function ns1:nestedView($arg1 as element(), $arg2 as xs:integer) external;
let $el := <x>
              <a>
                 <b id="1">b-content</b>
              </a>
           </x>
return ns1:nestedView($el, 1)

nestedViewを実行する前に、XQSでは外部変数$xを要素<x>に、外部変数$yを整数1にバインドします。

XQSビューにおけるBPELプロセス変数の使用

XQuery XPath関数から直接呼び出されたXQSビューでは、そのビュー内で追加の宣言を行わずに、BPELプロセスで宣言された変数を使用できます。

BPELプロセスに変数$bpPurchaseAmtおよび$stateが含まれ、これらの変数にはBPELプロセス内で値が割り当てられているとします。

また、XQSビュー・ファイル(purchaseAmtAddTax.xq)はBPELプロセスとともにパッケージ化されており、次のような内容だとします。

declare namespace bpl = "urn:oracle.bpel.xq";
declare function bpl:stateTax($st as xs:string) as xs:decimal external;
$bpPurchaseAmt *(1+ bpl:stateTax($state))

この例では、別のXQSビュー・ファイル(stateTax.xq)もBPELプロセスとともにパッケージ化されていると仮定されています。

例では、2つの外部変数($bpPurchaseAmtおよび$state)が使用されています。これらの外部変数は問合せ内では宣言されていません。検証を成功させるためには、BPELプロセス内のXQuery XPath関数からXQSビューを呼び出す必要があります。また、プロセスには、対象範囲内の変数$bpPurchaseAmtおよび$stateが含まれていて、その値が処理する問合せに対して適切である必要があります。

XQSビュー用のBPEL名前空間およびフォルダの使用

BPEL環境内でのXQSビュー用の名前空間およびフォルダの使用には、2つのオプションがあります。

デフォルトの名前空間およびフォルダ

XQueryファイルのデフォルトの場所は、BPELプロセス・スーツケースのルート・フォルダです。XQSは、名前空間とフォルダを関連付けます。デフォルトのXQueryフォルダは、デフォルトのOracle BPEL名前空間urn:oracle.bpel.xqと関連付けられます。この名前空間を指定するには、dfltbpelmyrootなど、任意の接頭辞を使用できます。

BPELプロセスから直接起動されたビューであるすべてのトップレベルのXQSビューは、デフォルトのフォルダに配置する必要があります。つまり、トップレベルのすべてのビューはデフォルトの名前空間urn:oracle.bpel.xqに属します。そのため、XQuery processXQuery関数にビューの名前が渡される際には、デフォルトの名前空間は渡されません。

デフォルトのフォルダに配置されたビューも、デフォルトの名前空間の接頭辞を使用してネストされたビューとして起動されます。次のフォルダ構造があるとします。

<process suitcase root>
   /view1.xq
   /view2.xq

view2.xqを起動できるview1.xqの内容は次のとおりです。

declare namespace dflt = "urn:oracle.bpel.xq";
declare function dflt:view2($st as xs:string) as xs:decimal;
for $i in dflt:view2("Oracle") return $i

カスタムの名前空間およびサブフォルダ

Oracle BPEL環境のXQSには、問合せをデフォルト・フォルダのサブフォルダに編成するオプションもあります。サブフォルダは1階層のみです。たとえば、次のようなフォルダ構造では、XQSはビューview1.xqview2.xqview3.xqview4.xqおよびview5.xqを検出できます。一方、invisible.xqはスーツケースのルートから2階層下のフォルダにあるため、XQSで検出できません。

<process suitcase root>
   /view1.xq
   /view2.xq
   /subfolder1
      /view3.xq
      /view4.xq
      /subfolder12
         /invisible.xq
   /subfolder2
      /view5.xq

サブフォルダに配置されたビューは、ネストされたビューとしてのみ使用されます。ネストされたすべてのビューは、呼出し元の問合せで外部関数として宣言する必要があるため、名前空間に属している必要があります。サブフォルダに配置されたビューの名前空間が、サブフォルダの名前になります。ただし、その名前空間に任意の接頭辞を1つ以上付けることができます。

フォルダ構造の例では、subfolder1/およびsubfolder2/のビューを起動する前に、次の宣言が使用されています。

declare namespace dflt="urn:oracle.bpel.xq";
declare namespace sub1="subfolder1";
declare namespace sub2="subfolder2";
declare function dflt:view1() as external;
declare function sub1:view4() as external;
declare function sub2:view5() as external;


注意

XQueryでは、あるフォルダの別のフォルダに対する相対位置は計算されません。呼出し元の問合せがどこに配置されているかにかかわらず、ネストされたビューが配置されているフォルダの名前から導出される名前空間によって、ネストされたビューを参照してください。 


フォルダ構造の前の例で説明すると、view1.xqおよびview3.xqは次のようにしてview5.xqから起動されます。

declare namespace dflt="urn:oracle.bpel.xq";
declare namespace sub1="subfolder1";
declare function dflt:view1() as external;
declare function sub1:view3() as external;

dflt:view1()//price - sub1:view3()//discount

ビューの名前としてのURLの使用

XQSでは、ローカル・ファイル・システムのファイルだけでなく、(http:ftp:またはfile:プロトコルを使用している)有効なWeb URLを使用してアクセス可能なビューを起動することもできます。ビューの名前がURLの場合、アクセスするファイルの正確な名前を反映している必要があります(XQSでは、.xqファイル拡張子は追加されません)。また、ビューのテキスト・ファイルが、起動時にそのURLからアクセスできる必要があります。次に例を示します。

<copy>
   <from expression="ora:processXQuery
      ('http://myhost/bpeldemos/views/myView.xq')"/>
   <to variable="output" part="payload"/>
</copy>


注意

URLをビューの名前として使用できるのはトップレベルのビューにおいてのみで、ネストされたビューでは使用できません。 


XQSクライアントAPIリファレンス

この項では、XQS publicクラスおよびユーザー・インタフェースに関するリファレンス・ドキュメントを提供します。

XQSFactoryリファレンス

この項では、oracle.xqs.client.XQSFactoryクラスのメソッドを示します。ファクトリ・クラスは、メインのXQSクライアント・インタフェースXQSFacadeIおよびQueryParameterIのインスタンスの作成に使用されます。これらのメソッドは、ファクトリによって戻される特定のインタフェースが記載されている後続の項で詳細に説明されています。oracle.xqs.client.XQSFactoryクラスには次のメソッドがあります。

XQS QueryParameterIリファレンス

この項では、oracle.xqs.client.QueryParameterIインタフェースおよびそのメソッドの取得に使用されるファクトリ・メソッドについて説明します。QueryParameterI配列は、XQSの汎用Java APIまたはEJB APIの使用時に、問合せの外部変数をバインドするために使用します。

「例3: XQSFacadeI APIを使用したXQSビュー」には、入力パラメータのQueryParameterIの使用例が含まれています。

QueryParameterIを戻すファクトリ・メソッド

oracle.xqs.client.XQSFactoryクラスには、QueryParameterIインタフェースのインスタンスを作成する次のメソッドがあります。

QueryParameterIインスタンスをXQSFactoryファクトリから取得する際には、バインドする外部XQuery変数の名前を指定します。この名前は、XQueryプロローグ内の対応する外部変数宣言の名前と一致する必要があります。また、名前を付けずにQueryParameterIインスタンスを作成し、QueryParameterIインタフェースのsetName()メソッドを使用して後からパラメータ名を設定できます。この名前も、XQueryプロローグの外部変数の名前と一致する必要があります。XQuery変数ではXML名が使用されるため、QueryParameterIコンストラクタでは、名前空間用とローカル名用の2つの文字列値を使用できます。名前空間を指定しない場合は、修飾名内の名前空間に、nullが割り当てられます。

QueryParameterIのメソッド

QueryParameterIインタフェースでは、外部XQuery変数の値を設定するための、次のメソッドが提供されます。これらのメソッドは、XQSでサポートされているXML型、およびそれに対応するJava型を反映しています。「サポートされている問合せパラメータのタイプ」も参照してください。パラメータ名を設定および取得するメソッドや、パラメータがNULLかどうかを確認するメソッドもあります。

XQSFacadeIリファレンス

この項では、oracle.xqs.client.XQSFacadeIインタフェースおよびそのメソッドの取得に使用されるファクトリ・メソッドについて説明します。このインタフェースは、XQSが提供する汎用目的のJavaクライアントAPIです。使用方法および例は、「Javaインタフェース・クライアントAPIの使用方法」を参照してください。

XQSFacadeIを戻すファクトリ・メソッド

oracle.xqs.client.XQSFactoryクラスには、XQSFacadeIインタフェースのインスタンスを作成する次のメソッドがあります。

XQSFacadeIのメソッド

XQSFacadeIインタフェースでは、次のメソッドが提供されます。

XQS EJBクライアントAPIリファレンス

この項では、リモートEJB用のXQSClientRemoteインタフェースとXQSClientHomeインタフェース、およびローカルEJB用のXQSClientLocalインタフェースとXQSClientLocalHomeインタフェースを介してXQSでサポートされる、EJBクライアント・メソッドについて説明します。ステートフル・セッションBeanまたはステートレス・セッションBean用に、これらのインタフェースには複数のバージョンがあります。

使用方法および例は、「EJBクライアントAPIの使用方法」を参照してください。

ステートフルEJBクライアント・メソッド

ステートフル・セッションBeanでは、次に示すOracle固有のメソッドを、パッケージoracle.xqs.client.ejb.statefulに含まれるEJBインタフェースから使用できます。これらのメソッドの機能は、「XQSFacadeIリファレンス」に含まれる同じ名前のメソッドと同じです。

ステートレスEJBクライアント・メソッド

ステートレス・セッションBeanでは、パッケージoracle.xds.client.ejb.statelessに含まれるEJBインタフェースを介して、次に示すOracle固有のメソッドを使用できます。

XQS JSPタグ・ライブラリのリファレンス

XQSでは、XQueryへのステートフル・アクセスまたはステートレス・アクセス用のカスタムJSPタグが提供されます。

使用方法および例は、「JSPタグ・ライブラリの使用方法」を参照してください。

JSPタグ・ライブラリの使用に関する一般情報は、『Oracle Containers for J2EE JavaServer Pages開発者ガイド』を参照してください。


注意

ここで示すタグ構文には、接頭辞xq:が使用されています。これは慣例によるもので、必須ではありません。taglibディレクティブでは、接頭辞を必要に応じて指定できます。

タグ構文に関して、次のことに注意してください。

  • イタリックは、値または文字列を指定する場所を示します。

  • オプションの属性は、大カッコ[...]で囲まれます。

  • オプション属性のデフォルト値は、太字で示されます。

  • 属性値の選択肢は、縦線 | で区切られます。

  • 注釈がないかぎり、JSP実行時式を使用して、タグの属性値<%= jspExpression %>を設定できます。

 

ステートフル・アクセス用JSPタグ

これらのタグは、XQueryへのステートフル・アクセスを使用する場合に使用します。

XQS executeCursorタグ

このタグを使用して、問合せの準備および実行を行います。構文は次のとおりです。(paramサブタグは、すべてのバインド・パラメータに使用されます。後続の説明を参照してください。)

<xq:executeCursor
  [ xqueryString = "query" ]
  [ xqsViewName = "viewname" ]
  [ namespace = "namespace" ]
    cursorId = "cursorname"
  [ maxItems = "maxnumber" ]
  [ toWriter = "true" | "false" ]
    toXMLDoc = "docname"
    resultItems = "arrayname"
    errors = "errorvarname" > 

   <xq:param ... />
   <xq:param ... />
   ...

</xq:executeCursor>


重要

  • 問合せ入力には、xqueryString属性を使用するか、xqsViewName属性とnamespace属性を使用する必要があります。

  • 出力属性toXMLDocresultItemsおよびerrorsの変数名を指定する必要があります。

 

executeCursorタグの属性は、次のように使用します。

XQS paramタグ

executeCursorおよびexecuteのサブタグです。このタグを使用して、問合せの外部バインド・パラメータ(1つのparamタグ・パラメータ)を指定します。構文は次のとおりです。

<xq:param
    localName = "localvarname"
  [ namespace = "namespace" ]
    value = "bindvalue"
    type = "bindparamtype" 
/>

paramタグの属性は、次のように使用します。

XQS nextタグ

このタグを使用して、項目またはバッチごとに、executeCursorタグから結果を処理します。その際には、そのタグで指定したカーソルID名が参照されます。nextタグの構文は次のとおりです。

<xq:next
    cursorId = "cursorname"
  [ batchSize= "numitems" ]
  [ itemsFetched = "intvarname" ]
/>

nextタグの属性は、次のように使用します。

次に例を示します。

...
<xq:executeCursor cursorId="mycursor"
                  resultItems="myresults"
                  toXMLDoc="mydoc"
                  errors="myerrors" ... >
   <xq:param ... />
   ...
</xq:executeCursor>
<% 
  int items;
  do {
  // Populate output vehicles (myresults array and mydoc document)
%>
   <xq:next
                cursorId="mycursor"
                itemsFetched="fetched" />
<%
  items = fetched.intValue();
  } while(items>0)
  // ... Here is where you would retrieve results from the output vehicles ...
%>
...
XQS closeタグ

executeCursorタグを使用する)ステートフルJSPの場合は、closeタグを使用して、問合せに関連付けられているすべてのリソースを解放します。構文は次のとおりです。

<xq:close
    cursorId = "cursorname"
/>

closeタグの属性は、次のように使用します。

ステートレス・アクセス用JSPタグ

XQueryへのステートレス・アクセスを使用する場合は、executeタグを使用します。

XQS executeタグ

このタグを使用して、問合せの準備および実行を行います。構文は次のとおりです。

<xq:execute
  [ xqueryString = "query" ]
  [ xqsViewName = "viewname" ]
  [ namespace = "namespace" ]
  [ maxItems = "maxnumber" ]
  [ toWriter = "true" | "false" ]
    toXMLDoc = "docname"
    resultItems = "arrayname"
    errors = "errorvarname" > 

   <xq:param ... />
   <xq:param ... />
   ...

</xq:execute>


重要

  • 問合せ入力には、xqueryString属性を使用するか、xqsViewName属性とnamespace属性を使用する必要があります。

  • 必須の属性toXMLDocresultItemsおよびerrorsを使用して、出力媒体の変数名を指定する必要があります。

 

cursorIdを除き、このタグでは、(ステートフル・アクセス用の)executeCursorタグと同じ属性が使用されます。executeCursorと同様に、バインド・パラメータに対してXQS paramサブタグも使用されます。「XQS executeCursorタグ」および「XQS paramタグ」を参照してください。

XQSErrorIリファレンス

この項では、インタフェースoracle.xqs.client.XQSErrorIのリファレンス・ドキュメントを提供します。

問合せで使用するいずれかのXQS関数を、エラーの発生後も続行するように構成した場合は(「XQS関数のエラー処理の構成」を参照)、問合せのXQS関数の実行時に発生した可能性があるエラーの情報を取得できます。エラーは、XQSErrorIオブジェクトのイテレータ内に戻されます。

XQSErrorIインタフェースでは、エラーが発生したXQS関数、エラーのタイプ(XQS固有の指定)、エラー・メッセージおよびエラー・コード(適用される場合)などの主な情報を様々な書式で戻すメソッドが多数提供されます。使用方法および例は、「XQSエラー・オブジェクトからの情報の取得」を参照してください。

XQS構成ファイルのリファレンス

この項では、XQS構成ファイルxqs-config.xmlの要素の説明をアルファベット順に示します。このXQS構成ファイルのXMLスキーマは、http://www.oracle.com/technology/tech/xml/xqs/xqs-config.xsdにあります。また、このファイルは、xds/samples/XQSDemo/XDS/xqs-config.xsdのXLSDemoアプリケーションでも使用可能です。データソースの各カテゴリの主要な要素の使用方法の詳細は、「XQS関数の構成方法」を参照してください。

XQSにより、アプリケーションEARファイルのトップレベルにあるxqs-resources.jarファイルのxqs-config.xmlが参照されます。XQuery式に対して宣言された各外部関数では、XQSによりxqs-config.xmlファイルの関数の構成が参照されます。

XQS構成ファイルの要素の階層を要約します。構成するそれぞれのXQS関数について、関数がアクセスするデータソースの種類に応じて、<document-source><wsdl-source>または<xqsview-source>要素を使用します。

<xqs-config>
<bind-prefix>
<use-prefix>
<xqs-sources>
<wsdl-source>
<function-name>
<cache-properties>
<in-memory>
<output-element>
<error-message>
<wsdlURL>
<operation>
<service>
<portType>
<port>
<input-parameters>
<part>
<schema-type>
<typeMap>
<mapping>
<xmlType>
<xqsview-source>
<function-name>
<cache-properties>
<in-memory>
<output-element>
<error-message>
<repository>
<queryName>
<input-parameters>
<part>
<schema-type>
<xquery-sequence>
<itemType>
<dataSource>
<document-source>
<function-name>
<cache-properties>
<in-memory>
<output-element>
<error-message>
<documentURL>
<XMLTranslate>
<schema-file>
 

<bind-prefix>

親要素:

<xqs-config>

子要素:

<use-prefix>

必須/オプション

オプション。使用数: 0または1つ。

XQS構成要素内の特定のXML名前空間を表す接頭辞を指定する場合は、<use-prefix>サブ要素とともにこの要素を使用します。1つの<use-prefix>サブ要素によって、1つの接頭辞が指定されます。

<bind-prefix>要素には、属性はありません。

<cache-properties>

親要素:

<document-source><wsdl-source>または<xqsview-source>

子要素:

<in-memory>

必須/オプション

オプション。使用数: 0または1。使用場所: 出現する各親要素の内部。

<document-source><wsdl-source>または<xqsview-source>isCached属性を介してXQSキャッシングを有効化する場合は、<cache-properties>要素およびその必須のサブ要素<in-memory>を使用して、特定のXQS関数で使用するキャッシング・プロパティを設定します。関連する考慮事項は、「XQSキャッシングの対策」を参照してください。

isCached="false"(デフォルト)と設定されている場合、<cache-properties>要素は無視されます。

表8-4    <cache-properties>属性 
名前  説明 

time-to-live 

値: 整数(秒単位)

デフォルト: 該当なし(必須)

項目が期限切れになるまでの、キャッシュ内での保持期間を指定します。 

<dataSource>

親要素:

<xqsview-source>

子要素:

なし

必須/オプション

オプション。使用数: 0または1。使用場所: 出現する各親要素の内部。

この要素の値を使用して、data-sources.xml構成ファイルに定義されているデータソースのJNDI名を指定します。指定されたデータソースは、次の例に示すように、XQSによるデータベースへの接続に使用されます。

<dataSource>jdbc/OracleCoreDS</dataSource>

<dataSource>要素には、属性はありません。

<document-source>

親要素:

<xqs-sources>

子要素:

<cache-properties><documentURL><error-message><function-name><output-element><XMLTranslate>

必須/オプション

オプション。使用数: 0以上。

構成するXQS関数のうち、ドキュメント・ソースを使用するそれぞれの関数に、<document-source>要素および(必要に応じて)そのサブ要素を使用します。

実行時にURLを使用する汎用ドキュメント・ソースの使用を構成できます。もしくは、<documentURL>サブ要素を使用して、構成内で固定URLを指定できます。(実行時にURLを使用する例は、「ドキュメント・ソースにアクセスするXQS関数の構成」を参照してください。)

XML以外のドキュメントの場合は、そのドキュメントがD3Lツールでサポートされている書式に準拠している場合は、<XMLTranslate>要素を使用してXMLへの変換を構成できます。(D3Lの詳細は、「XML以外のドキュメント・ソースを使用するための準備」を参照してください。)

表8-5    <document-source>属性 
名前  説明 

isCached 

値: ブール

デフォルト: false

データソースから結果をキャッシュするには、trueに設定します。<cache-properties>要素の詳細は、「XQSキャッシングの構成」も参照してください。 

largeData 

値: ブール

デフォルト: false

大量のデータを処理するために、メモリー節約内部最適化オプションを使用するようにXQSに指示する場合は、trueに設定します。(必要な場合のみ使用してください。)「ラージ・データ用のXQSドキュメント・ソースの構成」も参照してください。 

onError 

値: dynamicError | emptySequence | errorMessage

デフォルト: dynamicError

XQSで使用されるエラー処理モードを決定します。「XQS関数のエラー処理の構成」を参照してください。 

<documentURL>

親要素:

<document-source>

子要素:

なし

必須/オプション

オプション。使用数: 0または1。使用場所: 出現する各親要素の内部。

次の例のように、この要素の値を使用して、データソースとして使用するドキュメントを指定します。

<documentURL>http://host:port/xqsdemos/Repository/pos-2KB.xml</documentURL>

XML以外のドキュメントを指定する場合は、<document-source><XMLTranslate>サブ要素を使用して、XQSで使用する変換ツールを指定します。

<documentURL>要素には、属性はありません。


注意

  • ファイアウォールを使用しており、指定したURLで外部インターネット・アクセスが要求される場合は、適切なプロキシ設定を使用してOC4Jも構成する必要があります。

  • <documentURL>要素を介してドキュメントURLを事前に定義するかわりに、この要素を省略して(構成するXQS関数に対応する)XQuery外部関数を宣言し、ドキュメントURLを実行時引数として使用できます。

  • ドキュメントURLを指定する際には、次のことに注意してください。ドキュメントがローカル・ファイル・システムにある場合は、http://プロトコルを使用するよりも、file://プロトコルを使用した方が、データの取得速度が速くなります。

 

<error-message>

親要素:

<document-source><wsdl-source>または<xqsview-source>

子要素:

なし

必須/オプション

オプション。使用数: 0または1。使用場所: 出現する各親要素の内部。

XQS errorMessageエラー・モード(<document-source><wsdl-source>または<xqsview-source>onError属性で指定)では、データソースから受け取ったメッセージをそのまま転送するかわりに固定エラー・メッセージを事前に定義する場合は、<error-message>要素を使用します。次の例のように、要素値によってメッセージが構成されます。

<error-message>No information available</error-message>

「XQSエラー処理の概要」も参照してください。

<error-message>要素には、属性はありません。

<function-name>

親要素:

<document-source><wsdl-source>または<xqsview-source>

子要素:

なし

必須/オプション

必須。使用数: 1つのみ。使用場所: 出現する各親要素の内部。

この要素を使用して、データソースへのアクセス用にXQSによって実装されるXQuery関数の目的の名前を宣言します。要素値は関数名で、属性の設定によって関数の名前空間が指定されます。(それぞれのXQuery関数は、いずれかの名前空間に属する必要があります。)XQuery式のデフォルトとして特定の名前空間を宣言していないかぎり、XQuery式内で関数を起動するたびに、関数の名前空間を参照する必要があります。

namespace属性を使用して名前空間を直接指定します。すでに、<bind-prefix>要素を介して名前空間の接頭辞を定義している場合は、prefix属性をショートカットとして使用します。namespaceおよびprefixを同時に使用することはできません。必ずどちらか一方のみを使用してください。<output-element>要素の使用に関する情報は、「<output-element>を使用する際の考慮事項」を参照してください。

ここで指定する関数名は、対応するデータソースにアクセスするためにXQuery外部関数宣言で宣言する関数名です。

次に例を示します。

<function-name  namespace="http://xmlns.oracle.com/ias/xqs">
   customerInfo
</function-name>

一方、xqsがXQS名前空間の接頭辞として定義されている場合は、次のようになります。

<function-name prefix="xqs">customerInfo</function-name>

次に、前述の構成に対応する、XQuery関数の宣言の例を示します。

declare namespace xqs="http://xmlns.oracle.com/ias/xqs";
declare function xqs:customerInfo() external;
表8-6    <function-name>属性 
名前  説明 

namespace 

値: URI

デフォルト: なし(prefixが使用されていない場合は必須)

名前空間を直接指定します。 

prefix 

値: 文字列

デフォルト: なし(namespaceが使用されていない場合は必須)

事前定義済の接頭辞を介して名前空間を指定します。 

<in-memory>

親要素:

<cache-properties>

子要素:

なし

必須/オプション

親要素が使用されている場合は必須。使用数: 1つのみ。

<cache-properties>要素およびそのサブ要素<in-memory>を使用して、XQSキャッシュのプロパティを設定します。<in-memory>要素の属性により、キャッシング・モードが決定されます。単純なメモリーベースのキャッシングの場合は、useSpooluseDiskCacheの両方をfalseに設定します。メモリー不足になると必要に応じてキャッシュ・データをディスクにスプールできるメモリーベースのキャッシングの場合は、useSpooltrueに設定し、useDiskCachefalseに設定します。ディスクベースのキャッシングの場合は、useDiskCachetrueに設定し、useSpoolfalseに設定します。ディスクベースのキャッシングを使用すると、サーバーに障害が発生しても、キャッシュ・データは失われません。関連する考慮事項は、「XQSキャッシングの対策」を参照してください。

必要に応じてスプーリングを使用する、メモリーベースのキャッシングの例を示します。

<cache-properties time-to-live="600">
   <in-memory useSpool="true" useDiskCache="false"/>
</cache-properties>

追加情報は、「XQSキャッシングの構成」を参照してください。

表8-7    <in-memory>属性 
名前  説明 

useSpool 

値: ブール

デフォルト: false

スプーリングを有効化する場合は、メモリーベースのデータ・キャッシングに対してuseSpool="true"を設定します。これにより、キャッシュ・データがメモリーからディスクにスプールされるため、メモリー空間の再利用のためにキャッシュ・オブジェクトが削除されても、データは失われません。  

useDiskCache 

値: ブール

デフォルト: false

ディスクベースのデータ・キャッシングに対して、useDiskCache="true"を設定します。これにより、サーバーに障害が発生しても、キャッシュ・データがリカバリされます。  

<input-parameters>

親要素:

<wsdl-source> または <xqsview-source>

子要素:

<part>

必須/オプション

必須。使用数: 1つのみ。使用場所: 出現する各親要素の内部。

この要素を使用して、関連するデータソースのXQS関数への入力パラメータを指定します。各パラメータには、<part>サブ要素を使用します。タイプ・マッチングは、WSDLソースについてのみ、type-match属性に基づきます。

この要素は、入力パラメータがない場合でも必須です。その場合は、空の要素を使用します。

表8-8    <input-parameter>属性 
名前  説明 

type-match 

値: strict | none

デフォルト: strict

WSDLソースについて、入力パラメータに対してXQSによるタイプ・マッチングが実行されるかどうかを決定します。type-match="strict"(デフォルト)の設定を使用すると、(<part><schema-type>サブ要素を介して)指定した入力タイプが、WSDLドキュメント内の対応する部分のタイプと比較されます。現在サポートされている唯一のレベルであるstrict(厳格な)マッチングでは、タイプ名の完全一致が要求されます。実際の入力タイプが<schema-type>要素でサポートされていない場合は、サポートされている中で最も近いタイプを選択し、type-match="none"の設定を使用します。(同様に、<schema-type>要素を使用しない場合は、タイプ・マッチングを回避できます。) 

<itemType>

親要素:

<xquery-sequence>

子要素:

なし

必須/オプション

オプション。使用数: 0または1。使用場所: 出現する各親要素の内部。

<xquery-sequence>要素を使用して、順序のタイプを(順序の各メンバーのタイプが同じ)XQSビューの入力タイプとして使用する場合は、<itemType>サブ要素を使用してメンバーのタイプを指定できます。XQSによるタイプ・チェックの実行を許可する場合に便利です。

namespace属性を使用して、型を定義する名前空間を直接指定します。すでに、<bind-prefix>要素を介して名前空間の接頭辞を定義している場合は、prefix属性をショートカットとして使用します。namespaceおよびprefixを同時に使用することはできません。必ずどちらか一方のみを使用してください。

表8-9    <itemType>属性 
名前  説明 

namespace 

値: URI

デフォルト: なし(prefixが使用されていない場合は必須)

名前空間を直接指定します。 

prefix 

値: 文字列

デフォルト: なし(namespaceが使用されていない場合は必須)

事前定義済の接頭辞を介して名前空間を指定します。 

location 

値: URI

デフォルト: なし

ユーザー定義の型の場合は、その型を定義するスキーマがある場所のURIを指定できます。対応する、パラメータの詳細な宣言がXQueryプロローグに存在する場合は、XQSによるタイプ・チェックに役立ちます。 

<mapping>

親要素:

<typeMap>

子要素:

<xmlType>

必須/オプション

親要素が使用されている場合は必須。使用数: 1つ以上。使用場所: 親要素の内部。

JavaまたはEJBのバインディングを伴うWSDLソースでは、<xmlType>サブ要素と併用され、Java型とXML型をマップします。typeClass属性を使用して、Java型を指定します。

表8-10    <mapping>属性 
名前  説明 

typeClass 

値: 文字列

デフォルト: 該当なし(必須)

この属性によって、完全修飾された、XML-Java型マッピングのJavaクラス名が指定されます。このクラスは、OC4Jクラス・パスに含める必要があります。 

<operation>

親要素:

<wsdl-source>

子要素:

なし

必須/オプション

必須。使用数: 1つのみ。使用場所: 出現する各親要素の内部。

実行するWebサービス操作の指定に使用します。指定する操作は、<wsdlURL>要素がポイントするWSDLドキュメント内で定義された操作になります。定義には、WSDLに含まれる<operation>要素のname属性に対応するXQS <operation>要素の値が使用されます。次に例を示します。

<operation>getCustomerByKey</operation>

<operation>要素には、属性はありません。

<output-element>

親要素:

<document-source><wsdl-source>または<xqsview-source>

子要素:

なし

必須/オプション

オプション。使用数: 0または1。使用場所: 出現する各親要素の内部。

この要素の値は、XQS関数の結果である順序の項目タイプを定義します。この要素は必須ではありませんが、この情報は、XQSによるタイプ・チェックおよび最適化に使用されます。この要素は、WSDLvisibility="true"と設定されているXQSビュー・ソースに使用することを特にお薦めします。タイプ情報がなくても、XQSでは有効なWebサービス操作が生成されますが、タイプ情報を持たないWebサービスを本番システムで定義することは好ましくありません。

結果項目の定義方法は2つあります。型による定義、および前に別のスキーマで定義された要素の参照による定義です。このようなインポート済要素の名前は、要素<output-element>のテキスト値として渡されます。たとえば、結果順序内の項目が、スキーマurn:PurchaseOrders名前空間の<po>要素になる場合、<output-element>は次のようになります。

<output-element namespace="urn:purchaseOrders" >po</output-element>

結果順序内の項目が、http://myHost:/mySchemas/PurchaseOrders.xsdにあるスキーマurn:PurchaseOrders名前空間で定義されたタイプPOTypeの要素になる場合、<output-element>は次のようになります。

<output-element prefix="po_ns" 
   location="http://myHost:/mySchemas/PurchaseOrders.xsd" 
   type="POType"/> 

namespace属性を使用して名前空間を直接指定します。すでに、<bind-prefix>要素を介して名前空間の接頭辞を定義している場合は、prefix属性をショートカットとして使用します。namespaceおよびprefixを同時に使用することはできません。必ずどちらか一方のみを使用してください。

次に、複合型の例を示します。

<output-element namespace="http://xmlns.oracle.com/ias/xqs/CustomerDemo"
   location="http://host:port/xqsdemos/Customers.xsd" 
   type="CustomersType">
   customers
</output-element>

次に、単純型の例を示します。

<output-element prefix="xs">float</output-element>
表8-11    <output-element>属性 
名前  説明 

namespace 

値: URI

デフォルト: なし(prefixが使用されていない場合は必須)

名前空間を直接指定します。 

prefix 

値: 文字列

デフォルト: なし(namespaceが使用されていない場合は必須)

事前定義済の接頭辞を介して名前空間を指定します。 

location 

値: URI

デフォルト: なし

要素または型を定義するスキーマの場所のURIを指定します。WSDLvisibility="true"と設定されている<xqsview-source>要素内の<output-element>要素を使用する場合は、この属性は必須です。それ以外の場合は必須ではありませんが、対応する、パラメータの詳細な宣言がXQueryプロローグに存在する場合は、XQSによるタイプ・チェックに役立ちます。 

type 

値: 文字列

デフォルト: なし

XQS関数の結果である順序の項目タイプになる、XML型のローカル名を指定します。タイプ名の名前空間は、namespace属性またはprefix属性によって決まります。結果項目のタイプが、<output-element>要素の次の値として指定された要素名を参照して定義されている場合は、type属性は必須ではありません。 

<part>

親要素:

<input-parameters>

子要素:

<schema-type><xquery-sequence>

必須/オプション

親要素が空の場合は必須。使用数: 入力引数ごとに1つ。

WSDLソースまたはXQSビューについて、入力パラメータごとに1つの<part>要素を使用します。属性を介して、パラメータの名前および位置(順序)を指定します。必要に応じて<schema-type>サブ要素または<xquery-sequence>サブ要素(XQSビューのみ)を使用して、タイプを指定します。タイプの指定は必須ではありませんが、指定すると、XQSによるタイプ・チェックを実行できます。

WSDLソースの場合は、ソースへのアクセスに使用するWSDL操作の入力メッセージの一部分に、各<part>要素が対応している必要があります。XQSの場合は、各<part>要素が、ビューを定義するXQueryの外部変数に対応しているか、ビューを定義するSQL問合せのバインド変数に対応している必要があります。

表8-12    <part>属性 
名前  説明 

name 

値: 文字列

デフォルト: 該当なし(必須)

入力パラメータの名前を指定します。WSDLソースの場合は、WSDLドキュメントに含まれているものと同じ名前にする必要があります。XQSビューの場合は、外部XQuery変数の名前またはSQLバインド変数と同じにする必要があります。  

position 

値: 正の整数

デフォルト: 該当なし(必須)

<input-parameters>要素に含まれるすべての<part>要素の位置属性を使用して、メッセージ部分に割り当てられる入力パラメータ(WSDLソースの場合)や、外部またはバインド変数に割り当てられる入力パラメータ(XQSビューの場合)の順序が決定されます。position="1"で始まる、最も低い位置が設定されているパラメータから順に使用されます。各<part>要素には、一意の位置設定を指定する必要があります。 

<port>

親要素:

<wsdl-source>

子要素:

なし

必須/オプション

必須。使用数: 1つのみ。使用場所: 出現する各親要素の内部。

この要素の値は、<wsdlURL>要素がポイントするWSDLドキュメント内で定義されたWebサービス・ポートの名前を指定します。この値は、WSDL内の<port>要素のname属性に対応します。

属性の設定によって名前空間が指定されますが、適用可能なサービスに1つしかポートがない場合は、名前空間を指定する必要はありません。

namespace属性を使用して名前空間を直接指定します。すでに、<bind-prefix>要素を介して名前空間の接頭辞を定義している場合は、prefix属性をショートカットとして使用します。namespaceおよびprefixを同時に使用することはできません。

次に例を示します。

<port namespace="http://customer.myeis.com/">CustomerInfo</port>

別の方法の例を示します。

<bind-prefix>
   <use-prefix prefix="myeis">http://customer.myeis.com/</use-prefix>
</bind-prefix>
...
<port prefix="myeis">CustomerInfo</port>
表8-13    <port>属性 
名前  説明 

namespace 

値: URI

デフォルト: なし

名前空間を直接指定します。 

prefix 

値: 文字列

デフォルト: なし

事前定義済の接頭辞を介して名前空間を指定します。 

<portType>

親要素:

<wsdl-source>

子要素:

なし

必須/オプション

必須の場合あり。使用数: 0または1。使用場所: 出現する各親要素の内部。

この要素の値は、<wsdlURL>要素がポイントするWSDLドキュメント内で定義されたWebサービス・ポート・タイプの名前を指定します。この値は、WSDL内の<portType>要素のname属性に対応します。この要素は、操作に使用するポートのバインディングがWSDLに複数含まれている場合には必須です。

属性の設定により、名前空間が指定されますが、WSDLに含まれるすべてのポート・タイプが同じ名前空間に属する場合は、名前空間を指定する必要はありません。

namespace属性を使用して名前空間を直接指定します。すでに、<bind-prefix>要素を介して名前空間の接頭辞を定義している場合は、prefix属性をショートカットとして使用します。namespaceおよびprefixを同時に使用することはできません。

次に例を示します。

<portType namespace="http://customer.myeis.com/">CustomerInfoType</portType>
表8-14    <portType>属性 
名前  説明 

namespace 

値: URI

デフォルト: なし

名前空間を直接指定します。 

prefix 

値: 文字列

デフォルト: なし

事前定義済の接頭辞を介して名前空間を指定します。 

<queryName>

親要素:

<xqsview-source>

子要素:

なし

必須/オプション

オプション。使用数: 0または1。使用場所: 出現する各親要素の内部。

次の例で示すように、この要素の値を使用して、XQSビューが定義されているXQuery式のテキスト・ファイル(.xqまたは.sqlファイル)の名前を指定します。

<queryName>UserByOrderNum.xq</queryName>

ファイル名の拡張子.xqまたは.sqlは、XQSによって自動的に推定されるため、指定しなくてもかまいません。XQSがファイルを検索するディレクトリは、<xqsview-source><repository>サブ要素(あるいはデフォルトの場所)に基づきます。

<queryName>要素を使用しない場合、XQSでは、XQSビュー・ファイルの名前は、<xqsview-source><function-name>サブ要素で指定した関数名と同じで、ビューのタイプに応じて拡張子は.xqまたは.sqlであるとみなされます。

<queryName>要素には、属性はありません。

<repository>

親要素:

<xqsview-source>

子要素:

なし

必須/オプション

オプション。使用数: 0または1。使用場所: 出現する各親要素の内部。

この要素の値は、XQSビューが定義されているXQuery式のテキスト・ファイル(.xqファイル)またはSQL問合せファイル(.sqlファイル)を含むディレクトリへの絶対パスです。<xqsview-source><queryName>サブ要素で名前を指定します。

<repository>要素を使用しない場合は、OC4JPackagerの-repositoryオプションを介して指定したディレクトリ内がXQSによって検索されます。XQSのデモ・アプリケーションのデフォルト・ディレクトリを明示的に指定する場合の例を示します。

<repository>/META-INF/xqs/mydir/</repository>

<repository>要素には、属性はありません。

<schema-file>

親要素:

<XMLTranslate>

子要素:

なし

必須/オプション

親要素が使用されている場合は必須。使用数: 1つのみ。

ドキュメント・ソースが、XML以外の、D3Lツールによってサポートされている書式である場合は、<XMLTranslate>要素および<schema-file>サブ要素を使用して、そのドキュメントをXMLに変換するための情報をXQSに渡します。(D3Lの詳細は、「XML以外のドキュメント・ソースを使用するための準備」を参照してください。)

<XMLTranslate>要素は、使用する変換ツール(D3L)を指定し、<schema-file>要素は、変換に使用するスキーマ・ファイルを指定します。

次に例を示します。

<documentURL>http://host:port/xqsdemos/paymentInfo.csv</documentURL>
<XMLTranslate method="D3L">
   <schema-file>http://host:port/xqsdemos/paymentInfoD3L.xml</schema-file>
</XMLTranslate>

<schema-file>要素には、属性はありません。

<schema-type>

親要素:

<part>

子要素:

なし

必須/オプション

説明を参照。使用数: 1つのみ。

XQSビューの各入力パラメータについて、この要素または<xquery-sequence>要素(入力順序の場合)を使用して、パラメータ・タイプを指定する必要があります。

WSDLソースの各入力パラメータでは、この要素を<part>親要素内で使用することはオプションですが、この要素は、タイプ・チェックに役立つほか、すべてのタイプのリストをXQS構成ファイルに含めるという編成上の目的にも役立ちます。(WSDLソースでは、入力順序は適用されません。)

WSDLソースでタイプ・チェックを実行するには、<input-parameters>要素の属性がtype-match="strict"と設定されている必要があります。

<schema-type>では、要素値によってタイプが指定され、属性設定によって名前空間が指定されます。namespace属性を使用して名前空間を直接指定します。すでに、<bind-prefix>要素を介して名前空間の接頭辞を定義している場合は、prefix属性をショートカットとして使用します。namespaceおよびprefixを同時に使用することはできません。必ずどちらか一方のみを使用してください。

次に例を示します。

<input-parameters>
  <part position="1" name="empname">
    <schema-type namespace="http://www.w3.org/2001/XMLSchema">string</schema-type>
  </part>
</input-parameters>

別の方法として、xsをXML Schemaの名前空間として定義する場合の例を示します。

<bind-prefix>
   <use-prefix prefix="xs">http://www.w3.org/2001/XMLSchema</use-prefix>
</bind-prefix>
...
<input-parameters>
  <part position="1" name="empname">
    <schema-type prefix="xs">string</schema-type>
  </part>
</input-parameters>

ユーザー定義の型の場合は、次のようになります。

<input-parameters>
   <part position="1" name="DBServiceSelect_cust_id_inparameters">
      <schema-type namespace=
         "http://xmlns.oracle.com/pcbpel/adapter/db/top/TestDBAdapter">
         DBServiceSelect_cust_id
      </schema-type>
   </part>
</input-parameters>

ユーザー定義のXML型に加えて、現在、XQSでは、XQuery 1.0およびXPath 2.0データ・モデルで定義されている型のサブセット、すなわちxs:booleanxs:stringxs:intxs:longxs:floatxs:doublexs:decimalxs:base64Binaryxs:hexBinaryxs:anyURIxs:dateTimexs:durationおよびxs:anyTypeをサポートしています。(「サポートされている問合せパラメータのタイプ」も参照してください。)サポート対象外のXQuery/XPath入力タイプを使用する場合は、サポートされている中で、データに最も適したJava表現のタイプを選択し、<input-parameters>要素内でtype-match="none"の設定を使用します。(JavaまたはEJBのバインディングを伴うWSDLソースの場合、このような状況では、<wsdl-source><typeMap>サブ要素も使用します。)

表8-15    <schema-type>属性 
名前  説明 

namespace 

値: URI

デフォルト: なし(prefixが使用されていない場合は必須)

名前空間を直接指定します。 

prefix 

値: 文字列

デフォルト: なし(namespaceが使用されていない場合は必須)

事前定義済の接頭辞を介して名前空間を指定します。 

<service>

親要素:

<wsdl-source>

子要素:

なし

必須/オプション

必須の場合あり。使用数: 0または1。使用場所: 出現する各親要素の内部。

この要素の値は、サービスの名前を指定します。指定するサービスは、<wsdlURL>要素がポイントするWSDLドキュメント内で定義されたサービスになります。定義には、WSDLに含まれる<service>要素のname属性に対応するXQS <service>要素の値が使用されます。XQS <service>要素は、WSDLドキュメントで複数のサービスが定義されている場合には必須です。

属性の設定により、名前空間が指定されますが、WSDLに含まれるすべてのサービス要素が同じ名前空間に属する場合は、名前空間を指定する必要はありません。

namespace属性を使用して名前空間を直接指定します。すでに、<bind-prefix>要素を介して名前空間の接頭辞を定義している場合は、prefix属性をショートカットとして使用します。namespaceおよびprefixを同時に使用することはできません。

次に例を示します。

<service namespace="http://customer.myeis.com/">CustomerInfoMYEISService</service>
表8-16    <service>属性 
名前  説明 

namespace 

値: URI

デフォルト: なし

名前空間を直接指定します。 

prefix 

値: 文字列

デフォルト: なし

事前定義済の接頭辞を介して名前空間を指定します。 

<typeMap>

親要素:

<wsdl-source>

子要素:

<mapping>

必須/オプション

オプション。使用数: 0または1。使用場所: 出現する各親要素の内部。

JavaまたはEJBのバインディングを伴うWSDLソースでは、必要に応じてこの要素を使用し、XML型をJava型にマップできます。Java型は、<mapping>サブ要素を介して指定し、XML型は、<mapping><xmlType>サブ要素を介して指定します。

<typeMap>要素には、属性はありません。

<use-prefix>

親要素:

<bind-prefix>

子要素:

なし

必須/オプション

親要素が使用されている場合は必須。使用数: 1つ以上。

特定のXML名前空間を表す接頭辞を使用する場合は、<bind-prefix>要素および<use-prefix>サブ要素を使用します。各<use-prefix>サブ要素は、1つの接頭辞を指定します。使用される要素値は、名前空間を表す接頭辞を指定する、名前空間および接頭辞の属性を指定します。次に例を示します。

<bind-prefix>
   <use-prefix prefix="xs">http://www.w3.org/2001/XMLSchema</use-prefix>
   <use-prefix prefix="xqs">http://xmlns.oracle.com/ias/xqs</use-prefix>
   <use-prefix prefix="myeis">http://customer.myeis.com/</use-prefix>
</bind-prefix>

これらの設定により、名前空間を指定する必要があるXQS構成要素では、たとえば、namespace="http://customer.myeis.com/"のかわりにprefix="myeis"を使用できます。


注意

<use-prefix>の指定は、XQuery式ではなく、この指定が出現するXQS構成ファイルのみで有効です。 


表8-17    <use-prefix>属性 
名前  説明 

prefix 

値: 文字列

デフォルト: 該当なし(必須)

この属性は、目的の接頭辞を指定します。 

<username>

親要素:

<document-source>

子要素:

なし

必須/オプション

オプション。使用数: 0または1つ。

この要素は、将来のセキュリティ拡張のために予約されています。

<username>要素には、属性はありません。

<wsdl-source>

親要素:

<xqs-sources>

子要素:

<cache-properties><error-message><function-name><input-parameters><operation><output-element><port><portType><service><typeMap><wsdlURL>

必須/オプション

オプション。使用数: 0以上。

構成するXQS関数のうち、WSDLベースのソースにアクセスするそれぞれの関数に、<wsdl-source>要素および(必要に応じて)そのサブ要素を使用します。(XQSで使用できるWSDLベースのソースの種類は、「データソースのサポート対象カテゴリ」を参照してください。)

表8-18    <wsdl-source>属性 
名前  説明 

isCached 

値: ブール

デフォルト: false

データソースから結果をキャッシュするには、trueに設定します。<cache-properties>要素の詳細は、「XQSキャッシングの構成」も参照してください。 

largeData 

値: ブール

デフォルト: false

大量のデータを処理するために、メモリー節約内部最適化オプションを使用するようにXQSに指示する場合は、trueに設定します。(必要な場合のみ使用してください。)「ラージ・データ用のXQSドキュメント・ソースの構成」も参照してください。 

onError 

値: dynamicError | emptySequence | errorMessage

デフォルト: dynamicError

XQSで使用されるエラー処理モードを決定します。「XQSエラー処理の概要」を参照してください。 

<wsdlURL>

親要素:

<wsdl-source>

子要素:

なし

必須/オプション

必須。使用数: 1つのみ。使用場所: 出現する各親要素の内部。

実行する操作を定義するWSDLドキュメントをポイントするために使用します。WSDLへのアクセスは、実行時行われます。次に例を示します。

<wsdlURL>http://api.mySearch.com/mySearch.wsdl</wsdlURL>

<wsdlURL>要素には、属性はありません。


注意

ファイアウォールを使用しており、指定したURLで外部インターネット・アクセスが要求される場合は、適切なプロキシ設定を使用してOC4Jも構成する必要があります。 


<xqs-config>

親要素:

該当なし(ルート)

子要素:

<bind-prefix><xqs-sources>

必須/オプション

必須。使用数: 1つのみ。

これは、xqs-config.xmlのルート要素です。最低限必要な要素は、このルート要素、そのサブ要素<xqs-sources>、および<xqs-sources>のサブ要素(<document-source><wsdl-source><xqsview-source>)のうち少なくとも1つです。

表8-19    <xqs-config>属性 
名前  説明 

version 

値: XMLの名前トークン(NMTOKEN

デフォルト: 1.0(現在のバージョン)

この属性は、xqs-config.xmlスキーマ定義のバージョン番号を記録します。現行のXQS実装では、デフォルト値を使用します。 

<xqs-sources>

親要素:

<xqs-config>

子要素:

<document-source><wsdl-source><xqsview-source>

必須/オプション

必須。使用数: 1つのみ。

これは、構成される全XQS関数のソース要素の親要素です。属性はありません。

<xqsview-source>

親要素:

<xqs-sources>

子要素:

<cache-properties><error-message><function-name><input-parameters><output-element><queryName><repository><dataSource>

必須/オプション

オプション。使用数: 0以上。

構成するXQS関数のうち、XQSビューを使用するそれぞれの関数に、<xqsview-source>要素および(必要に応じて)そのサブ要素を使用します。

表8-20    <xqsview-source>属性 
名前  説明 

fetchSize 

値: 整数

デフォルト: 1

この属性は、リレーショナル・データベースに接続するSQLベースのXQSビューにのみ有効です。この属性はオプションです。

このfetchSize属性は、java.sql.PreparedStatementsetFetchSizeメソッドへのコールに変換されます。この属性は、JDBCへのヒントとして機能します。このヒントを使用して、1回の処理でデータベースからフェッチされる結果セットの行数が定義されます。JDBCのsetFetchSizeパラメータは(つまり、XQSのfetchSize属性も)単なるヒントであり、バインディングではないことに注意してください。  

isCached 

値: ブール

デフォルト: false

データソースから結果をキャッシュするには、trueに設定します。<cache-properties>要素の詳細は、「XQSキャッシングの構成」も参照してください。 

largeData 

値: ブール

デフォルト: false

大量のデータを処理するために、メモリー節約内部最適化オプションを使用するようにXQSに指示する場合は、trueに設定します。(必要な場合のみ使用してください。)「ラージ・データ用のXQSドキュメント・ソースの構成」も参照してください。 

onError 

値: dynamicError | emptySequence | errorMessage

デフォルト: dynamicError

XQSで使用されるエラー処理モードを決定します。「XQSエラー処理の概要」を参照してください。 

WSDLvisibility 

値: ブール

デフォルト: false

アプリケーションのWebサービス・コンポーネントで、XQSをWebサービス操作として公開する場合は、これをtrueに設定します。この属性は、SQLベースのXQSビューには適用できません。「Webサービス操作として公開されたXQSビューの使用方法」も参照してください。 

SQLResultType 

値: relational | XMLType

デフォルト: relational

この属性は、SQLベースのビューを使用している場合にのみ適用可能です。この属性では、データベース問合せで、データをリレーショナル(表)形式またはXMLのいずれで戻すかを設定します。Oracle XMLデータベースを使用している場合は、SQLResultType属性をXMLTypeに設定することで、SQLベースのXQSビューを使用して(それ以上変換せずに)データベースからXML型の値を選択できます。「XQSビューを使用するXQS関数の構成」も参照してください。 

rowTag 

値: 文字列

デフォルト: ROW

この属性は、SQLベースのビューを使用している場合にのみ適用可能です。この属性が指定されている場合、データベースの結果のリレーショナルからXMLへの変換で使用された要素のデフォルト名は、この値で上書きされます。この属性は、SQLResultType属性がrelationalに設定されている場合にのみ適用可能です。

「XQSビューを使用するXQS関数の構成」も参照してください。 

rowIdAttr 

値: 文字列

デフォルト: NULL

この属性は、SQLベースのビューを使用している場合にのみ適用可能です。この属性が指定されている場合、結果に含まれる行要素の番号付けが制御されます。この属性は、SQLResultType属性がrelationalに設定されている場合にのみ適用可能です。

rowIdAttr属性の値は、結果の行要素の番号付け属性の名前です。行は1から開始して、123のように番号付けされます。""の設定はデフォルトの動作と同じで、行の番号付け属性を抑止します。

rowTagおよびrowIdAttr属性は、それぞれ別々に使用されます。つまり、指定できる属性は1つのみで、もう一方にはデフォルトを使用します。

「XQSビューを使用するXQS関数の構成」も参照してください。 

XMLFormat 

値: XSU

デフォルト: XSU

この属性は、SQLベースのビューを使用している場合にのみ適用可能です。この属性の値はXSUのみです。その他の値は今後のリリースで使用できるようになり、WebRowset形式の結果がサポートされます。現行リリースの制限は、JDK 1.5機能への依存性が原因です。 

<XMLTranslate>

親要素:

<document-source>

子要素:

<schema-file>

必須/オプション

オプション。使用数: 0または1。使用場所: 出現する各親要素の内部。

ドキュメント・ソースが、XML以外の、D3Lツールによってサポートされている書式である場合は、<XMLTranslate>要素および<schema-file>サブ要素を使用して、そのドキュメントをXMLに変換するための情報をXQSに渡します。この要素は、Excelのカンマ区切り(CSV)ファイルなど、別の書式のファイルをXMLに変換する場合に便利です。D3Lの詳細は、「XML以外のドキュメント・ソースを使用するための準備」を参照してください。

<XMLTranslate>method属性は、使用する変換ツールを指定します。現在、XQSでサポートされているのは、D3L変換ツールです。

<schema-file>サブ要素は必須で、変換に使用するスキーマを指定します。

表8-21    <XMLTranslate>属性 
名前  説明 

method 

値: D3L

デフォルト: 該当なし(必須)

XQSで使用する変換ツールを指定します。XQSで現在サポートされているのは、D3Lです。 

<xmlType>

親要素:

<mapping>

子要素:

なし

必須/オプション

必須。使用数: 1つのみ。使用場所: 出現する各親要素の内部。

JavaまたはEJBのバインディングを伴うWSDLでは、<mapping>親要素と併用され、Java型とXML型をマップします。属性設定を使用してXML型の名前空間を指定します。名前空間を直接指定する場合は、namespace属性を使用します。すでに、<bind-prefix>要素を介して名前空間の接頭辞を定義している場合は、prefix属性をショートカットとして使用します。namespaceおよびprefixを同時に使用することはできません。必ずどちらか一方のみを使用してください。

<mapping>親要素は、Java型を指定します。

次に例を示します。

<typeMap>
   <mapping typeClass="org.w3c.dom.Node">
      <xmlType prefix="myeis">Customer</xmlType>
   </mapping>
   ...
</typeMap>
表8-22    <xmlType>属性 
名前  説明 

namespace 

値: URI

デフォルト: なし(prefixが使用されていない場合は必須)

名前空間を直接指定します。 

prefix 

値: 文字列

デフォルト: なし(namespaceが使用されていない場合は必須)

事前定義済の接頭辞を介して名前空間を指定します。 

<xquery-sequence>

親要素:

<part>

子要素:

<itemType>

必須/オプション

親要素またはXQSビューが出現するたびに、その内部でこの要素または<schema-type>を使用する必要があります。使用数: 1つのみ。

XQSビューの、パラメータ・タイプがXQuery/XPath順序の入力パラメータごとに、<part>親要素内でこの要素を使用して、タイプを指定する必要があります(これに対して、順序以外のタイプには、<schema-type>要素が使用されます)。

WSDLソースでは、入力順序がサポートされていないため、この要素は関係ありません。

<xquery-sequence>要素は、複数のタイプの項目を含む異機種間の順序に使用できます。その場合は、この要素を空にする必要があります。もしくは、<itemType>サブ要素を含めて、異機種間順序の各メンバーの共通タイプを指定できます。

<xquery-sequence>要素には、属性はありません。

OC4JPackagerのリファレンス

この項では、XQSのパッケージ化ユーティリティであるOC4JPackagerのパラメータおよびプロパティに関するリファレンス・ドキュメントを提供します。概要は、「OC4JPackagerの概要」を参照してください。使用方法は、「OC4JPackagerを使用したXQSアプリケーションのパッケージ方法」を参照してください。


注意

パラメータまたはプロパティの設定でパスを指定する際に使用できるように、OC4JPackagerでは、現在のディレクトリへの相対パス(ディレクトリ表記の「.」および「..」の使用を含む)または絶対パスがサポートされています。 


OC4JPackagerのパラメータ

この項では、アルファベット順に、OC4JPackagerのパラメータの説明および使用例を示します。OC4JPackagerは、次のように実行します(%はコマンド・プロンプトです)。

% java -jar OC4JPackager.jar -option1 value1 -option2 value2 ... -optionN valueN

appArchives

必須。ディレクトリ・パスを指定します。

アプリケーションの場所を指定するために使用します。アプリケーションの場所は、EARファイルが含まれているディレクトリ、またはEAR構造のトップレベル・ディレクトリです。

-appArchives /dir1/myappdir

help

オプション。これは、切替えフラグです。

OC4JPackagerの使用状況およびパラメータ・リストを示すために使用します。その際、その他のパラメータは使用しません。

-help

jsp

オプション(XQS JSPタグ・ライブラリを使用する場合は必須)。これは、切替えフラグです。

XQS JSPタグ・ライブラリのJARファイル(xquerytaglib.jar)を出力EARファイルに含めるために使用します。

-jsp

name

必須。EARファイルの名前を指定します。

出力EARファイルの目的の名前(.ear拡張子の有無は任意)を指定するために使用します。このファイルの場所は、-outputパラメータによって決まります。

-name myxqsapp.ear

no_ws

オプション。これは、切替えフラグです。

Webサービスを生成しないようにする場合に使用します。

-no_ws

output

必須。ディレクトリ・パスを指定します。

OC4JPackagerによって作成されるEARファイルの配置場所を指定するために使用します。ファイル名は、-nameパラメータに基づきます。

-output /dir1/mydeployments

repository

オプション。ディレクトリ・パスを指定します。

XQSビューが格納されるXQSリポジトリの場所を指定するために使用します。

-repository ORACLE_HOME/xds/samples/repository

sf

オプション(XQSステートフルEJBクライアントAPIを使用する場合は必須)。これは、切替えフラグです。

XQSステートフルEJBクライアントのJARファイル(xqsclient-stateful.jar)を出力EARファイルに含めるために使用します。

-sf

また、これにより、次の<module>要素がapplication.xmlファイルに追加されます。

<module>
   <ejb>xqsclient-stateful.jar</ejb>
</module>

sl

オプション(XQSステートレスEJBクライアントAPIを使用する場合は必須)。これは、切替えフラグです。

XQSステートレスEJBクライアントのJARファイル(xqsclient-stateless.jar)を出力EARファイルに含めるために使用します。

-sl

また、これにより、次の<module>要素がapplication.xmlファイルに追加されます。

<module>
   <ejb>xqsclient-stateless.jar</ejb>
</module>

xqsConfigFile

必須。ファイルのパスを指定します。

アプリケーションに対して、XQS構成ファイルxqs-config.xmlのパス(ファイル名を含む)を指定するために使用します。

-xqsConfigFile /dir1/subdir/myconfigdir/xqs-config.xml

OC4JPackager用のJavaプロパティ

この項では、アルファベット順に、OC4JPackagerでサポートされているJavaプロパティの説明および使用例を示します。Java -Dオプションは、次のように使用します。

java -Dproperty1=value1 -Dproperty2=value2 -jar OC4JPackager.jar \
     -option1 value1 -option2 value2 ... -optionN valueN

oracle.home

オプション。ディレクトリ・パスを指定します。

OC4JPackagerでは、Oracleホーム・ディレクトリを指定するためのoracle.homeがサポートされています。次に例を示します。

-Doracle.home=/myroot/myoraclehome

Oracleホーム・ディレクトリを指定すると、-jsp-sfおよび-slの各フラグを介して要求されたクライアントJARファイルの検索、およびこれらのファイルのアプリケーションへのバンドルが可能になります。oracle.homeを設定しない場合は、これらのフラグが無視されます。

java.home

必須。ディレクトリ・パスを指定します。

OC4JPackagerが作業(JARファイルのバンドル解除やバンドルなど)のためにjavaコマンドを実行する、Javaホーム・ディレクトリへのパスを指定します。

-Djava.home=/dir1/myjavahome

このプロパティを指定しない場合、OC4JPackagerは終了します。

java.util.logging.properties.file

オプション。ファイルのパスを指定します。

Javaロギング・プロパティを指定するファイルへのパス(ファイル名を含む)を示すために使用します。次の例では、myfile.propertiesが現在のディレクトリにあります。

-Djava.util.logging.properties.file=myfile.properties

ロギング・プロパティ・ファイルを指定しない場合は、Javaエラーの出力を確認できません。

OC4JPackagerでは、次の場所で示されるように、標準のJ2SEロギング・フレームワークを使用して、メッセージがログに記録されます。

http://java.sun.com/j2se/1.4.2/docs/guide/util/logging/

OC4JPackagerにより、プロパティ・ファイル内では、OC4JPackagerからのメッセージのロギング・レベルを指定できるプロパティoracle.xds.tools.OC4JPackager.levelがサポートされています。指定できるレベルは、SEVEREWARNINGINFOまたはFINEです。高レベルの進捗メッセージにはINFO、低レベルのデバッグ・メッセージにはFINEを使用します。

メッセージをコンソールに送り、OC4JPackagerからのメッセージにINFOレベルを使用する場合の、ロギング・プロパティ・ファイルのエントリの例を示します。

#  output to console
handlers= java.util.logging.ConsoleHandler
...
# set packager level to INFO  
oracle.xds.tools.OC4JPackager.level=INFO

xds.packager.work.dir

オプション。ディレクトリ・パスを指定します。

これを使用して、EARファイルのバンドル解除および再作成の際にOC4JPackagerが使用する、作業ディレクトリを指定します。

-Dxds.packager.work.dir=/some/dir

デフォルトの場所は、user.homeディレクトリです。

XQSのトラブルシューティング

この項では、OC4Jロギングを有効化する方法を説明し、XQSアプリケーションに関する様々なトラブルシューティングのヒントを提供します。

OC4Jロギングの有効化

Javaプロパティjava.util.logging.properties.fileを使用して、OC4Jロギングを有効化し、ロギング・プロパティ・ファイルを指定できます。このファイルでは、OC4JPackagerのロギング・レベルを含む、Javaロギング設定を指定できます。ロギング・プロパティは、次の場所で指定されているように、標準のJ2SEロギングによって定義されます。

http://java.sun.com/j2se/1.4.2/docs/guide/util/logging/

ロギングの詳細は、「java.util.logging.properties.file」、『Oracle Containers for J2EE構成および管理ガイド』の「OC4Jでのロギング」の章、および『Oracle Containers for J2EE開発者ガイド』の「ロギング実装のガイドライン」を参照してください。

XQSの主な兆候、原因および処置

この項では、XQSアプリケーションで発生する潜在的な問題およびその解決方法を説明します。


注意

XQS実装には、ダイナミック・モニタリング・サービス(DMS)のメトリックは含まれていません。 


大量のデータによる問題

サイズの大きいXML文書をメモリーにロードできない場合は、largeDataフラグを有効化すると処理が可能になることがあります。「ラージ・データ用のXQSドキュメント・ソースの構成」を参照してください。

XQS関数が正常にロードされない

次のような内容のエラー・メッセージが表示されます(ここで、arityは関数が取る引数の数を表し、nsおよびfuncnameは関数の名前空間および名前に置き換えられます)。

XP0017: It is a static error if the expanded QName and number of arguments in a 
function call do not match the name and arity of an in-scope function in the static 
context. Detail: unknown function 'ns:funcname'

重要なのは、XQueryによって関数が認識されなかったということです。これは、関数が正しく構成されていなかったために、関数がXQSによって正常にロードされなかった可能性があることを示しています。OC4Jエラー・ログ・ファイル(ORACLE_HOME/j2ee/home/log/oc4j/log.xmlなど)で、この関数で発生した問題の詳細な説明を検索してください。

外部関数に一貫性のないシグネチャが存在する

次のようなエラーが発生したとします。

external function "Foo" has inconsistent signatures: the one defined in function
library framework is different from the one declared in function declaration
prolog

XQSとの関係において、function library framework(関数ライブラリ・フレームワーク)という用語は、XQS構成ファイルの<input-parameters>要素内で定義されたシグネチャを表すことに注意してください。<input-parameters>要素の下にある<part>定義は、必ずXQueryプロローグ内の関数のシグネチャと一致する必要があります。

XQueryシグネチャを構成と一致させることができない場合は、使用するXML型がサポートされていない可能性があります。(「サポートされている問合せパラメータのタイプ」を参照してください。)対応策として、XQueryパラメータまたはXQueryの戻り値について、プロローグでの型の宣言をすべて回避できます。たとえば、次のように完全に型が指定された関数の宣言があるとします。

declare function xqs:Foo ($s as element()) as xs:positiveInteger external;

型を指定せずにこの関数を宣言するには、次のようにします。

declare function xqs:Foo ($s) external;

ただし、XQS構成を介して、入力パラメータの数を常に指定する必要があります。

XQSの例

XQSの例は、Oracle Technology Networkの次のWebサイトで、XQSを検索してください。

http://www.oracle.com/technology/tech/java/oc4j/1013/how_to/index.html

戻る 次へ
Oracle
Copyright © 2006 Oracle Corporation.

All Rights Reserved.
目次
目次
索引
索引