プライマリ・コンテンツに移動
Oracle® Fusion Middleware Oracle SOA SuiteでのSOAアプリケーションの開発
12c (12.2.1.2.0)
E82771-02
目次へ移動
目次

前
次

41 XQueryマッパーを使用したトランスフォーメーションの作成

この章では、XQueryマッパーを使用して、XQueryトランスフォーメーションを作成、編集およびテストする方法を説明します。XQueryマッパーでは、様々なXMLタイプおよび非XMLタイプ間でデータを変換でき、異種アプリケーションを迅速に統合できます。XQueryマッパーを使用して作成されたXQuery (.xqy)ファイルを、Oracle BPEL Process ManagerOracle MediatorまたはOracle Service Busのリソースとして使用できます。

この章の内容は次のとおりです。

41.1 XQueryマッパーの概要

XQueryマッパーはXQuery 1.0をサポートします。古いXQuery 2004もサポートされます。

XQueryマッパーには次のビューがあります。

  • XQueryマッパーのグラフィカル・ビュー

  • XQueryマッパーのソース・エディタ

注意:

XQueryマッパーのグラフィカル・ビューは、XQuery 2004ファイルではサポートされていません。XQueryのこの古いバージョンでは、ソース・ビューのみがサポートされています。

新規XQueryファイルを作成すると、デフォルトではグラフィカル・ビューで開きます。グラフィカル・ビューには、XQueryマップ下部の「XQueryマッパー」タブをクリックしてアクセスすることもできます。

図41-1は、XQueryマッパーのグラフィカル・ビューを示しています。

XQueryマッパーの左ペインには、XQuery関数の入力元やパラメータが表示されます。XQueryファイルに複数の関数がある場合、マッパー・ペインの上のツールバーを使用して関数を選択して表示できます。

右ペインには、XQuery関数の結果タイプに対応するターゲット・スキーマ・ツリーが表示されます。中央のペインは、XQuery関数を使用したソースおよびターゲット・スキーマ要素のマッピングに使用できます。

41.1.1 ソースおよびターゲット・ツリーについて

XQueryマッパーの左ペインにはソース・ツリー、右ペインにはターゲット・ツリーが表示されます。ツリーのノードは、XML要素、属性、および他のなんらかのXQueryコンストラクトとなります。

XML要素は<>アイコンで示されます。属性には別のアイコンが使用され、XPath式で表されるのと同様に、属性名の先頭に@記号が付きます。要素または属性の多重度は、次の標準接尾辞で示されます。

  • ?: 0個または1個の要素/属性があります。

  • +: 1個以上の要素/属性があります。

  • *: 0個以上の要素/属性があります。

ソース・ツリーは、選択されたXQuery関数の入力元またはパラメータを示します。ルート・レベルの要素は、その関数の入力パラメータを表します。ルート・ノードが複合要素の場合、子要素および属性がルート・ノードの下に表示されます。

ターゲット・ツリーには、XML要素、属性、およびいくつかのプログラミング・コントロール構造を含めることが可能です。要素および属性は、次の形式で表示されることがあります。

  • グレー表示のフォント: ターゲット・スキーマの一部で、未定義の要素。グレー表示の要素をソース要素にマッピングすると、その後は通常のフォントで表示されます。

  • 通常のフォント: ソース内の要素コンストラクタに対応するか、またはソース・データから明示的にコピーされた要素。

  • 下線付きフォント: 指定されたターゲット・スキーマに互換性のない要素。この要素は、要素コンストラクタで使用される要素名が正しくないため、またはシーケンス割当てのスキーマ・タイプが正しくないために表示される場合があります。

ターゲット・ツリーには、If-Then-Else、union演算子、comma演算子などのプログラミング・コントロール構造を含めることができます。

  • If-Then-Else演算子: If-Then-Else演算子は、「条件付き」というノードとして表示されます。「条件付き」ノードには、If Then and Elseのネストされたブランチがあります。ノードのコンテキスト・メニューから「条件付け」オプションを選択して、ノードを条件付きにすることが可能です。

  • union演算子(およびその他のシーケンス結合演算子): これらはXQueryマッパーのグラフィカル・ビューでは作成できません。ただし、ソース・ビューにこうした演算子が含まれる場合は、ターゲット・ツリーに「すべて」というノードで表示され、オペランドがすべてのノードのサブノードとして表示されます。

  • comma演算子: comma演算子は、「リスト」というノードとして表示されます。サブノードは、comma演算子のカンマ区切りオペランドを表します。ターゲット・ツリー・ノードのコンテキスト・メニューから「クローン」オプションを選択して、comma演算子を適用できます。

41.1.2 XQueryマッパー・ツールバーの使用

