【发布时间】:2009-06-08 20:51:36
【问题描述】:
我有一个关于在我的 xml 架构 (xsd) 中添加限制的问题。我有一个复杂的类型:
<xsd:complexType name="xxx">
<xsd:attribute/>
.....
</xsd:complexType>
我在这个复杂类型中有很多属性,其中很少有字符串类型的。现在我希望将这些字符串类型属性限制为 y no。的字符,我如何添加这个限制?
谢谢! -安库什
【问题讨论】:
我有一个关于在我的 xml 架构 (xsd) 中添加限制的问题。我有一个复杂的类型:
<xsd:complexType name="xxx">
<xsd:attribute/>
.....
</xsd:complexType>
我在这个复杂类型中有很多属性,其中很少有字符串类型的。现在我希望将这些字符串类型属性限制为 y no。的字符,我如何添加这个限制?
谢谢! -安库什
【问题讨论】:
你需要像这样创建一个简单的类型:
<xs:simpleType name="LimitedString">
<xs:restriction base="xs:string">
<xs:maxLength value="50" />
</xs:restriction>
</xs:simpleType>
然后在你的架构中使用这个新类型:
<xs:complexType name="test">
<xs:sequence>
<xs:element name="abc" type="xs:String" />
</xs:sequence>
<xs:attribute type="LimitedString" name="myattr" />
</xs:complexType>
马克
【讨论】:
您可以将字符串限制为多个字符,如下所示:
<xs:simpleType name="threeCharString">
<xs:annotation>
<xs:documentation>3-char strings only</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:string">
<xs:length value="3"/>
</xs:restriction>
</xs:simpleType>
上面的 xs:length 将字符串的长度限制为 正好 3 个字符。您也可以使用 xs:minLength 和 xs:maxlength,或同时使用两者。
你可以提供这样的模式:
<xs:simpleType name="fourCharAlphaString">
<xs:restriction base="xs:string">
<xs:pattern value="[a-zA-Z]{4}"/>
</xs:restriction>
</xs:simpleType>
上面说的是 4 个字符,可以是 a-z、A-Z 中的任何一个。 xs:pattern 是一个正则表达式,所以带着它去镇上吧。
您可以通过这种方式将字符串限制为一组特定的字符串:
<xs:simpleType name="iso3currency">
<xs:annotation>
<xs:documentation>ISO-4217 3-letter currency codes. Only a subset are defined here.</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:string">
<xs:length value="3"/>
<xs:enumeration value="AUD"/>
<xs:enumeration value="BRL"/>
<xs:enumeration value="CAD"/>
<xs:enumeration value="CNY"/>
<xs:enumeration value="EUR"/>
<xs:enumeration value="GBP"/>
<xs:enumeration value="INR"/>
<xs:enumeration value="JPY"/>
<xs:enumeration value="RUR"/>
<xs:enumeration value="USD"/>
</xs:restriction>
</xs:simpleType>
【讨论】:
marc_s 的答案要求您为可能使用的每个可能的字符串长度定义一个新类型。相反,您可以直接在属性本身上定义限制。
<xs:complexType name="Test">
<xs:attribute name="LimitedString">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value = "50"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
【讨论】:
添加这个,它对我有用,
<xs:element name="vendor">
<xs:simpleType>
<xs:annotation>
<xs:documentation>80-char strings only</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:string">
<xs:maxLength value="80"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
【讨论】:
您始终可以在 xsd 中定义字符串的最大长度。
只需添加属性maxLength 即可。 minLength.
【讨论】: