Validation XML avec XSD dans Visual Studio IDE

96

Je sais que j'ai déjà fait cela, mais cela ne fonctionne pas aujourd'hui, et je ne peux trouver nulle part qui explique comment le faire. Cela pourrait être mon manque de sommeil, mais je soupçonne des gremlins.

J'ai un document XML et un répertoire plein de XSD qui le définissent. Comment configurer Visual IDE pour qu'il m'informe des échecs de validation, puis fournir une liste Intellisense de balises et d'attributs valides dans un contexte donné?

Ce que j'ai essayé:

  • J'ai ajouté les XSD au projet avec le document XML.
  • J'ai ajouté les XSD à la liste XML Schema (sous l'élément de menu XML / Schemas ...).
  • J'ai même inclus les attributs schemaLocation et noNamespaceSchemaLocation dans le document XML.

Visual Studio n'abandonne toujours aucune information de débogage ou d'édition utile. J'ai essayé à la fois 2010 et 2008 (je l'ai déjà fait en 2008 je pensais)

Mise à jour: j'ai demandé à un autre développeur d'essayer cela et cela a échoué pour lui aussi. Il sait qu'il l'a fait avec d'autres documents XML et l'a fait fonctionner. J'ai ensuite téléchargé l'éditeur XML Oxygen et cela a bien fonctionné sur les mêmes fichiers XML et XSD, donc les fichiers semblent bien (ou Oxygen est plus indulgent / flexible...)

Jim McKeeth
la source

Réponses:

138

Vous devrez associer le document XML dans Visual Studio au fichier XSD dont vous disposez.

  1. Vous devriez voir quelque chose comme ceci dans votre fenêtre Propriétés du document XML:

    Propriétés XML> Schéma

  2. Dans l'éditeur de jeu de schémas XML (qui s'ouvre lorsque vous cliquez sur les points de suspension (...) dans la zone de texte "Schémas" de votre fenêtre Propriétés), vous devez vous assurer que votre schéma est présent. Assurez-vous également que la Usecolonne de ce schéma est activée - sinon, cliquez dessus - vous obtiendrez une liste déroulante d'options, choisissez Usecelle avec la coche verte:

    Sélecteur de schéma XML

  3. Assurez-vous que la fenêtre Liste des erreurs de Visual Studio est visible (menu Affichage> Liste des erreurs). Cela montrera toutes les incohérences entre les définitions de schéma XML et XSD.

  4. Une fois que tout cela est en place, l'éditeur XML de Visual Studio devrait mettre en évidence les problèmes avec votre XML dans l'éditeur en utilisant des squigglies bleus:

    Exemple d'erreur

marc_s
la source
Merci, c'est une excellente explication détaillée, mais la mienne ne fonctionne toujours pas. Je ne savais pas que vous pouviez accéder à la liste des schémas à partir de propriétés comme celle-là.
Jim McKeeth
@Jim McKeeth: et si vous modifiez votre XML et le sauvegardez à nouveau? Parfois, la validation XML a besoin d'un déclencheur pour
démarrer
J'ai accepté votre réponse même si cela n'a pas fonctionné pour moi. Je suppose que mon système vient juste d'être arrosé, mais je suis passé à un nouvel ordinateur et tout fonctionne bien maintenant.
Jim McKeeth
38
@jim Je ne sais pas si vous aviez le même problème, mais j'ai passé un temps ridicule avant de réaliser que le fichier XML doit être ouvert dans l'éditeur et que le focus doit être dans l'éditeur lorsque vous appelez la fenêtre Propriétés. Ce n'est qu'alors que vous obtenez les propriétés "Document XML" où vous pouvez affecter un schéma. Si le focus se trouve dans l'Explorateur de solutions, la fenêtre Propriétés affiche uniquement les propriétés du fichier, c'est-à-dire qu'aucune attribution de schéma n'est possible à cet endroit.
herzbube
2
Je pense que vous devriez ajouter les résultats de @ herzbube dans la réponse elle-même.
ashish
35

Vous n'avez pas besoin d'associer manuellement les fichiers dans Visual Studio - il fera automatiquement correspondre un fichier XML à un fichier XSD si vous les avez tous les deux ouverts et que votre espace de noms est défini correctement.

Pour définir l'espace de noms:

Dans l'élément racine du fichier XML:

<Data xmlns='http://yourdomain.com/yourschema.xsd'>
    ...
</Data>

Dans l'élément de schéma du fichier XSD:

<xs:schema
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    targetNamespace="http://yourdomain.com/yourschema.xsd"
    xmlns:this="http://yourdomain.com/yourschema.xsd"
    elementFormDefault="qualified">
    ...
</xs:schema>

Remarque sur l'utilisation des types dans votre schéma lorsque vous avez un targetNamespace

Étant donné que vous spécifiez a targetNamespacedans votre schéma, toutes les références aux types définis dans le schéma devront être précédées d'un espace de noms (c'est pourquoi nous avons ajouté l' xmlns:thisattribut dans l' <xs:schema />élément ci-dessus ).

<!-- Define the type as normal -->
<xs:complexType name="Row">
    <xs:sequence>
        <xs:element name="Name" type="xs:string" minOccurs="1" maxOccurs="1" />
        <xs:element name="Value" type="xs:float" minOccurs="1" maxOccurs="1" />
    </xs:sequence>
</xs:complexType>
<!-- Use the type (note the "this:" prefix) -->
<xs:element name="Row" type="this:Row" minOccurs="0" maxOccurs="unbounded" />
Ross McNab
la source
3

Un autre point de défaillance ici est Windows 7 "bloquant" les fichiers de schéma ... cliquez avec le bouton droit sur le fichier xsd sur le disque, Propriétés> Général et s'il est bloqué, vous aurez un bouton "Débloquer". Cela provoquait l'échec de ma validation XML dans VS2012.

EJA
la source
1

Votre xsd contient-il un attribut "targetNamespace" /schema/@targetNamespacesimilaire à l'espace de noms auquel vous faites référence dans le xml?

Exemples:

XSD :

<xs:schema .... targetNamespace="Datafile.xsd" ... >

XML :

<data xmlns="Datafile.xsd" >...</data>

Voir aussi: XML / XSD intellisense ne fonctionne pas dans Visual Studio 2010

k3b
la source
0

J'ai eu ce même problème, mais VS faisait déjà référence correctement à mon schéma. Il s'avère que le fichier que j'essayais de valider n'avait pas d'extension de fichier «xml». Ajout de .xml à la fin de mon nom de fichier et la validation a commencé à fonctionner.

John Livermore
la source