BPEL 1.1のbpelx:rename
次に、BPELバージョン1.1をサポートするBPELプロジェクトのbpelx:rename
の例を示します。
<bpel:assign> <bpelx:rename elementTo="QName1"? typeCastTo="QName2"?> <bpelx:target variable="ncname" part="ncname"? query="xpath_str" /> </bpelx:rename> </bpel:assign>
bpelx:target
の構文は、copy
操作のto-spec
に類似しており、そのサブセットです。ターゲットは要素ノードのリストを返す必要があります。それ以外の場合は、bpel:selectionFailure
フォルトが生成されます。from-spec
で指定した要素ノード名が、elementTo
属性で指定したQName
に変更されます。その要素ノードにxsi:type
属性が追加され、それらの要素がtypeCastTo
属性で指定したQName
タイプにキャストされます。
次の例に示す従業員リストがあるとします。
<e:empList> <e:emp> <e:firstName>John</e:firstName><e:lastName>Dole</e:lastName> <e:emp> <e:emp xsi:type="e:ManagerType"> <e:firstName>Jane</e:firstName><e:lastName>Dole</e:lastName> <e:approvalLimit>3000</e:approvalLimit> <e:managing /> <e:emp> <e:emp> <e:firstName>Peter</e:firstName><e:lastName>Smith</e:lastName> <e:emp> <e:emp> <e:firstName>Mary</e:firstName><e:lastName>Smith</e:lastName> <e:emp> </e:empList>
昇格の変更が、次の例の従業員リストのPeter
Smith
に適用されます。
<bpel:assign> <bpelx:rename typeCastTo="e:ManagerType"> <bpelx:target variable="empListVar" query="/e:empList/e:emp[./e:firstName='Peter' and ./e:lastName='Smith'" /> </bpelx:rename> </bpel:assign>
前述のキャスト(名前変更)の実行後は、Peter
Smith
にxsi:type
情報が追加され、データは次の例に示すようになります。
<e:empList>
<e:emp>
<e:firstName>John</e:firstName><e:lastName>Dole</e:lastName>
<e:emp>
<e:emp xsi:type="e:ManagerType">
<e:firstName>Jane</e:firstName><e:lastName>Dole</e:lastName>
<e:approvalLimit>3000</e:approvalLimit>
<e:managing />
<e:emp>
<e:emp xsi:type="e:ManagerType">
<e:firstName>Peter</e:firstName><e:lastName>Smith</e:lastName>
<e:emp>
<e:emp>
<e:firstName>Mary</e:firstName><e:lastName>Smith</e:lastName>
<e:emp>
</e:empList>
<approvalLimit>
および<managing>
がないため、Peter
Smith
の従業員データは無効になっています。したがって、その情報を追加するために<append>
が使用されます。次に例を示します。
<bpel:assign> <bpelx:rename typeCastTo="e:ManagerType"> <bpelx:target variable="empListVar" query="/e:empList/e:emp[./e:firstName='Peter' and ./e:lastName='Smith'" /> </bpelx:rename> <bpelx:append> <bpelx:from> <e:approvalLimit>2500</e:approvalLimit> <e:managing /> </bpelx:from> <bpelx:to variable="empListVar" query="/e:empList/e:emp[./e:firstName='Peter' and ./e:lastName='Smith'" /> </bpelx:append> </bpel:assign>
rename
およびappend
の両方を実行すると、対応するデータは次の例のようになります。
<e:emp xsi:type="e:ManagerType"> <e:firstName>Peter</e:firstName><e:lastName>Smith</e:lastName> <e:approvalLimit>2500</e:approvalLimit> <e:managing /> <e:emp>