XMLNSC 구문 분석기를 사용하여 메시지 조작

XMLNSC 도메인은 XMLNS 도메인의 확장이고, XMLNS 도메인은 원래 XML 도메인의 확장이었습니다.

XMLNS 도메인의 목적은 네임스페이스 지원을 추가하는 것이었으며 호환성 이유로 기존 응용프로그램이 영향을 받지 않도록 새 도메인이 작성되었습니다. 새 XMLNSC 도메인의 목적은 보다 압축된 트리를 빌드하는 것이므로 대형 메시지를 핸들링할 때 메모리를 덜 사용하도록 하십시오. 역시, 호환성 이유로 기존 응용프로그램에 영향을 주지 않도록 새 도메인이 추가되었습니다.

메시지 트리 구조

XMLNSC 구문 분석기는 XMLXMLNS 구문 분석기에 사용되는 별도의 이름 및 값 요소가 아닌, 단일 이름-값 요소로 태그가 있는 텍스트를 표시하여 보다 압축된 트리를 확보합니다. 다음 메시지를 고려해 보십시오.
<Folder1>
<Folder2 Attribute1='AttributeValue1'>
<Field1><Value1></Field1>
<Field2 Attribute2='AttributeValue2'><Value2></Field2>
</Folder2>
</Folder1>

XMLNSC 도메인에서, 이는 두 개의 이름 요소(Folder1Folder2)와 네 개의 이름-값 요소(Attribute1, Field1, Field2, Attribute2)로 표시됩니다.

XMLXMLNS 도메인은 두 개의 필드가 각각 하위 값 요소가 있는 이름 요소로 표시된다는 점에서 다릅니다. 이는 작은 차이일 수 있지만 메시지는 종종 너무 많은 가지 필드를 포함합니다. 예를 들면 다음과 같습니다.
<Folder1>
<Folder2>
<Field1><Value1></Field1>
<Field2><Value2></Field2>
....
<Field100><Value100></Field100>
</Folder2>
</Folder1>

이 경우, XMLNSC 구문 분석기는 두 개의 이름 및 100개의 이름-값 요소로 메시지를 표시합니다. 반면 XMLXMLNS 구문 분석기는 102개의 이름 요소와 100개의 값 요소, 그리고 형식화된 메시지에서 공백을 표시하기 위한 103개의 값 요소가 사용됩니다.

속성 및 태그가 붙은 텍스트

두 속성 및 태그가 붙은 텍스트는 이름-값 요소로 표시되므로, 요소 유형의 사용으로 구별됩니다. 유형을 지정하지 않을 경우 태그가 붙은 텍스트로 간주됩니다. 따라서 위의 첫 번째 예에서 메시지는 SQL문에 의해 생성될 수 있습니다.
SET Origin.Folder1.Folder2.(XMLNSC.Attribute)Attribute1 = 
'AttributeValue1';
SET Origin.Folder1.Folder2.Field1 = ‘Value1’;
SET Origin.Folder1.Folder2.(XMLNSC.Attribute)Attribute2 = 
'AttributeValue2';
SET Origin.Folder1.Folder2.Field2 = ‘Value2’;

선행 XML은 XML 구문 분석기에서 사용하는 SQL과 거의 동일하게 보이지만 특히, 사용되는 유형 상수는 XMLNSC 구문 분석기에 속하는 상수입니다. 다른 구문 분석기에 속하는 상수를 사용할 경우(예: XML) 유사하게 이름 지정된 상수(예: XML.Attribute)가 다른 값을 가지고 있으므로 예상치 못한 결과가 발생할 수 있습니다.

혼합 텍스트 핸들링

디폴트로, 혼합 텍스트는 단지 형식화되고 의미가 없으면 간단히 제거됩니다.

그러나, 구문 분석 중에 여는 태그와 닫는 태그(즉, open->open, close->close, 및 close->open) 사이에 있는 텍스트를 제외한 다른 텍스트는 단일 Value 요소로 표시하는 모드가 제공됩니다. 값 요소 유형은 PCDATA, CDATA 및 혼성(이 두 가지의 혼합)을 지원합니다.

