Pregunta

Actualmente, en la oficina estamos escribiendo una aplicación que generará archivos XML según un esquema que nos proporcionaron.Tenemos el esquema en un archivo .XSD.

¿Existen herramientas o bibliotecas que podamos utilizar para realizar pruebas automatizadas y comprobar que el XML generado coincide con el esquema?

Preferiríamos herramientas gratuitas que sean apropiadas para uso comercial, aunque no incluiremos el verificador de esquemas, por lo que solo los desarrolladores deben poder utilizarlo durante el desarrollo.

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

¿Fue útil?

Solución

Después de investigar un poco, creo que la mejor respuesta es Jerces, ya que implementa todo XSD, es multiplataforma y ampliamente utilizado.He creado un pequeño proyecto Java en github para validar desde la línea de comando usando 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 usarlo.El Utilidad StdInParse se puede utilizar para llamarlo desde la línea de comando.Además, un comentarista a continuación señala esto utilidad contenedora más completa.

También puedes usar xmllint, que es parte de libxml.Es posible que ya lo tengas instalado.Uso de ejemplo:

xmllint --noout --schema XSD_FILE XML_FILE

Un problema es que libxml no implementa todas las especificaciones, por lo que puedes tener problemas :(

Alternativamente, si estás en Windows, puedes usar msxml, pero necesitará algún tipo de contenedor para llamarlo, como la GUI que se describe en este artículo de DDJ.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 Bloc de notas XML 2007 como sugerido por SteveC (También hay varios editores comerciales que no mencionaré aquí).

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

ACTUALIZAR:He ampliado esto en un entrada en el blog.

Otros consejos

Hay un complemento para Bloc de notas++ llamado Herramientas XML que ofrece verificación XML y validación contra un XSD.

Puedes ver cómo usarlo. aquí.

xmlestrella 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 similar a:

xmlstarlet val --xsd your_schema.xsd your_file.xml

Para Windows existe el gratuito. Bloc de notas XML 2007.Puede seleccionar XSD para validarlo

el en linea Validador de esquemas XML de DecisionSoft le permite comparar un archivo XML con un esquema determinado.

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

Sólo necesita ejecutar el instalador y luego podrá validar sus archivos XML con una aplicación de escritorio fácil de usar o la línea de comandos.Además, también obtienes soporte para Schematron y RelaxNG.La validación por lotes también es compatible...

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

http://www.xmlvalidation.com/

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

Recién estoy aprendiendo Schema.Estoy usando RELAX NG y xmllint para validar.Me siento frustrado 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 admitido.Pero si le falta un atributo en el XML, recibirá un mensaje que indica que el elemento no se puede validar.

Estoy trabajando en un XML muy complicado con reglas muy complicadas y soy nuevo en esto, por lo que localizar qué atributo falta me lleva mucho tiempo.

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

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 brindó información detallada del error, por lo que pude corregir el error en el esquema.

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

Puede conectar su esquema XML a Intellisense de Microsoft Visual Studio.Esta opción le brinda validación en tiempo real Y autocompletar, lo cual es simplemente increíble.

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

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

Tiendo a utilizar 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 resultarí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 seleccionando qué xsd usar analizando 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 utilizo:xsd DOTNET.dll /tipo:CFGCLASS y cambiar el nombre de esquema0.xsd CFGCLASS.xsd

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

Esto me permite seleccionar 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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top