XML スキーマ仕様では、それぞれの値を空白文字で区切るという簡単な種類の、複数の値からなるリストをエレメントまたは属性に含めることができます。
<message1> <listE1 listAttr="one two three"> four five six</listE1> </message1>
結果として生成されるメッセージ・ツリーでは、xsd::list タイプは、リスト項目ごとに無名値の子を持つ名前ノードとして表されます。これにより、反復リストは情報を失わずに処理されます。
MRM listEl (名前) listAttr (名前) "one" (値) "two" (値) "three" (値) "four" (値) "five" (値) "six" (値)
SET OutputRoot.MRM.listEl.listAttr.*[3] = ...の場合、listAttr の 3 番目の項目が変更されます。
<MRM> <inner>abcde fghij 12345</inner> </MRM>ここで、inner エレメントのタイプは xsd::list であるため、1 つではなく 3 つのストリング値が関連付けられています。
<MRM> <str1>abcde</str1> <str1>fghij</str1> <str1>12345</str1> </MRM>以下のような ESQL 構文は適切に見えるかもしれません。
DECLARE D INTEGER; SET D = CARDINALITY(InputBody.str1.*[]); DECLARE M INTEGER 1; WHILE M <= D DO SET OutputRoot.MRM.str1[M] = InputBody.inner.*[M]; SET M = M + 1; END WHILE;
SET OutputRoot.MRM.str1[M] = InputBody.inner.*[M];ソースからターゲットへのツリー・コピーが要求されます。ターゲット・エレメントがまだ存在しないため、それが作成され、ソースと同じ値およびタイプ が設定されます。
これは他の ESQL の振る舞いと一貫していますが、タイプ list の値を持つエレメントの場合には、このコードによって誤った妥当性検査エラーが生成される可能性があります。
SET OutputRoot.MRM.str1[M] = FIELDVALUE(InputBody.inner.*[M]);