Saltar al contenido principal

restriction

La gran mayoría de las veces, se utiliza simpleType con restriction, el cual permite definir restricciones en los tipos de datos. Es decir, la mayoría de las veces se utiliza un simpleType para definir tipos de datos más restrictivos que los proporcionados por el estándar.

Consideremos el siguiente documento XSD:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="ciudad">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="10"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:schema>

Podemos observar que define una restricción para el elemento <ciudad>. Es decir, se está creando un nuevo tipo donde los valores válidos son cadenas de texto de una longitud máxima de 10 caracteres. En el ejemplo anterior, se está aplicando directamente a un elemento.

Creación de un tipo simple

Sin embargo, esto se puede hacer de otra manera:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="ciudad" type="string-10" />

<xs:simpleType name="string-10">
<xs:restriction base="xs:string">
<xs:maxLength value="10"/>
</xs:restriction>
</xs:simpleType>
</xs:schema>

En el documento XSD anterior, se está declarando un elemento <ciudad> donde su tipo de dato es string-10. Este tipo de dato no es un tipo predefinido en el estándar XML Schema, sino que lo hemos definido nosotros. El nombre puede ser cualquiera, siempre que sea una cadena de caracteres válida para asignar al valor de un atributo XML.

En las siguientes líneas, podemos ver cómo se define un tipo de dato personalizado. El elemento simpleType tiene un atributo name con un valor (string-10). Ese valor es el nombre que tomará el nuevo tipo que se definirá. Como se ha comentado, este nombre lo escogemos nosotros.

Ambos documentos XSD presentados son equivalentes, con la excepeción de que el último permite reutilizar el tipo de dato creado. Es decir, si tenemos otro elemento diferente al cual se le quiere aplicar la restricción (o también un atributo), solo basta con indicar el nombre del tipo en su atributo type.