XMLNSC 도메인은 XMLNS 도메인의 확장이고, XMLNS 도메인은 원래 XML 도메인의 확장입니다.
XMLNS 도메인은 네임스페이스 지원을 추가합니다. 새 XMLNSC 도메인은 보다 압축된 트리를 빌드하므로 대형 메시지를 핸들링할 때 메모리를 덜 사용하도록 하십시오. 기존 응용프로그램에 영향을 주지 않도록 새 도메인이 추가되었습니다.
메시지 트리 구조
<Folder1> <Folder2 Attribute1='AttributeValue1'> <Field1><Value1></Field1> <Field2 Attribute2='AttributeValue2'><Value2></Field2> </Folder2> </Folder1>
XMLNSC 도메인에서, 이는 두 개의 이름 요소(Folder1 및 Folder2)와 네 개의 이름-값 요소(Attribute1, Field1, Field2 및 Attribute2)로 표시됩니다.
<Folder1> <Folder2> <Field1><Value1></Field1> <Field2><Value2></Field2> .... <Field100><Value100></Field100> </Folder2> </Folder1>
이 경우, XMLNSC 구문 분석기는 두 개의 이름 및 100개의 이름-값 요소로 메시지를 표시합니다. 반면 XML 및 XMLNS 구문 분석기는 102개의 이름 요소와 100개의 값 요소, 그리고 형식화된 메시지에서 공백을 표시하기 위한 103개의 값 요소가 사용됩니다.
XML 및 XMLNS 도메인은
각 폴더 또는 필드의 닫기와 열기 사이에 공백 편집 문자에 대한 이름-값 요소를 생성합니다. 이 공백 요소는 이름이 비어 있으며, 공간, 탭, 줄 바꾸기 또는 XML 문서의 편집에
사용되는 다른 문자에 대한 값을 가지고 있습니다. 이 요소는 유용한 가치가 없기 때문에 압축을 개선하기 위해 제거할 수 있습니다. 같은 이유로
디폴트 작동은 입력 스트림에서 XML 처리 지시사항과 주석을 제거하고 압축 도메인 트리에 어떠한 요소도 생성하지 않는 것입니다.
속성 및 태그가 붙은 텍스트
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’;
선행 ESQL은 XML 구문 분석기에서 사용하는 ESQL과 거의 동일하게 보이지만 특히, XMLNSC 구문 분석기에 속하는 유형 상수입니다. 다른 구문 분석기에 속하는 상수를 사용할 경우(예: XML) 유사하게 이름 지정된 상수(예: XML.Attribute)가 다른 값을 가지고 있으므로 예상치 못한 결과가 발생할 수 있습니다.
XMLNSC.SingleAttribute XMLNSC.DoubleAttribute
XMLNSC.Attribute
<Folder1 Item='ValueA'> <Item>Value1</Item> </Folder1>
SET ItemAttributeValueHolder = InputRoot.XMLNSC.Folder1.(XMLNSC.Attribute)Item; SET ItemFieldValueHolder = InputRoot.XMLNSC.Folder1.(XMLNSC.Field)Item;
이 방법은 입력 스트림에 속성이 없는 경우에도 영향을 받지 않기 때문에 Folder1에 배열 색인 선택을 사용하는 방법보다 유용합니다.
혼합 텍스트 핸들링
기본적으로,
혼합 텍스트는 일반적으로 단지 공백을 형식화하고 비즈니스 의미가 없는 경우 그룹에서
간단히 제거됩니다(있는 경우).
그러나 구문 분석할 때 여는 태그와 닫는 태그 사이가 아닌 다른 곳에서 발생하는
텍스트(즉, open->open, close->close 및 close->open)는
이름이 지정되지 않은 단일 Value 요소
로 표시되는 모드가 제공됩니다. 값 요소 유형은 PCDATA, CDATA 및
혼성(이 두 가지의 혼합)을 지원합니다.
XMLNSC.Value XMLNSC.PCDataValue XMLNSC.CDataValue XMLNSC.HybridValue
XMLNSC.MixedContentRetainNone = 0x0000000000000000 XMLNSC.MixedContentRetainAll = 0x0001000000000000
DECLARE X BLOB ASBITSTREAM(InputRoot.XMLNSC.Data OPTIONS XMLNSC.MixedContentRetainAll); ... CREATE LASTCHILD OF outputRoot PARSE(X OPTIONS XMLNSC.MixedContentRetainNone);
주석 핸들링
디폴트로, 주석 역시 단지 보조 정보이고 의미가 없는 경우 간단히 제거됩니다.
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);
기존 플로우 이주
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;
<Person><Salary>42</Salary></Person>
세 가지의
ESQL 예는 이러한 요소를 소유하기 위해 서로 다른 구문 분석기를 사용하기 때문에 다릅니다. 소유하는 구문 분석기는
수신되는 메시지에 의해 설정되거나(MQRFH2 헤더 <mcd> 폴더가 메시지 세트 도메인을 지정)
플로우 Input 노드의 디폴트 등록 정보에 정의된 메시지 세트 도메인에 의해 설정됩니다. 두 도메인이 모두 정의되어 있으면
MQRFH2 헤더 <mcd> 폴더가 지정하는 메시지 세트 도메인의 값이 우선합니다.
MQRFH2 헤더를 사용하고 있을 때
XMLNSC 도메인으로 이주하려면 <mcd> 폴더의 <Msd> 필드에 새 도메인 이름이 필요합니다. 새 도메인 이름은 나가는 메시지의 MQRFH2 헤더에 표시됩니다. 이 변경사항으로부터 외부 응용프로그램을 보호하려면
XMLNS 도메인에 대해 XMLNSC 압축 구문 분석기 사용 등록 정보를 플로우의 입력 노드와 Compute 또는 Mapping 노드에
지정할 수 있습니다. 이 등록 정보가 설정되면 입력 및 출력 메시지는 변경되지 않으며, <Msd> 필드 값은 XMLNS로 유지됩니다.
플로우는 이제 압축 구문 분석기를 사용하고 ESQL 경로는 XMLNSC를 사용하여 코드화됩니다.
들어오는 메시지가
MQRFH2 헤더를 포함하지 않고 입력 노드의 메시지 도메인 등록 정보가 도메인을 지정하기 위해 사용될 경우,
플로우의 입력 노드 도메인 등록 정보를 직접 XMLNSC로 설정하여 XMLNSC 도메인으로 이주하거나
XMLNS로 남겨 두고 XMLNS 도메인에 대해 XMLNSC 압축 구문 분석기 사용 등록 정보를
설정할 수 있습니다. 압축 구문 분석기는 플로우에 사용되고, ESQL 경로는 두 설정 중
하나를 적용하여 XMLNSC를 사용하여 코드화되어야 합니다.
나가는 메시지에 MQRFH2 헤더가 없으면 도메인은 출력 메시지의 어디에도 표시되지 않고
Compute 노드의 XMLNS 도메인에 대해 XMLNSC 압축 구문 분석기 사용 등록 정보 설정이 효과가 없습니다.
XML 헤더 구성
SET OutputRoot.XML.(XML.XmlDecl)*.(XML.Version)* = '1.0';
SET OutputRoot.XMLNS.(XML.XmlDecl)*.(XML.Version)* = '1.0';
XMLNS 구문 분석기를 사용할 경우에도 요소 유형 상수는 XML 구문 분석기에 속합니다. 이는 XML 및 XMLNS 구문 분석기에 사용되는 유형 값이 같기 때문입니다. 그러나 XMLNSC 구문 분석기의 경우, 유형 값은 다르므로 항상 반드시 고유한 유형 상수를 사용해야 합니다.
SET OutputRoot.XMLNSC.(XMLNSC.XmlDeclaration)*.(XMLNSC.Attribute)Version = '1.0';
SET OutputRoot.XMLNSC.(XMLNSC.XmlDeclaration)*.(XMLNSC.Attribute)Encoding = 'UTF-8'; SET OutputRoot.XMLNSC.(XMLNSC.XmlDeclaration)*.(XMLNSC.Attribute)StandAlone = 'Yes';
메시지 트리 복사
트리를 복사할 때, 브로커는 XML 및 XMLNSC를 다른 구문 분석기로 간주합니다. 즉, 소스 트리의 모든 속성이 대상 트리의 요소에 맵핑됩니다. 이 상황은 동일 플로우에서 두 구문 분석기 모두 사용할 경우에만 발생합니다(입력에 하나, 출력에 하나). 이 상황에서는 두 플로우 모두에 압축 구문 분석기를 사용하십시오.
입력 플로우와 출력 플로우에 반드시 다른 구문 분석기를 사용해야 할 경우, 경로에 요소 유형을 명시적으로 지정하거나 FIELDVALUE 함수를 사용하여 서브트리가 아닌 스칼라 값 사본이 되도록 해야 합니다.
메시지 본문 컨텐츠 가공 주제의 정보와 함께 XML 도메인에서 메시지 가공에서 XML 메시지에 대해 제공된 지침을 따르십시오.
상관 이름을 사용하여 XMLNSC 도메인에서 구문 요소에 액세스
구문 요소 | 상관 이름 | 상수 값 |
---|---|---|
폴더 | XMLNSC.Folder | 0x01000000 |
문서 유형 1 | XMLNSC.DocumentType | 0x01000300 |
XML 선언 2 | XMLNSC.XmlDeclaration | 0x01000400 |
필드 또는 속성 값 | XMLNSC.Value | 0x02000000 |
PCData 값 | XMLNSC.PCDataValue | 0x02000000 |
CData 값 | XMLNSC.CDataValue | 0x02000001 |
Hybrid 값 | 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 |
SET OutputRoot.XMLNSC.(XMLNSC.DocumentType)BodyDocument.(XMLNSC.EntityDefinition)TestDef = 'Compact Tree Parser XML Test Module Version 1.0';
-- 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 구문 분석기에서 EntityDefintion 및 EntityReference를 사용하는 방법
<BookInfo dtn="BookInfo" edn="author" edv="A.N.Other"> <Identifier>ES39B103T6</Identifier> </BookInfo>
<!DOCTYPE BookInfo [<!ENTITY author "A.N.Other">]> <BookInfo><Identifier>ES39B103T7</Identifier><entref>&author;</entref></BookInfo>
SET OutputRoot.MQMD = InputRoot.MQMD; DECLARE cursor REFERENCE TO InputRoot.XMLNSC.BookInfo; SET OutputRoot.XMLNSC.BookInfo.Identifier = cursor.Identifier; SET OutputRoot.XMLNSC.(XMLNSC.DocumentType)* NAME = cursor.dtn; SET OutputRoot.XMLNSC.(XMLNSC.DocumentType)*.(XMLNSC.EntityDefinition)* NAME = 'author'; SET OutputRoot.XMLNSC.(XMLNSC.DocumentType)*.(XMLNSC.EntityDefinition)author VALUE = cursor.edv; SET OutputRoot.XMLNSC.(XMLNSC.BookInfo).entref.(XMLNSC.EntityReference)* = 'author';
cursor 변수는
dtn(문서 유형 이름), edv(엔티티 정의 값) 및 Identifier의 값을 가리키는 데 사용됩니다.
이러한 변수에 대한 값은 입력 메시지에서 도출됩니다.
<!DOCTYPE BookInfo [<!ENTITY author "Book 1">]> <BookInfo Identifier="ES39B103T6">&author;</BookInfo>
SET OutputRoot.MQMD = InputRoot.MQMD; DECLARE cursor REFERENCE TO InputRoot.XMLNSC.BookInfo; CREATE FIELD OutputRoot.XMLNSC.BookInfo; SET OutputRoot.XMLNSC.(XMLNSC.DocumentType)* NAME = cursor.dtn; SET OutputRoot.XMLNSC.(XMLNSC.DocumentType)*.(XMLNSC.EntityDefinition)* NAME = cursor.edn; SET OutputRoot.XMLNSC.(XMLNSC.DocumentType)*.(XMLNSC.EntityDefinition)* VALUE = 'Book 1'; SET OutputRoot.XMLNSC.(XMLNSC.Folder)*[<].(XMLNSC.EntityReference)* = cursor.edn; SET OutputRoot.XMLNSC.Identifier.(XMLNSC.DoubleAttribute)Identifier = cursor.Identifier;
XMLNSC.EntityDefinition는
Book 1의 값으로 author를 정의하는 데 사용됩니다.
그러면 작성자 엔티티에 대한 참조가 XMLNSC.EntityReference를 사용하여 메시지에 작성됩니다.
cursor 변수는
dtn(문서 유형 이름), edn(엔티티 정의 이름) 및 Identifier의 값을 가리키는 데 사용됩니다.
이러한 변수는 모두 입력 메시지에서 도출됩니다. XMLNSC.DoubleAttribute 코드는
Identifier에 큰따옴표를 추가하는 데 사용됩니다. Identifier에 작은따옴표만 추가하려면 XMLNSC.SingleAttribute를
사용할 수 있습니다.
구문 분석기 모드
디폴트로, XMLNSC 구문 분석기는 일반적으로 비즈니스 의미를 전달하지 않는 문서 요소를 제거합니다. 그러나 구문 분석기 모드를 사용하여 이 요소를 강제로 보유할 수 있습니다. 메시지가 XMLNSC 도메인에서 구문 분석되도록 지정하는 노드의 등록 정보에서 이 모드를 구성할 수 있습니다.
XMLNSC.MixedContentRetainNone XMLNSC.MixedContentRetainAll XMLNSC.CommentsRetainNone XMLNSC.CommentsRetainAll XMLNSC.ProcessingInstructionsRetainNone XMLNSC.ProcessingInstructionsRetainAll다음 예는 XMLNSC.ProcessingInstructionsRetainAll 및 XMLNSC.ProcessingInstructionsRetainNone 모드를 사용하여 구문 분석 시 문서 처리 지시사항을 보유합니다.
DECLARE X BLOB ASBITSTREAM(InputRoot.XMLNSC.Data OPTIONS XMLNSC.ProcessingInstructionsRetainAll); ... CREATE LASTCHILD OF outputRoot PARSE(X OPTIONS XMLNSC.ProcessingInstructionsRetainNone);