여전히 값 가져오기 및 설정에 대한 특수 구문 요소 작동은 없습니다. Value 요소는 SQL에서 명시적으로 주소 지정하여야 액세스할 수 있습니다. 다음의 추가 상수는 이 목적으로 제공됩니다.
XMLNSC.Value
XMLNSC.PCDataValue
XMLNSC.CDataValue
XMLNSC.HybridValue
모드는 새 메시지 옵션 값에 의해 제어됩니다. 이 목적을 위해 다음과 같은 상수가 제공됩니다.
XMLNSC.MixedContentRetainNone = 0x0000000000000000
XMLNSC.MixedContentRetainAll  = 0x0001000000000000
이 상수는 SQL CREATE문(PARSE 섹션) 및 ASBITSTREAM 함수 둘다의 옵션 절에 사용될 수 있습니다. 예를 들면 다음과 같습니다.
DECLARE X BLOB ASBITSTREAM(InputRoot.XMLNSC.Data OPTIONS 
XMLNSC.MixedContentRetainAll);
...
CREATE LASTCHILD OF outputRoot PARSE(X OPTIONS 
XMLNSC.MixedContentRetainNone);

주석 핸들링

디폴트로, 주석 역시 단지 보조 정보이고 의미가 없는 경우 간단히 제거됩니다.

그러나 구문 분석할 때 문서에 발생하는 주석(문서 설명 자체가 아닌)이 Comment 이름을 사용하여 이름-값 요소로 표시되는 모드가 제공됩니다. 다음의 추가 주석은 이 목적으로 제공됩니다.
XMLNSC.Comment
모드는 새 메시지 옵션 값에 의해 제어됩니다. 다음의 상수는 이 목적으로 제공됩니다.
XMLNSC.CommentsRetainNone = 0x0000000000000000
XMLNSC.CommentsRetainAll  = 0x0002000000000000
예를 들면 다음과 같습니다.
DECLARE X BLOB ASBITSTREAM(InputRoot.XMLNSC.Data OPTIONS 
XMLNSC.CommentsRetainAll);
...
CREATE LASTCHILD OF outputRoot PARSE(X OPTIONS XMLNSC.CommentsRetainNone);

처리 지시사항 핸들링

디폴트로, 처리 지시사항 역시 단지 보조 정보이고 의미가 없는 경우 간단히 제거됩니다.

그러나 구문 분석할 때 문서에 발생하는 처리 지시사항(문서 설명 자체가 아닌)이 적절한 이름 및 값을 사용하여 이름-값 요소로 표시되는 모드가 제공됩니다. 다음의 추가 상수는 이 목적으로 제공됩니다.
XMLNSC.ProcessingInstruction
모드는 새 메시지 옵션 값에 의해 제어됩니다. 다음의 상수는 이 목적으로 제공됩니다.
XMLNSC.ProcessingInstructionsRetainNone = 0x0000000000000000
XMLNSC.ProcessingInstructionsRetainAll  = 0x0004000000000000
예를 들면 다음과 같습니다.
DECLARE X BLOB ASBITSTREAM(InputRoot.XMLNSC.Data 
OPTIONS XMLNSC.ProcessingInstructionsRetainAll);
...
CREATE LASTCHILD OF outputRoot PARSE(X OPTIONS 
XMLNSC.ProcessingInstructionsRetainNone);

기존 플로우 이주

새 도메인이 도입되었다는 사실은 XMLNSC 구문 분석기를 사용할 때 경로에서 XMLNSC를 사용하도록 ESQL을 다시 코딩해야 함을 의미합니다. 다음 예를 고려하십시오.
SET OutputRoot.XML.Person.Salary    = CAST(InputRoot.XML.Person.Salary AS INTEGER) * 3;
SET OutputRoot.XMLNS.Person.Salary  = CAST(InputRoot.XMLNS.Person.Salary AS INTEGER) * 3;
SET OutputRoot.XMLNSC.Person.Salary = CAST(InputRoot.XMLNSC.Person.Salary AS INTEGER) * 3;
각각의 경우에 입력 큐에서 예상되고 출력 큐에 작성된 XML 비트스트림의 형식은 다음과 같습니다.
<Person><Salary>42</Salary></Person>

세 가지의 경우는 요소를 소유하기 위해 서로 다른 구문 분석기를 사용한다는 점이 다릅니다. 따라서 들어오는 메시지의 MQRFH2 헤더에서 다른 도메인 이름이 예상되고 나가는 메시지의 MQRFH2 헤더에 다른 도메인 이름이 작성됩니다.

