XML パーサーおよびドメイン

XML メッセージ・ドメインには、W3C XML 標準に準拠したすべてのメッセージが含まれます。

このドメインに含まれるメッセージは、XML、XMLNS、または XMLNSC パーサーで処理されます。XMLNS ドメインは XML ドメインの拡張版で、同じ規格に合致し、XML 仕様のネーム・スペース・フィーチャーを活用するメッセージを含みます。 このドメインに含まれるメッセージは、XML パーサーで処理されます。

XML パーサーは、XML ドメインに属するメッセージを表すビット・ストリームまたはツリーを解釈するプログラムです。 入力のビット・ストリームから対応するツリーを生成するか、出力のツリーからビット・ストリームを生成します。 ビット・ストリームは、XML ファイルの表現法の 1 つです。 (XML パーサーは、JMS ドメインに属するメッセージを表すビット・ストリームまたはツリーも解釈します。 JMS パーサーはありません。)

複数のアプリケーション間で、WebSphere Message Broker ブローカーを使用して次の 2 つの方法で XML メッセージ (ネーム・スペースをサポートする、またはしない) を交換できます。

  1. メッセージ・ディクショナリーを作成するために、メッセージ・テンプレートを事前定義 (モデル化) することができます。そうする場合、モデル化したすべてのメッセージと同じ方法で、XML メッセージが MRM パーサーによって構文解析され、処理されます。
  2. 送信前にはいずれの方法によっても指定しない自己定義メッセージを使用できます。

    自己定義メッセージは、すべての組み込みノードで処理できます。 データベースにはメッセージの全体を保管することができ、メッセージがメッセージ・フローを通過する際にはヘッダーを追加したり除去したりすることができます。

自己定義メッセージは、汎用 XML メッセージとも呼ばれます。 これには、記録される形式がありませんが、メッセージ内の内容と構造に関する情報が、XML 仕様に従った文書の形式で渡されます。 この定義は、他のどこにも保存されません。 XML メッセージはブローカーで受け取られると、XML パーサーで解釈され、そのメッセージ内に入っている XML 定義に従って、内部メッセージ・ツリー構造が作成されます。

XML パーサーのヌル・エレメントおよび値の処理方法についての詳細は XML パーサーおよびヌル値 に記述されています。

WebSphere Message Broker で説明される情報には、XML の用語、概念、およびメッセージ構成に関する完全な定義または説明は含まれていません。 これは、ブローカーおよびメッセージ・フローとともに XML メッセージを使用する際に重要となる側面を強調した要約です。

XML について詳しくは、developerWorks Web サイトを参照してください。

XML メッセージの構文解析の例

この説明で使用される名前エレメント (XmlDecl など) は、WebSphere Message Broker によって提供されており、相関名といいます。 それらは ESQL 内でのシンボルの使用のために使用できます。ESQL は、メッセージ・フロー内のノード (例えば Compute または Filter ノードなど) で実行されるメッセージ内容の処理を定義します。 これらは、XML 仕様の一部ではありません。 各 XML パーサーは、XML 内容の扱いがそれぞれ異なるため、相関名の固有セットを定義しています。

XML 名エレメント (Element や 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 にはビジネス上の意味があり、Content 構文エレメントを使用して表されます。 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 ドメインで構文解析される XMLNSC メッセージの例

以下のトレースは、デフォルト・モードの Compact XMLNSC パーサー内の同じ XML 構文を表記するために作成されたエレメントを示しています。 このモードでは、コンパクト・パーサーは、コメント、処理命令、または混合テキストを保存しません。

コンパクト・パーサーの使用により、XML メッセージの例の同じビジネス内容を表すために使用されている構文エレメントの数において、かなりの節約があることが比較によって明確に分かります。

混合テキストを保存しないことにより、ビジネス・データ内容がないすべての WhiteSpace エレメントは、ブローカー・メッセージ・ツリー内で実行時フット・プリントを取らなくなることに注意してください。 ただし、さらにこの結果として「Element04.P」内の混合テキストは廃棄され、子フォルダー「Element04.P.B」の値だけがツリー内に保持され、「P」内のテキスト「This is」および「text」は廃棄されます。 このタイプの XML 構造は通常はビジネス・データ・フォーマットと関連付けられていないので、一般にコンパクト XMLNSC パーサーの使用は望ましいものになります。 ただし、このタイプの処理を必要とする場合は、XMLNSC パーサーを使用しないようにするか、またはそれを「混合テキストを保存」モードを有効にして使用します。

XML 宣言の扱いは、バージョン、エンコード方式、および独立の属性を、特殊相関名が付けられたエレメントではなく、XmlDeclaration の子として保持するコンパクト・パーサーによっても異なります。

(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 サンプルを見てください。

特記事項 | 商標 | ダウンロード | ライブラリー | サポート | フィードバック
Copyright IBM Corporation 1999, 2006 最終更新: 08/21/2006
ac00600_