【问题标题】:XSD: how to restrict number of characters in string type attribute?XSD:如何限制字符串类型属性中的字符数?
【发布时间】:2009-06-08 20:51:36
【问题描述】:

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

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

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

谢谢! -安库什

【问题讨论】:

    标签: xml xsd


    【解决方案1】:

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

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

    马克

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • xs:length 但是要求字符串是定义的确切长度 - 它不仅限制最大长度。
      • xs:length 是多余的,因为枚举已经将所有可接受的值定义为具有三个字符。
      【解决方案3】:

      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>
      

      【讨论】:

        【解决方案4】:

        添加这个,它对我有用,

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

        【讨论】:

        • 您可能需要考虑解释如何使用代码示例来实现您的建议。你的答案目前还不清楚
        【解决方案5】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-08-24
          • 2021-08-12
          • 1970-01-01
          • 1970-01-01
          • 2016-03-02
          相关资源
          最近更新 更多