假设我正在处理一个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:restriction中使用。因此,我必须在模式中添加最大长度限制。
请注意,我确实通过在Java上解组xml来测试这一点,但验证失败。无论如何,我寻找的是两个模式和maxLength如何以及是否可以协同工作的信息。
发布于 2011-10-21 23:52:10
限制上的所有方面都应用于一个类型。这意味着您上面的定义确实定义了一个具有给定模式的类型,并且长度限制为36个字符。
下面是来自the spec的相关条目
模式组件约束:简单类型定义(称为R)的简单类型限制( facets )要使用一组方面(称为S)限制另一个简单类型定义(称为B),必须满足以下所有条件:
1 R的{变化}与B的{变化}相同。
2如果{ definition}是原子的,则R的{原语类型定义}与B的{原语类型定义}相同。
3 R的{facets}是B的{facets}与S重叠。
所有方面都是独立应用的,只有当值满足所有限制时,它才被认为是有效的。这还包括对派生给定类型的类型施加的任何限制。
因此,可以创建一个始终无法通过验证的simpleType -如果您的pattern要求值必须为37个字符,而maxLength为36,那么这些方面中至少有一个将始终失败。
也就是说,给定类型中的多个pattern元素被视为替代项(参见:"pattern" in "Constraining Facets")
https://stackoverflow.com/questions/7851845
复制相似问题