Ich habe die Validierung gegen ein Schema immer als unschätzbaren Schutz gegen Thinkos empfunden und würde gerne Validierungsprüfungen als Teil eines Projekts einbauen, bei dem ich häufig XML-Dateien von einigen hundert Zeilen Länge von Hand schreiben muss. Mein Texteditor hat eine recht gute CLI-Integrationsfunktion, also suche ich nach einem Kommandozeilen-Validator.
Als ich über Google keine eindeutigen Gewinner fand, stöberte ich hier herum und fand eine ähnliche Frage aber keines der dort vorgeschlagenen Werkzeuge entspricht ganz meinen Bedürfnissen:
- libxml (via cygwin) - meldet keine Zeilennummern; ich habe keine Ahnung wobei meine Fehler sind!
- msxml - nicht von der Kommandozeile aus ausgeführt werden kann?
- xerces-c - scheint eine Kopie von Visual C? zu benötigen.
- xerces2-j - nicht von der Kommandozeile aus ausgeführt werden kann?
- xmlstarlet - unzureichende XSD-Unterstützung*
(*Das Schema, gegen das ich validiere, verwendet Ersetzungsgruppen - unangemessen, aber es ist extern für das Projekt, so dass ich es nicht ändern kann - was zu xmlstarlet
selbst bei gültigen Dateien zu verschlucken).
Normalerweise ist dies der Punkt bei der Lösung eines Problems, an dem ich die Suche nach einer bestehenden Lösung aufgeben und zum Python-Hammer greifen würde, aber die XML-Unterstützung von Python ist notorisch nun ja lassen wir es einfach bei "notorisch".
Ich bin also wieder auf der Suche nach einem bereits existierenden Werkzeug. Meine Anforderungen sind ziemlich einfach:
- läuft unter Win32 (insbesondere Windows XP SP3)
- Kommandozeile; mein Editor kann mit fast jeder Kombination von stdin/out/-err, Argumenten, temporären Dateien usw. arbeiten.
- einigermaßen vollständige XSD-Unterstützung (insbesondere Namespaces und Substitutionsgruppen)
- meldet die Zeilennummer, in der der Fehler aufgetreten ist!
Gibt es ein solches Instrument? Ich würde es vorziehen, Visual Studio und Co. nicht installieren zu müssen (zu aufgebläht, IMO), aber ich habe bereits sowohl Cygwin als auch Python installiert.