XML パーサーおよびドメイン
XML ドメインを使用して、W3C XML 規格に準拠するメッセージを構文解析および書き込みができます。
XML ドメイン という用語は、 IBM® Integration Bus が XML 文書を解析するために使用する 3 つのドメインのグループを指します。
XML メッセージを読み取るとき、ドメインと関連付けられているパーサーは、入力ビット・ストリームからメッセージ・ツリーを作成します。 入力ビット・ストリームは、W3C XML 仕様 (バージョン 1.0 または 1.1) に準拠した整形式 XML 文書である必要があります。
メッセージを書き込むとき、パーサーはメッセージ・ツリーから XML ビット・ストリームを作成します。
ドメインにはさまざまな特性があります。どのドメインを選択するかについては、 どの XML パーサーを使用する必要がありますか?を参照してください。
MRM ドメインも、XML 構文解析および書き込み機能を提供しています。 XML パーサーの 1 つの代わりに MRM XML を使用する場合のガイダンスについては、 どの XML パーサーを使用する必要がありますか?を参照してください。
デフォルトでは、3 つの XML パーサーがプログラマチック・パーサーであり、構文解析と書き込みの実行時にメッセージ・セットを使用しません。 ただし、XMLNSC パーサーはモデル駆動型パーサーとして操作でき、メッセージ・セットから生成された XML スキーマに照らして XML メッセージの正しさを妥当性検査できます。
XMLNS パーサーまたは XML パーサー、あるいはメッセージ・セットなしの XMLNSC パーサーを使用する場合は、 IBM Integration Toolkitでメッセージ・セットを作成して使用することをお勧めします。このアクションにより、メッセージ・セットが統合ノード・ランタイムにデプロイされていなくても、メッセージ・フロー・アプリケーションの開発が単純化されます。
メッセージ・セットを作成する利点については、 メッセージをモデル化する理由を参照してください。
XML パーサーは、オンデマンド・パーサーです。 詳しくは、 オンデマンドでの構文解析を参照してください。
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 提供メッセージを参照してください。