# Validación XML

La Validación XML (eXtensible Markup Language) es la comprobación de que un documento en lenguaje XML está bien formado y se ajusta a una estructura definida. Un documento bien formado sigue las reglas básicas de XML establecidas para el diseño de documentos. Un documento válido además respeta las normas dictadas por su DTD (definición de tipo de documento) o esquema utilizado.

## Introducción

En primer lugar, los documentos XML deben basarse en la sintaxis definida en la especificación XML para ser correctos (documentos bien formados). Esta sintaxis impone cosas como la coincidencia de mayúsculas/minúsculas en los nombres de etiqueta, comillas obligatorias para los valores de atributo, etc. Sin embargo, para tener un control más preciso sobre el contenido de los documentos es necesario un proceso de análisis más exhaustivo.
La validación es la parte más importante dentro de este análisis, ya que determina si un documento creado se ciñe a las restricciones descritas en el esquema utilizado para su construcción. Controlar el diseño de documentos a través de esquemas aumenta su grado de fiabilidad, consistencia y precisión, facilitando su intercambio entre aplicaciones y usuarios. Cuando creamos documentos XML válidos aumentamos su funcionalidad y utilidad.

## Necesidad de validación

La validación se encarga de verificar:
   * La corrección de los datos: aunque validar contra un esquema no garantiza al 100% que los datos son correctos, nos permite detectar formatos nulos o valores fuera de rango y por tanto incorrectos.
   * La integridad de los datos: al validar, se comprueba que toda la información obligatoria está presente en el documento.
   * El entendimiento compartido de los datos: a través de la validación se comprueba que el emisor y receptor perciban el documento de la misma manera, que lo interpreten igual.
El éxito de la validación dependerá de factores como:
   * Dónde se originan los documentos: si son fuentes confiables o no.
   * Quién los crea: si son creados por una aplicación automáticamente o por un usuario de forma manual. (véase Herramientas)
   * Quién los manipula: también es posible introducir errores involuntariamente durante la manipulación de los datos y documentos.
   * La calidad de los datos: si los documentos se generan directamente de una base de datos de herencia, pueden no estar completos o correctos al 100%.
   * El rendimiento del procesador o aparato que realice la validación: el procesado no es inmediato, necesita su tiempo. Si el rendimiento es crítico, se pueden aplicar diversas alternativas para reducir el coste computacional como limitar la validación a algunos aspectos, o crear un código específico para la aplicación particular que lo utiliza y se ejecute de forma más eficaz. (véase Procesamiento)

## Tipos de documentos
### Documento Bien Formado

Especifica unas normas básicas a nivel de sintaxis, a cumplir por todos aquellos documentos con intención de denominarse XML. Las características básicas exigidas son:
   * Incluir una declaración XML como etiqueta obligatoria: proporciona hasta tres informaciones clave sobre el documento que la contiene:
      * Información de la versión XML (obligatoria): la versión más utilizada es 1.0, aunque ya está disponible la versión 1.1 de XML.
      * Codificación de caracteres utilizada (opcional): hace referencia al modo en que se representan internamente los caracteres, normalmente UTF-8 o UTF-16.
      * Declaración independiente (opcional): indica al procesador XML si un documento es independiente (standalone=”yes”) o se basa en información de fuentes externas, es decir, si depende de declaraciones de marca externas como una DTD externa (standalone=”no”), esta es la opción por defecto.
       Ejemplo:
       <? xml version="1.0" encoding="UTF-8" standalone="no" ?>
   * Sólo existe un único elemento raíz para cada documento: es un solo elemento en el que todos los demás elementos y contenidos se encuentran anidados y correctamente cerrados. Se basa en una estructura jerárquica y su función es la misma que el elemento raíz de un documento HTML <HTML>Contenido</HTML>
   * Todas las entidades usadas en su interior se declaran en la DTD interna.
   * Todos los elementos, atributos y entidades que utilice deben escribirse con una sintaxis correcta. No debemos olvidar que:
      * Todos los elementos deben estar delimitados por una etiqueta inicial y otra final con el mismo nombre. <elemento></elemento>
      * Los valores de atributos en XML deben ir entre comillas simples o dobles.
      * Los elementos vacíos deben terminar con '/' (autocierre) o añadiendo una etiqueta de fin y no puede haber etiquetas aisladas.
      * XML es sensible a mayúsculas y minúsculas y los nombres de las etiquetas pueden ser alfanuméricos, pero siempre comenzando con una letra.
