XSD:如何限制字符串类型属性中的字符数?

时间:2009-06-08 20:51:37

标签: xml xsd

我有一个关于在我的xml架构(xsd)中添加限制的问题。我有一个复杂的类型:

<xsd:complexType name="xxx">
   <xsd:attribute/>
   .....
</xsd:complexType>

我在这个复杂类型中有很多属性,而且很少有属于字符串类型。现在我希望将这些字符串类型属性限制为y no。 chars,我该如何添加此限制?

谢谢! -Ankush

5 个答案:

答案 0 :(得分:58)

你需要像这样创建一个简单的类型:

  <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>

马克

答案 1 :(得分:21)

您可以将字符串限制为多个字符,如下所示:

<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>

上面说的是a-z,A-Z中任何一个的4个字符。 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>

答案 2 :(得分:12)

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>

答案 3 :(得分:3)

添加此功能,它对我有用,

<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>

答案 4 :(得分:0)

您始终可以在xsd中定义字符串的最大长度。 只需添加属性manLength resp。的minLength。