XML ドメインを使用して、W3C XML 規格に準拠するメッセージを構文解析および書き込みができます。
「XML ドメイン」という語は、XML 文書を構文解析するために WebSphere® Message Broker が使用する 3 つのドメインのグループをいいます。
XML メッセージを読み取るとき、ドメインと関連付けられているパーサーは、入力ビット・ストリームからメッセージ・ツリーを作成します。 入力ビット・ストリームは、W3C XML 仕様 (バージョン 1.0 または 1.1) に準拠した整形式 XML 文書である必要があります。
メッセージを書き込むとき、パーサーはメッセージ・ツリーから XML ビット・ストリームを作成します。
ドメインにはそれぞれ異なる特性があり、どのドメインを選択するかについての指針は、どの XML パーサーを使用すべきか を参照してください。
MRM ドメインも、XML 構文解析および書き込み機能を提供しています。 XML パーサーの代わりにいつ MRM XML を使用できるかの指針については、どの XML パーサーを使用すべきかを参照してください。
デフォルトでは、3 つの XML パーサーがプログラマチック・パーサーであり、構文解析と書き込みの実行時にメッセージ・セットを使用しません。 ただし、XMLNSC パーサーはモデル駆動型パーサーとして操作でき、メッセージ・セットから生成された XML スキーマに照らして XML メッセージの正しさを妥当性検査できます。
メッセージ・セットなしで XMLNS または XML パーサー、あるいは XMLNSC パーサーを使用する場合でも、WebSphere Message Broker Toolkit 中でメッセージ・セットを作成および使用するのは良い習慣です。この操作により、メッセージ・セットがブローカー・ランタイムにデプロイされていなくても、メッセージ・フロー・アプリケーションの開発は単純化されます。
メッセージ・セットの作成の利点については、メッセージをモデル化する理由を参照してください。
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 パーサーで構文解析されるときに Trace ノードによって作成される出力を示しています。 それらは、ブローカーにより処理されるとおりにデータを表すために使用される内部構造の違いを例示しています。
以下の例では、オリジナルの 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 パーサー内の同じ XML 構造を表すために作成されたエレメントを示しています。 このモードでは、コンパクト・パーサーは、コメント、処理命令、または混合テキストを保存しません。
この例は、コンパクト・パーサーを使用すれば、XML メッセージの例の同じビジネス内容を表すために使用されている構文エレメントの数が大幅に節約されることを示しています。
混合テキストを保存しないことにより、ビジネス・データ内容がないすべての空白文字エレメントは、実行時にブローカー・メッセージ・ツリー内でスペースを取らなくなりました。 ただし、Element04.P 内の混合テキストも廃棄され、子フォルダー Element04.P.B の値だけがツリー内に保持されます。P 内のテキスト This is および text は廃棄されます。 このタイプの 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'
)
)
)
サンプルに関する情報は、WebSphere Message Broker Toolkit に統合されているインフォメーション・センター、またはオンライン・インフォメーション・センターを使用する場合にのみ表示できます。 サンプルは、WebSphere Message Broker Toolkit に統合されているインフォメーション・センターを使用する場合にのみ実行できます。
いくつかの事前定義メッセージ・モデルが WebSphere Message Broker Toolkit で提供されており、これらは「新規メッセージ定義ファイル」ウィザードを使用し、IBM® 提供のメッセージ・オプションを選択することでインポートできます。 メッセージ・セット: インポート可能な IBM 提供のメッセージを参照してください。