Facetas de XSD

La restricción (restriction) se utiliza para definir los valores aceptables para un elemento XML o atributo. La restricción de un elemento XML se llama faceta.

Restricciones de valores

El siguiente ejemplo define un elemento con restricción y nombre "age". El valor de age no puede ser menor que 0 ni 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>

Restricción de un grupo de valores

Para limitar el contenido de un elemento XML a un grupo de valores admitidos, debemos usar restricciones de enumeración (enumeration constraint).

El siguiente ejemplo define un elemento con un nombre limitado llamado "car". Los valores aceptados son solo: 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 siguiente ejemplo también se puede escribir como:

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

Comentarios:En este caso, el tipo "carType" puede ser utilizado por otros elementos, ya que no es parte del elemento "car".

Restricción de una serie de valores

Para limitar el contenido de un elemento XML a una serie de números o letras admitidos, debemos usar restricciones de patrones (pattern constraint).

El siguiente ejemplo define un elemento con un nombre limitado llamado "letter". Los valores aceptados son una de las letras minúsculas del abecedario a-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 con un nombre limitado llamado "initials". Los valores aceptados son tres letras mayúsculas del abecedario A-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 con un nombre limitado llamado "initials". Los valores aceptados son tres letras mayúsculas o minúsculas del abecedario a-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 con un nombre limitado llamado "choice". Los valores aceptados son una de las letras x, y o z:

<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 con un nombre limitado llamado "prodid". Los valores aceptados son una secuencia de cinco dígitos árabes, y cada dígito está en el rango de 0-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 limitaciones para una serie de valores

El siguiente ejemplo define un elemento con un nombre limitado llamado "letter". Los valores aceptados son cero o más letras 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 con un nombre limitado llamado "letter". Los valores aceptados son uno o más pares de letras, cada par compuesto por una letra minúscula seguida de una letra mayúscula. Por ejemplo, "sToP" pasará la validación de este patrón, pero "Stop", "STOP" o "stop" no lo harán:

<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 con un nombre limitado llamado "gender". Los valores aceptados son male o female:

<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 con un nombre limitado llamado "password". Los valores aceptados son una línea de caracteres de 8 caracteres, que deben ser letras mayúsculas o minúsculas del a - z o números del 0 al 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>

Limitación de caracteres de espacio en blanco

Para especificar el modo de procesamiento de los caracteres de espacio en blanco, debemos usar la limitación de whiteSpace.

El siguiente ejemplo define un elemento con un nombre limitado llamado "address". La limitación de whiteSpace se establece en "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 con un nombre limitado llamado "address". La limitación de whiteSpace se establece en "replace", lo que significa que el procesador XML eliminará todos los caracteres de espacio en blanco (salto de línea, retorno de carro, espacio y tabulador):

<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 un límite. Este límite whiteSpace se establece en "collapse", lo que significa que el procesador XML eliminará todos los caracteres de espacio en blanco (saltos de línea, retornos de carro, espacios y tabuladores se reemplazarán por un espacio, se eliminarán los espacios en blanco al inicio y al final, y los espacios en blanco consecutivos se reducirán a un solo espacio):

<xs:element name="address">
<xs:simpleType>
  <xs:restriction base="xs:string">
    <xs:whiteSpace value="collapse"/>
  </xs:restriction>
</xs:simpleType>
</xs:element>

Límite de longitud

Para limitar la longitud de los valores de un elemento, es necesario utilizar los límites length, maxLength y minLength.

Este ejemplo define un elemento llamado "password" con un límite y debe tener exactamente 8 caracteres:

<xs:element name="password">
<xs:simpleType>
  <xs:restriction base="xs:string">
    <xs:length value="8"/>
  </xs:restriction>
</xs:simpleType>
</xs:element>

Este ejemplo también define un elemento llamado "password" con un límite. Su valor debe tener como mínimo 5 caracteres y como máximo 8 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>

Límite de tipo de datos

Límite Descripción
enumeration Define una lista de valores aceptables
fractionDigits Define el número máximo permitido de dígitos decimales. Debe ser mayor o igual a 0.
length Define el número exacto permitido de caracteres o elementos de una lista. Debe ser mayor o igual a 0.
maxExclusive Define el límite superior de un valor numérico. Los valores permitidos deben ser menores que este valor.
maxInclusive Define el límite superior de un valor numérico. Los valores permitidos deben ser menores o iguales a este valor.
maxLength Define el número máximo permitido de caracteres o elementos de una lista. Debe ser mayor o igual a 0.
minExclusive Define el límite inferior de un valor numérico. Los valores permitidos deben ser mayores que este valor.
minInclusive Definir el límite inferior del valor numérico. Los valores permitidos deben ser mayores o iguales a este valor.
minLength Definir el número mínimo de caracteres o elementos permitidos. Debe ser mayor o igual que 0.
pattern Definir la secuencia exacta de caracteres aceptados.
totalDigits Definir la precisión de los dígitos decimales permitidos. Debe ser mayor que 0.
whiteSpace Definir el tratamiento de los caracteres de espacio en blanco (salto de línea, retorno de carro, espacio y tabulador).