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
.