2009-06-08 20 views
25

Tengo una pregunta sobre la adición de restricciones en mi esquema xml (xsd). Tengo un tipo complejo como:XSD: cómo restringir el número de caracteres en el atributo de tipo de cadena?

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

Tengo muchos atributos en este tipo complejo, y algunos de ellos son del tipo de cadena. Ahora quiero que esos atributos de tipo de cadena estén restringidos a y no. de caracteres, ¿cómo agrego esta restricción?

Gracias! -Ankush

Respuesta

49

Es necesario crear un tipo simple de este modo:

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

y luego usar este nuevo tipo en el esquema:

<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

Puede restringir el cadena a una serie de caracteres como este:

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

El xs: longitud en el anterior limita la longitud de la cadena a exactamente 3 caracteres. También puede usar xs: minLength y xs: maxlength, o ambos.

Puede proporcionar un patrón de este modo:

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

Lo anterior dice, 4 caracteres, de cualquiera de a-z, A-Z. El xs: patrón es una expresión regular, así que ve a la ciudad con él.

puede restringir la cadena a un determinado conjunto de cuerdas de esta manera:

<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: longitud sin embargo requiere la cadena a ser la longitud exacta definida - que no sólo limita la longitud máxima. –

+0

xs: length es redundante, ya que la enumeración ya define todos los valores aceptables como si tuvieran tres caracteres. –

0

siempre se puede definir la longitud máxima de una cadena en xsd. Simplemente agregue el atributo manLength resp. longitud mínima.

10

La respuesta de marc_s requeriría que definiera un nuevo tipo para cada longitud de cadena posible que pueda usar. En su lugar, puede definir la restricción directamente en el atributo en 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

Añadir este y funcionó para mí,

<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

Es posible que desee considerar explicar cómo implementar lo que está sugiriendo con una muestra de código. Tu respuesta no está clara en este momento –

Cuestiones relacionadas