¿Herramienta de validación de esquema XML (XSD)? [cerrado]


En la oficina estamos escribiendo una aplicación que generará archivos XML contra un esquema que nos dieron. Tenemos el esquema en una .Archivo XSD.

¿Hay herramientas o bibliotecas que podamos usar para realizar pruebas automatizadas para comprobar que el XML generado coincide con el esquema?

Preferiríamos herramientas gratuitas que sean apropiadas para uso comercial, aunque no incluiremos el schema checker, por lo que solo necesita ser utilizado por los desarrolladores durante el desarrollo.

Nuestro el lenguaje de desarrollo es C++ si eso hace alguna diferencia, aunque no creo que debería, ya que podríamos generar el archivo xml y luego hacer la validación llamando a un programa separado en la prueba.

Author: Vertexwahn, 2008-09-24

14 answers

Después de algunas investigaciones, creo que la mejor respuesta es Xerces, ya que implementa todo XSD, es multiplataforma y se usa ampliamente. He creado un pequeño proyecto Java en github para validar desde la línea de comandos utilizando el analizador JRE predeterminado, que normalmente es Xerces. Esto se puede utilizar en Windows / Mac / Linux.

También hay una versión C++ de Xerces disponible si prefieres usarla. La utilidad StdInParse se puede usar para llamarla desde la línea de comandos. Además, un comentarista a continuación apunta a esta utilidad de envoltura más completa.

También podría usar xmllint, que es parte de libxml. Es posible que ya lo tenga instalado. Ejemplo de uso:

xmllint --noout --schema XSD_FILE XML_FILE

