La función del campo FOR evalúa una expresión y asigna un valor resultante de TRUE, FALSE o UNKNOWN.
>>-FOR--+--------+----------------------------------------------> +-ALL----+ +- -ANY--+ '- -SOME-' .-,--------------------------------------. V | >----referenciacampo--+-------------------+-+-------------------> '-AS--Identificador-' >--(--expresión--)---------------------------------------------><
FOR le permite escribir una expresión que itera por todas las instancias de un campo de repetición. Para cada instancia procesa una expresión booleana y coteja los resultados.
FOR ALL Body.Invoice.Purchases."Item"[] AS I (I.Quantity <= 50)
En algunos casos, esta sintaxis parece ser innecesario porque puede obtener esta información a partir del contexto pero esto se lleva a cabo por motivos de coherencia con otros fragmentos de sintaxis.
La cláusula AS asocia el nombre I de la referencia de campo con la instancia actual del campo de repetición. Esto es similar al concepto de clases de iterador que se utiliza en algunos lenguajes orientados a objeto como, por ejemplo, C++. La expresión entre paréntesis es un predicado que se evalúa para cada instancia del campo Item.
FOR ANY Body.Invoice.Purchases."Item"[] AS I (I.Title = 'The XML Companion')
el subpredicado se evalúa en TRUE. No obstante, la expresión siguiente devuelve FALSE: FOR ANY Body.Invoice.Purchases."Item"[] AS I (I.Title = 'C Primer')
debido a que en esta factura no se incluye C Primer. Si en esta instancia algunos de los elementos de la factura no incluye un campo de título de libro, el subpredicado devuelve UNKNOWN y el predicado cuantificado devuelve el valor UNKNOWN.FOR ANY Body.Invoice.Purchases."Item"[] AS I (I.Book IS NOT NULL AND
I.Book.Title = 'C Primer')
El predicado IS NOT NULL garantiza que, si un campo Item no contiene un Book,
el subpredicado devuelve el valor FALSE.