web-dev-qa-db-ja.com

XSD:文字列型属性の文字数を制限する方法は?

Xmlスキーマ(xsd)に制限を追加することに関して質問があります。私のような複合型があります:

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

この複合型には多くの属性がありますが、文字列型の属性はほとんどありません。ここで、これらの文字列型の属性をy noに制限したいです。の文字、この制限を追加するにはどうすればよいですか?

ありがとう! -Ankush

32
Ankush

次のような単純な型を作成する必要があります。

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

マーク

60
marc_s

次のように、文字列をいくつかの文字に制限できます。

<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は、文字列の長さをexactly3文字に制限します。 xs:minLengthxs: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>
21
Cheeso

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

これを追加してください、それは私のために働いた、

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

xsdで文字列の最大長をいつでも定義できます。属性manLength respを追加するだけです。 minLength。

0
Luixv