ecb*_*die 5 regex xsd simpletype unmarshalling xsd-validation
假设我正在处理一个xsd:simpleType,它是一个字符串,需要具有特定的字符集和特定的最大长度,类似于下面的代码:
<xsd:simpleType name="MyType">
<xsd:restriction base="xsd:string">
<xsd:pattern value="[0-9]" />
<xsd:maxLength value="36" />
</xsd:restriction>
</xsd:simpleType>
Run Code Online (Sandbox Code Playgroud)
所以我的xsd类型将是一个只有数字的字符串,最多36个字符.我的问题是xsd:pattern和xsd:maxLength(或任何其他类似的标签,如minLength)是否可以一起工作.我的直觉不是; 基于模式或基于长度的xsd元素仅在xsd:restriction中.因此,我必须将最大长度限制添加到模式中.
请注意,我通过在Java上解组xml并验证失败来测试它.无论如何,我正在寻找的信息是两个如何以及模式和maxLength可以一起工作的信息.
限制的所有方面都应用于类型.这意味着上面的定义确实定义了具有给定模式的类型,并且长度限制为36个字符.
以下是规范中的相关条目:
模式组件约束:简单类型限制(构面)对于简单类型定义(称为R)以使用一组构面限制另一个简单类型定义(称为B)(调用此S),以下所有必须为真:
1 R的{variety}与B的{variety}相同.
2如果{variety}是原子的,则R的{primitive type definition}与B的{primitive type definition}相同.
3 R的{facets}是B·的{facets}覆盖的S.
所有方面都是独立应用的,只有当该值满足所有限制时才会被视为有效.这还包括对给定类型派生类型的任何限制.
因此,可以创建一个始终无法验证的simpleType - 如果您pattern要求该值必须为37个字符长,并且maxLength为36,那么这些方面中的至少一个将始终失败.
也就是说,pattern给定类型中的多个元素被视为替代元素(参见: "约束小平面"中的"模式")
| 归档时间: |
|
| 查看次数: |
4002 次 |
| 最近记录: |