首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >xsd:simpleType: xsd:pattern和xsd:maxLength可以协同工作吗?

xsd:simpleType: xsd:pattern和xsd:maxLength可以协同工作吗?
EN

Stack Overflow用户
提问于 2011-10-21 23:39:32
回答 1查看 4.8K关注 0票数 5

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

代码语言:javascript
复制
<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如何以及是否可以协同工作的信息。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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")

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7851845

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档