web-dev-qa-db-fra.com

XSD: comment limiter le nombre de caractères dans l'attribut de type chaîne?

J'ai une question concernant l'ajout d'une restriction dans mon schéma xml (xsd). J'ai un type complexe comme:

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

J'ai beaucoup d'attributs dans ce type complexe, et peu d'entre eux sont de type chaîne. Maintenant, je veux que ces attributs de type de chaîne soient limités à y non. des caractères, comment puis-je ajouter cette restriction?

Merci! - Ankush

28
Ankush

Vous devez créer un type simple comme ceci:

  <xs:simpleType name="LimitedString">
    <xs:restriction base="xs:string">
      <xs:maxLength value="50" />
    </xs:restriction>
  </xs:simpleType>

puis utilisez ce nouveau type dans votre schéma:

  <xs:complexType name="test">
    <xs:sequence>
      <xs:element name="abc" type="xs:String" />
    </xs:sequence>
    <xs:attribute type="LimitedString" name="myattr" />
  </xs:complexType>

Marc

54
marc_s

Vous pouvez restreindre la chaîne à un nombre de caractères comme celui-ci: 

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

Le xs: length dans ce qui précède limite la longueur de la chaîne à exactement 3 caractères. Vous pouvez également utiliser xs: minLength et xs: maxlength , ou les deux. 

Vous pouvez fournir un modèle comme ceci: 

<xs:simpleType name="fourCharAlphaString">
  <xs:restriction base="xs:string">
    <xs:pattern value="[a-zA-Z]{4}"/>
  </xs:restriction>
</xs:simpleType>

Ce qui précède dit, 4 caractères de n'importe lequel de a-z, A-Z. Le xs: pattern est une expression régulière, alors allez en ville avec. 

Vous pouvez limiter la chaîne à un ensemble particulier de chaînes de la manière suivante: 

<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

La réponse de marc_s nécessiterait que vous définissiez un nouveau type pour chaque longueur de chaîne possible. Au lieu de cela, vous pouvez définir la restriction directement sur l'attribut lui-même.

  <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

Ajoutez ceci et cela a fonctionné pour moi,

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

vous pouvez toujours définir la longueur maximale d'une chaîne dans xsd . Ajoutez simplement l'attribut manLength resp. Longueur minimale.

0
Luixv