XML メッセージでのデータの変換

データをある形式から別の形式へ変換しなければならないことがしばしばあります。 たとえば、1 つのメッセージでは、項目のタイプが名前によって示されており、 別のメッセージでは、項目が番号によって示されていることがあります。 以下に例を示します。

Type Name          Type Code

Confectionary      2000
Newspapers         3000
Hardware           4000

次の入力メッセージをご覧ください。

<Data>
  <Items>
       <Item>
      <Cat>1000</Cat>
      <Description>Milk Chocolate Bar</Description>
      <Type>Confectionary</Type>
       </Item>
       <Item>
      <Cat>1001</Cat>
      <Description>Daily Newspaper</Description>
      <Type>NewsPapers</Type>
       </Item>
       <Item>
      <Cat>1002</Cat>
      <Description>Kitchen Sink</Description>
      <Type>Hardware</Type>
       </Item>
  </Items>  <TranslateTable>
    <Translate>
      <Name>Confectionary</Name>
      <Number>2000</Number>
    </Translate>
    <Translate>
      <Name>NewsPapers</Name>
      <Number>3000</Number>
    </Translate>
    <Translate>
      <Name>Hardware</Name>
      <Number>4000</Number>
    </Translate>
  </TranslateTable>
</Data>

このメッセージには 2 つのセクションがあります。最初のものは項目のリストで、それぞれの項目には、 カタログ番号とタイプがあります。2 番目のものは、記述タイプ名と数値タイプ・コードとの間の変換テーブルです。 以下の変換で Compute ノードを組み込む場合、

SET OutputRoot.XML.Result.Items.Item[] = 
      (SELECT M.Cat, M.Description, T.Number As Type
          FROM 
              InputRoot.XML.Data.Items.Item[]               As M,
              InputRoot.XML.Data.TranslateTable.Translate[] As T
          WHERE M.Type = T.Name
   );

次の出力メッセージが生成されます。

  <Result>
  <Items>
       <Item>
      <Cat>1000</Cat>
      <Description>Milk Chocolate Bar</Description>
      <Type>2000</Type>
       </Item>
       <Item>
      <Cat>1001</Cat>
      <Description>Daily Newspaper</Description>
      <Type>3000</Type>
       </Item>
       <Item>
      <Cat>1002</Cat>
      <Description>Kitchen Sink</Description>
      <Type>4000</Type>
       </Item>
  </Items></Result>

結果では、それぞれのタイプ名が、それに対応するコードに変換されています。 この例では、データおよび変換テーブルの両方が、同じメッセージ・ツリーにありましたが、 必ずしもそうでなければならないわけではありません。 例えば、変換テーブルがデータベース内にコード化されたり、 前出の Compute ノードによりローカル環境でセットアップされたりする場合があります。

関連概念
メッセージ・フロー
ESQL
メッセージのモデル化

関連タスク
メッセージ・フローの設計
メッセージ・フローの内容の定義
ESQL ファイルの管理

関連資料
Compute ノード
Database ノード
Filter ノード
ESQL
SELECT 関数
SET ステートメント