Question

Au bureau, nous sommes en train d’écrire 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 code 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 lors du 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 l'être car nous pourrions générer le fichier xml, puis valider en appelant un programme distinct dans le test.

Était-ce utile?

La solution

Après quelques recherches, je pense que la meilleure solution est de Xerces , car il implémente tous les fichiers XSD. -plateforme et largement utilisé. J'ai créé un petit projet Java 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 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 de cet utilitaire d'encapsulation 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 utilisez Windows, vous pouvez également utiliser msxml . , mais vous aurez besoin d’une sorte de wrapper pour l’appeler, comme l’interface graphique décrite dans cet article de DDJ . Cependant, il semble que la plupart des utilisateurs de Windows utilisent un éditeur XML, tel que Notepad ++ (comme décrit dans La réponse de Nate ) ou Bloc-notes XML 2007 en tant que 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.

MISE À JOUR : j'ai développé cette fonctionnalité dans un article de blog .

Autres conseils

Il existe un plug-in pour Bloc-notes ++ appelé Outils XML offrant une vérification et une validation XML sur un fichier XSD.

Vous pouvez voir comment l'utiliser ici .

xmlstarlet est un outil de ligne de commande permettant de faire cela, entre autres:

$ 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 similaire à:

xmlstarlet val --xsd your_schema.xsd your_file.xml

Pour Windows, la version gratuite Bloc-notes XML 2007 . Vous pouvez sélectionner des XSD à valider contre

Le validateur de schéma XML en ligne de DecisionSoft vous permet de contrôler un fichier XML par rapport à un schéma donné.

Un éditeur XML permettant une validation XML rapide et facile est disponible à l'adresse 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 13/01/2012: l'outil de ligne de commande est libre d'utilisation et utilise Xerces comme analyseur XML.

http://www.xmlvalidation.com/

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

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.

S'il existe un attribut incorrect dans le fichier XML, 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 savoir quel attribut est manquant.

Mise à jour: Je viens de trouver un outil java que je préfère 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 /

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, voici celui qui m'a fourni des informations d'erreur détaillées. J'ai donc pu corriger l'erreur dans le schéma.

IntelliJ IDEA est un excellent outil visuel de validation et de génération de données XSD à partir de XML, intuitif et simple.

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

Ce scénario exact est exécuté sur ma copie gratuite de Microsoft Visual C ++ 2010 Express.

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

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 à cette adresse URL: 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 code XML que j'utilise:    xsd DOTNET.dll / type: CFGCLASS & amp; 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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top