MRM 메시지 및 비트스트림에 대한 작업

PARSE 절이 있는 CREATE FIELD 문 또는 ASBITSTREAM 함수를 사용할 경우 다음 사항에 유의하십시오.

ASBITSTREAM 함수

메시지 트리를 비트스트림으로 구문 분석하기 위해 구문 분석기 모드 옵션을 RootBitStream으로 설정하여 ASBITSTREAM 함수를 코딩할 경우, 정상적인 방법으로 대상 요소의 하위에서 빌드되어 메시지 형식에 지정된 형식의 MRM 문서가 결과로 생성됩니다.

대상 요소는 메시지 세트에 정의된 사전정의 메시지여야 하거나, XML 물리적 형식을 사용할 경우 자체 정의 메시지가 될 수 있습니다. 이 알고리즘은 정상 출력 비트스트림을 생성하는 데 사용된 알고리즘과 동일합니다. 이런 식으로 확보한 올바른 형식의 비트스트림은 PARSE절이 있는 CREATE문을 사용하여 원래의 트리를 다시 작성하는 데 사용할 수 있습니다.

메시지 트리를 비트스트림으로 구문 분석하기 위해 구문 분석기 모드 옵션을 FolderBitStream으로 설정하고 ASBITSTREAM 함수를 코딩하는 경우, 생성된 비트스트림은 대상 요소 및 하위에서 빌드된 MRM 문서입니다. RootBitStream 모드와 달리, 대상 요소는 메시지를 표시할 필요가 없습니다. 대상 요소는 메시지에 사전정의 요소를 표시하거나 메시지에 자체 정의 요소를 표시할 수 있습니다.

MRM 구문 분석기가 메시지를 올바르게 구문 분석할 수 있도록, 메시지에서 메시지 내의 대상 요소까지의 경로를 메시지 유형에 지정해야 합니다. 경로 형식은 메시지 유형 접두부를 사용하지 않는 것을 제외하고 메시지 경로에 사용되는 형식과 같습니다.

예를 들어, 다음 메시지 구조를 사용한다고 가정합시다.
          메시지
              elem1
                   elem11
                   elem12

요소 elem12와 해당되는 하위 요소를 표시하는 서브트리를 직렬화하려면 메시지 유형'message/elem1/elem12' 메시지 경로를 지정하십시오.

경로의 요소가 네임스페이스로 규정될 경우, 메시지 경로에서 {} 문자 사이에 네임스페이스 URI를 지정하십시오. 예를 들어 요소 elem1이 네임스페이스 'http://www.ibm.com/temp'에 의해 규정될 경우 메시지 경로로 'message/{http://www.ibm.com/temp}elem1/elem12'를 지정하십시오.

이 모드는 MRM 구문 분석기에서 소유한 임의의 서브트리에 대한 비트스트림 설명을 확보할 때 사용할 수 있습니다. 이 모드에 있을 때, 물리적 형식이 XML이면 생성되는 XML 비트스트림이 메시지 세트의 메시지에 대해 지정된 '루트 태그 이름'으로 묶이지 않습니다. 메시지 세트 등록 정보에서 억제되지 않아도 XML 선언이 작성되지 않습니다.

이와 같은 방식으로 확보한 비트스트림은 PARSE 절이 있는 CREATE문을 사용하여(FolderBitStream 모드 사용) 원래의 트리를 다시 작성하는 데 사용할 수 있습니다.

PARSE 절이 있는 CREATE문

비트스트림을 메시지 트리로 구문 분석하기 위해 구문 분석기 모드 옵션을 RootBitStream으로 설정하여 PARSE 절이 있는 CREATE문을 코딩하는 경우, 예상되는 비트스트림은 일반 MRM 문서입니다. 문서의 각 필드에 대해 트리에서 필드가 작성됩니다. 이 알고리즘은 입력 노드에서 비트스트림을 구문 분석할 때 사용하는 알고리즘과 같습니다.

비트스트림을 메시지 트리로 구문 분석하기 위해 구문 분석기 모드 옵션을 FolderBitStream으로 설정하여 PARSE 절이 있는 CREATE문을 코딩하는 경우, 예상되는 비트스트림은 메시지 형식에 지정된 형식의 문서입니다. 메시지 형식은 직접 지정하거나 상속됩니다. RootBitStream 모드와 달리, 문서 루트는 MRM 메시지를 표시할 필요가 없습니다. 문서 루트는 메시지에 사전정의 요소를 표시하거나 메시지에 자체 정의 요소를 표시할 수 있습니다.

