XML-Schema-Validator
Ein XML-Dokument gegen ein XSD prüfen und sehen, welches Element welche Regel verletzt.
Dieses hier läuft auf dem Server. Gegen ein XML Schema zu prüfen ist nichts, was ein Browser kann, daher werden Ihr Dokument und Ihr Schema hierher gesendet, geprüft und dann verworfen. Sie werden nicht gespeichert, nicht protokolliert und nie in eine URL gelegt. Ist das Dokument vertraulich, führen Sie stattdessen xmllint lokal aus — es ist dieselbe Engine.
Fügen Sie ein Dokument und das XSD ein, das es erfüllen soll. Sie bekommen das Urteil und für jede verletzte Regel das Element, die Zeile und die Bedingung — und nicht nur das Wort „ungültig“.
Wie es funktioniert
Drei Dinge können schiefgehen, und sie werden getrennt gemeldet, denn sie bedeuten Verschiedenes. Das Dokument mag kein wohlgeformtes XML sein, dann wurde nichts geprüft. Das Schema mag kein brauchbares XSD sein, dann wurde ebenfalls nichts geprüft. Oder beide wurden gelesen und das Dokument hat eine Regel verletzt — und das ist der einzige Fall, in dem „ungültig“ Ihnen etwas über Ihre Daten sagt.
Die Prüfung ist die von libxml, derselben Engine hinter den meisten XML-Werkzeugen, die Antwort stimmt also mit dem überein, was Ihre Build sagen wird. Ihre Diagnosen werden gezeigt, wie sie kommen, auf Englisch, denn sie nennen das Element und die Bedingung, und eine Umschreibung wäre eine Vermutung darüber, was eine Meldung bedeutete, die wir nicht geschrieben haben.
Dieses Tool läuft auf dem Server, und es ist das einzige hier, das das tut. Kein Browser kann gegen XML Schema prüfen; es gibt keine API dafür. Ihr Dokument und Ihr Schema werden gesendet, geprüft und verworfen — nie auf Platte geschrieben, nie protokolliert und nie in eine URL gelegt.
Zwei Dinge werden rundheraus abgelehnt. Ein Dokument oder Schema, das eine DTD oder eine Entität deklariert, denn eine DTD kann einen Parser anweisen, Dateien vom Server zu lesen. Und ein Schema, das eine andere Datei importiert oder einbindet, denn hier wird nichts geholt: Es ließe sich nur teilweise anwenden, und eine Teilprüfung, die als Bestehen gemeldet wird, ist die schlechteste Antwort, die ein Validator geben kann.
Beispiele
| Fall | Eingabe | Ergebnis |
|---|---|---|
| Ein Wert vom falschen Typ | <price>cheap</price> | Element 'price': 'cheap' is not a valid value of the atomic type 'xs:decimal'. |
| Ein erforderliches Attribut weggelassen | <book><title>V</title><price>1</price></book> | Element 'book': The attribute 'id' is required but missing. |
| Ein fehlendes Kindelement | <book id="b1"><title>V</title></book> | Element 'book': Missing child element(s). Expected is ( price ). |
Häufige Fragen
Verlässt mein Dokument meinen Browser?
Ja, und es ist das einzige Tool der Website, für das das gilt. Gegen XML Schema zu prüfen ist nichts, was ein Browser kann, das Dokument und das Schema werden also hierher gesendet, geprüft und verworfen. Sie werden nicht gespeichert, nicht protokolliert und in keine URL gelegt. Ist das für das Dokument, das Sie haben, nicht hinnehmbar, prüfen Sie es stattdessen lokal — xmllint tut dasselbe mit derselben Engine.
Warum wurde mein Schema abgelehnt, weil es ein anderes importiert?
Weil von nirgendwoher etwas geholt wird: kein Netz, kein Dateisystem. Ein über Dateien verteiltes Schema lässt sich hier nur zur Hälfte anwenden, und ein Validator, der die Hälfte der Regeln prüft und dann „gültig“ sagt, gibt eine Antwort, die schlechter ist als keine. Führen Sie die Dateien zusammen oder prüfen Sie lokal, wo die andere Datei liegt.
Warum wird ein DOCTYPE abgelehnt?
Weil eine DTD eine Entität deklarieren kann, die auf eine Datei auf dem Server zeigt, und das ist der älteste Weg, einen XML-Parser in einen Dateileser zu verwandeln. Das Laden von Entitäten ist hier ebenfalls abgeschaltet, das Konstrukt abzulehnen ist also ein zweites Schloss und nicht das einzige — aber ein Dokument, das gegen ein XSD geprüft wird, braucht ohnehin keine DTD.
Warum sind die Fehlermeldungen auf Englisch?
Sie kommen von libxml und nicht von dieser Website. Sie zitieren Ihre Elementnamen und die verletzte Bedingung, und das ist der Teil, den Sie brauchen, und sie zu übersetzen hieße, Diagnosen zu umschreiben, die wir nicht geschrieben haben — sich bei einer davon zu vertun kostet mehr, als sie auf Englisch zu lesen.
Welche Version von XML Schema?
XSD 1.0, und das ist es, was libxml umsetzt. Die Assertions von XSD 1.1 und die bedingte Typzuweisung werden davon nicht unterstützt, ein 1.1-Schema, das sie benutzt, wird also als unlesbar gemeldet statt stillschweigend ohne diese Regeln geprüft.
Mein Schema beginnt mit encoding="utf-16" und wurde abgelehnt. Warum?
Weil diese Deklaration eine Datei beschreibt, und was diese Seite erreicht, ist das, was Ihr Browser gesendet hat, nämlich UTF-8. libxml hat der Deklaration geglaubt und sich geweigert, das Schema überhaupt zu lesen. Die Kodierung wird jetzt verworfen, sobald sie nicht UTF-8 sagt, und das Ergebnis sagt es. Dasselbe mit encoding="ISO-8859-1" war schlimmer, denn es scheiterte nicht: Jedes Zeichen mit Akzent wurde still verstümmelt und das Dokument dann gegen einen Text geprüft, den niemand geschrieben hatte.
Gut zu wissen
- Läuft auf dem Server. Ihr Dokument und Ihr Schema werden gesendet, geprüft und verworfen — nicht gespeichert, nicht protokolliert, nicht in einer URL teilbar. Jedes andere Tool dieser Kategorie läuft in Ihrem Browser; dieses kann es nicht, denn kein Browser prüft XML Schema.
- Das Urteil ist das von libxml, und die Formulierung jeder Diagnose ebenfalls. Nur XSD 1.0.
- Es werden höchstens fünfzig Probleme aufgeführt. Ein Dokument, das eine Regel tausendmal verletzt, verletzt sie meist aus einem Grund.