XML模式:如何更改文档中所有字符串的maxLength

时间:2019-08-15 21:58:24

标签: xml xsd xsd-validation xml-validation

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

2 个答案:

答案 0 :(得分:1)

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

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

您有一个正确的想法,即将xsd:simpleType定义为xsd:restriction的{​​{1}},并在需要时使用该用户定义的类型。只是不要将长度放入类型名称中。 (此外,类型名称应基于域,而不是基于实现。)这样,您将可以在一个位置根据需要调整xsd:string

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

答案 1 :(得分:0)

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

用户无法更改xs:string之类的内置类型的语义。正如您所建议的,您需要定义一个子类型。而且,如果您想在所有地方使用xs:string的相同子类型,那么您将不得不在所有地方进行更改。您可以通过各种方式使执行全局替换的过程自动化,但是必须进行全局替换。