Validando XML contra Schema

1
45451

Introducción

En este tutorial os queremos mostrar como podemos validar documentos XML contra un XML Schema, de tal forma que la

configuración del Schema para la validación de dicho XML sea en el código Java o en el propio archivo XML.

Creando el XML y el XSD


Vamos a partir de un XSD muy sencillito (validateXML.xsd):

Lo que nos está controlando este Schema es lo siguiente:

  - El elemento raiz debe ser ejemplo

  - El elemento ejemplo debe contener un elemento (y sólo uno) llamado tutoriales con un atributo name obligatorio

  - El elemento tutoriales debe contener al menos un elemento tutorial con un atributo name obligatorio

Un ejemplo de xml válido sería (validateXML.xml):

Validando el XML a partir del Schema

Lo primero que os recomiendo hacer es definir una serie de constantes que vamos a utilizar para configurar el objeto DocumentBuilderFactory

que es la clase java que nos permite validar y parsear archivos XML:

Ahora configuramos nuestro DocumentBuilderFactory

Haciendo esto estamos consiguiendo preparar nuestro DocumentBuilderFactory para validar contra Schema.

Ahora que ya tenemos preparado nuestro programa para poder validar contra Schema, debemos indicarle donde puede encontrarlo.

Para conseguir esto, tenemos dos opciones:

  - Definirlo en el propio XML. Por lo tanto no haría falta hacer más cosas en nuestro programa y dejando nuestro archivo validateXML.xml como sigue:

Nota: Tanto el validateXML.xml como validateXML.xsd se encuentran en el mismo directorio, sino deberíamos poner ruta completa en noNamespaceShemaLocation.

  - Hacerlo a través de Java. Para ello debemos definir otra constante:

y aúadimos un atributo al DocumentBuilderFactory que le indica donde encontrar el Schema:

Os muestro cómo quedaría nuestro programa:

Ejemplos de validación

Vamos a parsear el siguiente XML:

Vemos como al ejecutarse documentBuilder.parse() nos lanza la siguiente excepción:

org.xml.sax.SAXParseException: cvc-complex-type.4: Attribute ‘name’ must appear on element ‘tutorial’.

indicandonos que el atributo name debe aparecer en el elemento tutorial ya que es obligatorio tal y como hemos definido en nuestro Schema.

Conclusiones

Os hemos mostrado dos formas de validación de XML contra Schema, definiendolo en nuestro XML o configurando nuestro propio programa Java, ahora es a vuestra elección utilizar cualquiera de ellas.

Hay que tener en cuenta que si se configura el Schema en el XML, y luego lo configuramos en nuestro programa, esta última configuración machaca la que hayamos definido en el XML.

En el día día de Autentia siempre aparecen nuevos retos y intentamos compartir nuestros conocimientos para que vosotros avanceis junto a nosotros.

Os animo a compartir también los vuestros con nosotros en esta misma web.

1 Comentario

  1. Hola buenas, me interesa mucho este artículo, pero falta la mayor parte de los ejemplos de código, por ejemplo en la línea » – Hacerlo a través de Java. Para ello debemos definir otra constante:», no puedo visualizar cómo se define esa constante.
    Gracias!

Dejar respuesta

Please enter your comment!
Please enter your name here