web-dev-qa-db-ger.com

XML-Schema (XSD) -Validierungstool?

Im Büro schreiben wir derzeit eine Anwendung, die XML-Dateien anhand eines Schemas generiert, das wir erhalten haben. Wir haben das Schema in einer .XSD-Datei.

Gibt es Tools oder Bibliotheken, die wir für automatisierte Tests verwenden können, um zu überprüfen, ob das generierte XML mit dem Schema übereinstimmt?

Wir würden kostenlose Tools bevorzugen, die für die kommerzielle Nutzung geeignet sind, obwohl wir den Schema-Checker nicht bündeln, sodass er nur von Entwicklern während der Entwicklung verwendet werden muss.

Unsere Entwicklungssprache ist C++, wenn das einen Unterschied macht, obwohl ich nicht denke, dass dies der Fall sein sollte, da wir die XML-Datei generieren und dann die Validierung durchführen könnten, indem wir im Test ein separates Programm aufrufen.

262
Jason Dagit

Nach einigen Recherchen denke ich, dass die beste Antwort Xerces ist, da es XSD vollständig implementiert, plattformübergreifend und weit verbreitet ist. Ich habe ein kleines Java Projekt auf github erstellt, um über die Befehlszeile mit dem standardmäßigen JRE-Parser zu validieren, der normalerweise Xerces ist. Dieser kann unter Windows/Mac/Linux verwendet werden .

Es gibt auch eine C++ - Version von Xerces , falls Sie das lieber verwenden möchten. Mit dem Dienstprogramm StdInParse kann es über die Befehlszeile aufgerufen werden. Außerdem verweist ein Kommentar unten auf dieses vollständigere Wrapper-Dienstprogramm .

Sie können auch xmllint verwenden, das Teil von libxml ist. Möglicherweise haben Sie es bereits installiert. Anwendungsbeispiel:

xmllint --noout --schema XSD_FILE XML_FILE

