首页 > 解决方案 > XML 模式:如何更改文档中所有字符串的 maxLength

问题描述

我想在一个地方设置架构范围的maxLength值,xsd:string并让它适用于任何xsd:string使用的地方。例如,我想将所有字符串限制为 50 个字符。

我知道我可以做到这一点...

<xsd:simpleType name="MaxLen50">
  <xsd:restriction base="xsd:string">
    <xsd:maxLength value="50"/>
  </xsd:restriction>
</xsd:simpleType>
...
<xsd:element name="Foo" type="MaxLen50" />
<xsd:element name="Bar" type="MaxLen50" />
<xsd:element name="Baz" type="MaxLen50" />

...但问题是我必须转到 XSD 中的每个字符串并将其xsd:stringMaxLen50. 我只想设置默认值xsd:string并将其应用于所有元素type="xsd:string"

标签: xmlxsdxsd-validationxml-validation

解决方案


您混淆了内置类型和用户定义类型。

内置/原始类型是用于创建用户定义类型的基本构建块。您不会直接更改内置类型。

您有正确的想法将 a 定义xsd:simpleType为 a xsd:restrictionofxsd:string并在需要时使用该用户定义的类型。只是不要将长度烘焙到类型的名称中。(此外,类型名称应该是基于域的,而不是基于实现的。)这样您就可以50根据要求在一个地方进行调整。

最后,请注意,如果您真的想50在已发布的 XSD 中更改 XSD 现有文档、代码、API 等的版本,更值得您关注的维护问题。


推荐阅读