XQueryマッパー・ツールバーはXQueryマッパーのペインの上にあります。このツールバーには、グラフィカル・マッパーで使用できる様々なツールが含まれています。XQueryマッパー・ツールバーを図に示します。

図41-2 XQueryマッパー・ツールバー

図41-2の説明が続きます
「図41-2 XQueryマッパー・ツールバー」の説明

XQueryマッパー・ツールバーには次のツールが含まれています。

  • 関数セレクタ: 「関数セレクタ」ボックスは、fの文字が付いた緑色のアイコンで示されます。関数セレクタを使用して、ソース・ペインに表示する関数を選択できます。これは、XQueryマップに複数の関数が含まれる場合に役立ちます。

  • 新規関数の追加: 「新規関数の追加」ボタンは、緑色のプラス(+)記号で表示されます。新規関数の追加を使用して、XQueryマップ・ファイルに新規関数を追加します。

  • 関数の名前変更: 「関数の名前変更」ボタンは「新規関数の追加」ボタンの右にあります。「関数の名前変更」を使用して、XQueryマップ・ファイルの関数の名前を変更します。

  • 関数の削除: 関数の削除は、赤色のクロス(X)記号で表示されます。「関数の削除」を使用して、XQueryマップ・ファイルから関数を削除します。

  • ライブラリ・モジュールのインポート: 「ライブラリ・モジュールのインポート」ボタンは「関数の削除」ボタンの右にあります。「ライブラリ・モジュールのインポート」を使用して、ライブラリXQuery関数をマップにインポートします。インポートするライブラリ・モジュール・ファイルを指定する必要があります。

  • マッピング・モード: XQueryマッパーでは様々なマッピング・モードを使用できます。これらのモードは、ユーザーがソース・ノードからターゲット・ノードに線をドラッグ・アンド・ドロップする際に作成されるXQuery式に影響します。次の3つのボタンを使用して、対応するマッピング・モードを選択します。

    • 値マッピング: 入力ソースからターゲットのXML要素および属性を構成し、XMLコンストラクタを使用して入力ソースの値をコピーします。次に例を示します。

      <ID>{fn:data($pParam1/ID)}</ID>

      前述のコードは、入力ソース・パラメータのID要素からターゲットのID要素を作成します。

      値マッピングは、デフォルトのマッピング・モードです。

    • マッピングの上書き: 入力ソース・パラメータのXML要素が結果シーケンスにコピーされます。既存のマッピングは新規マッピングに置き換えられます。次に例を示します。

      {

      $pParam1/Items

      }

      前述のコードは、Itemsサブツリーおよび、その子要素と属性をターゲット・ツリーにコピーします。

    • マッピングの追加: このモードは、既存のマッピングが上書きされない点を除いて、マッピングの上書きと同様に動作します。新しく追加するマッピングが作成されます。

    マッピング・モードの使用方法の詳細は、「XQueryマッパーの使用」を参照してください。

  • ターゲット・タイプ差異の表示/非表示: 「ターゲット・タイプ差異の表示/非表示」ボタンを使用して、右側のターゲット・ツリーでXML要素および属性が表示されるかどうかを管理します。まだマッピングされていない要素および属性は非表示にする選択ができます。

  • 検索: 「検索」フィールドを使用して、ソース・ツリーおよびターゲット・ツリーで要素、属性、データ・タイプなどを検索します。上矢印および下矢印を使用して、それぞれ次および前の項目を探します。

41.1.3 「プロパティ」ウィンドウの使用

「プロパティ」ウィンドウには、ターゲット・ツリーで選択したノードのXQuery式が表示されます。ドラッグ・アンド・ドロップを使用して作成されたXQuery式は、「プロパティ」ウィンドウで編集できます。「プロパティ」ウィンドウは、さらに複雑なXQuery式の作成にも使用できます。

「プロパティ」ウィンドウは、デフォルトではXQueryマッパーの下にあります。「プロパティ」ウィンドウが表示されていない場合は、JDeveloper「ウィンドウ」メニューで「プロパティ」をクリックして、「プロパティ」ウィンドウを表示します。

ヒント:

XQueryマッパーを使用する際は、「プロパティ」ウィンドウを画面右下隅から、画面下部のマッパー・ウィンドウのすぐ下に移動できます。「プロパティ」ウィンドウが大きくなり、XQuery式の編集および変数ツリーが表示しやすくなります。

選択したターゲット・ノードのXQuery式は、「プロパティ」ウィンドウで直接編集できます。また、XQuery関数、コンストラクトおよび演算子を、「コンポーネント」ウィンドウから「プロパティ」ウィンドウのXQuery式にドラッグできます。「コンポーネント」ウィンドウは、デフォルトではXQueryマッパーの右側にあります。「コンポーネント」ウィンドウが表示されていない場合は、Oracle JDeveloperのメニュー・バーから「ウィンドウ」→「コンポーネント」の順に選択します。