Ein Problem ist, dass libxml nicht alle Spezifikationen implementiert, so dass Probleme auftreten können :(

Wenn Sie unter Windows arbeiten, können Sie alternativ msxml verwenden. Sie benötigen jedoch einen Wrapper, um ihn aufzurufen, z. B. die in diesem DDJ-Artikel beschriebene GUI. Es scheint jedoch, dass die meisten Windows-Benutzer einen XML-Editor wie Notepad ++ (wie in Nates Antwort beschrieben) oder XML ​​Notepad 2007 als von SteveC vorgeschlagen verwenden (es gibt auch mehrere kommerzielle Editoren was ich hier nicht erwähnen werde).

Schließlich werden Sie feststellen, dass unterschiedliche Programme leider unterschiedliche Ergebnisse liefern. Dies liegt hauptsächlich an der Komplexität der XSD-Spezifikation. Möglicherweise möchten Sie Ihr Schema mit mehreren Tools testen.

[~ # ~] update [~ # ~] : Ich habe dies in einem Blogpost erweitert.

234
Adrian Mouat

Es gibt ein Plugin für Notepad ++ namens XML Tools , das die XML-Überprüfung und -Validierung gegen eine XSD bietet.

Sie können sehen, wie man es benutzt hier .

111
Nate

xmlstarlet ist ein Befehlszeilenprogramm, das dies und mehr erledigt:

 $ xmlstarlet val --help 
 XMLStarlet Toolkit: XML-Dokument (e) validieren 
 Verwendung: xmlstarlet val <options> [<xml-file-or-uri> ... ] 
 wobei <options> 
 -w oder --well-shaped - nur Well-shaped validieren (default) 
 -d oder --dtd <dtd-file> - validieren gegen DTD 
 -s oder --xsd <xsd-file> - validieren gegen XSD-Schema 
 -E oder --embed - validieren mit eingebetteter DTD 
 -r oder --relaxng <rng-file> - validiere anhand des Relax-NG-Schemas 
 -e oder --err - drucke ausführliche Fehlermeldungen auf stderr 
 -b oder --list-bad - liste nur Dateien auf, die dies nicht tun validate 
 -g oder --list-good - listet nur Dateien auf, die 
 -q oder --quiet validieren - listet keine Dateien auf (nur Rückkehrergebniscode) 
 
 HINWEIS: XML-Schemas werden aufgrund der unvollständigen 
 Unterstützung in libxml2 (siehe http://xmlsoft.org) 
 
 XMLStarlet ist eine Befehlszeile Toolkit zum Abfragen/Bearbeiten/Prüfen/Transformieren von 
 XML-Dokumenten (weitere Informationen finden Sie unter http://xmlstar.sourceforge.net/)

Die Verwendung in Ihrem Fall wäre in etwa wie folgt:

xmlstarlet val --xsd your_schema.xsd your_file.xml
22
Charles Duffy

Für Windows gibt es das kostenlose XML Notepad 2007 . Sie können XSDs auswählen, gegen die validiert werden soll

UPDATE: Verwenden Sie besser noch Notepad ++ mit dem XML Tools Plugin

15
SteveC
3
John

Ein XML-Editor für die schnelle und einfache XML-Validierung ist unter http://www.xml-buddy.com verfügbar

Sie müssen nur das Installationsprogramm ausführen und können anschließend Ihre XML-Dateien mit einer benutzerfreundlichen Desktop-Anwendung oder der Befehlszeile validieren. Außerdem erhalten Sie Unterstützung für Schematron und RelaxNG. Die Stapelvalidierung wird ebenfalls unterstützt ...

Update 13.01.2012: Das Kommandozeilen-Tool ist kostenlos und verwendet Xerces als XML-Parser.

3
Clemens

http://www.xmlvalidation.com/

(Vergewissern Sie sich, dass das Kontrollkästchen "Gegen externes XML-Schema validieren" aktiviert ist.)

2
Helper

Ich lerne gerade Schema. Ich benutze RELAX NG und benutze xmllint zur Validierung. Ich bin frustriert über die Fehler, die aus xmlllint hervorgehen. Ich wünschte, sie wären etwas informativer.

Wenn das XML ein falsches Attribut enthält, gibt xmllint den Namen des nicht unterstützten Attributs an. Fehlt jedoch ein Attribut in der XML-Datei, wird nur die Meldung angezeigt, dass das Element nicht validiert werden kann.

Ich arbeite an sehr kompliziertem XML mit sehr komplizierten Regeln und bin neu in diesem Bereich. Daher dauert es sehr lange, herauszufinden, welches Attribut fehlt.

Update: Ich habe gerade ein Java Tool gefunden, das mir sehr gefällt. Es kann über die Befehlszeile wie xmllint ausgeführt werden und unterstützt RELAX NG: https: // msv. dev.Java.net/

2
Pengo

Ich fand diesen Online-Validator von 'corefiling' ziemlich nützlich -
http://www.corefiling.com/opensource/schemaValidate.html

Nachdem ich ein paar Tools zur Validierung meiner xsd ausprobiert hatte, gab diese mir detaillierte Fehlerinformationen - so konnte ich den Fehler im Schema beheben.

2
iniki

intelliJ IDEA ist ein großartiges visuelles Tool zur Validierung und Generierung von XSD aus XML. Es ist intuitiv und einfach.

1
jacktrade

Sie können Ihr XML-Schema mit Intellisense von Microsoft Visual Studio verbinden. Mit dieser Option können Sie sowohl in Echtzeit validieren als auch automatisch vervollständigen, was einfach fantastisch ist.

Ich habe genau dieses Szenario auf meiner kostenlosen Kopie von Microsoft Visual C++ 2010 Express ausgeführt.

1
AaronDanielson

Ein weiterer Online-Validator für XML-Schemata (XSD): http://www.utilities-online.info/xsdvalidation/ .

Ich neige dazu, xsd von Microsoft zu verwenden, um die xsd aus einer .NET-Datei zu generieren. Ich analysiere auch Abschnitte der XML mit xmlstarlet. Das letzte kostenlose Tool, das für Sie von Nutzen wäre, ist altovaxml, das unter folgender URL verfügbar ist: http://www.altova.com/download_components.html .

Auf diese Weise kann ich alle XML-Dateien scannen und durch Analysieren der XML die zu verwendende XSD ermitteln.

# 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
}

Zum Generieren der XML verwende ich: xsd DOTNET.dll/Typ: CFGCLASS & benenne schema0.xsd CFGCLASS.xsd um

Um den xsd-Namen zu erhalten, verwende ich: xmlstarlet sel -t -m/XXX/* -v local-name () $ 1 | sed 's/$ //'

Auf diese Weise kann ich mithilfe eines Element-Tags in der XML-Datei die richtige XSD abrufen.

Das Nettoergebnis ist, dass ich eine Bash-Funktion aufrufen kann, um alle XML-Dateien zu scannen und zu überprüfen. Auch wenn sie sich in mehreren Unterverzeichnissen befinden.

0
Andrew Stern