이 변경사항으로부터 외부 응용프로그램을 보호하려면 XMLNS 도메인에 대해 XMLNSC 압축 구문 분석기 사용 등록 정보를 플로우의 입력 노드와 명령문을 포함하는 Compute 노드에 지정할 수 있습니다.

첫 번째 예는 들어오는 메시지의 MQRFH2 헤더가 XMLNS 도메인을 지정할 때 메시지의 본문을 구문 분석하기 위해 XMLNSC 구문 분석기가 사용되도록 합니다. Compute 노드에서는 나가는 MQRFH2XMLNSC 구문 분석기 대신 XMLNS를 지정하도록 하므로, 입력 및 출력 메시지가 변경되지 않은 상태로 유지될 수 있습니다.

들어오는 메시지가 MQRFH2 헤더를 포함하지 않고 입력 노드의 메시지 도메인 속성이 도메인을 지정하기 위해 사용될 경우, XMLNSC로 설정하거나, XMLNS로 설정하고 XMLNS 도메인에 대해 XMLNSC 압축 구문 분석기 사용 등록 정보도 설정할 수 있습니다.

나가는 메시지에 MQRFH2 헤더가 없으면 도메인은 출력 메시지의 어디에도 표시되지 않고 Compute 노드의 XMLNS 도메인에 대해 XMLNSC 압축 구문 분석기 사용 등록 정보 설정이 효과가 없습니다.

XML 헤더 구성

다음 ESQL은 XML 도메인에서 유효합니다.
SET OutputRoot.XML.(XML.XmlDecl)*.(XML.Version)* = '1.0';
XMLNS로 이주하려면 루트를 변경하는 것만으로도 충분합니다.
SET OutputRoot.XMLNS.(XML.XmlDecl)*.(XML.Version)* = '1.0';

XMLNS 구문 분석기를 사용할 경우에도 요소 유형 상수는 XML 구문 분석기에 속합니다. 이는 XMLXMLNS 구문 분석기에 사용되는 유형 값이 같기 때문입니다. 그러나 XMLNSC 구문 분석기의 경우, 유형 값은 다르므로 항상 반드시 고유한 유형 상수를 사용해야 합니다.

XMLNSC 도메인에는 XML 버전에 대한 특수 유형이 없습니다. 단지 XML 선언의 속성으로 처리됩니다. 위의 예에 해당되는 구문은 다음과 같습니다.
SET OutputRoot.XMLNSC.(XMLNSC.XmlDeclaration)*.(XMLNSC.Attribute)Version = '1.0';

메시지 트리 복사

트리를 복사할 때, 브로커는 XMLXMLNSC를 다른 구문 분석기로 간주합니다. 즉, 소스 트리의 모든 속성이 대상 트리의 요소에 맵핑됩니다. 이 상황은 동일 플로우에서 두 구문 분석기 모두 사용할 경우에만 발생합니다(입력에 하나, 출력에 하나). 따라서 두 플로우 모두에 압축 구문 분석기를 사용할 것을 권장합니다.

입력 플로우와 출력 플로우에 반드시 다른 구문 분석기를 사용해야 할 경우, 경로에 요소 유형을 명시적으로 지정하거나 FIELDVALUE 함수를 사용하여 서브트리가 아닌 스칼라 값 사본이 되도록 해야 합니다.

메시지 본문 컨텐츠 조작 주제의 정보와 함께 XML 도메인에서 메시지 조작에서 XML 메시지에 대해 제공된 지침을 따르십시오.

상관 이름을 사용하여 XMLNSC 도메인에서 구문 요소에 액세스

다음 표에서는 각 XML 구문 요소에 대한 상관 이름을 제공합니다. XMLNSC 도메인에서 작업하는 경우 이 이름을 사용하여 입력 메시지에서 요소를 참조하고 출력 메시지에서 요소, 속성 및 값을 설정하십시오.
표 1. XML 구문 요소의 상관 이름
구문 요소 상관 이름 상수 값
폴더 XMLNSC.Folder 0x01000000
문서 유형 1 XMLNSC.DocumentType 0x01000300
XML 선언 2 XMLNSC.XmlDeclaration 0x01000400
     