変更内容を保存するには、「プロパティ」ウィンドウの左上隅にある「コミット」ボタンをクリックします。XQueryが再コンパイルされ、XQueryマッパー・ビューが更新されます。

XQuery式の編集で間違えた場合は、「プロパティ」ウィンドウの左上領域にある「マッパー・リソースに戻す」をクリックして、変更内容を元に戻して再度開始します。

「プロパティ」ウィンドウの左側にも変数ツリーがあります。変数ツリーには、すべての変数、ローカル変数およびXQuery関数パラメータの両方が表示され、現在のスコープで確認できます。このスコープは、ターゲット・ツリー・ペインでハイライトされたノードによって決まります。変数ツリーから右側のペインにあるXQuery式にノードをドラッグ・アンド・ドロップできます。

図41-3に、「プロパティ」ウィンドウを示します。「プロパティ」ウィンドウは赤でハイライト表示されています。このコメント・ノードは、ターゲット・ツリーで選択されて表示されます。対応する変数ツリーおよびXQuery式(fn:data($pParam1/Comment))が「プロパティ」ウィンドウに表示されます。

図41-3 「プロパティ」ウィンドウ

図41-3の説明が続きます
「図41-3 プロパティ・ウィンドウ」の説明

41.1.4 「コンポーネント」ウィンドウの使用

「コンポーネント」ウィンドウには、XQueryマップで使用できるすべてのXQuery関数および演算子が含まれています。これらの関数および演算子は、XQueryマッパーの中央ペインにドラッグ・アンド・ドロップできます。また、ターゲット・ツリー・ノードが「挿入」コンテキスト・メニュー・オプションを使用してすでに作成されている場合は、ターゲット・ツリー・ノードに関数をドラッグ・アンド・ドロップできます。

注意:

また、前述の項の説明に従って、「プロパティ」ウィンドウのXQuery式に、関数および演算子をドラッグ・アンド・ドロップできます。

たとえば、関数はソース・ノードおよびターゲット・ノード間の既存のリンクにドラッグ・アンド・ドロップされると、そのリンクに対応する式の一部となります。パラメータを持たない一部の関数は、中央ペインの空白の領域にドラッグして、ターゲット・ノードと関連付ける必要があります。関数は、相互に連鎖させることもできます。

「コンポーネント」ウィンドウでは、XQuery関数および演算子を次のカテゴリにまとめています。

  • XQuery関数: 集計関数、日付関数、数学関数、文字列関数など、様々なカテゴリのXQuery関数が含まれます。

  • XQueryコンストラクト: If-Then-ElseやFLWORコンストラクトなど、標準のXQueryコンストラクトが含まれます。

  • XQuery演算子: 論理演算子、ノード比較演算子など、様々なカテゴリのXQuery演算子が含まれます。

  • ユーザー定義関数: 現在のXQueryマップ・ファイルで定義したすべての関数と、インポートされたライブラリ・モジュールのすべての関数が含まれます。

  • コンポーネント: このカテゴリに追加できるお気に入りのコンポーネントが含まれます。最近使用した関数も含まれます。

41.1.5 ソース・エディタ

ソース・エディタでは、XQueryマップを直接編集でき、グラフィカル・ビューで直接実行できないタスクも実行できます。

XQueryマッパー・グラフィカル・ビューの左下にある「XQueryソース」タブをクリックして、ソース・エディタを表示します。図41-4に、XQueryマッパーのソース・エディタを示します。

図41-4 XQueryマッパーのソース・エディタ

図41-4の説明が続きます
「図41-4 XQueryマッパーのソース・エディタ」の説明

XQueryソース・ビューには、コード強調表示、コード補完、エラー強調表示、コード折りたたみなどのコード編集機能が用意されています。また、[Ctrl]キーを押しながら関数名、変数名、スキーマまたはスキーマ要素をクリック([Ctrl]キーを押し下げた状態で左マウス・ボタンをクリック)して、その関数、変数、スキーマまたはスキーマ要素それぞれに対応する宣言に移動することもできます。

41.2 XQueryマップ・ファイルの作成

Oracle JDeveloperを使用してXQueryマップを作成します。XQueryマップは、.xqyファイルとしてプロジェクトに含まれています。

XQueryマップは、メイン・モジュールおよびライブラリ・モジュールとして作成できます。メイン・モジュールは、XQueryの実行可能ファイルです。ライブラリ・モジュールは、XQuery関数のグループ化および格納に使用されます。ライブラリ・モジュールをメイン・モジュールにインポートすると、ライブラリ・モジュール内のすべての関数がメイン・モジュールで使用可能になります。

41.2.1 XQueryメイン/ライブラリ・モジュールの作成方法

XQueryメイン・モジュールおよびライブラリ・モジュールを作成する手順は、次のとおりです。

  1. 「ファイル」メニューをクリックします。次のいずれかを選択します。
    • XQueryメイン・モジュールを作成するには、「新規」→「XQueryファイル・バージョン1.0」の順に選択します。「XQueryマップ・メイン・モジュールの作成」ダイアログ・ボックスが表示されます。

      図41-5 メイン・モジュールの作成ダイアログ

      図41-5の説明が続きます
      「図41-5 メイン・モジュールの作成ダイアログ」の説明
    • XQueryライブラリ・モジュールを作成するには、「新規」→「XQueryライブラリ・バージョン1.0」の順に選択します。「XQueryマップ・ライブラリ・モジュールの作成」ダイアログ・ボックスが表示されます。

      図41-6 ライブラリ・モジュールの作成ダイアログ

      図41-6の説明が続きます
      「図41-6 ライブラリ・モジュールの作成ダイアログ」の説明
  2. 「ファイル名」に、作成するXQueryマップ・ファイルの名前を入力します。ファイルには、.xqy拡張子が付いている必要があります。
  3. 「ディレクトリ名」で、マップ・ファイルを作成するディレクトリを指定します。これは通常、プロジェクト・フォルダの「変換」ディレクトリです。右側のツリー・アイコンをクリックして、指定するディレクトリを参照して選択できます。
  4. ライブラリ・モジュールを作成している場合は、「ターゲット・ネームスペースURI」の下でライブラリ・モジュールのターゲット・ネームスペースを選択します。必要に応じて、ネームスペースの「接頭辞」を編集します。

    ライブラリ・モジュールに定義されたすべての関数で、ライブラリのターゲット・ネームスペースが自動的に使用されます。

  5. 「関数の生成」を選択して、XQueryファイルに関数を作成します。これを選択しない場合は空白のXQueryファイルが作成され、後で関数を追加できます。
  6. 「関数名」に、XQueryファイルに作成する関数の名前を入力します。
  7. メイン・モジュールを作成している場合は、関数に関して次の追加のフィールドを選択します。
    • 「NS URI」で関数のネームスペースを指定します。「NS URI」は自動的に移入されます。別のネームスペースを選択することもできます。

    • 「接頭辞」で関数のネームスペース接頭辞を指定します。「接頭辞」は自動的に移入されます。推奨ネームスペース接頭辞を編集することもできます。

  8. 「ソース」セクションに関数のパラメータを追加します。パラメータを追加するには、緑色のプラス記号(+)で表示される「ソースの追加」ボタンをクリックします。「関数パラメータ」ダイアログ・ボックスが表示されます。

    図41-7 「関数パラメータ」ダイアログ

    図41-7の説明が続きます
    「図41-7 「関数パラメータ」ダイアログ」の説明
  9. 「名前」に関数パラメータの名前を入力します。
  10. 「ネームスペースの設定」を選択して、関数パラメータのネームスペースを指定します。

    「NS URI」で、関数パラメータのネームスペースを選択します。ネームスペース接頭辞が「接頭辞」フィールドに表示されます。必要に応じて、これを編集できます。

  11. 「順序タイプ」で、「鉛筆」アイコンで表示されるボタンをクリックし、パラメータのデータ・タイプを指定します。「関数パラメータ・タイプ」ダイアログ・ボックスが表示されます。

    図41-8 「関数パラメータ・タイプ」ダイアログ

    図41-8の説明が続きます
    「図41-8 「関数パラメータ・タイプ」ダイアログ」の説明

    「XMLスキーマ」タブを使用して、関数パラメータのデータ・タイプにXMLスキーマ・タイプを指定します。「型なし」タブを使用して、タイプ指定されていない(非XMLスキーマ・ベース)フォームのパラメータを指定できます。この手順ではXMLスキーマ・タイプを使用します。

  12. 「関数パラメータ・タイプ」ダイアログで、「スキーマ・オブジェクト参照」の右にあるボタン(ツリー・アイコンで表示されます)をクリックして、スキーマ・オブジェクトをデータ・タイプとして選択します。

    これで「タイプ・チューザ」ダイアログ・ボックスが表示されます。「プロジェクトのスキーマ・ファイル」、「XMLスキーマ単純型」および「プロジェクトのWSDLファイル」に埋め込まれたスキーマから選択できます。目的のXMLタイプに移動して「OK」をクリックし、「タイプ・チューザ」ダイアログ・ボックスを閉じます。

  13. 「関数パラメータ・タイプ」ダイアログで、「使用可能なシーケンス・タイプ・フォーム」、「スキーマの場所」および「接頭辞」は、「スキーマ・オブジェクト参照」での選択に応じて自動的に移入されます。オプションで、必要に応じて任意の値を変更します。
  14. 「発生」で、オプションでパラメータの多重度を変更します。「結果XQuery式」に結果のXQuery式が表示されます。
  15. 「OK」をクリックして、「関数パラメータ・タイプ」ダイアログ・ボックスを閉じます。
  16. 「OK」をクリックして、「関数パラメータ」ダイアログ・ボックスを閉じます。
  17. 「XQueryマップ・メイン・モジュールの作成/XQueryマップ・ライブラリ・モジュールの作成」ダイアログで、「ターゲット」セクションの下で関数の結果のデータ・タイプを指定します。「ターゲット」フィールドの右にある「鉛筆」アイコンの付いたボタンをクリックします。

    「関数の結果タイプ」ダイアログ・ボックスが表示されます。このダイアログ・ボックスは「関数パラメータ・タイプ」ダイアログ・ボックスと同じものです。手順12から14の説明のとおりに関数の結果データ・タイプを指定します。

  18. 「OK」をクリックして、「関数の結果タイプ」ダイアログ・ボックスを閉じます。
  19. 「XQueryマップ・メイン・モジュールの作成/XQueryマップ・ライブラリ・モジュールの作成」ダイアログで、「オプション」セクションの下で「XQueryバージョン行の生成」を選択して、XQueryファイルの最初に標準の線を生成します。

    たとえば、ファイルの先頭に次のような行が生成されます。

    xquery version "1.0" encoding "utf-8";

  20. 「スキーマ・タイプ注釈の使用」を選択して、スキーマ・オブジェクト参照のかわりにタイプ注釈を使用する弱タイプのXQueryファイルを作成します。これにより、特定のシナリオでは、XQueryのパフォーマンスが向上する場合があります。

    このオプションを選択解除した場合、XQueryではスキーマ・オブジェクトへの参照を含めることが可能な強タイプのXQueryファイルを生成します。

    タイプ注釈の詳細は、「XQueryパフォーマンス向上のためのタイプ注釈の使用」を参照してください。

  21. 「OK」をクリックします。新規作成されたXQueryマップが、「XQueryマッパー」グラフィカル・ビューに表示されます。XQueryソース・エディタを表示するには、「XQueryソース」をクリックします。

