Domanda

In ufficio stiamo attualmente scrivendo un'applicazione che genererà file XML su uno schema che ci è stato dato. Abbiamo lo schema in un file .XSD.

Esistono strumenti o librerie che possiamo utilizzare per i test automatici per verificare che l'XML generato corrisponda allo schema?

Preferiremmo strumenti gratuiti appropriati per l'uso commerciale, anche se non raggrupperemo il controllo dello schema, quindi deve essere utilizzabile solo dagli sviluppatori durante lo sviluppo.

Il nostro linguaggio di sviluppo è C ++ se questo fa la differenza, anche se non credo che dovrebbe, poiché potremmo generare il file xml e quindi effettuare la convalida chiamando un programma separato nel test.

È stato utile?

Soluzione

Dopo alcune ricerche, penso che la risposta migliore sia Xerces , poiché implementa tutto l'XSD, è incrociata -piattaforma e ampiamente usato. Ho creato un piccolo progetto Java su github per convalidare dalla riga di comando utilizzando il parser JRE predefinito , che normalmente è Xerces. Questo può essere usato su Windows / Mac / Linux.

Esiste anche una versione C ++ di Xerces se preferisci utilizzarla. utility StdInParse può essere utilizzato per chiamarlo dalla riga di comando. Inoltre, un commentatore di seguito indica questa utility wrapper più completa .

Puoi anche usare xmllint, che fa parte di libxml . Potresti già averlo installato. Esempio di utilizzo:

xmllint --noout --schema XSD_FILE XML_FILE

Un problema è che libxml non implementa tutte le specifiche, quindi potresti incorrere in problemi :(

In alternativa, se sei su Windows, puoi utilizzare msxml , ma avrai bisogno di una sorta di wrapper per chiamarlo, come quello della GUI descritto in questo articolo DDJ . Tuttavia, sembra che molte persone su Windows utilizzino un editor XML, come Notepad ++ (come descritto in la risposta di Nate ) o XML Notepad 2007 come consigliato da SteveC (ci sono anche diversi editor commerciali che non menzionerò qui).

Infine, troverai diversi programmi che, sfortunatamente, daranno risultati diversi. Ciò è in gran parte dovuto alla complessità delle specifiche XSD. Potresti voler testare il tuo schema con diversi strumenti.

AGGIORNAMENTO : l'ho ampliato in un post di blog .

Altri suggerimenti

Esiste un plug-in per Notepad ++ chiamato Strumenti XML che offre la verifica e la convalida XML su un XSD.

Puoi vedere come usarlo qui .

xmlstarlet è uno strumento da riga di comando che farà questo e altro:

$ 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/)

L'utilizzo nel tuo caso sarebbe simile a:

xmlstarlet val --xsd your_schema.xsd your_file.xml

Per Windows è disponibile XML Notepad 2007 . È possibile selezionare XSD per la convalida su

Il XML Schema Validator online di DecisionSoft consente di verificare un file XML rispetto a un determinato schema.

Un editor XML per la convalida XML semplice e veloce è disponibile all'indirizzo http: //www.xml -buddy.com

Devi solo eseguire il programma di installazione e successivamente puoi convalidare i tuoi file XML con un'applicazione desktop o la riga di comando facili da usare. Inoltre ottieni supporto per Schematron e RelaxNG. È supportata anche la convalida in batch ...

Aggiornamento 13/01/2012: lo strumento da riga di comando è gratuito e utilizza Xerces come parser XML.

http://www.xmlvalidation.com/

(Assicurati di selezionare la casella " Convalida contro schema XML esterno ")

Sto solo imparando Schema. Sto usando RELAX NG e utilizzo xmllint per convalidare. Mi sento frustrato dagli errori che provengono da xmlllint. Vorrei che fossero un po 'più informativi.

Se nell'XML è presente un attributo errato, xmllint indica il nome dell'attributo non supportato. Ma se ti manca un attributo nell'XML, ricevi semplicemente un messaggio che dice che l'elemento non può essere validato.

Sto lavorando ad alcuni XML molto complicati con regole molto complicate, e sono nuovo a questo, quindi rintracciare l'attributo mancante richiede molto tempo.

Aggiornamento: ho appena trovato uno strumento Java che mi piace molto. Può essere eseguito dalla riga di comando come xmllint e supporta RELAX NG: https://msv.dev.java. net /

Ho trovato questo validatore online di 'corefiling' abbastanza utile -
http://www.corefiling.com/opensource/schemaValidate.html

Dopo aver provato alcuni strumenti per convalidare il mio xsd, questo è quello che mi ha dato informazioni dettagliate sull'errore, quindi sono stato in grado di correggere l'errore nello schema.

un ottimo strumento visivo per convalidare e generare XSD da XML è IntelliJ IDEA, intuitivo e semplice.

È possibile connettere lo schema XML a Intellisense di Microsoft Visual Studio. Questa opzione offre sia la convalida in tempo reale sia il completamento automatico, il che è semplicemente fantastico.

Ho questo esatto scenario in esecuzione sulla mia copia gratuita di Microsoft Visual C ++ 2010 Express.

Un altro validatore di XML Schema (XSD) online: http://www.utilities-online.info/ xsdvalidation / .

Tendo a usare xsd di Microsoft per aiutare a generare xsd da un file .NET. Analizzo anche sezioni dell'xml usando xmlstarlet. Lo strumento gratuito finale che ti sarebbe utile è altovaxml, disponibile a questo URL: http: // www.altova.com/download_components.html .

Questo mi permette di scansionare tutti i file xml rilevando quale xsd usare analizzando l'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
}

Per generare l'xml che uso:    xsd DOTNET.dll / tipo: CFGCLASS & amp; rinominare schema0.xsd CFGCLASS.xsd

Per ottenere il nome xsd che uso:     xmlstarlet sel -t -m / XXX / * -v nome-locale () $ 1 | sed 's / $ //'

Questo mi permette di prelevare l'XSD corretto usando un tag element all'interno del file xml.

Il risultato netto è che posso chiamare una funzione bash per scansionare tutti i file XML e verificarli. Anche se si trovano in più sottodirectory.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top