단순 XML 메시지 변환

Compute 노드에 대해 ESQL을 코드화할 때, SELECT문을 사용하여 단순 메시지를 변환하십시오.

다음 예를 검토하여 사용자 용도에 맞게 수정하십시오. 이 예는 모두 입력으로 사용된 송장(invoice) 메시지에 기초합니다.

다음의 ESQL을 고려해 보십시오.

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

송장(invoice) 메시지는 이 ESQL로 처리되며, 다음 출력 메시지가 생성됩니다.

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

각 항목 필드에 하나씩 세 개의 Output 필드가 있습니다. 기본적으로 SELECT는 FROM 목록에 의해 설명된 각 항목에 대해 결과 목록에 한 항목을 작성하기 때문입니다. 각 Output 필드 내에는 SELECT절에 이름 지정된 각 필드에 대한 Field가 있으며 수신되는 메시지에서의 순서가 아니라 SELECT 내에 지정된 순서로 이루어져 있습니다.

마지막 AS 키워드에 의해 도입된 R은 상관 이름으로 알려져 있습니다. 차례대로 FROM절에 의해 언급된 각 필드를 나타내는 로컬 변수입니다. 선택된 이름은 중요하지 않습니다. 간단하게 말해서 이 단순 변환은 두 가지 역할을 합니다.

  1. 원하지 않는 필드를 제거합니다.
  2. 필드의 순서를 보장합니다.

다음은 절차 알고리즘에 의해 구현된 동일한 변환입니다.

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

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

이러한 예에서는 변환의 SELECT 버전이 훨씬 간단함을 보여줍니다. 또한 보다 빠르게 실행됩니다.

다음 예는 보다 고급화된 변환입니다.

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

이 변환에는 SELECT절의 각 항목과 연관된 AS절이 있습니다. 결과의 각 필드에 입력에서 상속되는 이름이 아니라 명확한 이름을 부여합니다. 이러한 이름은 예에 표시된 대로 경로(즉, 점으로 분리된 이름 목록)일 수 있습니다. 따라서 출력 메시지의 구조는 입력 메시지의 구조와 임의로 다를 수 있습니다. 동일한 송장 메시지를 사용하는 경우, 결과는 다음과 같습니다.

<Data>
 <Output>
  <Book>
   <Quantity>2</Quantity>
   <Author>Neil Bradley</Author>
  </Book>
 </Output>
</Data> 
<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.XML.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.XML.Invoice.Purchases.Item[] AS R
    );

동일한 송장 메시지를 사용하는 경우, 결과는 다음과 같습니다.

<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.XML.Data.Output[] =
        (SELECT R.Quantity.* AS Book.(XML.Attribute)Quantity, 
                        R.Author.*   AS Book.(XML.Attribute)Author
                        FROM InputRoot.XML.Invoice.Purchases.Item[] AS R
    );

동일한 송장 메시지를 사용하는 경우, 결과는 다음과 같습니다.

<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.XML.Data.Output[] =
        (SELECT R.Quantity AS Book.Quantity, 
                        R.Author   AS Book.Author
                        FROM InputRoot.XML.Invoice.Purchases.Item[] AS R
                        WHERE R.Quantity = 2
     );

동일한 입력 메시지를 사용하는 경우, 결과는 다음과 같습니다.

<Data>
 <Output>
  <Book>
   <Quantity>2</Quantity>
   <Author>Neil Bradley</Author>
  </Book>
 </Output>
</Data>
관련 개념
메시지 플로우 개요
ESQL 개요
메시지 모델링
관련 태스크
메시지 플로우 설계
메시지 플로우 컨텐츠 정의
ESQL 파일 관리
관련 참조
Compute 노드
Database 노드
Filter 노드
ESQL 참조
CARDINALITY 함수
DECLARE문
SELECT 함수
SET문
WHILE문
메시지 예
주의사항 | 등록상표 | 다운로드 | 라이브러리 | 지원 | 피드백
Copyright IBM Corporation 1999, 2006 마지막 갱신 날짜: 2006/08/21
ak05740_