Un problema es que libxml no implementa toda la especificación, por lo que puede tener problemas: (

Alternativamente, si está en Windows, puede usar msxml , pero necesitará algún tipo de envoltura para llamarlo, como la GUI que se describe en este DDJ artículo. Sin embargo, parece que la mayoría de la gente en Windows usa un editor XML, como Notepad++ (como se describe en la respuesta de Nate) o XML Notepad 2007 como sugerido por SteveC (también hay varios editores comerciales que no mencionaré aquí).

Finalmente, encontrarás diferentes programas que, desafortunadamente, darán diferentes resultados. Esto se debe en gran medida a la complejidad de la especificación XSD. Es posible que desee probar su esquema con varios herramienta.

ACTUALIZACIÓN : He ampliado esto en una entrada de blog .

 228
Author: Adrian Mouat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:26:36

Hay un plugin para Notepad++ llamado XML Tools que ofrece verificación XML y validación contra un XSD.

Puedes ver cómo usarlo aquí.

 110
Author: Nate,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-07-06 13:59:38

Xmlstarlet es una herramienta de línea de comandos que hará esto y más:

$ xmlstarlet val --help
XMLStarlet Toolkit: Validate XML document(s)
Usage: xmlstarlet val <options> [ <xml-file-or-uri> ... ]
where <options>
  -w or --well-formed        - validate well-formedness only (default)
  -d or --dtd <dtd-file>     - validate against DTD
  -s or --xsd <xsd-file>     - validate against XSD schema
  -E or --embed              - validate using embedded DTD
  -r or --relaxng <rng-file> - validate against Relax-NG schema
  -e or --err                - print verbose error messages on stderr
  -b or --list-bad           - list only files which do not validate
  -g or --list-good          - list only files which validate
  -q or --quiet              - do not list files (return result code only)

NOTE: XML Schemas are not fully supported yet due to its incomplete
      support in libxml2 (see http://xmlsoft.org)

XMLStarlet is a command line toolkit to query/edit/check/transform
XML documents (for more information see http://xmlstar.sourceforge.net/)

El uso en su caso sería a lo largo de las líneas de:

xmlstarlet val --xsd your_schema.xsd your_file.xml
 22
Author: Charles Duffy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-09-16 17:00:30

Para Windows existe el Bloc de notas XML libre 2007. Puede seleccionar XSD para que valide contra

 14
Author: SteveC,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-10-12 13:19:29
 5
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-06-02 12:49:09
 3
Author: John,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-24 01:44:17

Un editor XML para una validación XML rápida y fácil está disponible en http://www.xml-buddy.com

Solo necesita ejecutar el instalador y después de eso puede validar sus archivos XML con una aplicación de escritorio fácil de usar o la línea de comandos. Además, también obtiene soporte para Schematron y RelaxNG. También se admite la validación por lotes...

Actualización 1/13/2012: La herramienta de línea de comandos es de uso gratuito y utiliza Xerces como analizador XML.

 3
Author: Clemens,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-06-15 15:07:06

Http://www.xmlvalidation.com/

(Asegúrese de marcar la casilla "Validar contra esquema XML externo")

 2
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-01-05 19:33:56

Solo estoy aprendiendo Esquema. Estoy usando RELAX NG y usando xmllint para validar. Me estoy frustrando por los errores que salen de xmlllint. Ojalá fueran un poco más informativos.

Si hay un atributo incorrecto en el XML, xmllint le indica el nombre del atributo no compatible. Pero si le falta un atributo en el XML, simplemente recibe un mensaje que dice que el elemento no se puede validar.

Estoy trabajando en un XML muy complicado con reglas muy complicadas, y Soy nuevo en esto, así que rastrear qué atributo falta está tomando mucho tiempo.

Actualización: Acabo de encontrar una herramienta Java que me gusta mucho. Se puede ejecutar desde la línea de comandos como xmllint y es compatible con RELAX NG: https://msv.dev.java.net /

 2
Author: Pengo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-11-30 22:03:37

Encontré este validador en línea de 'corefiling' bastante útil -
http://www.corefiling.com/opensource/schemaValidate.html

Después de probar algunas herramientas para validar mi xsd, esta es la que me dio información de error detallada, por lo que pude corregir el error en schema.

 2
Author: iniki,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-05-28 11:31:53

Una gran herramienta visual para validar y generar XSD a partir de XML es IntelliJ IDEA, intuitiva y sencilla.

 1
Author: jipipayo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-10-08 10:43:37

Puede conectar el esquema XML al Intellisense de Microsoft Visual Studio. Esta opción le da validación en tiempo real Y autocompletar, que es simplemente impresionante.

Tengo este escenario exacto ejecutándose en mi copia gratuita de Microsoft Visual C++ 2010 Express.

 1
Author: AaronDanielson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-10-10 21:44:40

Otro validador de Esquema XML (XSD) en línea: http://www.utilities-online.info/xsdvalidation/.

 1
Author: Ignacio Corral Campos,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-07-22 06:13:46

Tiendo a usar xsd de Microsoft para ayudar a generar el xsd a partir de un archivo.NET. También analizo secciones del xml usando xmlstarlet. La última herramienta gratuita que le sería útil es altovaxml, que está disponible en esta URL: http://www.altova.com/download_components.html .

Esto me permite escanear todos los archivos xml recogiendo qué xsd usar al analizar el xml.

# Function:
#    verifyschemas - Will validate all xml files in a configuration directory against the schemas in the passed in directory
# Parameters:
#    The directory where the schema *.xsd files are located.  Must be using dos pathing like: VerifySchemas "c:\\XMLSchemas\\"
# Requirements:
#    Must be in the directory where the configuration files are located
#
verifyschemas()
{
    for FILENAME in $(find . -name '*.xml' -print0 | xargs -0)
    do
        local SchemaFile=$1$(getconfignamefromxml $FILENAME).xsd
        altovaxml /validate $FILENAME /schema $SchemaFile > ~/temp.txt 2> /dev/null
        if [ $? -ne 0 ]; then
            printf "Failed to verify: "
            cat ~/temp.txt | tail -1 | tr -d '\r'
            printf "    - $FILENAME with $SchemaFile\n"
        fi
    done
}

Para generar el xml que uso: xsd DOTNET.dll / type: CFGCLASS & rename schema0.xsd CFGCLASS.xsd

Para obtener el nombre xsd que uso: xmlstarlet sel-t-m /XXX/ * - v local-name () s 1 | sed 's/ {//'

Esto me permite recoger el XSD correcto usando una etiqueta de elemento dentro del archivo xml.

El resultado neto es que puedo llamar a una función bash para escanear todos los archivos XML y verificarlos. Incluso si están en varios subdirectorios.

 0
Author: Andrew Stern,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-05-22 18:53:33