5

假设我正在处理一个 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:restriction 中的模式或基于长度的 xsd 元素。因此,我必须在模式中添加最大长度限制。

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

4

1 回答 1

5

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

这是规范中的相关条目:

Schema Component Constraint: Simple Type Restriction (Facets) 对于一个简单类型定义(称为 R)来限制另一个简单类型定义(称为 B)具有一组方面(称为此 S),以下所有条件都必须为真:

1 R的{variety}与B的相同。

2 如果{variety}是原子的,R的{primitive type definition}与B的相同。

3 R 的 {facets} 是 B ·overlay· 与 S 的 {facets}。

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

因此,可以创建一个始终无法通过验证的 simpleType - 如果您pattern要求该值必须为 37 个字符长,并且maxLength为 36,那么这些方面中至少有一个将始终失败。

也就是说,pattern给定类型中的多个元素被视为替代项,(请参阅: “Constraining Facets”中的“pattern”

于 2011-10-21T15:52:10.100 回答