FOR 字段函数对表达式求值并指定 TRUE、FALSE 或 UNKNOWN 等结果值。
FOR 函数可用于编写迭代重复字段所有实例的表达式。对于每个实例,它处理一个布尔值表达式并整理结果。
FOR ALL Body.Invoice.Purchases."Item"[] AS I (I.Quantity <= 50)
有时此语法好像不必要,因为可以从上下文获取此项信息,但执行它有助于与其他语法部分保持一致。
ASclause 将字段引用中的名称 I 与重复字段的当前实例关联在一起。这类似于某些面向对象的语言(例如,C++)中使用的迭代器类概念。括号中的表达式是谓词,需要为 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。如果在该实例中,发票中的某些项不包含书籍标题字段,子谓词将返回 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 值。