web-dev-qa-db-fra.com

Comment créer un schéma XSD à partir d'une classe?

J'ai du mal avec les fichiers XSD.

J'essaie de créer un fichier XSD à partir d'une classe:

public enum Levels { Easy, Medium, Hard }
public sealed class Configuration
{
    public string Name { get;set; }
    public Levels Level { get; set; }
    public ConfigurationSpec { get;set;}
}

public abstract class ConfigurationSpec { }
public class ConfigurationSpec1
{
    // ...
}
public class ConfigurationSpec2
{
    // ...
}

Veuillez noter que j'ai une classe abstraite dans Configuration. Avec cette fonctionnalité, est-il possible de créer le XSD et si c'est possible comment?

L'idée est de passer la configuration de classe au XSD.

49
Darf Zon

Vous pouvez utiliser XSD.exe (Disponible à partir de votre installation Visual Studio.)

public sealed class Configuration
{
 public string Name { get; set; }
 public Levels Level { get; set; }
 public ConfigurationSpec Spec { get; set; }
}
 public abstract class ConfigurationSpec { }
 public class ConfigurationSpec1    {   }
public class ConfigurationSpec2 {   }

résulte en

<?xml version="1.0" encoding="utf-8"?>
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="Levels" type="Levels" />
  <xs:simpleType name="Levels">
    <xs:restriction base="xs:string">
      <xs:enumeration value="Easy" />
      <xs:enumeration value="Medium" />
      <xs:enumeration value="Hard" />
    </xs:restriction>
  </xs:simpleType>
  <xs:element name="Configuration" nillable="true" type="Configuration" />
  <xs:complexType name="Configuration">
    <xs:sequence>
      <xs:element minOccurs="0" maxOccurs="1" name="Name" type="xs:string" />
      <xs:element minOccurs="1" maxOccurs="1" name="Level" type="Levels" />
      <xs:element minOccurs="0" maxOccurs="1" name="Spec" type="ConfigurationSpec" />
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="ConfigurationSpec" abstract="true" />
  <xs:element name="ConfigurationSpec" nillable="true" type="ConfigurationSpec" />
  <xs:element name="ConfigurationSpec1" nillable="true" type="ConfigurationSpec1" />
  <xs:complexType name="ConfigurationSpec1" />
  <xs:element name="ConfigurationSpec2" nillable="true" type="ConfigurationSpec2" />
  <xs:complexType name="ConfigurationSpec2" />
</xs:schema>

Tout ce que vous avez à faire est de compiler votre assembly et d'exécuter XSD.exe avec le chemin d'accès à votre assembly comme argument. XSD.exe /? contient également une liste de tous les arguments.

Exemple: XSD.exe C:\Dev\Project1\Bin\Debug\library.dll

34
Alex

Vous pouvez réussir à intégrer xsd.exe Dans Visual Studio IDE comme ceci:

Allez dans Tools, External Tools Et cliquez sur le Add bouton:

2010

enter image description here

2015/2017

enter image description here

Titre:

Créer un schéma à partir d'une classe

Commande (par framework):

4.0

C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\NETFX 4.0 Tools\x64\xsd.exe

4.5.1

C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools\x64\xsd.exe

4.6.*

C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.* Tools\x64\xsd.exe

Arguments:

$(BinDir)$(TargetName).dll /outputdir:$(ItemDir) /type:$(ItemFileName)

Utilisez la fenêtre de sortie:

Empêche l'apparition d'une fenêtre de commande supplémentaire et conserve un enregistrement de la sortie jusqu'à ce que vous l'effaciez. Probablement une bonne idée.

Demander des arguments:

Vérifiez si vous souhaitez tester la sortie ou dépanner; sinon, ne cochez pas.

Cliquez sur OK

Comment utiliser:

  1. Compilez votre projet! XSD.exe Ne regarde que le code compilé.
  2. Cliquez sur la classe dans Explorateur de solutions .
  3. Cliquez sur Tools, Create Schema From Class
  4. Clique sur le Show All Files dans l'Explorateur de solutions .
  5. Regardez dans le même dossier que votre classe et vous verrez Schema0.xsd.
  6. Faites un clic droit sur Schema0.xsd Et choisissez Include In Project
  7. Renommez Schema0.xsd En <the name of the class>.xsd
  8. (facultatif) Vous devrez peut-être modifier ce nouveau xsd à la main si vous souhaitez modifier des fichiers xml dans l'éditeur xml à l'aide de ce schéma et que vous n'utilisez pas tous les attributs. Vous pouvez remplacer use="required" Par use="optional" Pour supprimer les lignes bleues ondulées dans l'éditeur xml (qui créent des avertissements), si en effet ces attributs ne sont pas requis.
79
toddmo