IOException.de

Icon

Ausgewählter Nerdkram von Informatikstudenten der Uni Ulm

XML-Dokumente per XSD 1.1 mit Apache Xerces-J validieren

Seit April diesen Jahres ist XML Schema in der Version 1.1 offizieller Standard des W3C. Nachdem die Version 1.0 noch aus dem Jahre 2004 datiert, wurde die letzten Jahre eifrig diskutiert, ehe der neue Standard nun endlich in Stein gemeißelt wurde.

Dumm nur: Wenngleich seit 2004 über die Änderungen von XSD 1.1 diskutiert wurde, gibt es auch jetzt, nach Veröffentlichung der W3C Recommendation, nur sehr wenige Tools, die die neuen Schema-Elemente wie <assert> und <alternative> unterstützen, die XML Schema sehr viel mächtiger werden lassen. Da ich für ein Projekt gerade an einem ziemlich umfangreichen Schema arbeite, wollte ich die Vorteile der neuen Version, insbesondere die beiden eben erwähnten Möglichkeiten der Assertions und Typalternativen, natürlich gleich nutzen. Und benötigte dementsprechend einen XML-Validator, der XSD 1.1 beherrscht.

Nach meiner Recherche gibt es aktuell nur zwei Programme, für die das zutrifft: SAXON (Enterprise Edition) und Apache Xerces. Die aktuellste Version vom <oXygen/> XML Developer kann laut Foren wohl auch mit XSD 1.1 umgehen, ist aber auch nicht ganz billig.
So entschied ich mich für Apache Xerces2 Java, eine Open-Source Implementierung in Java. Zwar setzt sie nur den XSD 1.1 Working Draft von 2009 um, bisher konnte ich aber keinen Verhaltensunterschied zum nun offiziellen Standard feststellen.

Die Installation ist zwar auf deren Seite beschrieben, ich fand sie allerdings nicht sehr intuitiv, daher hier ein paar Bemerkungen: Unter xerces.apache.org kann im unteren Abschnitt “Binary Distributions” die aktuelle Version von Xerces2 Java (XML Schema 1.1) (Beta) heruntergeladen werden. Darin findet sich mit /samples/jaxp/SourceValidator.java schon ein Kommandozeilenprogramm, über das das fröhliche Validieren beginnen könnte:

java jaxp.SourceValidator -xsd11 -a schema.xsd -i file.xml

Könnte – denn am Anfang wird vermutlich eine Fehlermeldung wie Parse error occurred - No SchemaFactory that implements the schema language specified by: http://www.w3.org/XML/XMLSchema/v1.1 could be loaded den erfolglosen Versuch quittieren. Klar, irgendwie müssen die Xerces-Daten ja noch ihre Verwendung finden. Die Xerces-FAQ schreiben nur wenig hilfreich:

Use the Endorsed Standards Override Mechanism. Place the xalan.jar, serializer.jar, xercesImpl.jar and xml-apis.jar in the\lib\endorsed directory, whereis where the runtime software is installed.

Okay, was ist also zu tun? – Zu allererst benötigen wir den Java-Pfad. Unter Ubuntu ist das bei mir /usr/lib/jvm/{java-version}/jre, bei mehreren Java-Installationen findet man mittels java -version die richtige. Im Unterordner lib können wir nun den Ordner endorsed anlegen, wenn er noch nicht existiert. Dort packen wir die Dateien xml-apis.jar, xercesImpl.jar, icu4j.jar, cupv10k-runtime.jar, org.eclipse.wst.xml.xpath2.processor_1.1.0.jar aus dem Xerces Download hinein. Jetzt fällt auf, wer am Anfang fälschlicherweise doch die “Source Distribution” heruntergeladen hat, da sind die nämlich nicht dabei.

Sind die Dateien im endorsed Ordner hinterlegt, greift Java direkt darauf zurück. Der obige Aufruf des SourceValidators.java sollte nun also keinen Fehler mehr werfen und die XML-Datei wie gewünscht nach dem neuen XSD 1.1 Standard validieren.

Übrigens: Die im endorsed Ordner hinterlegten Jars können natürlich wieder zu Problemen mit anderen Programmen führen. Ich habe mir daher einfach in der ~/.bash_aliases zwei Aliases angelegt:

alias endorsed-off="sudo mv /usr/lib/jvm/java-6-openjdk-amd64/jre/lib/endorsed/ /usr/lib/jvm/java-6-openjdk-amd64/jre/lib/old_endorsed"
alias endorsed-on="sudo mv /usr/lib/jvm/java-6-openjdk-amd64/jre/lib/old_endorsed/ /usr/lib/jvm/java-6-openjdk-amd64/jre/lib/endorsed"

ioexception.de

Benjamin Erb [] studiert seit 2006 Medieninformatik und interessiert sich insbesondere für Java, Web-Technologien, Ubiquitous Computing, Cloud Computing, verteilte Systeme und Informationsdesign.


Raimar Wagner studiert seit 2005 Informatik mit Anwendungsfach Medizin und interessiert sich für C++ stl, boost & Qt Programmierung, Scientific Visualization, Computer Vision und parallele Rechenkonzepte.


David Langer studiert seit 2006 Medieninformatik und interessiert sich für Web-Entwicklung, jQuery, Business Process Management und Java.


Sebastian Schimmel studiert seit 2006 Informatik mit Anwendungsfach Medizin und interessiert sich für hardwarenahe Aspekte, Robotik, webOs, C/C++ und UNIX/Linux.


Timo Müller studiert seit 2006 Medieninformatik. Er interessiert sich allen voran für Mobile and Ubiquitous Computing, systemnahe Enwticklung und verteilte Systeme, sowie Computer Vision.


Achim Strauß studiert seit 2006 Medieninformatik. Seine Interessen liegen in Themen der Mensch-Computer Interaktion sowie Webentwicklung und UNIX/Linux.


Tobias Schlecht studiert seit 2006 Medieninformatik und interessiert sich vor allem für Software Engineering, Model Driven Architecture, Requirements Engineering, Usability Engineering, Web-Technologien, UML2 und Java.


Fabian Groh studiert seit 2006 Medieninformatik. Seine Interessengebiete sind Computer Graphics, Computer Vision, Computational Photography sowie Ubiquitos Computing.


Matthias Matousek studiert seit 2007 Medieninformatik und interessiert sich besonders für Skriptsprachen, Echtzeitsysteme und Kommunikation.


Michael Müller [] studiert seit 2009 Medieninformatik. Er interessiert sich vor allem für Web-Technologien, Ubiquitous Computing, User-Interfaces, UNIX und Creative Coding.


Falco Nogatz [] studiert seit 2010 Informatik mit Anwendungsfach Mathematik. Er interessiert sich für Web-Technologien, Programmierparadigmen und theoretische Grundlagen.

Archiv

Februar 2015
M D M D F S S
« Mrz    
 1
2345678
9101112131415
16171819202122
232425262728