La validación de un documento XML utilizando DTD's requiere dos pasos.
Debe ser definido en la parte superior del archivo XML el DTD que será empleado:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html SYSTEM "html.dtd"> <html> |
El parámetro !DOCTYPE
siempre es utilizado para declarar DTD's, mientras el elemento que le sigue corresponde al nodo raíz del documento, en otras palabras el primero que en este caso corresponde a html
, mientras que html.dtd
es el DTD a emplearse; la ubicación del DTD es en el mismo directorio de trabajo que el archivo XML, aunque también es posible indicar otro directorio de residencia utilizando /
(*/slashes/*).
Hasta este punto si es procesado el documento , la única validación que es llevada acabo es la de "Well Formdness" y que el DTD exista en el directorio indicado, para que sea llevada acabo una validación completa "Fully Validated" es necesario pasar unos parámetros de configuración al parser.
Las modificaciones al parser son llevadas acabo através de parámetros al momento de ser inicializado, si recuerda del
programa procesando XML vía SAX
esta inicialización fue llevada acabo através de SAXParserFactory
(parte de JAXP) , para activar la validación completa es necesario definir el siguiente parámetro:
SAXParserFactory factory = SAXParserFactory.newInstance(); factory.setValidating(true); |
Para DOM resulta el mismo caso , es cuestión de agregar lo siguiente:
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); factory.setValidating(true); |
El comportamiento "default" de Xerces 2.0 y de casi todos los parsers XML es únicamente realizar una revisión de "Well-Formdness" y no validar vía el DTD , la razón de este diseño es que la utilización de DTD's no siempre esta contemplada ( a pesar de ser una buena decisión de diseño) y seria innecesario generar errores solo por no ser declarado un DTD, además con el surgimiento de "Schemas" no se puede asegurar que tipo de validación será utilizada en el documento por ende permanece desactivada la "validación completa".("Fully-Validated")
template
, XPath, Condicionales y Ciclos en XSL.