XML 구문 분석기 및 도메인

XML 메시지 도메인에는 W3C XML 표준을 준수하는 모든 메시지가 포함됩니다.

이 도메인의 메시지는 XML, XMLNS 또는 XMLNSC 구문 분석기 중 하나로 처리됩니다. XMLNS 도메인은 XML 도메인의 확장자이며 동일한 표준을 준수하고 XML 스펙의 네임스페이스 기능을 사용하는 메시지가 포함되어 있습니다. 이 도메인의 메시지는 XML 구문 분석기로 처리됩니다.

XML 구문 분석기는 MRM 도메인에 속한 메시지를 나타내는 비트스트림 또는 트리를 해석하고, 입력시 비트스트림에서 해당 트리를 생성하거나 출력시 트리에서 비트스트림을 생성하는 프로그램입니다. 비트스트림은 XML 파일의 표현입니다. (XML 구문 분석기는 JMS 도메인에 속한 메시지를 나타내는 비트스트림 또는 트리를 해석하기도 합니다. JMS 구문 분석기는 없습니다.)

응용프로그램은 두 가지 방법으로 XML 메시지(네임스페이스 지원이 있거나 없는)를 WebSphere Message Broker 브로커와 교환할 수 있습니다.

  1. 메시지 템플리트를 사전정의(모델화)하여 메시지 사전을 작성할 수 있습니다. 작성할 경우, XML 메시지는 MRM 구문 분석기에 의해 구문 분석되고 모델화한 모든 메시지와 동일한 방법으로 처리됩니다.
  2. 송신하기 전에 어떠한 방법으로도 지정하지 않는 자체 정의 메시지를 사용할 수 있습니다.

    자체 정의 메시지는 모든 내장 노드로 핸들링될 수 있습니다. 전체 메시지를 데이터베이스에 저장할 수 있으며 메시지 플로우를 통과하면서 메시지에 헤더를 추가하거나 메시지에서 헤더를 제거할 수 있습니다.

자체 정의 메시지를 일반 XML 메시지라고도 합니다. 이 메시지는 기록된 형식을 사용하지 않지만, XML 스펙을 따르는 문서 형식의 메시지에 있는 컨텐츠 및 구조에 대한 정보를 전달합니다. 해당 정의는 어디에도 보유되지 않습니다. 브로커가 XML 메시지를 수신하면, XML 구문 분석기가 메시지를 해석하며 해당 메시지 내에 포함된 XML 정의에 따라 내부 메시지 트리 구조를 작성합니다.

XML 구문 분석기가 널(null) 요소 및 값을 핸들링하는 방법에 대한 자세한 내용은 XML 구문 분석기 및 널(null) 값에서 설명됩니다.

WebSphere Message Broker에 제공된 정보는 XML 토폴로지, 개념 및 메시지 구성에 대한 완전한 정의 또는 설명을 제공하지 않습니다.

XML에 대한 추가 정보는 developerWorks 웹 사이트를 참조하십시오.

XML 메시지 구문 분석 예

이 설명에 사용되는 이름 요소(예: XmlDecl)는 WebSphere Message Broker에서 제공하며 상관 이름이라고 합니다. 이름 요소는 메시지 플로우에서 Compute 또는 Filter 노드와 같은 노드에 의해 수행되는 메시지 컨텐츠의 처리를 정의하는 ESQL 내에서 기호로 사용할 수 있습니다. 이는 XML 스펙의 일부는 아닙니다. XML 컨텐츠 핸들링이 다양하므로 각 XML 구문 분석기는 자체 상관 이름 세트를 정의합니다.

XML 이름 요소의 상관 이름(예: 요소 및 XmlDecl)은 0x01000000 형식 등의 상수 값과 동일합니다. 이 상수가 메시지 또는 메시지의 부분을 추적할 때 Trace 노드에 의해 작성된 출력에 사용되는 것을 알 수 있습니다.

단순 XML 메시지의 형식은 다음과 같을 수 있습니다.

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE Envelope
PUBLIC "http://www.ibm.com/dtds" "example.dtd"
[<!ENTITY Example_ID "ST_TimeoutNodes Timeout Request Input Test Message">]
>
<Envelope version="1.0">
	<Header>
<Example>&Example_ID;</Example>
		<!-- This is a comment  -->
	</Header>
	<Body  version="1.0">
<Element01>Value01</Element01>
		<Element02/>
		<Element03>
<Repeated>ValueA</Repeated>
<Repeated>ValueB</Repeated>
		</Element03>
<Element04><P>This is <B>bold</B> text</P></Element04>
	</Body>
</Envelope>

다음 절은 브로커가 처리하는 대로 데이터를 표시하는 데 사용되는 내부 구조에서 차이점을 보여주기 위해 XML 및 XMLNSC 구문 분석기에서 위의 메시지를 구문 분석할 경우 Trace 노드에서 작성되는 출력을 보여줍니다.

XML 도메인에서 구문 분석된 XML 메시지 예

다음에서는 원래 XML 문서를 형식화하는 공백, 탭 및 행 중단으로 인해 트리에 WhiteSpace 요소가 있으며 명확한 표현을 위해 추적의 실제 문자들이 'WhiteSpace'로 바뀌었음을 보여줍니다. XML 요소의 공백(WhiteSpace)은 의미가 있으며 컨텐츠 구문 요소를 사용하여 표현됩니다. XmlDecl, DTD 및 주석은 명시적인 상관 이름 지정 구문 요소를 사용하여 XML 도메인에서 표시됩니다.

