このトピックは、ユーザー定義のパーサーの開発前に考慮すべき概念を紹介します。 準備ができたら、C でのパーサーの作成にある指示に従ってしたがってパーサーを構成してください。
独自のパーサーの作成を開始する前に、そのパーサーを何のために作成するかをはっきりさせて おく必要があります。ほとんどのタスクは、WebSphere Message Broker が提供する関数を使って実行できるので、 特定のタスクのためにユーザー定義のパーサーを作成する必要はないかもしれません。
実行すべきほとんどのタスクは、WebSphere Message Broker 提供の関数を使用して実行できます。独自のパーサー作成前に、実行するタスクが組み込み WebSphere Message Broker 関数を使っては実行できないことを 確認することが必要です。WebSphere Message Broker の使用可能なパーサーが必要を満たさない場合、 内部、カスタマー特有、または一般商用メッセージ形式を解析するように独自のパーサーを定義できます。
提供される WebSphere Message Broker パーサーが入力メッセージを受け入れられるメッセージ・ドメイン、および提供されるパーサーが作業できるメッセージ・ヘッダーの詳細については、パーサーを参照してください。
WebSphere Message Broker は複数パーツ、複数形式のメッセージをサポートしません。複数パーツの MRM メッセージは、すべて同じ形式のメッセージで構成されていることが必要です。
WebSphere Message Broker は、パーサーがメッセージ中の関係のあるフィールドのみを解析する、部分的な構文解析をサポートします。部分的 構文解析を使用すると、システム・リソースの節約になります。
WebSphere Message Broker は、いわゆる部分的構文解析をサポートします。ある 1 つのメッセージが何百もの、または何千もの個々のフィールドを含む場合、 構文解析操作を完了するにはかなりのメモリーおよびプロセッサーのリソースが必要になります。 個々のメッセージ・フローがこれらのフィールドのうちの少数のみを参照したり、 あるいは全く参照しないことがあるので、すべての入力メッセージを完全に構文解析するのは非効率的です。 このため、WebSphere Message Broker では、メッセージの構文解析が必要に応じてなされるようにすることができます。(これで、パーサーが一度にメッセージ全体を処理することが妨げられることはなくなります。 パーサーによっては、厳密にそうするように作成されているものがあります。)
論理メッセージ中のそれぞれの構文エレメントには、二つのビットが含まれ、 これはエレメントのどちらかの側のすべてのエレメントが完了しているかどうか、 またその子が完了しているかどうかを示します。 構文解析は通常、下部から上部、左から右になされます。 パーサーが特定のエレメントとその最初の子の前に来る、そのエレメントの兄弟を完了すると、 パーサーは最初のビットを 1 に設定します。 同様に、エレメントの次の兄弟へのポインターが完了し、最後の子のポインターも完了すると、 もう 1 つの完了ビットが 1 に設定されます。
部分的構文解析では、ブローカーはメッセージの一部が参照されるまで待ち、それからパーサーを起動してメッセージのその部分が構文解析されるようにします。WebSphere Message Broker メッセージ処理ノードは、階層名を使用してメッセージ内のフィールドを参照します。 名前は、メッセージのルートから始まり、特定のエレメントがあるところまで、メッセージ・ツリーを下方に進みます。 完了ビットが設定されていないエレメントが見つかり、このエレメントからのナビゲーションがさらに必要である場合、 適切なパーサー・エントリー・ポイントが呼び出され、メッセージの必要な部分が構文解析されます。 メッセージの関係のある部分が構文解析され、適切なエレメントが論理メッセージ・ツリーに追加され、 問題のエレメントは完了したものとしてマークされます。
ビット・ストリーム全体を構文解析する必要がない場合、レイジー構文解析としても知られる、 部分的構文解析を使用することができます。部分的構文解析中には、要求されたエレメントが戻されるか、 またはメッセージ・ツリーが完了とマークされて要求されたエレメントが存在しないことがわかるまで、 パーサーは繰り返し呼び出されます。
全体または部分的構文解析のどちらを実行するかの選択は、メッセージが WebSphere Message Broker 内で どのように処理されることが予想されるかに大いに依存します。WebSphere Message Broker 内での処理中に メッセージ内のほとんどのフィールド・エレメントがアクセスされることが予想される場合、 メッセージにアクセスする試みがなされたときにそのメッセージ全体の構文解析を実行する のが効率のよい方法でしょう。これは、小さいメッセージの場合特にそうです。
しかし、WebSphere Message Broker 内での処理中に メッセージ内のほとんどのフィールド・エレメントがアクセスされないことが予想される場合には、 特定のフィールドにアクセスしようとするときにメッセージのレイジー構文解析を実行する方が効率がよいでしょう。これはメッセージのサイズが大きくなるときに特にそうです。