validator - ¿Herramienta de validación de esquema XML(XSD)?
xml to xsd (14)
En la oficina, actualmente estamos escribiendo una aplicación que generará archivos XML contra un esquema que nos dieron. Tenemos el esquema en un archivo .XSD.
¿Existen herramientas o bibliotecas que podamos usar para las pruebas automatizadas para verificar que el XML generado coincida con el esquema?
Preferiríamos herramientas gratuitas que sean apropiadas para uso comercial, aunque no empaquetaremos el verificador de esquemas, por lo que solo los desarrolladores deben poder utilizarlo durante el desarrollo.
Nuestro lenguaje de desarrollo es C ++ si eso marca alguna diferencia, aunque no creo que deba hacerlo, ya que podríamos generar el archivo xml y luego validarlo llamando a un programa separado en la prueba.
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 de C ++ de Xerces disponible si prefieres usar eso. 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 envoltorio más completa .
También puedes usar xmllint, que es parte de libxml . Puede que ya lo tengas instalado. Ejemplo de uso:
xmllint --noout --schema XSD_FILE XML_FILE
Un problema es que libxml no implementa todas las especificaciones, por lo que puede tener problemas :(
Alternativamente, si está en Windows, puede usar msxml , pero necesitará algún tipo de envoltorio para llamarlo, como el GUI que se describe en este artículo de DDJ . Sin embargo, parece que la mayoría de las personas en Windows usan un Editor XML, como Notepad ++ (como se describe en la respuesta de Nate ) o XML Notepad 2007 como lo sugiere 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 parte a la complejidad de la especificación XSD. Es posible que desee probar su esquema con varias herramientas.
ACTUALIZACIÓN : He ampliado en esto en una publicación de blog .
El validador de esquema XML en línea de DecisionSoft le permite verificar un archivo XML con un esquema determinado.
Encontré este validador en línea de ''corefiling'' bastante útil -
corefiling.com/opensource/schemaValidate.html
Después de probar algunas herramientas para validar mi xsd, esta es la que me dio información detallada del error, por lo que pude corregir el error en el esquema.
Hay un complemento para Notepad ++ llamado XML Tools que ofrece verificación y validación de XML contra un XSD.
Puedes ver como usarlo here .
Otro validador de esquema XML en línea (XSD): http://www.utilities-online.info/xsdvalidation/ .
Para Windows existe el XML Notepad 2007 gratis. Puedes seleccionar XSD''s para que valide
Puede conectar su esquema XML a Intellisense de Microsoft Visual Studio. Esta opción le ofrece tanto la validación en tiempo real como el autocompletado, que es simplemente increíble.
Tengo este escenario exacto ejecutándose en mi copia gratuita de Microsoft Visual C ++ 2010 Express.
Sólo estoy aprendiendo el esquema. Estoy usando RELAX NG y utilizando xmllint para validar. Me estoy frustrando por los errores que salen de xmlllint. Me gustaría que fueran un poco más informativos.
Si hay un atributo incorrecto en el XML, xmllint le dice el nombre del atributo no compatible. Pero si le falta un atributo en el XML, solo recibe un mensaje que dice que el elemento no puede ser validado.
Estoy trabajando en un XML muy complicado con reglas muy complicadas, y soy nuevo en esto, por lo que el rastreo del atributo que falta está tomando mucho tiempo.
Actualización: acabo de encontrar una herramienta java que me está gustando mucho. Puede ejecutarse desde la línea de comandos como xmllint y admite RELAX NG: https://msv.dev.java.net/
Tiendo a usar xsd de Microsoft para ayudar a generar el xsd desde un archivo .NET. También analizo secciones del xml usando xmlstarlet. La última herramienta gratuita que sería de utilidad para usted es altovaxml, que está disponible en esta URL: http://www.altova.com/download_components.html .
Esto me permite escanear todos los archivos xml que recogen 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 / type: CFGCLASS & rename schema0.xsd CFGCLASS.xsd
Para obtener el nombre xsd yo uso: xmlstarlet sel -t -m / XXX / * -v local-name () $ 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 de bash para escanear todos los archivos XML y verificarlos. Incluso si están en múltiples subdirectorios.
Un editor XML para la 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. La validación de lotes también es compatible ...
Actualización 13/01/2012: la herramienta de línea de comandos es de uso libre y utiliza Xerces como analizador XML.
Una gran herramienta visual para validar y generar XSD desde XML es IntelliJ IDEA, intuitiva y simple.
Yo uso Xerces:
(Asegúrese de marcar la casilla "Validar frente a un esquema XML externo")
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 estaría en la línea de:
xmlstarlet val --xsd your_schema.xsd your_file.xml