WebSphere Message Broker バージョン 8.0.0.5 オペレーティング・システム: AIX、HP-Itanium、Linux、Solaris、Windows、z/OS

製品の最新バージョンについては、IBM Integration Bus バージョン 9.0 をご覧ください。

単純なメッセージの変換

Compute ノードに ESQL をコーディングする際に、SELECT 関数を使用して単純なメッセージを変換できます。

このトピックでは、単純メッセージ変換の例が示されています。 例を考慮し、独自にご使用になるために変更を加えてください。 入力は、すべて サンプル・メッセージに基づいています。

次の ESQL をご覧ください。

 SET OutputRoot.XMLNS.Data.Output[] =
    (SELECT R.Quantity, R.Author FROM InputRoot.XMLNS.Invoice.Purchases.Item[] AS R
    );

この ESQL コードが Invoice メッセージを処理すると、次の出力メッセージが生成されます。

<Data>
  <Output>
     <Quantity>2</Quantity>
     <Author>Neil Bradley</Author>
  </Output>
  <Output>
     <Quantity>1</Quantity>
     <Author>Don Chamberlin</Author>
  </Output>
  <Output>
     <Quantity>1</Quantity>
     <Author>Philip Heller, Simon Roberts</Author>
  </Output>
</Data>

それぞれの Item フィールドに 1 つずつ、3 つの Output フィールドが存在します。これは、SELECT が結果リスト内に、FROM リストによって記述された各項目に対して、項目を 1 つずつ作成するためです。 各 Output フィールド内には、SELECT 文節で指定されている各フィールドのためのフィールドが作成されます。 これらのフィールドは着信メッセージにおける順序ではなく、SELECT 文節で指定されている順序で配列されています。

最後の AS キーワードの後にある R は、相関名として知られています。 これは、FROM 文節によってアドレッシングされたフィールドのそれぞれを順番に表すローカル変数です。 選択された名前には意味はありません。 要約すると、この単純な変換は、次の 2 つの事柄を行います。

  1. 不要なフィールドを廃棄する。
  2. フィールドの順序を確定する。

以下のプロシージャー・アルゴリズムで同じ変換を実行できます。

DECLARE i INTEGER 1;
DECLARE count INTEGER CARDINALITY(InputRoot.XMLNS.Invoice.Purchases.Item[]);

WHILE (i <= count)
   SET OutputRoot.XMLNS.Data.Output[i].Quantity = InputRoot.XMLNS.Invoice.Purchases.Item[i].Quantity;
   SET OutputRoot.XMLNS.Data.Output[i].Author   = InputRoot.XMLNS.Invoice.Purchases.Item[i].Author;
   SET i = i+1;
END WHILE;

以上の例から分かるように、SELECT を使用した変換のほうが、はるかに簡潔です。 また、そのほうがより速く実行されます。

次の例は、より高度な変換を示しています。

SET OutputRoot.XMLNS.Data.Output[] =
    (SELECT R.Quantity AS Book.Quantity, 
            R.Author   AS Book.Author 
            FROM InputRoot.XMLNS.Invoice.Purchases.Item[] AS R
    );

この変換では、AS 文節が SELECT 文節内の各項目に関連付けられています。 この文節は、結果内の各フィールドに、入力から継承したフィールド名ではなく、明示的な名前を与えます。 これらの名前は、例に示されたようなパス (つまり、ドットで区切られた名前のリスト) であってもかまいません。 出力メッセージの構造は、入力メッセージの構造とは異なることがあります。 同じ Invoice メッセージを使用すると、結果は次のようになります。

<Data>
  <Output>
    <Book>
      <Quantity>2</Quantity>
      <Author>Neil Bradley</Author>
    </Book>
  </Output>
  <Output>
    <Book>
      <Quantity>1</Quantity>
      <Author>Don Chamberlin</Author>
    </Book>
  </Output>
  <Output>
    <Book>
      <Quantity>1</Quantity>
      <Author>Philip Heller, Simon Roberts</Author>
    </Book>
  </Output>
</Data> 

SELECT 文節内の式は、どれだけ複雑であってもかまわず、特に制約事項はありません。 これらには演算子、関数、およびリテラルを組み込むことができ、また、相関名に関連しない変数またはフィールドを参照することができます。 次に、さらに複雑な式の例を示します。

SET OutputRoot.XMLNS.Data.Output[] =
    (SELECT 'Start'                          AS Header,
            'Number of books:' || R.Quantity AS Book.Quantity, 
            R.Author || ':Name and Surname'  AS Book.Author,
            'End'                            AS Trailer
            FROM InputRoot.XMLNS.Invoice.Purchases.Item[] AS R
    );

同じ Invoice メッセージを使用すると、この場合の結果は次のようになります。

<Data>
 <Output>
  <Header>Start</Header>
  <Book>
   <Quantity>Number of books:2</Quantity>
   <Author>Neil Bradley:Name and Surname</Author>
  </Book>
  <Trailer>End</Trailer>
 </Output>
 <Output>
  <Header>Start</Header>
  <Book>
   <Quantity>Number of books:1</Quantity>
   <Author>Don Chamberlin:Name and Surname</Author>
  </Book>
  <Trailer>End</Trailer>
 </Output>
 <Output>
  <Header>Start</Header>
  <Book>
   <Quantity>Number of books:1</Quantity>
   <Author>Philip Heller, Simon Roberts:Name and Surname</Author>
  </Book>
  <Trailer>End</Trailer>
 </Output>
</Data>

上記のとおり、SELECT 文節の AS 文節には、結果内に作成されるフィールドの絶対パス名を記述したパスを含めることができます。 これらのパスはまた、作成されるフィールドのタイプを指定することもできます (パスの場合には標準の指定)。 フィールド・タイプを指定した変換例を以下に示します。 この場合、XML タグ付きデータは、XML 属性に変換されます。

SET OutputRoot.XMLNS.Data.Output[] =
    (SELECT R.Quantity.* AS Book.(XML.Attribute)Quantity, 
            R.Author.*   AS Book.(XML.Attribute)Author
            FROM InputRoot.XMLNS.Invoice.Purchases.Item[] AS R
    );

同じ Invoice メッセージを使用すると、結果は次のようになります。

<Data>
 <Output>
  <Book Quantity="2" Author="Neil Bradley"/>
 </Output>
 <Output>
  <Book Quantity="1" Author="Don Chamberlin"/>
 </Output>
 <Output>
  <Book Quantity="1" Author="Philip Heller, Simon Roberts"/>
 </Output>
</Data>

最後に、WHERE 文節を使用して、結果のいくつかを除去することができます。 次の例では、WHERE 文節を使用して、特定の基準に合う結果を除去します。 結果全体が組み込まれるか、または除外されます。

SET OutputRoot.XMLNS.Data.Output[] =
    (SELECT R.Quantity AS Book.Quantity, 
            R.Author   AS Book.Author
            FROM InputRoot.XMLNS.Invoice.Purchases.Item[] AS R
            WHERE R.Quantity = 2
    );

同じ入力メッセージを使用すると、結果は次のようになります。

<Data>
 <Output>
  <Book>
   <Quantity>2</Quantity>
   <Author>Neil Bradley</Author>
  </Book>
 </Output>
</Data>
特記事項 | 商標 | ダウンロード | ライブラリー | サポート | フィードバック

Copyright IBM Corporation 1999, 2014Copyright IBM Corporation 1999, 2014.

        
        最終更新:
        
        最終更新: 2015-02-28 17:47:30


タスク・トピックタスク・トピック | バージョン 8.0.0.5 | ak05740_