MRM 구문 분석기가 메시지를 올바르게 구문 분석할 수 있도록, 메시지에서 메시지 내의 대상 요소까지의 경로를 메시지 유형에 지정해야 합니다. 메시지 경로 형식은 위에 설명된 ASBITSTREAM 함수에 사용되는 형식과 같습니다.

FolderBitStream 모드에서 PARSE 절이 있는 CREAT 문 및 ASBITSTREAM 함수를 사용하는 예

다음 ESQL은 위에 설명된 메시지 정의를 사용합니다. ESQL은 ASBITSTREAM 함수를 사용하여 입력 트리의 부분을 직렬화한 후 PAESE 절이 있는 CREATE문을 사용하여 출력 트리에 서브트리를 재작성합니다. 입력 메시지 및 해당 출력 메시지가 아래 ESQL에 표시되어 있습니다.

CREATE COMPUTE MODULE DocSampleFlow_Compute
       CREATE FUNCTION Main() RETURNS BOOLEAN
	BEGIN
CALL CopyMessageHeaders();
		
		-- Set the options to be used by ASBITSTREAM and CREATE ... PARSE
		-- to be FolderBitStream and enable validation
		DECLARE parseOptions INTEGER BITOR(FolderBitStream, ValidateContent,
      							           ValidateValue, ValidateLocalError);

		-- Serialise the elem12 element and its children from the input bitstream
		-- into a variable
      	DECLARE subBitStream BLOB
        	CAST(ASBITSTREAM(InputRoot.MRM.elem1.elem12
        		 OPTIONS parseOptions
        		 SET 'DocSample'
        		 TYPE 'message/elem1/elem12'
        		 FORMAT 'XML1') AS BLOB);

        -- Set the value of the first element in the output tree  		
       	SET OutputRoot.MRM.elem1.elem11 = 'val11';
       	
       	-- Parse the serialized sub-tree into the output tree
        IF subBitStream IS NOT NULL THEN
            CREATE LASTCHILD OF OutputRoot.MRM.elem1
                PARSE ( subBitStream
                        OPTIONS parseOptions
                        SET 'DocSample'
                        TYPE 'message/elem1/elem12'
                        FORMAT 'XML1');
                END IF;
       	
		-- Convert the children of elem12 in the output tree to uppercase
		SET OutputRoot.MRM.elem1.elem12.elem121 =
			UCASE(OutputRoot.MRM.elem1.elem12.elem121);
			
		SET OutputRoot.MRM.elem1.elem12.elem122 =
			UCASE(OutputRoot.MRM.elem1.elem12.elem122);
			
        -- Set the value of the last element in the output tree  		
       	SET OutputRoot.MRM.elem1.elem13 = 'val13';				

               RETURN TRUE;
	END;

CREATE PROCEDURE CopyMessageHeaders() BEGIN
DECLARE I INTEGER 1;
DECLARE J INTEGER CARDINALITY(InputRoot.*[]);
WHILE I < J DO
SET OutputRoot.*[I] = InputRoot.*[I];
        SET I = I + 1;
END WHILE;
	END;

  END MODULE;
Input message :
<메시지>
    <elem1>
        <elem11>value11</elem11>
        <elem12>
            <elem121>value121</elem121>
            <elem122>value122</elem122>
        </elem12>
        <elem13>value13</elem13>
    </elem1>
</message>
Output message :
<메시지>
    <elem1>
        <elem11>val11</elem11>
        <elem12>
            <elem121>VALUE121</elem121>
            <elem122>VALUE122</elem122>
        </elem12>
        <elem13>val13</elem13>
    </elem1
</message
관련 개념
메시지 플로우 개요
ESQL 개요
메시지 모델링
관련 태스크
메시지 플로우 설계
메시지 플로우 컨텐츠 정의
ESQL 파일 관리
메시지 모델 개발
관련 참조
Compute 노드
Database 노드
Filter 노드
ASBITSTREAM 함수
CREATE문
SET문
주의사항 | 등록상표 | 다운로드 | 라이브러리 | 지원 | 피드백
Copyright IBM Corporation 1999, 2006 마지막 갱신 날짜: 2006/08/21
ac20701_