Validador de XML con XSD

Comprueba un documento XML contra un XSD y ve qué elemento incumple qué regla.

Esta se ejecuta en el servidor. Validar contra un XML Schema no es algo que un navegador pueda hacer, así que tu documento y tu esquema se envían aquí para comprobarlos y luego se descartan. No se almacenan, no se registran y nunca se ponen en una URL. Si el documento es confidencial, ejecuta xmllint en tu equipo: es el mismo motor.

El XML que hay que comprobar.
Un único XSD autocontenido. Un esquema que importa o incluye otro archivo no se puede comprobar aquí.

Pega un documento y el XSD que se supone que cumple. Obtienes el veredicto y, por cada regla que incumple, el elemento, la línea y la restricción; no solo la palabra «no válido».

Cómo funciona

Pueden fallar tres cosas y se indican por separado, porque significan cosas distintas. El documento puede no ser XML bien formado, en cuyo caso no se ha comprobado nada. El esquema puede no ser un XSD utilizable, en cuyo caso tampoco se ha comprobado nada. O se han leído los dos y el documento ha incumplido una regla, que es el único caso en el que «no válido» te dice algo sobre tus datos.

La validación es la de libxml, el mismo motor que hay detrás de casi todas las herramientas XML, así que la respuesta coincide con lo que dirá tu build. Sus diagnósticos se muestran tal cual llegan, en inglés, porque nombran el elemento y la restricción y una paráfrasis sería una suposición sobre qué quería decir un mensaje que no hemos escrito nosotros.

Esta herramienta se ejecuta en el servidor, y es la única de aquí que lo hace. Ningún navegador puede validar contra XML Schema; no hay API para ello. Tu documento y tu esquema se envían, se comprueban y se descartan: nunca se escriben en disco, nunca se registran y nunca se ponen en una URL.

Dos cosas se rechazan de plano. Un documento o un esquema que declaren un DTD o una entidad, porque un DTD puede indicarle a un analizador que lea archivos del servidor. Y un esquema que importe o incluya otro archivo, porque aquí no se descarga nada: solo se podría aplicar una parte, y una comprobación parcial presentada como aprobada es la peor respuesta que puede dar un validador.

Ejemplos

Caso Entrada Resultado
Un valor del tipo equivocado <price>cheap</price> Element 'price': 'cheap' is not a valid value of the atomic type 'xs:decimal'.
Un atributo obligatorio que falta <book><title>V</title><price>1</price></book> Element 'book': The attribute 'id' is required but missing.
Un elemento hijo que falta <book id="b1"><title>V</title></book> Element 'book': Missing child element(s). Expected is ( price ).

Preguntas frecuentes

¿Sale mi documento de mi navegador?

Sí, y esta es la única herramienta del sitio en la que eso es cierto. Validar contra XML Schema no es algo que un navegador pueda hacer, así que el documento y el esquema se envían aquí, se comprueban y se descartan. No se almacenan, no se registran y no se ponen en ninguna URL. Si eso no es aceptable para el documento que tienes, valídalo en tu equipo: xmllint hace lo mismo con el mismo motor.

¿Por qué se ha rechazado mi esquema por importar otro?

Porque no se descarga nada de ninguna parte: ni red, ni sistema de archivos. Un esquema repartido en varios archivos aquí solo se puede aplicar a medias, y un validador que comprueba la mitad de las reglas y luego dice «válido» está dando una respuesta peor que ninguna. Junta los archivos, o valida en tu equipo, donde el otro archivo existe.

¿Por qué se rechaza un DOCTYPE?

Porque un DTD puede declarar una entidad que apunte a un archivo del servidor, y esa es la forma más antigua que existe de convertir un analizador XML en un lector de archivos. La carga de entidades también está desactivada aquí, así que rechazar la construcción es un segundo cerrojo y no el único; pero, en cualquier caso, un documento que se comprueba contra un XSD no necesita un DTD.

¿Por qué los mensajes de error están en inglés?

Vienen de libxml y no de este sitio. Citan los nombres de tus elementos y la restricción que ha fallado, que es la parte que necesitas, y traducirlos significaría parafrasear diagnósticos que no hemos escrito nosotros; equivocarse con uno de ellos sale más caro que leerlo en inglés.

¿Qué versión de XML Schema?

XSD 1.0, que es lo que implementa libxml. Las aserciones de XSD 1.1 y la asignación condicional de tipos no están admitidas, así que un esquema 1.1 que las use se indicará como ilegible en lugar de comprobarse en silencio sin esas reglas.

Mi esquema empieza con encoding="utf-16" y se ha rechazado. ¿Por qué?

Porque esa declaración describe un archivo, y lo que llega a esta página es lo que ha enviado tu navegador, que es UTF-8. libxml se creyó la declaración y se negó a leer el esquema. Ahora la codificación se descarta siempre que no diga UTF-8, y el resultado lo indica. Lo mismo con encoding="ISO-8859-1" era antes peor, porque no fallaba: cada carácter acentuado se destrozaba en silencio y el documento se validaba después contra un texto que no había escrito nadie.

Conviene saber

  • Se ejecuta en el servidor. Tu documento y tu esquema se envían, se comprueban y se descartan: no se almacenan, no se registran y no se pueden compartir en una URL. Todas las demás herramientas de esta categoría se ejecutan en tu navegador; esta no puede, porque ningún navegador valida XML Schema.
  • El veredicto es el de libxml, y también lo es la redacción de todos los diagnósticos. Solo XSD 1.0.
  • Se listan como mucho cincuenta problemas. Un documento que incumple una regla mil veces suele incumplirla por un solo motivo.

Fuentes

Todas las herramientas de Código