XPath 1.0 および JavaCompute ノードを使用するメッセージからの情報の抽出

XPath は XML 文書と共に使用するように設計された照会言語ですが、照会目的のために任意のツリー構造に対して使用できます。 WebSphere Message Broker は XPath を使用して、 ビット・ストリームの形式には関係なく論理メッセージ・ツリーからエレメントを選択します。 XPath および XPath 1.0 規格の W3C 定義について詳しくは、XPathを参照してください。 このトピックで使用される用語は、XPath 1.0 の W3C 定義での用語に基づいています。

このトピックには、以下の情報含まれています。

evaluateXPath メソッドを使用する情報の抽出

evaluateXPath() メソッドは、Java ユーザー定義ノード API に含まれており、以下の例外を除いて XPath 1.0 をサポートします。
  • ネーム・スペース軸および namespace ノード・タイプ。 ネーム・スペース軸は、特定のエレメントに対する実際の XML ネーム・スペース宣言ノードを戻します。 これにより、XPath 式の中で XML プレフィックスまたは URI 宣言を取り扱うことができます。 この軸は、XML ではないビット・ストリームに対して空のノード・セットを戻します。
  • id() 関数を使用する場合、それは MbRecoverableException をスローします。

evaluateXPath() メソッドは、MbMessage オブジェクト (絶対パスのため)、 または MbElement オブジェクト (相対パスのため) に関して呼び出すことができます。 XPath 式は、メソッドにストリング・パラメーターとして渡されます。 このメソッドの 2 番目の形式が提供されていて、それは MbXPath オブジェクトを使用するものです。このオブジェクトは、XPath 式を変数バインディングおよびネーム・スペース・マッピング (これらが必要な場合) と共にカプセル化します。

evaluateXPath() メソッドは、式戻りタイプに応じて、これら 4 つのタイプのオブジェクトの 1 つを戻します。
  • java.lang.Boolean、これは XPath ブール・タイプを表します。
  • java.lang.Double、これは XPath 数値タイプを表します。
  • java.lang.String、これは XPath ストリング・タイプを表します。
  • java.util.List、これは XPath ノード・セットを表します。 リスト・インターフェースは、オブジェクト (この場合は MbElement) の順序付きシーケンスを表します。これはエレメントへの直接アクセス、または Iterator または MbElement 配列を取得する機能を可能にします。

XPath 変数バインディング

XPath 1.0 は、 評価の前に割り当てられた、式の内部の変数を参照する機能をサポートします。 MbXPath クラスには、これらの変数バインディングをユーザー Java コードに割り当てるため、 およびそこから除去するための 3 つのメソッドがあります。 その値は、XPath 1.0 によってサポートされる 4 つのタイプのいずれかであることが必要です。
  • ブール
  • ノード・セット
  • 数値
  • ストリング

XPath ネーム・スペースのサポート

XML メッセージでは、以下の XML 例に示されているように、ネーム・スペースが省略された ネーム・スペース・プレフィックスから完全なネーム・スペースの URI へのマッピングを使用して参照されます。
<ns1:aaa xmlns:ns1='http://mydomain.com/namespace1'
         xmlns:ns2='http://mydomain.com/namespace2'>
  <ns2:aaa>
    <ns1:bbb/>
  </ns2:aaa>
</ns1:aaa>

ネーム・スペース・プレフィックスはネーム・スペースを表すために便利ですが、 それはそのマッピングが定義された文書内でのみ意味を持ちます。 グローバルな意味を定義するのは、ネーム・スペース URI です。 さらに、ネーム・スペース URI は xmlns マッピングが定義されていなくても構文エレメントに割り当てることができるので、 ネーム・スペース・プレフィックスの概念はメッセージ・フロー内で生成された文書に対して意味を持ちません。

このため、XMLNS(C) および MRM パーサーはネーム・スペース URI だけを ブローカーおよびユーザー・コード (ESQL またはプラグイン・コード) に対して公開します。ESQL では、ユーザーが独自のマッピングをセットアップして、 長い可能性のあるこれらの URI に対する省略形を作成することが可能です。 これらのマッピングは、XML 文書内で定義されたプレフィックスと (同じ名前にすることはできますが) 何の関係もありません。

XPath プロセッサーでは、ネーム・スペースの省略形を URI にマップして、評価時に拡張するようにすることができます。 MbXPath クラスには、これらのネーム・スペース・マッピングを割り当てたり除去するためのメソッドが含まれています。 以下のコードを使用して XML の例に注意を向けることができます。
MbMessage msg = assembly.getMessage();
List chapters= (List)msg.evaluateXPath("/document/chapter");
// this returns a list of all chapters in the document (length 1)

MbElement chapter = (MbElement)chapters.get(0);  // the first one

// values can also be extracted directly using XPath
String title = (String)msg.evaluateXPath("string(/document/chapter/@title)");

String chapterText = (String)msg.evaluateXPath("string(/document/chapter/text())");

XPath 拡張を使用するメッセージの更新

XPath の WebSphere Message Broker インプリメンテーションは、 メッセージ・ツリーを変更するための以下の追加の機能を提供します。
set-local-name(object)
コンテキスト・ノードの拡張された名前のローカル部分を、引数に指定された値に設定します。object は、任意の有効な式とすることができ、 ストリング関数への呼び出しが使用された場合にストリングに変換されます。
set-namespace-uri(object)
コンテキスト・ノードの拡張された名前のネーム・スペース URI 部分を、引数に指定された値に設定します。object は、任意の有効な式とすることができ、 ストリング関数への呼び出しが使用された場合にストリングに変換されます。
set-value(object)
この機能は、コンテキスト・ノードのストリング値を、引数で指定された値に設定します。object は、任意の有効な式とすることができ、 ストリング関数への呼び出しが使用された場合にストリングに変換されます。
構文エレメント・ツリーを構築および変更できるようにするために、 XPath 1.0 仕様で定義されている 13 に加えて、以下の軸が使用可能です。
select-or-create::name or ?name
?name is equivalent to select-or-create::name name が @name の場合、属性が作成または選択されます。 これにより、以下の規則に従って、指定されたネーム・テストと一致する子ノードが選択されるか、 または新規のノードが作成されます。
  • ?name は、存在する場合に name と呼ばれる子を選択します。name と呼ばれる子が存在しない場合、?name はそれを最後の子として作成してから、 それを選択します。
  • ?$namename を最後の子として作成してから、それを選択します。
  • ?^namename を最初の子として作成してから、それを選択します。
  • ?>namename を次の兄弟として作成してから、それを選択します。
  • ?<namename を直前の兄弟として作成してから、それを選択します。
関連情報
Java ユーザー定義ノード API
特記事項 | 商標 | ダウンロード | ライブラリー | サポート | フィードバック
Copyright IBM Corporation 1999, 2006 最終更新: 08/21/2006
ac30390_