複数のレコードを処理する XPath セレクターの編集方法
TypedXmlDocument がエンジンにアサートされると、個別の子 TypedXmlDocument が作成されます。アサートに関する ページを参照してください。 エンジンは、ルールで定義された XPath セレクターに基づいて、作成される子の TypedXmlDocuments を決定します。 作成ツールでルールを構築する場合、XPath セレクターの既定値は、ファクト エクスプローラーの [XML スキーマ] タブで選択されているノードよりも上位にあるノードになります。 XPath Field の値は、既定で選択されたノード自体に設定され、親ノードを基準にしています。
場合によっては、ルールを構築する際に、作成ツールで作成される既定の XPath をカスタマイズすることがあります。 次のサンプル XML ドキュメントを例として説明します。
<Order>
<Orderline>
<Hat style="Baseball">
<Cost>10</Cost>
</Hat>
<Shirt color="Black">
<Cost>20</Cost>
</Shirt>
<Total></Total>
</Orderline>
<Orderline>
<Hat style="Bowler">
<Cost>20</Cost>
</Hat>
<Shirt color="Red">
<Cost>20</Cost>
</Shirt>
<Total></Total>
</Orderline>
</Order>
各 "Orderline" の合計値を計算するルールを構築すると仮定します。 ルールは、次のようになります。
IF 1==1
THEN /Order/Orderline/Total = (/Order/Orderline/Hat/Cost + /Order/Orderline/Shirt/Cost)
XPath の太字は、セレクター部分を示します。残りは、フィールド XPath を表します。 これらは、作成ツールによって作成される既定値です。 ただし、このポリシーを実行すると、2 つの Orderline オブジェクト、2 つの Hat オブジェクト、2 つの Shirt オブジェクトの 6 つのオブジェクトが作成されます。 "Orderline" の合計値は、Hat オブジェクトおよび Shirt オブジェクトが合わせて計算されます。合計値は、同じ値が常に設定され、最後にルールが実行されてから出力されます。 ルールは 8 回実行されます。 これは、このシナリオで適切ではありません。
次のように、XPath の値を編集する解決方法が考えられます。
IF 1==1
THEN /Order/Orderline/Total = (/Order/Orderline/Hat/Cost + /Order/Orderline/Shirt/Cost)
3 つのすべてのフィールドのセレクター XPath 値は、同じ "/Order/Orderline" 値に設定されます。フィールド XPath 値は、適宜に編集されます。 これを行うには、[XML スキーマ] タブでノードが選択されている場合に、プロパティ ウィンドウの XPath セレクターと XPath フィールドの値を変更します。これは、フィールドを rule 引数にドラッグする前に行う必要があります。
この変更を行ったポリシーの実行結果は、"Orderline" の Shirt ノードおよび Hat ノードの "Cost" 値に基づいて各 "Orderline" に対して計算されている合計値になります。