xsd:simpleType: xsd:pattern和xsd:maxLength可以一起工作吗?



假设我正在处理一个xsd:simpleType,它是一个字符串,需要具有特定的字符集和特定的最大长度,类似于以下代码:

<xsd:simpleType name="MyType">
    <xsd:restriction base="xsd:string">
    <xsd:pattern value="[0-9]" />
    <xsd:maxLength value="36" />
    </xsd:restriction>
</xsd:simpleType>  
所以我的xsd类型将是一个只有数字的字符串,最多36个字符。我的问题是xsd:pattern和xsd:maxLength(或任何其他类似的标记,如minLength)是否可以一起工作。我的直觉是否定的;仅在XSD:限制中使用基于模式或基于长度的XSD元素。因此,我必须将最大长度限制添加到模式中。

请注意,我确实通过在Java上解组xml进行了测试,验证失败了。无论如何,我要寻找的是信息作为两个模式和maxLength如何以及是否可以一起工作。

限制的所有方面都应用于类型。这意味着上面的定义定义了一个具有给定模式且长度限制为36个字符的类型。

以下是规范中的相关条目:

Schema Component Constraint: Simple Type Constraint (Facets简单类型定义(称为R)来限制另一个简单类型定义(设为B)有一组面(设为S)所有的以下内容必须为真:

1 R的{品种}与b的{品种}相同

2如果{variety}是原子的,则R的{基本类型定义}是与b相同

3 R的{facets}就是B的{facets}·覆盖·s

所有方面都是独立应用的,只有当值满足所有限制时才会被认为是有效的。这还包括对给定类型派生的类型的任何限制。

因此有可能创建一个总是验证失败的simpleType -如果您的pattern强制要求值必须是37个字符长,并且maxLength是36,那么这些方面中至少有一个将总是失败。

也就是说,给定类型中的多个pattern元素被视为可选元素,(参见:"约束facet"中的"模式")

最新更新