xsd:simpleType:xsd:pattern 和 xsd:maxLength 可以一起使用吗?

发布于 2024-12-11 03:37:27 字数 583 浏览 0 评论 0原文

假设我正在处理一个 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 如何以及是否可以一起工作的两种信息。

Let's say I am dealing with an xsd:simpleType that is a string, needs to be of a certain character set and of a specific maximum length, similar to the below code:

<xsd:simpleType name="MyType">
    <xsd:restriction base="xsd:string">
    <xsd:pattern value="[0-9]" />
    <xsd:maxLength value="36" />
    </xsd:restriction>
</xsd:simpleType>  

So my xsd type will be a string of only digits and maximum of 36 characters. My question is whether the xsd:pattern and xsd:maxLength (or any other similar tag like minLength) can work together. My intuition is no; either pattern or length-based xsd elements only in the xsd:restriction. Therefore, I would have to add the max length restriction into the pattern.

Please note that I did test this out by unmarshalling an xml on Java and the validation failed. Regardless, what I am looking for is information as two how and whether pattern and maxLength can work together.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

等你爱我 2024-12-18 03:37:27

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

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

架构组件约束:简单类型限制(构面)
简单类型定义(称之为 R)来限制另一个简单类型
定义(称为 B)与一组方面(称为 S)所有
以下必须正确:

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

2 如果{variety}是原子的,则R的{原始类型定义}是
与B相同。

3 R 的 {facets} 是 B 的 {facets}
·用 S 覆盖·。

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

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

也就是说,给定类型中的多个 pattern 元素被视为替代元素(请参阅:“约束方面”中的“模式”

All facets on a restriction are applied to a type. This means that your definition above does define a type that has the given pattern and is limited to 36 characters in length.

Here's the relevant entry from the spec:

Schema Component Constraint: Simple Type Restriction (Facets) For a
simple type definition (call it R) to restrict another simple type
definition (call it B) with a set of facets (call this S) all of the
following must be true:

1 The {variety} of R is the same as that of B.

2 If {variety} is atomic, the {primitive type definition} of R is the
same as that of B.

3 The {facets} of R are the {facets} of B
·overlaid· with S.

All facets are independently applied, and only if the value meets all restrictions will it be considered valid. This also includes any restrictions placed on the type from which the given type derives.

It is therefore possible to create a simpleType that will always fail validation - If your pattern were to mandate that the value must be 37 characters long, and the maxLength is 36, then at least one of those facets will always fail.

That said, multiple pattern elements in a given type are treated as alternatives, (See: "pattern" in "Constraining Facets")

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文