275 votes

Outil de validation du schéma XML (XSD) ?

Au bureau, nous sommes en train d'écrire une application qui va générer des fichiers XML à partir d'un schéma qui nous a été donné. Le schéma se trouve dans un fichier .XSD.

Existe-t-il des outils ou des bibliothèques que nous pouvons utiliser pour des tests automatisés afin de vérifier que le XML généré correspond au schéma ?

Nous préférons les outils gratuits qui conviennent à un usage commercial, même si nous n'inclurons pas le vérificateur de schémas dans le paquet, de sorte qu'il ne doit être utilisable que par les développeurs pendant le développement.

Notre langage de développement est le C++ si cela fait une différence, bien que je ne pense pas que cela devrait, car nous pourrions générer le fichier xml et ensuite faire la validation en appelant un programme séparé dans le test.

161 votes

J'adore le fait que beaucoup de ces questions "non constructives" figurent en tête des résultats de recherche Google sur des sujets que je recherche et que les réponses sont utiles.

2 votes

Je comprends ce que vous voulez dire par "pas constructif". Honnêtement, c'est une excellente question et les débats/arguments finissent parfois par donner de bonnes réponses.

26 votes

C'est le cas exact où les admins sont contre-productifs.

251voto

Adrian Mouat Points 5533

Après quelques recherches, je pense que la meilleure réponse est Xerces car il met en œuvre l'ensemble de XSD, est multiplateforme et largement utilisé. J'ai créé un petit projet Java sur github pour valider à partir de la ligne de commande en utilisant l'analyseur par défaut de JRE, qui est normalement Xerces. Ceci peut être utilisé sous Windows/Mac/Linux.

Il existe également un Version C++ de Xerces disponible si vous préférez l'utiliser. Le site Utilitaire StdInParse peut être utilisé pour l'appeler depuis la ligne de commande. En outre, un commentateur ci-dessous signale ceci utilitaire d'enveloppement plus complet .

Vous pourriez également utiliser xmllint, qui fait partie de libxml . Vous pouvez très bien l'avoir déjà installé. Exemple d'utilisation :

xmllint --noout --schema XSD_FILE XML_FILE

Le problème est que libxml n'implémente pas toutes les spécifications, vous pouvez donc rencontrer des problèmes :(

Alternativement, si vous êtes sous Windows, vous pouvez utiliser msxml mais vous aurez besoin d'une sorte d'enveloppe pour l'appeler, telle que l'interface graphique décrite dans cet article. Article du DDJ . Cependant, il semble que la plupart des personnes sous Windows utilisent un éditeur XML, tel que Notepad++ (comme décrit dans la section "Édition"). Réponse de Nate ) ou Bloc-notes XML 2007 comme suggéré par SteveC (il existe également plusieurs éditeurs commerciaux que je ne mentionnerai pas ici).

Enfin, vous constaterez que différents programmes donneront, malheureusement, des résultats différents. Cela est dû en grande partie à la complexité de la spécification XSD. Vous voudrez peut-être tester votre schéma avec plusieurs outils.

UPDATE : Je me suis étendu sur ce sujet dans un article de blog .

1 votes

J'ai trouvé les éléments suivants utiles : jmvanel.free.fr/xsd/README.html

0 votes

Un exemple d'utilisation de StdinParse (sous linux) peut être utile : StdInParse -n -s -f -v=always < XML_FILE . XML_FILE doit inclure l'emplacement du schéma. Pour moi, il donne des résultats plus complets que xmllint.

3 votes

Existe-t-il un moyen de demander à un programme d'utiliser xsi:schemaLocation au lieu d'alimenter manuellement tous les XSD ?

117voto

Nate Points 3229

Il y a un plugin pour Notepad++ appelé Outils XML qui offre une vérification et une validation XML par rapport à un XSD.

Vous pouvez voir comment l'utiliser ici .

0 votes

Ce plugin prétend que tous mes fichiers sont valides, même s'ils ne le sont pas. (npp 5.7, XMLTools 2.3.1 unicode beta2 r805)

5 votes

-1, ce plugin est une douleur à installer

2 votes

J'ai testé avec npp 5.8.6, XMLTools 2.3.1 unicode beta2 r805, cela fonctionne bien.

24voto

Charles Duffy Points 34134

xmlstarlet est un outil en ligne de commande qui permet de faire tout cela et bien plus encore :

$ xmlstarlet val --help
XMLStarlet Toolkit: Validate XML document(s)
Usage: xmlstarlet val <options> \[ <xml-file-or-uri> ... \]
where <options>
  -w or --well-formed        - validate well-formedness only (default)
  -d or --dtd <dtd-file>     - validate against DTD
  -s or --xsd <xsd-file>     - validate against XSD schema
  -E or --embed              - validate using embedded DTD
  -r or --relaxng <rng-file> - validate against Relax-NG schema
  -e or --err                - print verbose error messages on stderr
  -b or --list-bad           - list only files which do not validate
  -g or --list-good          - list only files which validate
  -q or --quiet              - do not list files (return result code only)

NOTE: XML Schemas are not fully supported yet due to its incomplete
      support in libxml2 (see http://xmlsoft.org)

XMLStarlet is a command line toolkit to query/edit/check/transform
XML documents (for more information see http://xmlstar.sourceforge.net/)

Dans votre cas, l'utilisation serait la suivante :

xmlstarlet val --xsd your_schema.xsd your_file.xml

3 votes

Savez-vous à quel point l'avertissement concernant la non prise en charge complète des schémas xml est sérieux ?

2 votes

A en juger par les autres réponses, xmlstarlet est un peu faible sur son implémentation xsd.

3 votes

Étant donné que xmlstarlet n'utilise que libxml2 sous le capot, il est probablement plus facile d'utiliser xmllint qui est fourni avec libxml2 et expliqué dans la réponse acceptée.

17voto

SteveC Points 2707

Pour Windows, il existe le logiciel gratuit Bloc-notes XML 2007 . Vous pouvez sélectionner des XSD pour qu'il les valide.

MISE À JOUR : mieux encore, utilisez Notepad++ avec le plugin XML Tools.

4voto

Le site en ligne Valideur de schéma XML de DecisionSoft vous permet de vérifier un fichier XML par rapport à un schéma donné.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X