41.3 XQueryマッパーの使用

この項では、次の項目について説明します。

41.3.1 「値マッピング」を使用してリーフ要素値をターゲット・リーフ要素にコピーする方法

リーフ要素の値マップを作成する手順は次のとおりです。

  1. XQueryツールバーで「値マッピング」モードが選択されていることを確認します。
  2. 値をコピーする必要があるソース・リーフ要素を選択します。
  3. 左マウス・ボタンを押したまま、マウス・ポインタをターゲット・リーフ要素にドラッグします。左マウス・ボタンを離します。

    ソース・リーフ・ノードとターゲット・リーフ・ノードをつなぐ実線が表示されます。これで、ソース・リーフ要素は、ターゲット・リーフ要素に値がマッピングされました。

41.3.2 「マッピングの上書き」を使用して要素サブツリーをターゲット・ツリーにコピーする方法

要素サブツリーの上書きマップを作成する手順は次のとおりです。

  1. XQueryツールバーで「マッピングの上書き」モードが選択されていることを確認します。
  2. ソース要素を選択します。この要素は子要素を含んでいても、リーフ要素であってもかまいません。
  3. 左マウス・ボタンを押したまま、マウス・ポインタをターゲット要素にドラッグします。左マウス・ボタンを離します。

    ソース要素のサブツリーがターゲット・ツリーの指定された場所にコピーされます。コピー元のソース・サブツリーのルートとターゲット・サブツリーが実線でつながれます。ターゲット・スキーマとのタイプの不一致がない場合、コピーされた要素とその子要素は、通常のフォントで表示されます。不一致がある場合、要素は下線付きのフォントで表示されます。

41.3.3 「マッピングの追加」を使用して要素サブツリーをターゲット・ツリーにコピーする方法

要素サブツリーの追加マップを作成する手順は次のとおりです。

  1. XQueryツールバーで「マッピングの追加」モードが選択されていることを確認します。
  2. ソース要素を選択します。この要素は子要素を含んでいても、リーフ要素であってもかまいません。
  3. 左マウス・ボタンを押したまま、マウス・ポインタをターゲット要素にドラッグします。左マウス・ボタンを離します。

    ソース要素のサブツリーが選択された要素の子としてターゲット・ツリーに追加されます。ソース・サブツリーのルートとターゲットに追加されたサブツリーのルートが実線でつながれます。ターゲット・スキーマとのタイプの不一致がない場合、コピーされた要素とその子要素は、通常のフォントで表示されます。不一致がある場合、要素は下線付きのフォントで表示されます。

41.3.4 1回のドラッグ・アンド・ドロップ操作で複数の値マッピングを実行する方法

1回のドラッグ・アンド・ドロップ操作で複数の値マッピングを作成する手順は次のとおりです。

  1. XQueryツールバーで「値マッピング」モードが選択されていることを確認します。
  2. 非リーフ・ソース要素を選択します。
  3. 左マウス・ボタンを押したまま、マウス・ポインタをターゲット要素にドラッグします。左マウス・ボタンを離します。

    ソース要素とターゲット要素のスキーマ・タイプが同じ場合、ソース要素およびターゲット要素のすべての子要素に対して個別のマッピングが作成されます。ソース要素とターゲット要素の間にもマッピングが作成されます。

    1つの要素が複数回出現する場合は、その要素に対してFLOWRサイクルが自動的に作成されます。たとえば、次のコード・セグメントでは、各Itemが反復してコピーされます。

    for $Item in $pParam1/Items/Item
                return <Item PartNum="{fn:data($Item/@PartNum)}">
                    <ProductName>{fn:data($Item/ProductName)}</ProductName>
                    <Quantity>{fn:data($Item/Quantity)}</Quantity>
                    <Price>{fn:data($Item/Price)}</Price>
                    <Currency>{fn:data($Item/Currency)}</Currency>
                       </Item> 

41.4 XQuery関数の使用

XQuery関数を既存のXQueryマップに追加できます。「コンポーネント」ウィンドウには、ソース・エディタまたはXQueryマッパーの中央ペインにドラッグ・アンド・ドロップできるXQuery関数のリストが含まれています。

また、「コンポーネント」ウィンドウには、一連のXQueryコンストラクト(FLWORなど)およびXQuery演算子(論理ANDなど)も含まれています。これらのコンストラクトおよび演算子は、ソース・エディタにのみドラッグおよびドロップできます。

41.4.1 XQueryマッパーでのXQuery関数の追加方法

「コンポーネント」ウィンドウからXQueryマッパーの中央ペインにXQuery関数をドラッグ・アンド・ドロップできます。

41.4.1.1 XQuery関数を追加する手順:

  1. 「コンポーネント」ウィンドウが表示されていることを確認します。デフォルト位置はOracle JDeveloperの右上隅です。

    「コンポーネント」ウィンドウが表示されていない場合、「ウィンドウ」メニューから「コンポーネント」を選択します。

  2. 「コンポーネント」ウィンドウで、「XQuery関数」ページを選択します。

  3. 関数を含める「カテゴリ」をクリックします。たとえば、concat関数を追加するには「文字列関数」をクリックします。

  4. 「コンポーネント」ウィンドウからXQueryマッパーの中央ペインに目的の関数をドラッグします。関数を中央ペインにドラッグすると、移動に伴って、関数の出力が様々なターゲット・ノードに接続されます。

    図41-9は、XQueryマッパーの中央ペインにドラッグされた関数を示しています。

    図41-9 XQueryマッパーの中央ペインへの関数のドラッグ

    図41-9の説明が続きます
    「図41-9 XQueryマッパーの中央ペインへの関数のドラッグ」の説明
  5. 関数出力が目的のターゲット・ノードに接続されていることを示すときに、関数を中央ペインにドラッグします。

    注意:

    XQueryマッパーの中央ペインで、既存のマップ線に関数をドロップすることもできます。

    この関数は、ソース(入力)とターゲット(出力)の両方のノードに接続されます。

  6. 関数に追加の入力パラメータが必要な場合は、関数アイコンに警告アイコンが表示されます。ソース・ノードから関数の左端に線をドラッグして、入力パラメータを指定します。

  7. 入力パラメータとして追加する必要のあるソース・ノードがまだある場合は、前述の手順を繰り返します。

41.4.1.2 関数のパラメータを編集する手順:

  1. 中央ペインで関数アイコンをクリックします。関数に対応する式が「プロパティ」ウィンドウに表示されます。

    「プロパティ」ウィンドウは、デフォルトではOracle JDeveloperの右下隅にあります。「プロパティ」ウィンドウが表示されない場合は、「ウィンドウ」メニューの「プロパティ」をクリックすると、「プロパティ」ウィンドウが表示されます。オプションで、「JDeveloper」ウィンドウ内の使いやすい場所に「プロパティ」ウィンドウをドラッグする選択ができます。また、「プロパティ」ウィンドウは必要に応じてサイズを変更できます。

  2. 「プロパティ」ウィンドウの右側のペインに表示された式を編集します。

    「プロパティ」ウィンドウの左側のペインには、現在のスコープで表示可能なすべての変数が含まれた変数ツリーが表示されます。右側の式に変数をドラッグ・アンド・ドロップすることで、関数定義の作成が容易になります。

  3. 「プロパティ」ウィンドウの左上隅にある「コミット」をクリックして、変更内容を保存します。または、「マッパー・リソースに戻す」をクリックして、「プロパティ」ウィンドウで行った変更を元に戻します。

