XML ドメインを使用して、W3C XML 標準に準拠したメッセージをモデル化できます。
XML ドメインの 1 つ (XMLNSC、XMLNS、または XML) を使用して、XML メッセージを表すメッセージ・モデルを作成できます。XML ドメインを参照してください。 これらのドメインに含まれるメッセージは、XML パーサーで処理されます。
WebSphere® Message Broker は、メッセージ・モデルを使用せずに、XML パーサーを使用して、XMLNSC、XMLNS、または XML ドメインに属する XML メッセージを読み書きします。XML メッセージを読み取るとき、XML パーサーは入力ビット・ストリームからメッセージ・ツリーを作成します。入力ビット・ストリームは、W3C XML 仕様 (バージョン 1.0 または 1.1) に準拠した整形式 XML 文書である必要があります。メッセージを書き込むとき、XML パーサーはメッセージ・ツリーから XML ビット・ストリームを作成します。XML パーサーはプログラマチックであり、実行時にメッセージ・モデルを使用することは決してありませんが、設計時のためにメッセージ・モデルを作成して使用することは、メッセージ・フロー・アプリケーションの作成の単純化につながる可能性があるので、有効です。メッセージをモデル化する理由を参照してください。
XML パーサーのヌル・エレメントの処理方法についての詳細は、XML パーサーおよびヌル値を参照してください。
WebSphere Message Broker に付属の情報では、XML の用語、概念、およびメッセージ構成を要約し、ブローカーおよびメッセージ・フローとともに XML メッセージを使用する際に重要となる側面を強調しています。XML について詳しくは、developerWorks® Web サイトを参照してください。
この説明で使用される名前エレメント (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 文書を書式設定するスペース、タブ、および改行が理由で、ツリー内に空白文字エレメントがありますが、明瞭にするためにトレース内の実際の文字は「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 パーサー内の同じ XML 構造を表すために作成されたエレメントを示しています。このモードでは、コンパクト・パーサーは、コメント、処理命令、または混合テキストを保存しません。
この例は、コンパクト・パーサーを使用すれば、XML メッセージの例の同じビジネス内容を表すために使用されている構文エレメントの数が大幅に節約されることを示しています。
混合テキストを保存しないことにより、ビジネス・データ内容がないすべての空白文字エレメントは、ブローカー・メッセージ・ツリー内で実行時フットプリントを取らなくなりました。ただし、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' ) ) )