Ejemplo:
Es posible trabajar con documentos no asociados a ninguna DTD y que en consecuencia jamás podrán ser validados. En este caso, los documentos sólo deberán estar bien formados, aunque siempre necesitarán la definición interna de las entidades utilizadas.

### Documento Válido

Son aquellos documentos que además de estar bien formados, cumplen las especificaciones de la DTD (Document Type Definition), del Schema, o del elemento que lo valide, y siguen las pautas marcadas por sus modelos de contenido. No hay esquemas de documentos idénticos, por eso es difícil concretar las reglas que deben cumplir.
Para que un documento XML también sea válido, durante el proceso de validación se comprueba:
   * Qué elementos o atributos se permiten en un documento del tipo definido en el esquema.
   * La estructura de los elementos y atributos (elementos anidados, atributos obligatorios u opcionales, etc.)
   * El orden de los elementos.
   * Los valores de los datos de atributos y elementos (según enumeraciones, rangos de valores delimitados, tipo de dato correcto (p.ex formato correcto de una fecha, utilizar un entero para expresar un número), etc.
   * La unicidad de valores dentro de un documento (p. ex. Referencias de productos que no pueden repetirse).
Ejemplo que cumple las especificaciones de DTD:
* Ejemplo.xml
* <? xml version="1.0" encoding="UTF-8" standalone="no" ?>
* <!DOCTYPE nota SYSTEM "NotaInterna.dtd">
* <nota importancia="alta">
* <remitente>Miquel</remitente>
* <destinatario>Jordi</destinatario>
* <titulo>Recordatorio</titulo>
* <mensaje>Recógeme este fin de semana</mensaje>
* </nota>
* NotaInterna.dtd
* <!ELEMENT nota (remitente, destinatario, titulo, mensaje?)>
* <!ATTLIST nota importancia (alta|normal) normal>
* <!ELEMENT remitente (#PCDATA)>
* <!ELEMENT destinatario (#PCDATA)>
* <!ELEMENT titulo (#PCDATA)>
* <!ELEMENT mensaje (#PCDATA)>

## Métodos de validación

Existen varios métodos para validar los documentos XML. Los métodos más usados son la DTD de XML versión 1.0, el XML Schema de W3C, RELAX NG de Oasis y Schematron de la Academia Sinica Computing Centre.

### Uso de DTD

La DTD es el formato de esquema nativo (y el más antiguo) para validar documentos XML, heredado de SGML. Utiliza una sintaxis no-XML para definir la estructura o modelo de contenido de un documento XML válido:
   * Define todos los elementos.
   * Define las relaciones entre los distintos elementos.
   * Proporciona información adicional que puede ser incluida en el documento (atributos, entidades, notaciones).
   * Aporta comentarios e instrucciones para su procesamiento y representación de los formatos de datos.
Es el método más sencillo usado para validar, y por esta razón presenta varias limitaciones, ya que no soporta nuevas ampliaciones de XML y no es capaz de describir ciertos aspectos formales de un documento a nivel expresivo.
Las DTD pueden ser internas o externas a un documento XML, o ambas cosas a la vez.

### Uso de XML Schema

XML Schema es la evolución de la DTD descrita por el W3C, también llamado de forma más informal XSD (XML Schema Definition). Es un lenguaje de esquema más complejo y más potente, basado en la gramática para proporcionar una potencia expresiva mayor que la DTD. Utiliza sintaxis XML, cosa que le permite especificar de forma más detallada un extenso sistema de tipos de datos. A diferencia de las DTDs, soporta la extensión del documento sin problemas.
A la hora de validar, la utilización de XSD supone un gran consumo en recursos y tiempo debido a su gran especificación y complejidad en la sintaxis (esquemas más difíciles de leer y escribir).
Después de validar el documento con XML Schema, es posible expresar su estructura y contenido en términos del modelo de datos usado por el esquema de validación. Esta funcionalidad, conocida como Post-Schema-Validation Infoset (PSVI), se puede utilizar para transformar el documento en una jerarquía de objetos, a los cuales se puede acceder a través de un lenguaje de programación orientada a objetos (OOP). El modelo de datos de XML Schema incluye:
   * el vocabulario (nombres de elemento y atributo)
   * el contenido modelo (relaciones y estructura)
   * y tipos de datos.

### Uso de RELAX NG

RELAX NG es también un lenguaje de esquema basado en la gramática, muy intuitivo y más fácil de entender que el XML Schema. De ahí su popularidad. Tiene un alto poder expresivo, por ejemplo permite validar elementos intercalados que pueden aparecer en cualquier orden.
Las aplicaciones de definición de documentos y validación para RELAX NG son más sencillas que en XML Schema, haciéndolo más fácil de utilizar e implementar. También tiene la capacidad de usar plug-ins de definiciones de tipos de dato de XML Schema, combinando así las ventajas de ambos lenguajes. RELAX NG se ha convertido recientemente en un estándar ISO como la parte 2 de DSDL (Document Schema Definition Language).

### Uso de Schematron

Schematron, a diferencia de los anteriores lenguajes, se basa en afirmaciones en vez de en la gramática. Al basarse en una serie de reglas, utiliza expresiones de acceso en lugar de gramaticales para definir lo que se permite en un documento XML. Si el documento cumple estas reglas, entonces es válido.
Este método de validación aporta una gran flexibilidad en la descripción de estructuras relacionales. En cambio, es un lenguaje muy limitado a la hora de especificar la estructura básica del documento, problema que se soluciona combinando Schematron con otros lenguajes de esquema.
Junto con RELAX NG, Schematron se está estandarizando como parte del DSDL de ISO

## Herramientas

La creación manual de documentos XML e incluso su manipulación pueden introducir todo tipo de errores, tipográficos, sintácticos y de contenido. Existen editores de XML que facilitan la tarea de crear documentos válidos y bien formados, ya que pueden advertir de los errores básicos cometidos e incluso escribir automáticamente la sintaxis más sencilla necesaria.
Quando necessitamos de obter um documento válido, o editor XML Validator é capaz de:
   * Leer la DTD del documento y presentarle una lista desplegable con los elementos disponibles enumerados en la DTD, evitando así la inclusión de algún elemento no definido en el esquema.
   * Advertir el olvido de una etiqueta obligatoria e incluso no permitir este tipo de descuidos o errores, no dando por finalizado el documento si existen errores de este tipo.
Editores:
* XML Pro de Vervet Logic (open source)
* XMLSpy de Altova
* Liquid XML Studio de Liquid Technologies
* <oXigen/> XML Editor
* Turbo XML de TIBCO (Plataforma de desarrollo integrado de XML)
* XML Notepad de Microsoft
* XMLwriter Archivado el 10 de noviembre de 2006 en Wayback Machine. de Wattle Software

## Procesamiento

Los documentos XML se procesan a través de analizadores, aplicaciones que leen el documento, lo interpretan y generan una salida basada en sus contenidos y en la marca utilizada para su descripción. El resultado se muestra en un dispositivo de visualización, como una ventana de navegación o una impresora. Los procesadores hacen posible la presentación y distribución de documentos XML.
Estos analizadores pueden tener o no la capacidad de validar: todos los analizadores comprueban que los documentos XML estén bien formados, pero solo los analizadores validantes pueden efectuar la validación. Los analizadores no validantes procesan a mayor velocidad, ya que no tienen que comprobar tantos detalles como los validantes.
Casi todos los procesadores de XML son capaces de validar con un esquema basado en DTD. Si el documento viola alguna de las reglas de su DTD, el analizador advertirá del error y el proceso del documento se detendrá. Un buen procesador validante no solo informará la presencia de un error, sino que elaborará un mensaje especificando cuál ha sido su causa. También existe el procesador Xerces de Apache que, además de ser el más completo parser de XML, incluye soporte de XML Schema.
Habitualmente, se usa un analizador validante para comprobar la corrección de los documentos, y uno no validante para su presentación. Una vez que se sabe que un documento es válido, no hay ningún motivo para comprobar su validez cada vez que se procese (optimizando así el tiempo del proceso).
Procesadores:
* Xerces de Apache (open source) es uno de los más completos parsers de XML e incluye soporte de XML Schema.
* XMLValidate de TIBCO
* XMLSpy de Altova
* MSXML Parser de Microsoft
* DocZilla de CiTEC (basado en Mozilla)
* Stylus Studio XML (Plataforma IDE)
* Expat XML Parser