41.5 ライブラリ・モジュールの使用

「XQueryメイン/ライブラリ・モジュールの作成方法」では、ライブラリ・モジュール・ファイルの作成プロセスについて説明しています。ライブラリ・モジュールを使用するには、ライブラリ・モジュールをメイン・モジュールにインポートできます。これによって、ライブラリ・モジュールのすべての関数がメイン・モジュールで使用できるようになります。

41.5.1 ライブラリ・モジュールのインポート方法

メイン・モジュールのソース・エディタからライブラリ・モジュールをインポートできます。

ライブラリ・モジュールをインポートする手順は、次のとおりです。

  1. XQueryマッパーで、XQueryメイン・モジュールのマップ・ファイルが開かれていることを確認します。
  2. 「XQueryマッパー」ウィンドウの左下にある「XQueryソース」タブをクリックして、ソース・エディタに切り替えます。
  3. 「ソース・エディタ」ウィンドウの任意の場所を右クリックします。コンテキスト・メニューが表示されます。
  4. コンテキスト・メニューから「ライブラリ・モジュールのインポート」を選択します。「XQueryライブラリ・ファイルの選択」ダイアログが表示されます。
  5. インポートするXQueryライブラリ・モジュール・ファイルを参照して選択します。「OK」をクリックします。

    ライブラリ・モジュールに対応したimport文がメイン・モジュールのソース・ビューに追加されます。

41.6 ゾーンおよびFLWORコンストラクトの使用

ソース・ビューで、FLWOR (For、Let、Where、Order By、Return)式を作成できます。FLWOR式は、XQueryマッパーのターゲット・ツリーでゾーンとして表示されます。

ゾーンは、FLOWRコンストラクトまたはIf-Then-Else条件付きコンストラクトに関連付けられているターゲット・ツリーの領域を識別します。ゾーンは、ターゲット・ツリーの左側に黄色の大カッコで表示されます。

ゾーンを表す黄色の線にマウスを合せると、線が青色に変わります。FLWORゾーンでは、For-Let句、Where句およびOrder By句に対応した追加のボタンが表示されます。図41-10に、ゾーンが表示されたXQueryのサンプルを示します。

図41-10 XQueryマッパーでのゾーンおよびFLWORゾーン

図41-10の説明が続きます
「図41-10 XQueryマッパーでのゾーンおよびFLWORゾーン」の説明

41.6.1 FLWORコンストラクトの編集方法

ソース・ビューでFLWORコンストラクトを直接編集できます。XQueryマッパーでも、FLOWRコンストラクトを制限付きで編集できます。

XQueryマッパーでFLWORコンストラクトを編集する手順は、次のとおりです。

  1. FLWORゾーンを表す黄色の大カッコをクリックして、ゾーンを選択します。黄色の大カッコが青色に変わり、追加のボタンが表示されます。これらのボタンは、FLWORコンストラクトの様々な句に対応しています。
  2. 「FL」ボタンをクリックして、FLWORコンストラクトのFor-Letプロパティを編集します。「プロパティ」ウィンドウにFor-Let句のプロパティが表示されます。

    「プロパティ」ウィンドウで「ヘルプ」アイコンをクリックして、For-Letプロパティの編集についてのヘルプを表示します。

  3. 「W」ボタンをクリックして、FLWORコンストラクトのWhereプロパティを編集します。

    「プロパティ」ウィンドウでは、Where式を直接編集できます。「プロパティ」ウィンドウの左側のペインから変数をドラッグ・アンド・ドロップすることもできます。

  4. 「O」ボタンをクリックして、FLWORコンストラクトのOrder Byプロパティを編集します。

    「プロパティ」ウィンドウでは、Order By式を直接編集できます。「プロパティ」ウィンドウの左側のペインから変数をドラッグ・アンド・ドロップすることもできます。

41.7 XQueryパフォーマンス向上のためのタイプ注釈の使用

XQueryが実行されると、XQueryエンジンによって、XQueryを実行する前にXQueryファイル内のスキーマ・タイプの検証が実行されます。これによって、一部のアプリケーションでパフォーマンスのオーバーヘッドが発生する場合があります。

パフォーマンスのためにXQuery関数を最適化する必要がある場合は、タイプ注釈を使用してXQueryファイルでスキーマ情報を指定します。タイプ注釈を使用すると、スキーマ・タイプの定義をXQuery実行エンジンから隠すことができます。スキーマ定義はXqueryマッパーには表示されるため、XQueryマップを通常どおりに編集できます。

XQueryファイルでタイプ注釈を使用するには、新しいXQueryファイルの作成時に、「XQueryマップ・メイン・モジュールの作成」/「XQueryマップ・ライブラリ・モジュールの作成」ダイアログで「スキーマ・タイプ注釈の使用」を選択します。XQueryファイルの作成の詳細は、「XQueryメイン/ライブラリ・モジュールの作成方法」を参照してください。

XQueryファイルのタイプ注釈は、標準のXQueryコメントのように表示されます。標準のXQueryコメントは、カッコとコロンで区切られますが、タイプ注釈では、カッコと二重コロンが使用されます。そのため、次のようになります。

(: This is an XQuery comment :)
(:: This is a type annotation ::)

タイプ注釈を使用するXQueryファイルには、ファイルの最初のバージョン宣言の直後に次のようなバージョン注釈があります。

(:: OracleAnnotationVersion "1.0" ::)

次の例では、いくつかのXQueryコンストラクトをタイプ注釈のあるものとないもので比較します。

  • スキーマのインポート(タイプ注釈なし):

    import schema namespace ns1="http://www.oracle.com/pcbpel/po" at "../Schemas/PurchaseOrder.xsd";
    

    スキーマのインポート(タイプ注釈あり):

    declare namespace ns1="http://www.oracle.com/pcbpel/po";
    (:: import schema at "../Schemas/PurchaseOrder.xsd" ::)
    
  • 変数宣言(タイプ注釈なし):

    declare variable $test_param as schema-element(ns1:PurchaseOrder) external;
    

    変数宣言(タイプ注釈あり):

    declare variable $test_param as element() 
    (:: schema-element(ns1:PurchaseOrder) ::) external;
    

41.8 XQueryマップのテスト

Oracle JDeveloper内でXQueryマップの実行をテストできます。設計時にXQueryをテストすると実行時エラーの予防に役立ちます。

41.8.1 XQueryマップのテスト方法

XQueryマップをテストするには、「ソース・エディタ」ビューを使用する必要があります。

XQueryマップをテストする手順は、次のとおりです。

  1. XQueryマッパーで、XQueryメイン・モジュールが開かれていることを確認します。
  2. 「ソース・エディタ」ビューを使用していない場合は、「XQueryマッパー」ウィンドウ下部にある「XQueryソース」タブをクリックして、ソース・エディタに切り替えます。
  3. ソース・エディタの任意の場所を右クリックします。表示されるコンテキスト・メニューから「XQueryの実行」を選択します。

    「XQueryの実行」ダイアログが表示されます。図41-11に、「XQueryの実行」ダイアログを示します。

    図41-11 「XQueryの実行」ダイアログ

    図41-11の説明が続きます
    「図41-11 「XQueryの実行」ダイアログ」の説明
  4. 「ソース変数」セクションに表示されるすべてのソース変数に値を指定します。

    単純なデータ型の場合は、「値」フィールドで値を直接指定できます。ソース変数で複雑なスキーマが使用されている場合は、省略記号(. . .)ボタンをクリックすると「変数の編集」ダイアログが表示されます。既存のXMLファイルを使用して変数のテスト・データを指定するか、テスト・データでXMLファイルを作成できます。「ヘルプ」をクリックすると、「変数の編集」ダイアログの入力に関するヘルプが表示されます。

  5. テスト結果を表示するために新しいタブを使用する場合は、「JDeveloperの新規タブで結果を開く」を選択します。結果ファイルを保存するには「ターゲット・ファイルの保存」を選択します。これらのオプションは、1つまたは両方を選択する必要があります。
  6. 「ターゲット・ファイル名」の右にある「保存」アイコンをクリックして、結果データを保存する結果ファイルを指定します。

    前の手順で「ターゲット・ファイルの保存」を選択しなかった場合でも、「ターゲット・ファイル名」を指定する必要があります。

  7. 必要に応じて「自動保存構成」を選択して、XQuery実行時に構成設定が自動的に保存されるようにします。次回XQueryの実行を試みると、構成設定が取得されます。
  8. 「XQueryの実行」ダイアログで行った設定を保存する場合は、「構成の保存」をクリックします。
  9. 以前保存した構成設定を削除する場合は、「構成の削除」をクリックします。
  10. 「実行」をクリックしてXQueryを実行します。