Altova XMLSpy 2024 Enterprise Edition

Générer du code depuis des Schémas XML ou des DTDs

Accueil Préc Haut Suivant

Avec le générateur de code XMLSpy, vous pouvez générer du code de programmation C#, C++, ou Java depuis des schémas XML ou des DTDs. Les bibliothèques de schema wrapper générées peuvent ensuite être intégrées dans votre application personnalisée pour lire, modifier ou écrire des documents XML par le biais d’un programme.

 

Générer du code de programme

1.Ouvrir le schéma pour lequel vous souhaitez générer du code de source.

2.Choisir l’item de menu DTD/Schéma | Générer du code de programme.

3.Dans le volet Choisir modèle du dialogue qui s’ouvre, définir les options de générateur de code.

4.Cliquer sur OK. Le dialogue Chercher des dossiers apparaît.

5.Choisir le dossier cible et cliquer sur OK.

6.Vous êtes invité à ouvrir le projet récemment créé dans Microsoft Visual Studio. Cliquer sur Yes. Si le code de Java est produit, vous êtes invité à ouvrir le répertoire de sortie correspondant.

 

Lorsque XMLSpy génère du code depuis un Schéma XML ou DTD, les bibliothèques suivantes sont créées :

 

C++ ou C#

Java

Objectif

Altova

com.altova

Bibliothèque de base contenant un support de runtime commun, à l’identique pour chaque schéma.

AltovaXML

com.altova.xml

Bibliothèque de base contenant un support de runtime pour XML, à l’identique pour chaque schéma.

YourSchema

com.YourSchema

Une bibliothèque contenant des déclarations générées depuis le schéma d'entrée, nommé comme le fichier de schéma ou le DTD. Cette Bibliothèque est un wrapper DOM (W3C Document Object Model) qui vous permet de lire, modifier et créer des documents XML en toute sécurité. Toutes les données contenues dans le DOM, et il existe des méthodes pour extraire des données depuis le DOM, et pour mettre à jour et créer des données dans le DOM.

 

Le code C++ généré prend en charge soit Microsoft MSXML soit Apache Xerces 3. La syntaxe pour utiliser le code généré est généralement semblable pour les deux implémentations DOM, sauf pour quelques légères différences (par exemple, Xerces prend en charge plus de fonctions surchargées).

 

Le code C# généré utilise la bibliothèque standard .NET .XML en guise de mise en place DOM sous-jacente.

 

Le code Java généré utilise JAXP (Java API pour traitement XML) en tant que l'interface DOM sous-jacente.

YourSchemaTest

com.YourSchemaTest

Le code généré contient également un squelette d'application de test nommé d'après votre schéma (par exemple, YourSchemaTest). Ceci est une application compilable qui appelle une méthode Example() vide. Vous pouvez ajouter votre code de texte dans cette méthode pour un test rapide et simple de votre bibliothèque récemment générée.

 

Tout en prototypant une application depuis un schéma XML changeant fréquemment, vous devrez éventuellement générer fréquemment du code dans le même répertoire, de manière à ce que les changements de schéma sont réfléchis immédiatement dans le code. Veuillez noter que l’application de test généré et les bibliothèques Altova sont écrasées à chaque fois que vous générez du code dans le même répertoire cible. C’est pourquoi il ne faut pas ajouter du code à l’application de test généré. Au lieu de cela, veuillez intégrer les bibliothèques dans votre projet (voir Intégrer des Bibliothèques Schema Wrapper).

 

Génération de nom et espaces de noms

XMLSpy génère des classes correspondant à tous les éléments déclarés ou les types complexes qui redéfinissent tout type complexe dans votre Schéma XML, préservant la dérivation de classe telle que définie par les extensions des types complexes dans votre Schéma XML. Dans le cas de schémas complexes qui importent des composants de schéma depuis plusieurs espaces de noms, XMLSpy préserve cette information en générant les espaces de noms C# ou C++ ou les packages Java appropriés.

 

