XSD
Creación, validación y utilización
1. Introducción
● XML Schema permite conseguir un mayor nivel de precisión
en el establecimiento de las reglas de validación,
consiguiendo un nivel de detalle que no es posible
conseguir con los DTD.
2. Estructura Básica
A continuación se muestra un ejemplo en el que se pueden observar
las dos partes del uso de XML Schema:
● el documento XML que se quiere validar
● y el documento XSD.
● El documento XML se debe incluir una referencia al documento
XSD que contiene las reglas de validación.
● En el documento XSD se define la estructura y se indica los
elementos que debe contener el documento XML y de qué tipo son
cada uno.
2. Estructura Básica
● El documento XML se debe incluir una referencia al documento
XSD que contiene las reglas de validación.
<?xml version="1.0" encoding="UTF-8"?>
<mensaje xmlns:xs=”[Link] xs:noNamespaceSchemaLocation=”[Link]”>
<de>Anna</de>
<para>Rocío</para>
<mensaje>Ya estoy en la biblioteca.</mensaje>
</mensaje>
2. Estructura Básica
● En el documento XSD se define la estructura y se indica los elementos que
debe contener el documento XML y de qué tipo son cada uno.
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs=”[Link]
<xs:element name=”mensaje”>
<xs:complexType>
<xs:sequence>
<xs:element name=”de” type=”xs:string”/>
<xs:element name=”para” type=”xs:string”/>
<xs:element name=”mensaje” type=”xs:string”/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
2. Estructura Básica
Entonces, la estructura básica se compone de las
declaraciones:
● del documento XML
● del elemento raíz
● del espacio de nombres
● de los elementos y sus relaciones
● y los atributos
2. Estructura Básica
● Declaración del documento XML:
<?xml version="1.0" encoding="UTF-8"?>
● Declaración del elemento raíz y del espacio de nombres: El
elemento raíz es <xs:schema. El espacio de nombres se asigna
mediante el atributo xmlns y habitualmente se le asocia el
prefijo xs, aunque también es frecuente encontrar el prefijo
xsd.
<xs:schema xmlns:xs=”[Link]
● Declaración de los elementos:
2. Estructura Básica
● Declaración de los elementos:
En esta sección se indican los elementos que componen la
estructura del XML, su jerarquía, relación, atributos y demás
restricciones.
Los elementos se pueden clasificar de varias maneras:
○ Elementos locales y elementos globales
○ Elementos simples y elementos complejos
● Declaración de los atributos:
Se determina qué atributos y qué valores son admitidos.
3. Elementos locales y elementos globales
Los elementos locales son hijos de elementos que no son el elemento raíz y solo
se pueden utilizar una vez.
Los elementos globales son hijos del elemento raíz y pueden ser reutilizados.
<xs:schema xmlns:xs="[Link]
<xs:element name="Persona">
<xs:complexType>
<xs:sequence>
<xs:element name="Nombre" type="xs:string"/>
<xs:element name="Edad" type="xs:int"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
3. Elementos locales y elementos globales
<xs:schema xmlns:xs="[Link]
<xs:element name="Persona">
<xs:complexType>
<xs:sequence>
<xs:element name="Nombre" type="xs:string"/>
<xs:element name="Edad" type="xs:int"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
En este ejemplo:
● El elemento Persona es global y puede reutilizarse.
● Los elementos Nombre y Edad son locales al elemento Persona y no pueden reutilizarse
fuera de este contexto.
4.1. Elementos Simples
Los elementos de tipo simple, solo pueden contener texto, aunque
esta restricción debe explicarse.
● Los tipos de datos que se admiten, pueden ser cadenas de
caracteres, fechas, valores lógicos, etc.
● La restricción hace referencia a que el elemento tendrá un
valor textual que representará cualquiera de estos tipos.
● No podrá contener a otros elementos ni tener atributos.
4.1. Elementos Simples
La sintaxis básica de un elemento simple es la siguiente:
<xs:element name=””></xs:element>
Siendo element la etiqueta que determina que es un elemento y el
atributo name el que determina el nombre de este.
El siguiente código muestra la declaración de dos elementos
simples:
<xs:element name=”email” type=”xs:string”></xs:element>
<xs:element name=”edad” type=”xs:integer”></xs:element>
4.1. Elementos Simples
Además de name, algunos de los atributos que se pueden asignar para
determinar cómo ha de ser un elemento son los siguientes:
type: Tipo de dato.
default: Permite asignar un valor por defecto.
fixed: Determina el valor del atributo en caso de que este exista.
minOccurs: Número mínimo de ocurrencias del elemento. El valor por defecto
es 1. Si se quiere que el número mínimo de ocurrencias sea ilimitado, el
valor que debe de tomar es unbounded.
maxOccurs: Número máximo de ocurrencias del elemento. El valor por defecto
es 1. Si se quiere que el número máximo de ocurrencias sea ilimitado, el
valor que debe de tomar es unbounded.
4.2. Elementos Complejos
Los elementos de tipo complejo pueden actuar de contenedor.
Se declaran utilizando la etiqueta complexType y pueden:
● Contener a otros elementos, pudiendo contener opcionalmente
atributos.
● Estar vacíos, pudiendo contener opcionalmente atributos.
● Tener contenido mixto: otros elementos y texto, pudiendo
contener opcionalmente atributos.
2.3. Elementos Complejos
La sintaxis básica de un elemento complejo es la siguiente:
<xs:element name=”” type=””>
<xs:complexType>
</xs:complexType>
</xs:element>
EJEMPLO: A continuación, se muestra un XML y el XSD que lo valida y
que hace uso de varios tipos de elementos complejos:
EJEMPLO: A continuación, se muestra un XML y el XSD que lo valida y
que hace uso de varios tipos de elementos complejos:
EJEMPLO: A continuación, se muestra un XML y el XSD que lo valida y
que hace uso de varios tipos de elementos complejos:
EXPLICACIÓN:
En este bloque se declara un elemento complejo global contenedor
de otros elementos.
El elemento cliente contiene dos elementos nombre y CIF:
EXPLICACIÓN:
A continuación se muestra el código XML válido para el bloque XML
Schema anterior:
EXPLICACIÓN:
En este bloque se declara un elemento global complejo vacío.
El elemento totalFactura únicamente tiene un atributo euros de
tipo xs:decimal.
EXPLICACIÓN:
A continuación, se muestra el código XML válido para el bloque
XML Schema anterior:
EXPLICACIÓN:
En este bloque se declara un elemento local complejo mixto.
Ele elemento impuesto contiene un atributo nombre de tipo
xs:string y, opcionalmente, un bloque de texto.
EXPLICACIÓN:
A continuación, se muestra el código XML válido para el bloque
XML Schema anterior.
5. Subelementos
Los elementos pueden contener subelementos.
Existen 3 tipos:
● xs:sequence → Indica una secuencia de elementos obligatorios.
Deben aparecer todos y en el mismo orden.
● xs:choise → Señala una secuencia de elementos alternativos.
Solo debe aparecer uno.
● xs:all → Indica una secuencia de elementos opcionales. No es
obligatorio que aparezcan todos ni en el mismo orden.
5. Subelementos
En el siguiente código XSD se indica que en el XML que valida
debe existir un elemento <direccion> que contenga o el elemento
<particular> o el elemento <profesional>.
5. Subelementos
Este fragmento de documento XML sería válido según la regla
anterior:
En cambio, el siguiente fragmento provocará un error, ya que el
subelemento choice sólo acepta uno de los elementos de la
secuencia:
6. Atributos
Los atributos tiene la siguiente sintaxis básica:
<xs:attribute name=”” type=””/>
Las características principales de los atributos son las
siguientes:
● Deben aparecer inmediatamente después de la declaración del
elemento al que hacen referencia.
● El atributo name indica el nombre del atributo.
● El atributo type indica el tipo del atributo. Deben de ser de
tipo simple. El tipo por defecto es anySimpleType, un tipo de
dato genérico que admite cualquier tipo simple.
6. Atributos
● El atributo use hace referencia a su obligatoriedad,
admitiendo los valores required (obligatorio),
optional (opcional, valor por defecto) y prohibited
(el atributo no se puede utilizar en el elemento).
● El atributo default permite asignar un valor por
defecto.
● El atributo fixed determina el valor del atributo en
caso de que este exista.
6. Atributos
● No tiene orden de aplicación.
● No tiene cardinalidad.
● No puede tener hijos.
● Los tipos de valores de los atributos se pueden
restringir con las restricciones.
6. Atributos - ejemplo
En el siguiente fragmento de documento XSD se muestra la
declaración de dos atributos (nombre de tipo string y
urgencia de tipo integer) pertenecientes al elemento
destinatario.
7. Restricciones
En XML Schema se pueden restringir los valores que
pueden tomar los elementos y los atributos.
A estas restricciones se les denomina facetas.
Algunas de las facetas disponibles se recogen en la
siguiente tabla:
FACETA DESCRIPCIÓN
7. Restricciones xs:length Determina una longitud fija.
xs:minLength Establece una longitud mínima.
xs:maxLength Fija una longitud máxima.
xs:totalDigits Determina el máximo número de dígitos que puede tener un número.
xs:fractionDigits Establece el máximo número de decimales que puede tener un número.
xs:minExclusive Determina qué valor debe ser mayor que el valor indicado.
xs:maxExclusive Establece qué valor debe ser menor que el valor indicado.
xs:minInclusive Fija que el valor debe ser mayor o igual que el valor indicado.
xs:maxInclusive Determina que el valor debe ser menor o igual que el valor indicado.
xs:enumeration Establece una lista de valores posibles.
xs:whiteSpace Determina cómo tratar los espacios en blanco, las tabulaciones y los saltos de
línea.
xs:patern Fija un patrón de caracteres permitidos.
7. Restricciones
Ejemplo de restricción de mínimo y máximo:
7. Restricciones
Un posible elemento correcto en el XML sería el
siguiente:
<diaSemana>7</diaSemana>
7. Restricciones
Ejemplo de restricción de enumeración:
7. Restricciones
Un posible elemento correcto en el XML sería el
siguiente:
<diaSemana>sábado</diaSemana>
7. Restricciones
Ejemplo de restricción basada en un patrón:
La expresión indicada en value significa que se requieren cuatro
letras, ya sean estas minúsculas o mayúsculas seguidas de dos
dígitos.
7. Restricciones
Un posible elemento correcto en el XML sería el
siguiente:
<clave>PanI91</clave>
8. Tipos de Datos
Una de las diferencias más evidentes de XML Schema
frente a DTD consiste en la posibilidad de indicar el
tipo de dato preciso que contiene un elemento.
Los tipos de datos más comunes se muestran en la
siguiente tabla:
TIPO DESCRIPCIÓN
8. Tipos de Datos xs:string Cadena de caracteres.
xs:integer Números enteros.
xs:decimal Números decimales, utilizando el punto como separador decimal.
xs:boolean Tipo de dato lógico. Admite los valores “true” y “false”.
xs:date Fechas en formato “AAAA-MM-DD” donde AAAA indica el año, MM el
mes y DD el día del mes.
xs:time Horas en formato “hh:mm:ss” donde hh indica la hora, mm el minuto
y ss el segundo.
xs:duration Un periodo de tiempo en formato “PnYnMnDTnHnMnS”, donde P
indica el periodo, nY número de años, nM número de meses, nD
número de días, T el comienzo de la sección referente al timpo, nH
número de horas, nM número de minútos y nS número de segundos.
8. Tipos de Datos
La relación de tipos de
datos es mucho más
extensa.
En el siguiente diagrama
puedes ver los tipos con
sus jerarquías y
relaciones:
8. Tipos de Datos
XML Schema permite crear tipos derivados a partir de
tipos existentes.
Existen dos mecanismos para la creación de derivación
de los tipos de datos:
● por restricción
● y por extensión.
8. Tipos de Datos click
La creación por restricción tiene la siguiente
sintaxis:
<xs:restriction base=””></xs:restriction>
La creación por extensión sólo permite crear tipos de
datos complejos y tiene la siguiente sintaxis:
<xs:extension base=””></xs:extension>
En ambos casos el valor del atributo base es el tipo
del que se está derivando.
9. Comentarios en XML Schema
Existe un conjunto de elementos dentro de XML Schema que
están orientados a incluir documentación que proporcione
información legible por las personas y las máquinas.
El elemento xs:annotation permite agregar comentarios a
los esquemas.
Este elemento se puede agregar en cualquier lugar del
documento y puede ser contenedor de los elementos
xs:documentation y xs:appinfo, además de permitir
cualquier otro tipo de contenido, incluido HTML.
9. Comentarios en XML Schema
En el siguiente fragmento de código XSD se puede observar
un comentario en el que se proporciona información
general sobre el validador.
10. Actividad Resuelta - Validación con XML Schema
Validar utilizando XML Schema un documento XML que
contiene un registro de temperatura con la siguiente
estructura:
● El elemento principal contiene un registro de
temperaturas con el nombre de la provincia, la fecha
del registro, la temperatura mínima y máxima y una
relación de incidencias.
● La fecha de registro debe ser una fecha válida.
10. Actividad Resuelta - Validación con XML Schema
● La temperatura mínima no debe de ser inferior a -50º.
● La temperatura máxima no debe de ser superior a 50º.
● El número de incidencias no tiene límite.
● Las incidencias tienen un nombre que puede ser
“frío”, “nieve”, “lluvia”, o “calor”.
● Las incidencias tienen una severidad que puede ser
“alta”, “media” o “baja”.
10. Actividad Resuelta - Validación con XML Schema
Documento XML:
11. Actividad Propuesta - Validación con XML Schema
Crea un validador utilizando XML Schema para un XML que
almacena los expedientes académicos de un conjunto de
estudiantes.
La estructura del documento XML es la siguiente:
● Un documento contiene un conjunto de expedientes.
● Cada expediente contiene el nombre de la titulación,
el nombre del estudiante y un conjunto de módulos por
cada estudiante.
11. Actividad Propuesta - Validación con XML Schema
● Cada módulo tiene un atributo con el nombre, otro
atributo que indica si el módulo ya ha sido aprobado
y un tercer atributo que informa del curso al que
pertenece el módulo y que puede tomar los valores
“Primero” o “Segundo”.
11. Actividad Propuesta - Validación con XML Schema
Documento XML: