複雑な派生属性の計算
このチュートリアルでは実演しませんが、多くの派生属性の計算では、JET 入力モデルから抽出される値と静的ストリングを連結するだけではなく、それ以上の操作が必要になることがあります。このような操作を、XPath 式内で XPath 関数を呼び出すことによって行えることがよくあります。
E メール・アドレス (ID として) と生成されたパスワードを使用してアカウントが作成されたことを、生成された E メール・メッセージによってユーザーに通知すると想定します。生成されたパスワードは、名前の最初の文字に名字を加えたもので、パスワード全体が小文字になっています。生成された E メール・メッセージには、ユーザーの覚書としてこのパスワードが含まれている必要があります。
JET XPath エンジンは、このタスクを完了するために役立つ複数の関数を提供します。Substring 関数はストリングの一部を戻し、 Concat 関数は 2 つ以上のストリングを連結し、さらに Lowercase 関数は大/小文字の変換を管理します。 次のコード・フラグメントは、mailing 要素の、パスワードに関する仮定の派生属性の計算を示しています。
{lower-case(concat(substring($mailing/@firstName,1,1), $mailing/@lastName))}JET には、XPath 1.0 仕様のコア関数ライブラリーに定義されている、ほとんどの XPath 1.0 関数が含まれています。実装されていない関数は、lang と id の 2 つのみです。JET は、さらに複数の XPath 関数も提供します。
XPath パス式のフィルタリング
場合によっては、XPath 述部を使用して、特定の基準に基づいて要素のサブセットを処理する必要があります。 述部は、XPath 式内のステップに適用される式で、そのステップに一致する要素をフィルタリングします。述部はブール式でも整数式でもかまいません。整数式の場合は、一連の要素に対する 1 を基準とした指標として扱われます。述部は大括弧 ([]) で囲まれます。
次の例は、この概念をより具体的に示しています。次の <c:iterate> タグは、interest 要素を含む mailing 要素しか処理しません。
<c:iterate select="$campaign/mailing[interest]" var="mailing">XPath は、一致した一連のノードの基数をテストして、述部式 interest の結果をブール値に変換します。この式は次の例と同等です。
<c:iterate select="$campaign/mailing[count(interest) > 0]" var="mailing">次の <c:iterate> タグは、ユーザーが関心を持っている最初の製品として Product1 を指定する mailing 要素を処理します。
<c:iterate select="$campaign/mailing[interest[1]/@code = 'Product1']" var="mailing">