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

XML ドメインを使用して、W3C XML 規格に準拠するメッセージを構文解析および書き込みができます。

XML ドメイン という用語は、 IBM® Integration Bus が XML 文書を解析するために使用する 3 つのドメインのグループを指します。

XML メッセージを読み取るとき、ドメインと関連付けられているパーサーは、入力ビット・ストリームからメッセージ・ツリーを作成します。 入力ビット・ストリームは、W3C XML 仕様 (バージョン 1.0 または 1.1) に準拠した整形式 XML 文書である必要があります。

メッセージを書き込むとき、パーサーはメッセージ・ツリーから XML ビット・ストリームを作成します。

ドメインにはさまざまな特性があります。どのドメインを選択するかについては、 どの XML パーサーを使用する必要がありますか?を参照してください。

XMLNSC ドメイン (XMLNSC domain)
XMLNSC ドメインは、XML ネーム・スペースを使用するメッセージも含む、すべての汎用 XML メッセージの構文解析用に優先されるドメインです。 このパーサーは、以下の理由から、推奨されるパーサーです。
  • XMLNSC パーサーには、すべての種類の XML の構文解析時に超ハイパフォーマンスを提供するアーキテクチャーがあります。
  • XMLNSC パーサーは、構文解析済みメッセージから作成された論理メッセージ・ツリーによって使用されるメモリーの量を削減します。 このパーサーのデフォルトの動作は、重要でない空白文字および混合内容、コメント、処理命令、および埋め込み DTD を破棄することです。しかし、必要な場合には混合テキスト、コメント、および処理命令を保存するための制御が提供されます。
  • XMLNSC パーサーは、モデル駆動型パーサーとして操作でき、メッセージ・セットから生成された XML スキーマに照らして XML メッセージを妥当性検査し、使用している XML メッセージが正しいことを確認できます。
XMLNS ドメイン (XMLNS domain)
XMLNSC ドメインが要件を満たさない場合、代替ネーム・スペースを認識するドメインおよびパーサーを使用します。
XML ドメイン (XML domain)
XML ドメインはネーム・スペースを認識しません。 これは推奨されておらず、新規メッセージ・フローの開発には使用すべきでありません。

MRM ドメインも、XML 構文解析および書き込み機能を提供しています。 XML パーサーの 1 つの代わりに MRM XML を使用する場合のガイダンスについては、 どの XML パーサーを使用する必要がありますか?を参照してください。

デフォルトでは、3 つの XML パーサーがプログラマチック・パーサーであり、構文解析と書き込みの実行時にメッセージ・セットを使用しません。 ただし、XMLNSC パーサーはモデル駆動型パーサーとして操作でき、メッセージ・セットから生成された XML スキーマに照らして XML メッセージの正しさを妥当性検査できます。

XMLNS パーサーまたは XML パーサー、あるいはメッセージ・セットなしの XMLNSC パーサーを使用する場合は、 IBM Integration Toolkitでメッセージ・セットを作成して使用することをお勧めします。このアクションにより、メッセージ・セットが統合ノード・ランタイムにデプロイされていなくても、メッセージ・フロー・アプリケーションの開発が単純化されます。

メッセージ・セットを作成する利点については、 メッセージをモデル化する理由を参照してください。

XML パーサーは、オンデマンド・パーサーです。 詳しくは、 オンデマンドでの構文解析を参照してください。

この製品資料のトピックには、XML の用語、概念、およびメッセージ構成の要約が記載されています。 これらの面は、メッセージ・フローで XML メッセージを使用する際に重要です。
ヒント: XML について詳しくは、 ワールド・ワイド・ウェブ・コンソーシアム (W3C) Web サイトを参照してください。

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

簡単な 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>

以下のセクションでは、このメッセージ例が XMLNS および XMLNSC パーサーで構文解析されたときに トレース ノードによって作成される出力を示します。 それらは、統合ノードにより処理されるとおりにデータを表すために使用される内部構造の違いを例示しています。

XMLNS ドメインで構文解析される XML メッセージの例

以下の例では、元の XML 文書をフォーマット設定するスペース、タブ、および改行のために、ツリー内の空白エレメントが存在します。明確にするために、トレース内の実際の文字は以下のように置き換えられています。'WhiteSpace'. XML エレメント内の空白はビジネス上の意味を持ち、Content 構文エレメントを使用して表されます。 XmlDecl、DTD、およびコメントは、特定のフィールド・タイプを持つ明示的な構文エレメントを使用して XML ドメイン内で表記されています。

(0x01000010):XMLNS        = (
    (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 メッセージの例

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

この例は、コンパクト・パーサーを使用すれば、XML メッセージの例の同じビジネス内容を表すために使用されている構文エレメントの数が大幅に節約されることを示しています。

混合テキストを保存しないことにより、ビジネス・データ内容がないすべての空白文字エレメントは、実行時に統合ノード・メッセージ・ツリー内でスペースを取らなくなりました。 ただし、以下の混合テキストは、Element04.Pは破棄され、子フォルダーの値のみが破棄されます。Element04.P.Bツリー内に保持されます。This isおよびtext/P破棄されます。 このタイプの XML 構造は通常はビジネス・データ・フォーマットと関連付けられていないので、一般にコンパクト XMLNSC パーサーの使用は望ましいものになります。 ただし、このタイプの処理を行いたい場合は、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'
          )
        )
   )

いくつかの事前定義メッセージ・モデルは IBM Integration Toolkit に付属しており、「新規メッセージ定義ファイル」ウィザードを使用し、 IBM 提供メッセージ・オプションを選択することによってインポートできます。 メッセージ・セット: インポートできる IBM 提供メッセージを参照してください。