Généralement, le générateur de code tente de préserver les noms pour les espaces de noms générés, les classes et les membres provenant du schéma XML original. Les caractères qui ne sont pas valides dans les identifieurs dans le langage cible sont remplacés par "_". Les noms qui se heurtent avec d'autres noms ou des mots réservés sont rendus uniques en ajoutant un nombre. La génération de nom peut être influée en changeant les paramètres par défaut dans le modèle SPL.

 

Les espaces de noms provenant du Schéma XML sont convertis en packages dans Java ou des espaces de noms dans du code C# ou C++, en utilisant le préfixe d'espace de noms depuis le schéma en tant qu'espace de noms de code. La bibliothèque complète est contenue dans un package ou dans un espace de noms dérivé depuis le nom de fichier, pour que vous puissiez utiliser plusieurs bibliothèques générées dans un programme sans conflits de noms.

 

Types de données

Schéma XML dispose d'un modèle de type de données plus élaboré que Java, C# ou C++. Le générateur de code convertit les types de Schéma XML dans des types primitifs spécifiques au langage, ou dans les classes fournies avec la bibliothèque Altova. Les types complexes et les types dérivés définis dans le schéma sont convertis en classes dans la bibliothèque générée. Les facettes d'énumération provenant de types simples sont converties dans des constantes symboliques.

 

Le mappage des types simples peut être configuré dans le modèle SPL, voir Référence SPL.

 

 

Si vos fichiers d'instance XML utilisent des types de schéma liés à l'heure et la durée, ceux-ci sont convertis en classes natives Altova dans le code généré. Pour plus d’informations concernant les classes de bibliothèque, voir :

 

Référence aux classes générées (C++)

Référence aux classes générées (C#)

Référence aux classes générées (Java)

 

Pour plus d'informations concernant la conversion de type et d'autres détails applicables dans chaque langage, voir :

 

À propos des Bibliothèques de Schema Wrapper (C++)

À propos des Schema Wrapper Libraries (C#)

À propos des Schema Wrapper Libraries (Java)

 

Gestion de mémoire

Une arborescence DOM est constituée de nœuds, qui sont toujours possédées par un document DOM spécifique - même si le nœud ne fait pas actuellement partie du document. Toutes les classes générées sont des références aux nœuds DOM qu'elles représentent, par des valeurs. Cela signifie que l'attribution d'une instance d'une classe générée ne copie pas la valeur, elle crée uniquement une référence supplémentaire dans la même donnée.

 

Prise en charge de Schéma XML

Les structures de Schéma XML suivant sont traduites dans du code  :

 

a) Espace des noms XML

 

b) Types simple :

 

Types de schéma XML Built-in

Types simples dérivés par extension

Types simples dérivés par restriction

Facettes

Enumérations

Motifs

 

c) Types complexes :

 

Nœud anyType Built-in

Types complexes définis par l'utilisateur

Dérivé par extension : Mappé vers les classes dérivées

Dérivé par restriction

Contenu complexe

Contenu simple

Contenu mixte

 

Les fonctions de Schéma XML avancées suivantes ne sont pas prises en charge (ou pas entièrement prises en charge) dans les classes de wrapper générées :

 

Caractères génériques : xs:any et xs:anyAttribute

Modèles de contenu (séquence, choix, tout). Le compositeur de niveau supérieur est disponible dans SPL, mais n'est pas mis en place par des classes générées.

Les valeurs par défaut et fixées pour les attributs. Celles-ci sont disponibles dans SPL, mais ne sont pas configurées ou mises en place par des classes générées.

Les attributs xsi:type, les types abstraits. Lorsque vous souhaitez écrire l'attribut xsi:type, utiliser la méthode SetXsiType() des classes générées.

Types d'union : toutes les combinaisons ne sont pas prises en charge.

Les groupes de substitution sont partiellement pris en charge (résolus en tant que "choice").

Attribut nillable="true" et xsi:nil

Contraintes d'unicité

Contraintes d’identité (key et keyref)

© 2017-2023 Altova GmbH