Altova MapForce 2024 Professional Edition

Zeichentypen

Der generierte C++-Code kann mit oder ohne Unicode-Unterstützung generiert werden. Je nachdem, welche Einstellung hier gewählt wurde, werden die Typen string_type und tstring beide als std::string und  std::wstring und zwar bestehend aus schmalen oder breiten Zeichen, definiert. Um Unicode-Zeichen in Ihrer XML-Datei verwenden zu können, die nicht durch den aktuellen 8-Bit-Zeichensatz dargestellt werden können, muss die Unicode-Unterstützung aktiviert werden. Seien Sie bei den _T() Makros vorsichtig. Dieses Makro stellt sicher, dass String-Konstanten korrekt gespeichert werden, ob Sie nun für Unicode oder Nicht-Unicode-Programme kompilieren.

 

Datentypen

Für das Mappen von XML-Schematypen auf C++-Datentypen wird das folgende Standard-Mapping verwendet:

 

XML Schema

C++

Anmerkungen

xs:string

string_type

string_type wird definiert als std::string oder std:wstring

xs:boolean

bool


xs:decimal

double

C++ hat keinen Dezimaltyp, daher wird "double" verwendet.

xs:float, xs:double

double


xs:integer

__int64

xs:integer hat keine Bereichsbeschränkung, wird aus Gründen der Effizienz auf __int64 gemappt.

xs:nonNegativeInteger

unsigned __int64

siehe oben

xs:int

int


xs:unsignedInt

unsigned int


xs:dateTime, date, time, gYearMonth, gYear, gMonthDay, gDay, gMonth

altova::DateTime


xs:duration

altova::Duration


xs:hexBinary and xs:base64Binary

std::vector<unsigned char>

Die Kodierung und Dekodierung von Binärdateien erfolgt automatisch.

xs:anySimpleType

string_type


 

Alle XML-Schematypen, die nicht in der Liste enthalten sind, sind abgeleitete Typen und werden auf denselben C++-Typ wie der entsprechende Basistyp gemappt.

 

Generierte Klassen

Für jeden Typ im Schema wird eine Klasse generiert, die ein Member für jedes Attribut und Element des Typs enthält. Die Members erhalten den gleichen Namen wie die Attribute oder Elemente im Originalschema (bei möglichen Konflikten wird eine Zahl angehängt). Für Simple und Mixed Types werden Zuweisungs- und Konvertierungsoperatoren generiert. Für Simple Types mit Enumeration Facets können die Methoden getEnumerationValue() und setEnumerationValue(int) zusammen mit generierten Konstanten für die einzelnen Enumerationswerte verwendet werden. Des Weiteren können Sie mit Hilfe der Methode StaticInfo() Schemainformationen als einen der folgenden Typen abrufen:

 

altova::meta::SimpleType

altova::meta::ComplexType

 

Anhand von Complex Typs generierte Klassen enthalten die Methode SetXsiType(), mit Hilfe derer Sie das xsi:type-Attribut des Typs definieren können. Diese Methode ist nützlich, wenn Sie XML-Instanzelemente anhand eines Derived Type erstellen möchten.

 

Zusätzlich zu den Klassen für die im XML-Schema deklarierten Typen, wird eine (unten durch "CDoc" identifizierte) Dokument-Klasse generiert. Sie enthält alle möglichen Root-Elemente als Members sowie verschiedene andere Methoden. Nähere Informationen zur Klasse finden Sie unter [YourSchema]::[CDoc] .

 

Anmerkung:        Der tatsächliche Klassenname ist vom Namen des .xsd-Schemas abhängig.

 

Für jedes Member-Attribut oder Elemente eines Schematyps wird eine neue Klasse generiert. Nähere Informationen zu solchen Klassen finden Sie unter:

 

[YourSchema]::MemberAttribute

[YourSchema]::MemberElement

 

Anmerkung:        Der tatsächliche Klassenname ist vom Namen des Schema-Attributs oder -Elements abhängig.

 

Siehe auch Beispiel: Verwendung der Schema Wrapper-Bibliotheken.

 

Behandlung von Fehlern

Fehler werden in Form von Ausnahmeereignissen ausgegeben. Im Namespace altova sind die folgenden Ausnahmeereignisklassen definiert:

 

 

Klasse

Basisklasse

Beschreibung

Error

std::logic_error

Interner Fehler in der Programmlogik (unabhängig von den Eingabedaten)

Exception

std::runtime_error

Basisklasse für Runtime-Fehler

InvalidArgumentsException

Exception

Es wurde eine Methode mit ungültigen Argumentwerten aufgerufen.

ConversionException

Exception

Ausnahmeereignis aufgrund eines Typkonvertierungsfehlers

StringParseException

ConversionException

Ein Wert im lexikalischen Bereich kann nicht in einen Wertebereich umgewandelt werden.

ValueNotRepresentableException

ConversionException

Ein Wert im Wertebereich kann nicht in einen lexikalischen Bereich umgewandelt werden.

OutOfRangeException

ConversionException

Ein Quellwert kann in der Ziel-Domain nicht dargestellt werden.

InvalidOperationException

Exception

Es wurde versucht, eine Operation auszuführen, die in diesem Kontext nicht gültig ist.

DataSourceUnavailableException

Exception

Beim Laden einer XML-Instanz ist ein Problem aufgetreten.

DataTargetUnavailableException

Exception

Beim Speichern einer XML-Instanz ist ein Problem aufgetreten.

 

Alle Ausnahmeereignisklassen enthalten einen Meldungstext und einen Verweis auf ein mögliches internes Ausnahmeereignis.

 

Methode

Verwendungszweck

string_type message()

Gibt eine Textbeschreibung des Ausnahmeereignisses zurück

std::exception inner()

Gibt, falls verfügbar, das Ausnahmeereignis zurück, das dieses Ausnahmeereignis verursacht hat, ansonsten wird der Wert NULL zurückgegeben.

 

Aufrufen von Schemainformationen

Über die generierte Bibliothek können statische Schemainformationen über die folgenden Klassen abgerufen werden. Alle Methoden werden als const. deklariert. Die Methoden, die eine der Metadatenklassen zurückgeben, geben ein NULL-Objekt zurück, wenn die entsprechende Eigenschaft nicht existiert.

 

altova::meta::Attribute

altova::meta::ComplexType

altova::meta::Element

altova::meta::SimpleType

© 2017-2023 Altova GmbH