2009-06-08 7 views
25

J'ai une question concernant l'ajout de restriction dans mon schéma xml (xsd). J'ai un type complexe comme:XSD: comment limiter le nombre de caractères dans un attribut de type chaîne?

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

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

Merci! -Ankush

Répondre

49

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

21

Vous pouvez limiter la chaîne à un certain nombre de caractères comme ceci:

<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: longueur dans les limites ci-dessus 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 motif comme ceci:

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

Le dit ci-dessus, 4 caractères, l'une quelconque des a-z, A-Z. Le xs: motif est une expression régulière, alors allez en ville avec.

Vous pouvez limiter la chaîne à un ensemble de cordes de cette façon:

<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

xs: longueur nécessite cependant la chaîne à la longueur exacte définie - il ne limite pas seulement la longueur maximale. –

+0

le xs: length est redondant, puisque l'énumération définit déjà toutes les valeurs acceptables comme ayant trois caractères. –

0

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

10

La réponse de marc_s vous demanderait de définir un nouveau type pour chaque longueur de chaîne que vous pourriez utiliser. 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> 
3

Ajouter 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> 
+0

Vous pourriez envisager d'expliquer comment implémenter ce que vous suggérez avec un échantillon de code. Votre réponse n'est pas claire pour le moment –

Questions connexes