我想在一个地方设置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"
的元素
答案 0 :(得分:1)
您正在混淆内置类型和用户定义类型。
内置/原始类型是用于创建用户定义类型的基本构建块。您不会直接更改内置类型。
您有一个正确的想法,即将xsd:simpleType
定义为xsd:restriction
的{{1}},并在需要时使用该用户定义的类型。只是不要将长度放入类型名称中。 (此外,类型名称应基于域,而不是基于实现。)这样,您将可以在一个位置根据需要调整xsd:string
。
最后,请注意,如果您实际上想在已发布的XSD中更改50
,则更值得关注的维护问题涉及现有文档,代码,API等的XSD版本。
答案 1 :(得分:0)
就个人而言,我认为在所有字符串上定义50个字符的全局限制是一个非常糟糕的设计选择。它需要一回到打孔卡的时代。
用户无法更改xs:string之类的内置类型的语义。正如您所建议的,您需要定义一个子类型。而且,如果您想在所有地方使用xs:string的相同子类型,那么您将不得不在所有地方进行更改。您可以通过各种方式使执行全局替换的过程自动化,但是必须进行全局替换。