필드 또는 속성 값 XMLNSC.Value 0x02000000
PCData 값 XMLNSC.PCDataValue 0x02000000
CData 값 XMLNSC.CDataValue 0x02000001
이종 값 XMLNSC.HybridValue 0x02000002
     
엔티티 참조 XMLNSC.EntityReference 0x02000100
     
필드 XMLNSC.Field 0x03000000
PCData XMLNSC.PCDataField 0x03000000
CData XMLNSC.CDataField 0x03000001
Hybrid XMLNSC.HybridField 0x03000002
     
속성 XMLNSC.Attribute 0x03000100
작은따옴표 XMLNSC.SingleAttribute 0x03000101
큰따옴표 XMLNSC.DoubleAttribute 0x03000100
     
네임스페이스 선언 XMLNSC.NamespaceDecl 0x03000102
작은따옴표 XMLNSC.SingleNamespaceDecl 0x03000103
큰따옴표 XMLNSC.DoubleNamespaceDecl 0x03000102
     
비트스트림 데이터 XMLNSC.BitStream 0x03000200
     
엔티티 정의 1 XMLNSC.EntityDefinition 0x03000300
작은따옴표 XMLNSC.SingleEntityDefinition 0x03000301
큰따옴표 XMLNSC.DoubleEntityDefinition 0x03000300
     
주석 XMLNSC.Comment 0x03000400
     
처리 지시사항 XMLNSC.ProcessingInstruction 0x03000401
주:
  1. 문서 유형은 엔티티 정의에만 사용됩니다. 예를 들면,
    SET OutputRoot.XMLNSC.(XMLNSC.DocumentType)BodyDocument.(XMLNSC.EntityDefinition)TestDef =
    		          'Compact Tree Parser XML Test Module Version 1.0';
  2. XML 선언은 버전의 하위 요소 등을 포함하는 특수 폴더 유형입니다. 예를 들면,
    -- Create the XML declaration 		
    SET OutputRoot.XMLNSC.(XMLNSC.XmlDeclaration)*.Version = 1.0;
    SET OutputRoot.XMLNSC.(XMLNSC.XmlDeclaration)*.Encoding = 'UTF8';
    SET OutputRoot.XMLNSC.(XMLNSC.XmlDeclaration)*.Standalone = 'yes';

구문 분석기 모드

디폴트로, XMLNSC 구문 분석기는 일반적으로 비즈니스 의미를 전달하지 않는 문서 요소를 제거합니다. 그러나 구문 분석기 모드를 사용하여 이 요소를 강제로 보유할 수 있습니다. 메시지가 XMLNSC 도메인에서 구문 분석되도록 지정하는 노드의 등록 정보에서 이 모드를 구성할 수 있습니다.

XMLNSC 구문 분석기에 유효한 구문 분석기 모드는 다음과 같습니다.
XMLNSC.MixedContentRetainNone
XMLNSC.MixedContentRetainAll
XMLNSC.CommentsRetainNone
XMLNSC.CommentsRetainAll
XMLNSC.ProcessingInstructionsRetainNone
XMLNSC.ProcessingInstructionsRetainAll
다음 예는 XMLNSC.ProcessingInstructionsRetainAllXMLNSC.ProcessingInstructionsRetainNone 모드를 사용하여 구문 분석 시 문서 처리 지시사항을 보유합니다.
DECLARE X BLOB ASBITSTREAM(InputRoot.XMLNSC.Data OPTIONS XMLNSC.ProcessingInstructionsRetainAll);
...
CREATE LASTCHILD OF outputRoot PARSE(X OPTIONS XMLNSC.ProcessingInstructionsRetainNone);
관련 개념
메시지 플로우 개요
XML 구문 분석기 및 도메인
ESQL 개요
관련 태스크
메시지 플로우 설계
메시지 플로우 컨텐츠 정의
XML 도메인에서 메시지 조작
관련 참조
ESQL 참조
SET문
FIELDVALUE 함수
ASBITSTREAM 함수
CREATE문
주의사항 | 등록상표 | 다운로드 | 라이브러리 | 지원 | 피드백
Copyright IBM Corporation 1999, 2006 마지막 갱신 날짜: 5월 12, 2006
ac26040_