Pergunta

No escritório estamos atualmente escrevendo um aplicativo que irá gerar arquivos XML contra um esquema que nos foi dado. Temos o esquema em um arquivo .XSD.

Há ferramenta ou bibliotecas que podemos usar para testes automatizados para verificar se o XML gerado corresponde ao esquema?

Nós preferimos ferramentas gratuitas que são apropriados para uso comercial, embora não será empacotar o verificador de esquema para que ele só precisa ser utilizável por devs durante o desenvolvimento.

A nossa linguagem de desenvolvimento é C ++ se isso faz alguma diferença, embora eu não acho que deveria como poderíamos gerar o arquivo xml e, em seguida, fazer a validação chamando um programa separado no teste.

Foi útil?

Solução

Depois de alguma pesquisa, eu acho que a melhor resposta é Xerces , uma vez que implementa todos XSD, é cruz -platform e amplamente utilizados. Eu criei um projeto pequena Java no github para validar a partir da linha de comando usando o analisador JRE padrão , que é normalmente Xerces. Isso pode ser usado em Windows / Mac / Linux.

Há também um href="https://xerces.apache.org/xerces-c/" rel="noreferrer"> C ++ versão disponível se você preferir usar isso. A StdInParse utilidade pode ser usado para chamá-lo a partir da linha de comando. Além disso, um comentarista abaixo aponta para este mais completa utilidade wrapper.

Você também pode usar xmllint, que faz parte do libxml . Você pode muito bem já tê-lo instalado. Exemplo de utilização:

xmllint --noout --schema XSD_FILE XML_FILE

Um problema é que libxml não implementa todas as especificações, para que você pode executar em problemas: (

Como alternativa, se você estiver no Windows, você pode usar msxml , mas você vai precisar de algum tipo de wrapper para chamá-lo, tal como o GUI descrita neste DDJ artigo . No entanto, parece a maioria das pessoas no Windows use um editor XML, como o Notepad ++ (como descrito em de Nate resposta ) ou XML Notepad 2007 como suggested por SteveC (há também vários editores comerciais que não vou mencionar aqui).

Finalmente, você vai encontrar programas diferentes irá, infelizmente, dão resultados diferentes. Isto é principalmente devido à complexidade da especificação XSD. Você pode querer testar seu esquema com várias ferramentas.

Atualizar : Eu expandiu sobre isso em um Blog Post .

Outras dicas

Há um plugin para Notepad ++ chamado Ferramentas XML que a verificação ofertas XML e validação contra um XSD.

Você pode ver como usá-lo aqui .

xmlstarlet é uma ferramenta de linha de comando que vai fazer isso e muito 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/)

Uso no seu caso seria ao longo das linhas de:

xmlstarlet val --xsd your_schema.xsd your_file.xml

Para o Windows, há o livre XML Notepad 2007 . Você pode selecionar XSD de para para validar contra

A linha XML Schema Validator de DecisionSoft permite verificar um arquivo XML contra um determinado esquema.

Um editor XML para validação XML rápido e fácil está disponível em http: //www.xml -buddy.com

Você só precisa executar o instalador e depois que você pode validar seus arquivos XML com um fácil de usar a aplicação desktop ou da linha de comando. Além disso, você também terá suporte para Schematron e RelaxNG. validação lote também é suportado ...

Atualização 2012/01/13:. A ferramenta de linha de comando é livre para usar e usa Xerces como parser XML

http://www.xmlvalidation.com/

(Certifique-se de marcar a opção "Validar contra esquema XML externo" Box)

Estou aprendendo Schema. Estou usando RELAX NG e usando xmllint para validar. Eu estou ficando frustrado pelos erros que saem de xmlllint. Eu gostaria que eles eram um pouco mais informativo.

Se houver um atributo errado no XML, em seguida, xmllint informa o nome do atributo não suportado. Mas se você estiver faltando um atributo no XML que você acabou de receber uma mensagem dizendo o elemento não pode ser validado.

Eu estou trabalhando em algum XML muito complicado com regras muito complicadas, e eu sou novo para isso para rastrear qual atributo está faltando é tomar um longo tempo.

Update: Acabei de encontrar uma ferramenta java que eu estou gostando muito. Ele pode ser executado a partir da linha de comando como xmllint e suporta RELAX NG: https://msv.dev.java. net /

Eu encontrei este validador on-line de 'CoreFiling' bastante útil -
http://www.corefiling.com/opensource/schemaValidate.html

Depois de tentar algumas ferramentas para validar o meu XSD, isso é o que me deu informações detalhadas do erro -. Por isso eu era capaz de corrigir o erro no esquema

Uma ótima ferramenta visual para validar e gerar XSD a partir de XML é IntelliJ IDEA, intuitiva e simples.

Você pode conectar seu esquema XML para Intellisense Microsoft Visual Studio. Esta opção dá-lhe tanto a validação em tempo real e autocomplete, que é simplesmente fantástico.

Eu tenho esse cenário exato em execução no meu cópia gratuita do Microsoft Visual C ++ 2010 Express.

Outra XML on-line Schema (XSD) validador: http://www.utilities-online.info/ xsdvalidation / .

I tendem a usar xsd da Microsoft para ajudar a gerar o XSD de um arquivo .NET. Eu também analisar as seções do xml usando xmlstarlet. A ferramenta livre final que seria de utilidade para você é AltovaXML, que está disponível no seguinte URL: http: // www.altova.com/download_components.html .

Isso me permite verificar todos os arquivos xml pegando qual XSD para 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 uso xml I: xsd DOTNET.dll / Tipo: CFGCLASS & renomeação schema0.xsd CFGCLASS.xsd

Para obter o nome xsd eu uso: xmlstarlet sel -t -m / XXX / * -v locais-name () $ 1 | sed 's / $ //'

Isto permite-me para pegar o XSD correto usando uma marca de elemento dentro do arquivo xml.

O resultado líquido é que eu posso chamar uma função bash para verificar todos os arquivos XML e verificá-los. Mesmo se eles estão em vários subdiretórios.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top