Las restricciones se utilizan para definir los valores aceptables para los elementos o atributos XML. Restricciones sobre los elementos XML se llaman facetas.
Restricciones sobre los valores
En el siguiente ejemplo se define un elemento llamado "age" con una restricción. El valor de la edad no puede ser menor que 0 o mayor que 120:
<xs:element name="age">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:minInclusive value="0"/>
<xs:maxInclusive value="120"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
Restricciones en un conjunto de valores
Para limitar el contenido de un elemento XML a un conjunto de valores aceptables, usaríamos la restricción de enumeración.
El ejemplo siguiente define un elemento llamado "car" con una restricción. Los únicos valores aceptables son: Audi, Golf, BMW :
<xs:element name="car">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="Audi"/>
<xs:enumeration value="Golf"/>
<xs:enumeration value="BMW"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
El ejemplo anterior también se podría haber escrito así:
<xs:element name="car" type="carType"/>
<xs:simpleType name="carType">
<xs:restriction base="xs:string">
<xs:enumeration value="Audi"/>
<xs:enumeration value="Golf"/>
<xs:enumeration value="BMW"/>
</xs:restriction>
</xs:simpleType>
Note: En este caso el tipo "carType" puede ser utilizado por otros elementos, ya que no es una parte del "car" elemento.
Las restricciones a una serie de valores
Para limitar el contenido de un elemento XML para definir una serie de números o letras que se pueden utilizar, usaríamos la restricción patrón.
El ejemplo siguiente define un elemento llamado "letter" con una restricción. El único valor aceptable es una de las letras minúsculas de la A a la Z:
<xs:element name="letter">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[a-z]"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
El siguiente ejemplo define un elemento llamado "initials" con una restricción. El único valor aceptable es de tres de las letras mayúsculas de la A a la Z:
<xs:element name="initials">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[A-Z][A-Z][A-Z]"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
El siguiente ejemplo también define un elemento llamado "initials" con una restricción. El único valor aceptable es tres de las minúsculas o en mayúsculas las letras de la A a la Z:
<xs:element name="initials">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[a-zA-Z][a-zA-Z][a-zA-Z]"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
El siguiente ejemplo define un elemento llamado "choice" con una restricción. El único valor aceptable es una de las siguientes letras: x, y, z O:
<xs:element name="choice">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[xyz]"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
El siguiente ejemplo define un elemento llamado "prodid" con una restricción. El único valor aceptable es de cinco dígitos en una secuencia, y cada dígito debe estar en un rango de 0 a 9:
<xs:element name="prodid">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:pattern value="[0-9][0-9][0-9][0-9][0-9]"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
Otras restricciones a una serie de valores
El ejemplo siguiente define un elemento llamado "letter" con una restricción. El valor aceptable es cero o más ocurrencias de letras minúsculas de la A a la Z:
<xs:element name="letter">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="([a-z])*"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
El siguiente ejemplo también define un elemento llamado "letter" con una restricción. El valor aceptable es uno o más pares de cartas, cada par que consiste en una letra minúscula seguido de una letra mayúscula. Por ejemplo, "sToP" será validado por este patrón, pero no "Stop" o "STOP" o "stop" :
<xs:element name="letter">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="([a-z][A-Z])+"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
El siguiente ejemplo define un elemento llamado "gender" con una restricción. El único valor aceptable es hombre o mujer:
<xs:element name="gender">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="male|female"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
El siguiente ejemplo define un elemento llamado "password" con una restricción. Debe haber exactamente ocho caracteres en una fila y esos caracteres deben ser letras mayúsculas o minúsculas de la A a la Z, o un número de 0 a 9:
<xs:element name="password">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[a-zA-Z0-9]{8}"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
Las restricciones a los espacios en blanco
Para especificar cómo caracteres de espacio en blanco debe ser manejado, usaríamos la restricción de espacio en blanco.
En este ejemplo se define un elemento llamado "address" con una restricción. La restricción de espacio en blanco es ajustado a "preserve" , lo que significa que el procesador XML no eliminará ningún carácter de espacio en blanco:
<xs:element name="address">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:whiteSpace value="preserve"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
Este ejemplo también define un elemento llamado "address" con una restricción. La restricción de espacio en blanco es ajustado a "replace" , lo que significa que el procesador XML sustituirá todos los caracteres en blanco el espacio (saltos de línea, tabulaciones, espacios y retornos de carro) con espacios:
<xs:element name="address">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:whiteSpace value="replace"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
Este ejemplo también define un elemento llamado "address" con una restricción. La restricción whiteSpace se establece en "collapse" , lo que significa que el procesador XML eliminará todos los caracteres de espacio en blanco (se alimenta de línea, tabuladores, espacios, retornos de carro se reemplazan con espacios, espacios iniciales y finales se eliminan, y múltiples espacios se reducen a un único espacio):
<xs:element name="address">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:whiteSpace value="collapse"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
Restricciones a la longitud
Para limitar la longitud de un valor en un elemento, usaríamos la longitud, maxLength, y las limitaciones MINLENGTH.
En este ejemplo se define un elemento llamado "password" con una restricción. El valor debe ser exactamente ocho caracteres:
<xs:element name="password">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:length value="8"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
En este ejemplo se define otro elemento llamado "password" con una restricción. El valor debe ser como mínimo de cinco caracteres y un máximo de ocho caracteres:
<xs:element name="password">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="5"/>
<xs:maxLength value="8"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
Las restricciones para los tipos de datos
Restricción | Descripción |
---|---|
enumeration | Define una lista de valores aceptables |
fractionDigits | Especifica el número máximo de decimales permitidos. Debe ser igual o mayor que cero |
length | Especifica el número exacto de caracteres o elementos de lista de permitidos. Debe ser igual o mayor que cero |
maxExclusive | Especifica los límites superiores para los valores numéricos (el valor debe ser inferior a este valor) |
maxInclusive | Especifica los límites superiores para los valores numéricos (el valor debe ser menor o igual a este valor) |
maxLength | Especifica el número máximo de caracteres permitidos o elementos de la lista. Debe ser igual o mayor que cero |
minExclusive | Especifica los límites inferiores para los valores numéricos (el valor debe ser mayor que este valor) |
minInclusive | Especifica los límites más bajos para los valores numéricos (el valor debe ser mayor que o igual a este valor) |
minLength | Especifica el número mínimo de caracteres permitidos o elementos de lista. Debe ser igual o mayor que cero |
pattern | Define la secuencia exacta de caracteres que son aceptables |
totalDigits | Especifica el número exacto de dígitos permitidos. Debe ser mayor que cero |
whiteSpace | Especifica el modo en el espacio blanco (saltos de línea, tabulaciones, espacios y retornos de carro) se maneja |