Validateur XML par XSD

Contrôlez un document XML contre un XSD et voyez quel élément enfreint quelle règle.

Celui-ci tourne sur le serveur. Valider contre un schéma XML n'est pas quelque chose qu'un navigateur sait faire : votre document et votre schéma sont donc envoyés ici pour être contrôlés, puis abandonnés. Ils ne sont ni conservés, ni journalisés, ni jamais placés dans une URL. Si le document est confidentiel, exécutez plutôt xmllint en local — c'est le même moteur.

Le XML à contrôler.
Un XSD autonome. Un schéma qui importe ou inclut un autre fichier ne peut pas être contrôlé ici.

Collez un document et le XSD qu'il est censé satisfaire. Vous obtenez le verdict et, pour chaque règle enfreinte, l'élément, la ligne et la contrainte — pas seulement le mot « invalide ».

Comment ça marche

Trois choses peuvent échouer, et elles sont signalées séparément parce qu'elles ne veulent pas dire la même chose. Le document peut ne pas être du XML bien formé, auquel cas rien n'a été contrôlé. Le schéma peut ne pas être un XSD exploitable, auquel cas rien n'a été contrôlé non plus. Ou bien les deux ont été lus et le document enfreint une règle — le seul cas où « invalide » vous parle de vos données.

La validation est celle de libxml, le moteur derrière la plupart des outils XML : la réponse concorde donc avec ce que dira votre chaîne de compilation. Ses diagnostics sont affichés tels quels, en anglais, parce qu'ils nomment l'élément et la contrainte, et qu'une paraphrase serait une supposition sur le sens d'un message que nous n'avons pas écrit.

Cet outil tourne sur le serveur, et c'est le seul du site dans ce cas. Aucun navigateur ne sait valider contre un schéma XML ; il n'existe aucune API pour cela. Votre document et votre schéma sont envoyés, contrôlés puis abandonnés — jamais écrits sur disque, jamais journalisés, jamais placés dans une URL.

Deux choses sont refusées d'emblée. Un document ou un schéma déclarant une DTD ou une entité, parce qu'une DTD peut demander à l'analyseur de lire des fichiers sur le serveur. Et un schéma qui importe ou inclut un autre fichier, parce que rien n'est récupéré ici : seule une partie pourrait être appliquée, et un contrôle partiel annoncé comme réussi est la pire réponse qu'un validateur puisse donner.

Exemples

Cas Saisie Résultat
Une valeur du mauvais type <price>cheap</price> Element 'price': 'cheap' is not a valid value of the atomic type 'xs:decimal'.
Un attribut obligatoire omis <book><title>V</title><price>1</price></book> Element 'book': The attribute 'id' is required but missing.
Un élément enfant manquant <book id="b1"><title>V</title></book> Element 'book': Missing child element(s). Expected is ( price ).

Questions fréquentes

Mon document quitte-t-il mon navigateur ?

Oui, et c'est le seul outil du site pour lequel c'est vrai. Valider contre un schéma XML n'est pas quelque chose qu'un navigateur sait faire : le document et le schéma sont donc envoyés ici, contrôlés, puis abandonnés. Ils ne sont ni conservés, ni journalisés, ni placés dans une URL. Si ce n'est pas acceptable pour le document que vous avez, validez-le localement — xmllint fait la même chose avec le même moteur.

Pourquoi mon schéma a-t-il été refusé parce qu'il en importe un autre ?

Parce que rien n'est récupéré où que ce soit : ni réseau, ni système de fichiers. Un schéma réparti sur plusieurs fichiers ne peut être appliqué qu'à moitié ici, et un validateur qui contrôle la moitié des règles puis annonce « valide » donne une réponse pire que pas de réponse du tout. Fusionnez les fichiers, ou validez localement là où l'autre fichier existe.

Pourquoi un DOCTYPE est-il refusé ?

Parce qu'une DTD peut déclarer une entité pointant vers un fichier du serveur, et c'est le plus vieux moyen qui soit de transformer un analyseur XML en lecteur de fichiers. Le chargement des entités est également désactivé ici : refuser la construction est donc un second verrou plutôt que le seul — mais de toute façon, un document contrôlé contre un XSD n'a aucun usage d'une DTD.

Pourquoi les messages d'erreur sont-ils en anglais ?

Ils viennent de libxml et non de ce site. Ils citent vos noms d'éléments et la contrainte qui a échoué, c'est-à-dire la partie dont vous avez besoin ; les traduire reviendrait à paraphraser des diagnostics que nous n'avons pas écrits — et se tromper sur l'un d'eux coûte plus cher que de le lire en anglais.

Quelle version de schéma XML ?

XSD 1.0, qui est ce qu'implémente libxml. Les assertions et l'affectation conditionnelle de type de XSD 1.1 n'y sont pas prises en charge : un schéma 1.1 qui les utilise sera donc signalé comme illisible plutôt que contrôlé en silence sans ces règles.

Mon schéma commence par encoding="utf-16" et il a été refusé. Pourquoi ?

Parce que cette déclaration décrit un fichier, alors que ce qui arrive sur cette page est ce que votre navigateur a envoyé, c'est-à-dire de l'UTF-8. libxml a cru la déclaration et a refusé de lire le schéma. L'encodage est désormais retiré dès qu'il n'indique pas UTF-8, et le résultat le signale. La même chose avec encoding="ISO-8859-1" était pire encore, parce qu'elle n'échouait pas : chaque caractère accentué était silencieusement dénaturé, et le document était ensuite contrôlé contre un texte que personne n'avait écrit.

Bon à savoir

  • Tourne sur le serveur. Votre document et votre schéma sont envoyés, contrôlés et abandonnés — ni conservés, ni journalisés, ni partageables par URL. Tous les autres outils de cette catégorie tournent dans votre navigateur ; celui-ci ne le peut pas, parce qu'aucun navigateur ne valide un schéma XML.
  • Le verdict est celui de libxml, ainsi que la formulation de chaque diagnostic. XSD 1.0 uniquement.
  • Cinquante problèmes au plus sont listés. Un document qui enfreint une règle mille fois l'enfreint généralement pour une seule raison.

Sources

Tous les outils Code