XML-validator met XSD

Controleer een XML-document tegen een XSD en zie welk element welke regel overtreedt.

Deze draait op de server. Valideren tegen een XML Schema kan een browser niet, dus worden je document en je schema hierheen gestuurd om te worden gecontroleerd en daarna weggegooid. Ze worden niet opgeslagen, niet gelogd en nooit in een URL gezet. Is het document vertrouwelijk, gebruik dan xmllint lokaal – dat is dezelfde engine.

De XML die gecontroleerd moet worden.
Eén op zichzelf staande XSD. Een schema dat een ander bestand importeert of insluit, kan hier niet worden gecontroleerd.

Plak een document en de XSD waaraan het zou moeten voldoen. Je krijgt het oordeel en, voor elke regel die het overtreedt, het element, het regelnummer en de restrictie — niet alleen het woord “ongeldig”.

Hoe het werkt

Er kunnen drie dingen misgaan en ze worden apart gemeld, omdat ze iets anders betekenen. Het document is misschien geen welgevormde XML; dan is er niets gecontroleerd. Het schema is misschien geen bruikbare XSD; dan is er ook niets gecontroleerd. Of ze zijn allebei gelezen en het document heeft een regel overtreden, en alleen in dat geval zegt “ongeldig” iets over je gegevens.

De validatie is die van libxml, dezelfde engine die achter bijna alle XML-tools zit, dus het antwoord komt overeen met wat je build zal zeggen. De meldingen worden getoond zoals ze binnenkomen, in het Engels, omdat ze het element en de restrictie noemen en een parafrase een gok zou zijn naar wat een bericht bedoelde dat we niet zelf hebben geschreven.

Deze tool draait op de server, en is de enige hier die dat doet. Geen enkele browser kan tegen XML Schema valideren; daar bestaat geen API voor. Je document en je schema worden verstuurd, gecontroleerd en weggegooid: ze worden nooit naar schijf geschreven, nooit gelogd en nooit in een URL gezet.

Twee dingen worden zonder meer geweigerd. Een document of schema dat een DTD of een entiteit declareert, omdat een DTD een parser opdracht kan geven bestanden van de server te lezen. En een schema dat een ander bestand importeert of insluit, omdat hier niets wordt opgehaald: er zou maar een deel kunnen worden toegepast, en een gedeeltelijke controle die als geslaagd wordt gepresenteerd, is het slechtste antwoord dat een validator kan geven.

Voorbeelden

Geval Invoer Resultaat
Een waarde van het verkeerde type <price>cheap</price> Element 'price': 'cheap' is not a valid value of the atomic type 'xs:decimal'.
Een verplicht attribuut dat ontbreekt <book><title>V</title><price>1</price></book> Element 'book': The attribute 'id' is required but missing.
Een kindelement dat ontbreekt <book id="b1"><title>V</title></book> Element 'book': Missing child element(s). Expected is ( price ).

Veelgestelde vragen

Verlaat mijn document mijn browser?

Ja, en dit is de enige tool op de site waarvoor dat geldt. Valideren tegen XML Schema is niet iets wat een browser kan, dus het document en het schema worden hierheen gestuurd, gecontroleerd en weggegooid. Ze worden niet opgeslagen, niet gelogd en niet in een URL gezet. Is dat niet acceptabel voor het document dat je hebt, valideer het dan op je eigen computer: xmllint doet hetzelfde met dezelfde engine.

Waarom is mijn schema geweigerd omdat het een ander schema importeert?

Omdat er nergens iets wordt opgehaald: geen netwerk, geen bestandssysteem. Een schema dat over meerdere bestanden is verdeeld, kan hier maar half worden toegepast, en een validator die de helft van de regels controleert en dan “geldig” zegt, geeft een slechter antwoord dan helemaal geen. Voeg de bestanden samen, of valideer op je eigen computer, waar het andere bestand wel bestaat.

Waarom wordt een DOCTYPE geweigerd?

Omdat een DTD een entiteit kan declareren die naar een bestand op de server verwijst, en dat is de oudste manier die er bestaat om van een XML-parser een bestandslezer te maken. Het laden van entiteiten staat hier ook uit, dus de constructie weigeren is een tweede slot en niet het enige; maar een document dat tegen een XSD wordt gecontroleerd, heeft hoe dan ook geen DTD nodig.

Waarom staan de foutmeldingen in het Engels?

Ze komen van libxml en niet van deze site. Ze noemen de namen van je elementen en de restrictie die niet werd gehaald, en dat is het deel dat je nodig hebt; ze vertalen zou betekenen dat we meldingen parafraseren die we niet zelf hebben geschreven, en er één verkeerd weergeven kost meer dan hem in het Engels lezen.

Welke versie van XML Schema?

XSD 1.0, want dat is wat libxml implementeert. Assertions uit XSD 1.1 en conditionele typetoewijzing worden niet ondersteund, dus een 1.1-schema dat ze gebruikt, wordt als onleesbaar gemeld in plaats van stilletjes zonder die regels te worden gecontroleerd.

Mijn schema begint met encoding="utf-16" en is geweigerd. Waarom?

Omdat die declaratie een bestand beschrijft, en wat op deze pagina aankomt is wat je browser heeft verstuurd, en dat is UTF-8. libxml geloofde de declaratie en weigerde het schema te lezen. Nu wordt de codering genegeerd zodra die niet UTF-8 zegt, en het resultaat meldt dat. Hetzelfde met encoding="ISO-8859-1" was vroeger erger, omdat het niet misging: elk teken met een accent werd stilletjes verminkt en het document werd daarna gevalideerd tegen een tekst die niemand had geschreven.

Goed om te weten

  • Draait op de server. Je document en je schema worden verstuurd, gecontroleerd en weggegooid: ze worden niet opgeslagen, niet gelogd en kunnen niet via een URL worden gedeeld. Alle andere tools in deze categorie draaien in je browser; deze kan dat niet, omdat geen enkele browser XML Schema valideert.
  • Het oordeel is dat van libxml, en de formulering van alle meldingen ook. Alleen XSD 1.0.
  • Er worden hoogstens vijftig problemen getoond. Een document dat een regel duizend keer overtreedt, doet dat meestal om één reden.

Bronnen

Alle tools in Code