值约束通过定义它可以表示的值的局限性来细化简单类型。
能够约束元素可以采用的值通常会很有用,这可能确保消息符合业务规则。本主题描述了如何将值约束添加到简单类型以约束基于该简单类型的所有元素的值。
此处讨论的大部分值约束通过 XML 模式面建模并与简单类型相关联。但是,您可为元素定义缺省值和固定值,且这些值与元素本身相关联。
如果输入消息中缺少某个属性,则将为此属性指派缺省值。
注意,缺省值约束与元素本身相关联,因此无法继承。
如果属性出现在输入消息中,则它必须有固定值。如果输入消息中缺少某个属性,则将为此属性指派固定值。
固定值约束与元素本身相关联,因此无法继承。
长度约束可应用到从 xsd:hexBinary、xsd:base64Binary 或 xsd:string(包含内置模式类型,例如,xsd:normalisedString)派生出的简单类型。
长度约束从祖代类型继承而来,并且任何为简单类型定义的长度约束不能释放任何其祖代类型施加的约束。例如,从类型“shortString”(最大长度=10)派生类型“longString”(最大长度=100)将是非法的。
范围约束从祖代类型继承而来,并且任何为简单类型定义的范围约束不能释放任何其祖代类型施加的约束。例如,从类型“smallNumber”(最大包含=10)派生类型“largeNumber”(最大包含=100)是非法的。
消息模型不允许排除约束应用于非整数型(浮点、十进制、双精度、日期时间等)。
枚举约束从祖代类型继承而来,并且为简单类型定义的任何枚举约束的集合不能增加允许值的范围。例如,从类型“MonoColours”(只带有“黑色”和“白色”的枚举)派生类型“AllColours”(带有彩虹的所有颜色的枚举)将是非法的。
精度约束从祖代类型继承而来,并且任何为简单类型定义的精度约束不能释放任何其祖代类型施加的约束。例如,从类型“notVeryPrecise”(段位数=1)派生类型“veryPrecise”(段位数=10)是非法的。
对于所有值约束,某个简单类型可从它所基于的简单类型继承模式约束。在这种情况下,必须满足每个祖代类型提供的模式约束集合以及简单类型本身提供的模式约束集合。换句话说,类型层次结构中每个级别的模式约束集合是使用布尔值 AND 组合的。
模式约束只能应用于从 xsd:string 派生出的简单类型。