web-dev-qa-db-fra.com

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

Au bureau, nous écrivons actuellement une application qui générera des fichiers XML à partir d’un schéma qui nous a été fourni. Nous avons le schéma dans un fichier .XSD.

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

Nous préférerions des outils gratuits adaptés à une utilisation commerciale, même si nous ne regrouperons pas le vérificateur de schéma afin qu'il ne soit utilisable que par les développeurs pendant le développement.

Notre langage de développement est C++ si cela fait une différence, bien que je ne pense pas que ce soit le cas, car nous pourrions générer le fichier XML et ensuite effectuer la validation en appelant un programme distinct dans le test.

262
Jason Dagit

Après quelques recherches, je pense que la meilleure réponse est Xerces , car il implémente tout le format XSD, est multi-plateforme et largement utilisé. J'ai créé un petit Java projet sur github à valider à partir de la ligne de commande à l'aide de l'analyseur JRE par défaut, qui est normalement Xerces. Ceci peut être utilisé sur Windows/Mac/Linux.

Il existe également une version C++ de Xerces disponible si vous préférez l'utiliser. L'utilitaire StdInParse peut être utilisé pour l'appeler à partir de la ligne de commande. En outre, un commentaire situé en dessous indique tilitaire de wrapper plus complet .

Vous pouvez également utiliser xmllint, qui fait partie de libxml . Vous l'avez peut-être déjà installé. Exemple d'utilisation:

xmllint --noout --schema XSD_FILE XML_FILE

Un problème est que libxml n'implémente pas toute la spécification, vous pouvez donc rencontrer des problèmes :(

Si vous êtes sous Windows, vous pouvez également utiliser msxml , mais vous aurez besoin d'une sorte de wrapper pour l'appeler, tel que l'interface graphique décrite dans cet DDJ article . Cependant, il semble que la plupart des utilisateurs de Windows utilisent un éditeur XML, tel que Notepad ++ (comme décrit dans Réponse de Nate ) ou XML Notepad 2007 comme suggéré par SteveC (il y a aussi 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 souhaiterez peut-être tester votre schéma avec plusieurs outils.

UPDATE: J'ai développé ceci dans un blog post .

234
Adrian Mouat

Il existe un plugin pour Notepad ++ appelé Outils XML qui offre une vérification et une validation XML sur un fichier XSD.

Vous pouvez voir comment l'utiliser ici .

111
Nate

