Altova MapForce 2024 Professional Edition

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

Accueil Préc Haut Suivant

 

Lorsque vous générez du code depuis un mappage, MapForce génère une application complète qui exécute automatiquement toutes les étapes du mappage. En option, vous pouvez générer des bibliothèques pour tous les schémas XML utilisés dans le mappage. Celles-ci permettent à votre code de créer ou de lire facilement des instances XML qui sont utilisées ou créées par le code mappage.

 

Pour générer des bibliothèques pour tous les schémas XML utilisés dans le mappage, cochez la case à cocher Generate Wrapper Classes depuis les options de générateur de code. La prochaine fois que vous générez du code, MapForce créera non seulement une application de mappage, mais aussi des classes de wrapper pour tous les schémas utilisés dans le mappage, comme suit :

 

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.

 

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).

 

En plus des bibliothèques de base recensées ci-dessus, certaines bibliothèques prises en charge sont aussi générées. Les bibliothèques prises en charge sont utilisées par les bibliothèques de base Altova et ne sont pas destinées pour les intégrations personnalisées, puisqu'elles sont soumises à des modifications.

 

Génération de nom et espaces de noms

MapForce 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, MapForce 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