Im Büro schreiben wir derzeit eine Anwendung, die XML-Dateien für ein Schema generiert, das uns gegeben wurde. Wir haben das Schema in einer .XSD-Datei.
Gibt es Tools oder Bibliotheken, mit denen wir automatisierte Tests durchführen können, um zu überprüfen, ob das generierte XML mit dem Schema übereinstimmt?
Wir würden kostenlose Tools bevorzugen, die für den kommerziellen Gebrauch geeignet sind, obwohl wir den Schema-Checker nicht bündeln, sodass er nur von Entwicklern während der Entwicklung verwendet werden kann.
Unsere Entwicklungssprache ist C ++, wenn dies 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.
quelle
Antworten:
Nach einigen Recherchen denke ich, dass die beste Antwort Xerces ist , da es XSD implementiert, plattformübergreifend ist und weit verbreitet ist. Ich habe ein kleines Java-Projekt auf github erstellt , um es über die Befehlszeile mit dem Standard-JRE-Parser zu überprüfen , der normalerweise Xerces ist. Dies kann unter Windows / Mac / Linux verwendet werden.
Es gibt auch eine C ++ - Version von Xerces , wenn Sie diese lieber verwenden möchten. Mit dem Dienstprogramm StdInParse können Sie es über die Befehlszeile aufrufen. Ein Kommentar unten verweist 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:
Ein Problem ist, dass libxml nicht alle Spezifikationen implementiert, sodass möglicherweise Probleme auftreten :(
Wenn Sie unter Windows arbeiten, können Sie alternativ msxml verwenden , benötigen jedoch eine Art Wrapper, um es aufzurufen, z. B. die in diesem DDJ-Artikel beschriebene GUI . Es scheint jedoch, dass die meisten Windows-Benutzer einen XML-Editor verwenden, z. B. Notepad ++ (wie in Nates Antwort beschrieben ) oder XML Notepad 2007, wie von SteveC vorgeschlagen (es gibt auch mehrere kommerzielle Editoren, die ich hier nicht erwähne).
Schließlich werden Sie feststellen, dass verschiedene Programme leider unterschiedliche Ergebnisse liefern. Dies ist hauptsächlich auf die Komplexität der XSD-Spezifikation zurückzuführen. Möglicherweise möchten Sie Ihr Schema mit mehreren Tools testen.
UPDATE : Ich habe dies in einem Blog-Beitrag erweitert .
quelle
xmllint
ist leider nicht XML-Regex-kompatibel, so dass einige gültige XML-Regex nicht durchgelassen werdenEs gibt ein Plugin für Notepad ++ namens XML Tools , das XML-Verifizierung und -Validierung gegen eine XSD bietet.
Wie Sie es verwenden können, können Sie hier sehen .
quelle
XML
selbst beispielsweise auf eineXSD
Datei verweist ,xsi:noNamespaceSchemaLocation="file.xsd"
versuchen XML Tools, diese zu verwenden, anstatt Ihnen einen "Set" -Dialog zu geben.xmlstarlet ist ein Befehlszeilentool, das dies und mehr erledigt :
Die Verwendung in Ihrem Fall erfolgt wie folgt:
quelle
Für Windows gibt es den kostenlosen XML Notepad 2007 . Sie können XSDs auswählen, anhand derer sie validiert werden sollen
UPDATE: Besser noch, verwenden Sie Notepad ++ mit dem XML Tools Plugin
quelle
Mit dem Online- XML-Schema-Validator von DecisionSoft können Sie eine XML-Datei mit einem bestimmten Schema vergleichen.
quelle
Ich benutze Xerces:
http://xerces.apache.org/xerces-c/
quelle
sudo apt install libxerces-c-samples
und dann das Dokument mit überprüfenStdInParse -v=always -n -s < document.xml
.http://www.xmlvalidation.com/
(Aktivieren Sie unbedingt das Kontrollkästchen "Gegen externes XML-Schema validieren".)
quelle
Ich lerne gerade Schema. Ich verwende RELAX NG und verwende xmllint zur Validierung. Ich bin frustriert über die Fehler von xmlllint. 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. Wenn Sie jedoch ein Attribut im XML vermissen, erhalten Sie nur eine Meldung, dass das Element nicht validiert werden kann.
Ich arbeite an sehr kompliziertem XML mit sehr komplizierten Regeln, und ich bin neu in diesem Bereich. Daher dauert es lange, herauszufinden, welches Attribut fehlt.
Update: Ich habe gerade ein Java-Tool gefunden, das mir sehr gefällt. Es kann wie xmllint über die Befehlszeile ausgeführt werden und unterstützt RELAX NG: https://msv.dev.java.net/
quelle
Ich fand diesen Online-Validator von 'corefiling' ziemlich nützlich -
http://www.corefiling.com/opensource/schemaValidate.html
Nachdem ich einige Tools ausprobiert hatte, um meine xsd zu validieren, gab mir diese detaillierte Fehlerinformationen - so konnte ich den Fehler im Schema beheben.
quelle
Ein XML-Editor für eine schnelle und einfache XML-Validierung finden Sie unter http://www.xml-buddy.com
Sie müssen nur das Installationsprogramm ausführen und können anschließend Ihre XML-Dateien mit einer benutzerfreundlichen Desktop-Anwendung oder der Befehlszeile überprüfen. Darüber hinaus erhalten Sie Unterstützung für Schematron und RelaxNG. Die Stapelvalidierung wird ebenfalls unterstützt ...
Update 13.01.2012: Das Befehlszeilentool ist kostenlos und verwendet Xerces als XML-Parser.
quelle
Ein großartiges visuelles Werkzeug zum Validieren und Generieren von XSD aus XML ist IntelliJ IDEA, intuitiv und einfach.
quelle
Sie können Ihr XML-Schema mit Intellisense von Microsoft Visual Studio verbinden. Diese Option bietet Ihnen sowohl eine Echtzeitvalidierung als auch eine automatische Vervollständigung, was einfach fantastisch ist.
Ich habe genau dieses Szenario auf meiner kostenlosen Kopie von Microsoft Visual C ++ 2010 Express.
quelle
Ein weiterer XSD-Validator (Online XML Schema): http://www.utilities-online.info/xsdvalidation/ .
quelle
Ich neige dazu, xsd von Microsoft zu verwenden, um das 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 ist, 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 anhand der XML-Datei herausfinden, welche xsd verwendet werden soll.
Um die XML zu generieren, 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 lokaler Name () $ 1 | sed 's / $ //'
Auf diese Weise kann ich die richtige XSD mithilfe eines Element-Tags in der XML-Datei 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.
quelle