xmlstarlet est un outil de ligne de commande qui fera ceci et plus encore:

 $ xmlstarlet val --help 
 XMLStarlet Toolkit: Valide le ou les documents XML 
 Utilisation: xmlstarlet val <options> [<fichier-xml-ou-uri> ... ... ] 
 où <options> 
 -w ou - bien formé - ne valider que la forme correcte (par défaut) 
 -d ou --dtd <fichier-dtd> - valider contre DTD 
 -s ou --xsd <fichier xsd> - valider contre un schéma XSD 
 -E ou --embed - valider en utilisant une DTD intégrée 
 -r ou --relaxng <fichier-rng> - validez contre le schéma Relax-NG 
 -e ou --err - affiche des messages d'erreur détaillés sur stderr 
 -b ou --list-bad - répertorie uniquement les fichiers qui ne le sont pas validate 
 -g ou --list-good - répertorie uniquement les fichiers validant 
 -q ou --quiet - ne répertorie pas les fichiers (renvoie le code de résultat uniquement) 
 
 REMARQUE: Les schémas XML ne sont pas encore totalement pris en charge en raison de la prise en charge incomplète de 
 Dans libxml2 (voir http://xmlsoft.org) 
 
 XMLStarlet est une ligne de commande. boîte à outils pour interroger/éditer/vérifier/transformer 
 documents XML (pour plus d'informations, voir http://xmlstar.sourceforge.net/)

L'utilisation dans votre cas serait dans les lignes de:

xmlstarlet val --xsd your_schema.xsd your_file.xml
22
Charles Duffy

Pour Windows, il y a le libre XML Notepad 2007 . Vous pouvez sélectionner des XSD à valider contre

UPDATE: mieux encore, utilisez Notepad ++ avec le plugin XML Tools

15
SteveC
3
John

Un éditeur XML permettant une validation XML rapide et facile est disponible à l’adresse suivante: http://www.xml-buddy.com

Il vous suffit d’exécuter le programme d’installation. Vous pourrez ensuite valider vos fichiers XML à l’aide d’une application facile à utiliser ou de la ligne de commande. De plus, vous bénéficiez également d'une assistance pour Schematron et RelaxNG. La validation par lots est également prise en charge ...

Mise à jour 1/13/2012: l'outil de ligne de commande est libre d'utilisation et utilise Xerces comme analyseur XML.

3
Clemens

http://www.xmlvalidation.com/

(Veillez à cocher la case "Valider par rapport à un schéma XML externe")

2
Helper

Je suis en train d'apprendre Schema. J'utilise RELAX NG et j'utilise xmllint pour valider. Les erreurs de xmlllint me frustrent. J'aimerais qu'ils soient un peu plus informatifs.

Si le XML contient un attribut incorrect, xmllint vous indique le nom de l'attribut non pris en charge. Mais s'il vous manque un attribut dans le XML, vous recevez simplement un message indiquant que l'élément ne peut pas être validé.

Je travaille sur un XML très compliqué avec des règles très compliquées, et je suis novice dans ce domaine, donc il est très difficile de déterminer quel attribut est manquant.

Mise à jour: je viens de trouver un outil Java que j'aime beaucoup. Il peut être exécuté à partir de la ligne de commande, comme xmllint, et prend en charge RELAX NG: https://msv.dev.Java.net/

2
Pengo

J'ai trouvé ce validateur en ligne de 'corefiling' très utile -
http://www.corefiling.com/opensource/schemaValidate.html

Après avoir essayé quelques outils pour valider mon xsd, c’est celui qui m’a donné des informations détaillées sur les erreurs - j’ai donc pu réparer l’erreur dans le schéma.

2
iniki

un excellent outil visuel pour valider et générer du XSD à partir de XML est IntelliJ IDEA, intuitif et simple.

1
jacktrade

Vous pouvez connecter votre schéma XML à Intellisense de Microsoft Visual Studio. Cette option vous offre à la fois une validation en temps réel ET une saisie semi-automatique, ce qui est tout simplement génial.

J'ai ce scénario exact en cours d'exécution sur ma copie gratuite de Microsoft Visual C++ 2010 Express.

1
AaronDanielson

Un autre validateur de schéma XML en ligne (XSD): http://www.utilities-online.info/xsdvalidation/ .

1

J'ai tendance à utiliser xsd de Microsoft pour générer le xsd à partir d'un fichier .NET. J'analyse également des sections du XML à l'aide de xmlstarlet. Le dernier outil gratuit qui vous serait utile est altovaxml, disponible à l’adresse URL suivante: http://www.altova.com/download_components.html .

Cela me permet d'analyser tous les fichiers xml en choisissant quel xsd utiliser en analysant le xml.

# Function:
#    verifyschemas - Will validate all xml files in a configuration directory against the schemas in the passed in directory
# Parameters:
#    The directory where the schema *.xsd files are located.  Must be using dos pathing like: VerifySchemas "c:\\XMLSchemas\\"
# Requirements:
#    Must be in the directory where the configuration files are located
#
verifyschemas()
{
    for FILENAME in $(find . -name '*.xml' -print0 | xargs -0)
    do
        local SchemaFile=$1$(getconfignamefromxml $FILENAME).xsd
        altovaxml /validate $FILENAME /schema $SchemaFile > ~/temp.txt 2> /dev/null
        if [ $? -ne 0 ]; then
            printf "Failed to verify: "
            cat ~/temp.txt | tail -1 | tr -d '\r'
            printf "    - $FILENAME with $SchemaFile\n"
        fi
    done
}

Pour générer le xml que j'utilise: xsd DOTNET.dll/type: CFGCLASS & renommer schema0.xsd CFGCLASS.xsd

Pour obtenir le nom xsd que j'utilise: xmlstarlet sel -t -m/XXX/* -v nom-local () $ 1 | sed 's/$ //'

Cela me permet de récupérer le bon fichier XSD en utilisant une balise d'élément dans le fichier XML.

Le résultat net est que je peux appeler une fonction bash pour analyser tous les fichiers XML et les vérifier. Même s'ils se trouvent dans plusieurs sous-répertoires.

0
Andrew Stern