XML架构:如何更改文档中所有字符串的最大长度



我想在一个地方设置架构范围的maxLengthxsd: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:string更改为MaxLen50. 我只想为xsd:string设置默认值,并将其应用于所有具有type="xsd:string"的元素

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

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

xsd:simpleType定义为xsd:stringxsd:restriction并在需要时使用该用户定义类型时,您的想法是正确的。 只是不要将长度烘焙到类型名称中。 (此外,类型名称应基于域,而不是基于实现。 这样,您就可以在单个位置根据要求调整50

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

就个人而言,我认为在所有字符串上定义 50 个字符的全局限制是一个非常糟糕的设计选择。它让人回到打孔卡的时代。

用户无法更改内置类型(如 xs:string(的语义。您需要按照您的建议定义一个子类型。如果你想在任何地方使用相同的xs:string子类型,你将不得不在任何地方进行更改。有各种各样的方法可以自动执行全局替换的过程,但必须进行全局替换。

相关内容

  • 没有找到相关文章

最新更新