Ferramenta de validação do esquema de XML (XSD)? [fechado]
no escritório estamos a escrever uma aplicação que irá gerar ficheiros XML contra um esquema que nos foi dado. Temos o esquema em an .Ficheiro XSD.
existem ferramentas ou bibliotecas que possamos usar para testes automáticos para verificar se o XML gerado corresponde ao esquema?
Nós preferiríamos ferramentas livres que são apropriadas para uso comercial, embora não vamos agrupar o controlador de esquema, por isso só precisa ser utilizável pelo devs durante desenvolvimento.
a nossa linguagem de desenvolvimento é C++ se isso fizer alguma diferença, embora eu não ache que deva, pois podemos gerar o ficheiro xml e depois fazer a validação chamando um programa separado no teste.
14 answers
Depois de alguma pesquisa, acho que a melhor resposta é Xerces, uma vez que implementa todo o XSD, é multi-plataforma e amplamente utilizado. Criei um pequeno projecto Java no github para validar a partir da linha de comandos usando o analisador JRE predefinido, que é normalmente o Xerces. Isto pode ser usado no Windows/Mac/Linux.
Existe também uma versão C++ de Xerces, se preferires usar isso. O utilitário StdInParse pode ser usado para chamá-lo a partir do comando linha. Além disso, um comentarista abaixo aponta para este utilitário de embalagem mais completo.
Também pode usar o xmllint,que faz parte de libxml . Você pode muito bem já tê-lo instalado. Utilização do exemplo:
xmllint --noout --schema XSD_FILE XML_FILE
Um problema é que a libxml não implementa todas as especificações, por isso você pode ter problemas: (
Em alternativa, se estiver no Windows, pode usar msxml , mas irá precisar de algum tipo de invólucro para o chamar, como o GUI 1 descrito em este artigo DDJ. No entanto, parece que a maioria das pessoas no Windows, use um Editor de XML, como o Notepad++ (como descrito em Nate resposta) ou XML Notepad 2007 como sugerido por SteveC (também existem vários editores comerciais que não vou mencionar aqui).
Finalmente, você encontrará diferentes programas que, infelizmente, darão resultados diferentes. Isto é em grande parte devido à complexidade da especificação XSD. Você pode querer testar o seu esquema com vários ferramenta.UPDATE: Eu expandi isso em um postno blog .
O Xmlstarlet é uma ferramenta de linha de comandos que fará isto e mais:
$ 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/)
A utilização no seu caso seria semelhante a:
xmlstarlet val --xsd your_schema.xsd your_file.xml
Para O Windows existe o bloco de notas XML livre . Pode seleccionar o XSD para validar contra
O validador do esquema XML online da DecisionSoft permite-lhe verificar um ficheiro XML com um dado esquema.
Uso Xerces:
Está disponível um editor XML para validação rápida e fácil de XML em http://www.xml-buddy.com
Só precisa de executar o instalador e depois disso poderá validar os seus ficheiros XML com uma aplicação de ecrã fácil de usar ou com a linha de comandos. Além disso, você também obter suporte para Schematron e relaxar. A validação em lote também é suportada...
Actualização 1/13/2012: a ferramenta da linha de comandos é livre de usar e usa a Xerces como analisador XML.
(Certifique-se de assinalar a opção "validar com um esquema XML externo")
Se existir um atributo errado no XML, então o xmllint diz-lhe o nome do atributo não suportado. Mas se você está faltando um atributo no XML você apenas recebe uma mensagem dizendo que o elemento não pode ser validado.
Estou a trabalhar num XML muito complicado com muito complicado. regras, e sou novo nisto, por isso, descobrir qual atributo desapareceu está a demorar muito tempo.Actualização: acabei de encontrar uma ferramenta java de que gosto muito. Pode ser executado a partir da linha de comandos como o xmllint e suporta RELAX NG: https://msv.dev.java.net/
Encontrei este validador online de 'corefiling' bastante útil -
http://www.corefiling.com/opensource/schemaValidate.html
Depois de tentar algumas ferramentas para validar o meu xsd, este foi o que me deu informação detalhada de erro - por isso fui capaz de corrigir o erro no esquema.
Uma grande ferramenta visual para validar e gerar XSD a partir de XML é a ideia IntelliJ, intuitiva e simples.
Tenho este cenário exacto a correr na minha cópia gratuita do Microsoft Visual C++ 2010 Express.
Outro validador de XML online (XSD): http://www.utilities-online.info/xsdvalidation/.
Costumo usar o xsd da Microsoft para ajudar a gerar o xsd a partir de um ficheiro.net. Também analiso as secções do xml usando o xmlstarlet. A ferramenta livre final que lhe seria útil é o altovaxml, que está disponível neste URL: http://www.altova.com/download_components.html
Isto permite-me analisar todos os ficheiros xml que captam o xsd a usar ao analisar o 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 gerar o xml que uso: XSD DOTNET.dll / type: CFGCLASS & mudar o nome do esquema 0.xsd Classe CFGCLASS.xsd
Para obter o nome xsd que uso: xmlstarlet sel-t - m / XXX / * - v nome local () $1 / sed 's/ $//'
Isto permite-me recolher o XSD correcto usando uma marca de elementos dentro do ficheiro xml.
O resultado é que eu posso chamar uma função bash para digitalizar todos os arquivos XML e verificá-los. Mesmo que estejam em vários subdiretórios.