En la oficina, actualmente estamos escribiendo una aplicación que generará archivos XML contra un esquema que se nos proporcionó. Tenemos el esquema en un archivo .XSD.
¿Hay herramientas o bibliotecas que podamos usar para pruebas automatizadas para verificar que el XML generado coincida con el esquema?
Preferiríamos herramientas gratuitas que sean apropiadas para uso comercial, aunque no incluiremos el verificador de esquema, por lo que solo debe ser utilizado por los desarrolladores 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 hacer la validación llamando a un programa separado en la prueba.
xml
validation
xsd
schema
Jason Dagit
fuente
fuente
Respuestas:
Después de investigar un poco, 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 usando el analizador JRE predeterminado, que normalmente es Xerces. Esto se puede usar en Windows / Mac / Linux.
También hay una versión C ++ de Xerces disponible si prefiere 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 puede usar xmllint, que es parte de libxml . Es posible que ya lo tenga instalado. Ejemplo de uso:
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 contenedor para llamarlo, como la 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á 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.
ACTUALIZACIÓN : me he expandido sobre esto en una publicación de blog .
fuente
xmllint
desafortunadamente, no es compatible con expresiones regulares XML, por lo que algunas expresiones regulares válidas de XML no pasarán por élHay un complemento para Notepad ++ llamado XML Tools que ofrece verificación y validación de XML contra un XSD.
Puedes ver cómo usarlo aquí .
fuente
XML
propio hace referencia a unXSD
archivo, por ejemploxsi:noNamespaceSchemaLocation="file.xsd"
, XML Tools intentará usarlo en lugar de darle un diálogo "establecido".xmlstarlet es una herramienta de línea de comandos que hará esto y más:
El uso en su caso estaría en la línea de:
fuente
Para Windows existe el Bloc de notas XML gratuito 2007 . Puede seleccionar XSD para validar contra
ACTUALIZACIÓN: mejor aún, use Notepad ++ con el complemento XML Tools
fuente
El Validador de esquemas XML en línea de DecisionSoft le permite verificar un archivo XML con un esquema dado.
fuente
Yo uso Xerces:
http://xerces.apache.org/xerces-c/
fuente
sudo apt install libxerces-c-samples
y luego verificar el documento conStdInParse -v=always -n -s < document.xml
.http://www.xmlvalidation.com/
(Asegúrese de marcar la casilla "Validar contra esquema externo de XML")
fuente
Solo estoy aprendiendo Schema. Estoy usando RELAX NG y estoy usando xmllint para validar. Me estoy frustrando por los errores que salen de xmlllint. Desearía que fueran un poco más informativos.
Si hay un atributo incorrecto en el XML, entonces xmllint le indica el nombre del atributo no admitido. Pero si le falta un atributo en el XML, recibirá 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, por lo que rastrear qué atributo falta me lleva mucho tiempo.
Actualización: acabo de encontrar una herramienta de 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/
fuente
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 detallada del error, por lo que pude corregir el error en el esquema.
fuente
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 luego 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 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.
fuente
Una gran herramienta visual para validar y generar XSD a partir de XML es IntelliJ IDEA, intuitiva y simple.
fuente
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.
fuente
Otro validador de Esquema XML (XSD) en línea: http://www.utilities-online.info/xsdvalidation/ .
fuente
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 herramienta gratuita final que podría serle ú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 al analizar el xml.
Para generar el xml, uso: xsd DOTNET.dll / type: CFGCLASS & rename schema0.xsd CFGCLASS.xsd
Para obtener el nombre xsd, 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 bash para escanear todos los archivos XML y verificarlos. Incluso si están en múltiples subdirectorios.
fuente