FOR フィールド関数は式を評価し、結果値 TRUE、FALSE、または UNKNOWN を割り当てます。
FOR を使用すると、反復フィールドのすべてのインスタンスを反復する式を書き込むことができます。各インスタンスに対してブール式を処理し、結果を照合します。
FOR ALL Body.Invoice.Purchases."Item"[] AS I (I.Quantity <= 50)
その情報はコンテキストから入手できるため、この構文は不要に思えるかもしれませんが、しかし、これは他の構文との一貫性を保つ役割があります。
ASclause 文節は、フィールド参照内の名前 I を反復フィールドの現行のインスタンスと関連付けます。これは、C++ などのオブジェクト指向言語で使用される iterator クラスの概念と類似しています。括弧付きの式は、Item フィールドの各インスタンスに対して評価される述部です。
FOR ANY Body.Invoice.Purchases."Item"[] AS I (I.Title = 'The XML Companion')副述部は TRUE と評価されます。しかし、次の式では FALSE を戻します。
FOR ANY Body.Invoice.Purchases."Item"[] AS I (I.Title = 'C Primer')これは、C Primer がこの invoice (送り状) の中に含まれていないためです。このインスタンスで、invoice (送り状) 内のいくつかの項目がブック・タイトルを指すフィールドに含まれていない場合、副述部は UNKNOWN を戻し、比較述部も UNKNOWN の値を戻します。
FOR ANY Body.Invoice.Purchases."Item"[] AS I (I.Book IS NOT NULL AND I.Book.Title = 'C Primer')IS NOT NULL 述部によって確実に、Item フィールドに Book が含まれない場合に、副述部が FALSE の値を戻すようにします。