(0x01000010):XML        = (
    (0x05000018):XML      = (
      (0x06000011): = '1.0'
      (0x06000012): = 'UTF-8'
      (0x06000014): = 'no'
    )
    (0x06000002):         = 'WhiteSpace'
    (0x05000020):Envelope = (
      (0x06000004): = 'http://www.ibm.com/dtds'
      (0x06000008): = 'example.dtd'
      (0x05000021): = (
        (0x05000011):Example_ID = (
          (0x06000041): = 'ST_TimeoutNodes Timeout Request Input Test Message'
        )
      )
    )
    (0x06000002):         = 'WhiteSpace'
    (0x01000000):Envelope       = (
      (0x03000000):version   = '1.0'
      (0x02000000):         = 'WhiteSpace'
      (0x01000000):Header  = (
        (0x02000000):         = 'WhiteSpace'
        (0x01000000):Example = (
          (0x06000020): = 'Example_ID'
          (0x02000000): = 'ST_TimeoutNodes Timeout Request Input Test Message'
          (0x06000021): = 'Example_ID'
        )
        (0x02000000):         = 'WhiteSpace'
        (0x06000018):        = ' This is a comment  '
        (0x02000000):         = 'WhiteSpace'
      )
      (0x02000000):         = 'WhiteSpace'
      (0x01000000):Body    = (
        (0x03000000):version   = '1.0'
        (0x02000000):         = 'WhiteSpace'
        (0x01000000):Element01 = (
          (0x02000000): = 'Value01'
        )
        (0x02000000):         = 'WhiteSpace'
        (0x01000000):Element02 = 
        (0x02000000):         = 'WhiteSpace'
        (0x01000000):Element03 = (
          (0x02000000):         = 'WhiteSpace'
          (0x01000000):Repeated = (
            (0x02000000): = 'ValueA'
          )
          (0x02000000):         = 'WhiteSpace'
          (0x01000000):Repeated = (
            (0x02000000): = 'ValueB'
          )
          (0x02000000):         = 'WhiteSpace'
        )
        (0x02000000):         = 'WhiteSpace'
        (0x01000000):Element04 = (
          (0x01000000):P = (
            (0x02000000):  = 'This is '
            (0x01000000):B = (
              (0x02000000): = 'bold'
            )
            (0x02000000):  = ' text'
          )
        )
        (0x02000000):         = 'WhiteSpace'
      )
      (0x02000000):         = 'WhiteSpace'
    )

XMLNSC 도메인에서 구문 분석된 XML 메시지 예

다음 추적은 디폴트 모드에서 압축 XMLNSC 구문 분석기 내에서 동일 XML 구조를 표시하기 위해 작성되는 요소를 보여줍니다. 이 모드에서는 압축 구문 분석기가 주석, 처리 지시사항 또는 혼합 텍스트를 보유하지 않습니다.

압축 구문 분석기를 사용하여 XML 메시지 예의 동일 비즈니스 컨텐츠를 표시하기 위해 사용한 구문 요소 수가 크게 절약된다는 것을 비교에서 명백하게 알 수 있습니다.

혼합 텍스트를 보유하지 않으면 비즈니스 데이터 컨텐츠가 없는 모든 WhiteSpace 요소는 더 이상 브로커 메시지 트리에서 어떤 런타임 풋프린트도 취하지 않습니다. 그러나 이로 인해서 "Element04.P"의 혼합 텍스트가 제거되고 하위 폴더 "Element04.P.B"의 값만 트리에 보유되기도 합니다. 텍스트 'This is ' 및 "P"의 ' text'는 제거됩니다. 이 유형의 XML 구조는 보통 비즈니스 데이터 형식과 연관되지 않으므로 일반적으로 압축 XMLNSC 구문 분석기를 사용하는 것이 바람직합니다. 그러나 이 유형의 처리가 필요하면 XMLNSC 구문 분석기를 사용하지 않거나 "혼합 텍스트 보유" 모드를 사용 가능하도록 설정하여 사용하면 됩니다.

특수 상관 이름 지정 요소가 아닌 XmlDeclaration의 하위 요소로 보유되는 버전, 인코딩 및 독립형 속성에 따라 압축 구문 분석기에서 XML 선언 핸들링 또한 달라집니다.

(0x01000000):XMLNSC     = (
    (0x01000400):XmlDeclaration = (
      (0x03000100):Version    = '1.0'
      (0x03000100):Encoding   = 'UTF-8'
      (0x03000100):StandAlone = 'no'
    )
    (0x01000000):Envelope       = (
      (0x03000100):version   = '1.0'
      (0x01000000):Header  = (
        (0x03000000):Example = 'ST_TimeoutNodes Timeout Request Input Test Message'
      )
      (0x01000000):Body    = (
        (0x03000100):version   = '1.0'
        (0x03000000):Element01 = 'Value01'
        (0x01000000):Element02 = 
        (0x01000000):Element03 = (
          (0x03000000):Repeated = 'ValueA'
          (0x03000000):Repeated = 'ValueB'
        )
        (0x01000000):Element04 = (
          (0x01000000):P = (
            (0x03000000):B = 'bold'
          )
        )
   )

샘플 갤러리의 대부분의 샘플은 XML 구문 분석기를 사용하여 메시지를 처리합니다. 예를 들면, Coordinated Request Reply 샘플, Large Messaging 샘플Message Routing 샘플을 확인해 보십시오.

관련 참조
내장 노드
XML 구조
주의사항 | 등록상표 | 다운로드 | 라이브러리 | 지원 | 피드백
Copyright IBM Corporation 1999, 2006 마지막 갱신 날짜: 2006/08/21
ac00600_