À propos des Schema Wrapper Libraries (C++)
Types de caractère
Le code C++ généré peut être compilé avec ou sans prise en charge Unicode. Selon ce paramètre, les types string_type et tstring seront tous les deux définis en tant que std::string ou std::wstring, consistant en des caractères larges ou étroits. Pour utiliser les caractères Unicode dans votre fichier XML qui ne sont pas représentables avec l’ensemble de caractères 8-bit actuels, la prise en charge Unicode doit être activée. Prêtez une attention particulière aux macros _T() . Ce macro garantit que les constantes de string sont stockées correctement, que vous compiliez pour les programmes Unicode ou non-Unicode.
Types de données
Le mappage par défaut des types Schéma XML dans les types de données C++ est :
Schéma XML | C++ | Remarques |
---|---|---|
xs:string | string_type | string_type est défini en tant que std::string ou std:wstring |
xs:boolean | bool | |
xs:decimal | double | C++ n’a pas de type décimal, donc double est utilisé. |
xs:float, xs:double | double | |
xs:integer | __int64 | xs:integer a une plage illimitée, mappée sur __int64 pour des raisons d’efficacité. |
xs:nonNegativeInteger | unsigned __int64 | voir ci-dessus |
xs:int | int | |
xs:unsignedInt | unsigned int | |
xs:dateTime, date, time, gYearMonth, gYear, gMonthDay, gDay, gMonth | ||
xs:duration | ||
xs:hexBinary and xs:base64Binary | std::vector<unsigned char> | L’encodage et le décodage des données binaires est effectué automatiquement. |
xs:anySimpleType | string_type |
Tous les types de Schéma XML qui ne sont pas contenus dans la liste sont des types dérivés, et mappés sur le même C++ que leur type de base respectif.
Classes générées
Pour chaque type dans le schéma, une classe est générée qui contient un membre pour chaque attribut et élément du type. Les membres sont nommés comme les attributs ou éléments dans le schéma original (en cas d’une collision éventuelle, un nombre est ajouté). Pour les types simples, des opérateurs d’attribution et de conversion sont générés. Pour des types simples avec des facettes d’énumération, les méthodes GetEnumerationValue() et SetEnumerationValue(int) peuvent être utilisés ensemble avec des constantes générées pour chaque valeur d’énumération. De plus, la méthode StaticInfo() permet l’accès à l’information de schéma en tant qu’un des types suivants :
Les classes générées depuis des types complexes comprennent la méthode SetXsiType(), qui vous permet de définir l’attribut xsi:type du type. Cette méthode est utile si vous souhaitez créer des éléments d’instance XML d’un type dérivé.
Outre les classes pour les types déclarés dans le schéma XML, une classe de document (identifiée par "CDoc", voir ci-dessous) est générée. Elle contient tous les éléments root possibles, en tant que membres, ainsi que plusieurs autres méthodes. Pour plus d’informations concernant la classe, voir [YourSchema]::[CDoc] .
Note: Le véritable nom de la classe dépend du nom du schéma .xsd.
Pour chaque attribut ou élément membre d’un type de schéma, une nouvelle classe est générée. Pour plus d’informations concernant ces classes, voir :
Note: Les véritables noms de la classe dépendent du nom de l’attribut ou de l’élément membre du schéma.
Voir aussi Exemple : Utiliser les bibliothèques de Schema Wrapper.
Gestion d'erreur
Les erreurs sont rapportées par exceptions. Les classes d’exception suivantes sont définies dans l’espace de noms altova:
Classe | Classe de Base | Description |
Erreur | std::logic_error | Erreur de logique de programme interne (indépendant des données d’entrée). |
Exception | std::runtime_error | Classe de Base pour les erreurs de runtime. |
InvalidArgumentsException | Exception | Une méthode a été appelée avec des valeurs d’argument invalide. |
ConversionException | Exception | Exception lancée lorsqu’une conversion de type échoue. |
StringParseException | ConversionException | Une valeur dans l’espace lexical ne peut pas être converti dans un espace de valeur. |
ValueNotRepresentableException | ConversionException | Une valeur dans l’espace de valeur ne peut pas être converti dans un espace lexical. |
OutOfRangeException | ConversionException | Une valeur de source ne peut pas être représentée dans un domaine cible. |
InvalidOperationException | Exception | Une opération a été tentée qui n’est pas valide dans le contexte donné. |
DataSourceUnavailableException | Exception | Un problème est survenu pendant le chargement d’une instance XML. |
DataTargetUnavailableException | Exception | Un problème est survenu pendant l’enregistrement d’une instance XML. |
Toutes les classes d’exception contiennent un texte de message et un pointeur dans une exception intérieure possible.
Méthode | Objectif |
---|---|
string_type message() | Retourne une description textuelle de l’exception. |
std::exception inner() | Retourne l’exception qui a causé cette exception, si disponible, ou NULL. |
Accéder à l’information de schéma
La bibliothèque générée permet d’accéder à des informations de schéma statique par le biais des classes suivantes. Toutes les méthodes sont déclarées en tant que const. Les méthodes qui retournent une de ces classes des métadonnées retournent un objet NULL si la propriété respective n’existe pas.