Validando XML contra Schema

En este tutorial nuestro compañero describe las posibilidades de validación de un documento XML con Schema

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.

Comentarios

Un 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!

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

He leído y acepto la política de privacidad

Información básica acerca de la protección de datos

  • Responsable: IZERTIS S.A.
  • Finalidad: Envío información de carácter administrativa, técnica, organizativa y/o comercial sobre los productos y servicios sobre los que se nos consulta.
  • Legitimación: Consentimiento del interesado
  • Destinatarios: Otras empresas del Grupo IZERTIS. Encargados del tratamiento.
  • Derechos: Acceso, rectificación, supresión, cancelación, limitación y portabilidad de los datos.
  • Más información: Puedes ampliar información acerca de la protección de datos en el siguiente enlace:política de privacidad

Ingeniero en Informática

¿Quieres publicar en Adictos al trabajo?

Te puede interesar

22/06/2026

Juan Antonio Jiménez Torres

Vamos a instrumentalizar un SDD para un microservicio bancario. En este artículo sobre SDD - Spec Driven Development, instrumentalizado sobre OpenSpec vamos a construir una PoC de algo más serio que una tabla periódica. Un microservicio bancario muy simplificado que gestione cuentas y permita hacer transferencias

16/06/2026

Juan Antonio Jiménez Torres

Este es el segundo artículo sobre SDD, Spec Driven Development, instrumentalizado sobre OpenSpec. Pero esta vez nos acercaremos usando softwere gratuito. Por un lado OpenCode en lugar de ClaudeCode y usando el modelo gratuito Gemma4 de Google en lugar de otros de pago.

08/06/2026

Juan Antonio Jiménez Torres

Aprenderemos sobre SDD – Spec Driven Development instrumentalizado sobre OpenSpec. Haremos un primer acercamiento usando ClaudeCode con Sonnet, para luego, en un artículo posterior pasarnos a la versión gratuita de OpenCode con Gemma4