Altova MapForce 2024 Enterprise Edition

Generieren von Code anhand von XML-Schemas oder DTDs

Zur Startseite Zurück Nach oben Weiter

Bei der Codegenerierung wird in MapForce eine komplette Applikation generiert, die alle Mapping-Schritte automatisch ausführt. Sie können optional Bibliotheken für alle im Mapping verwendeten XML-Schemas generieren. Mit Hilfe dieser Bibliotheken kann Ihr Code jederzeit XML-Instanzen erstellen oder lesen, die vom Mapping-Code verwendet oder erstellt wurden.

 

Um für alle im Mapping verwendeten XML-Schemas Bibliotheken zu generieren, aktivieren Sie in den Codegenerierungsoptionen das Kontrollkästchen Wrapper-Klassen generieren . Wenn Sie das nächste Mal Code generieren, erstellt MapForce nicht nur die Mapping-Applikation für Sie, sondern zusätzlich dazu Wrapper-Klassen für alle im Mapping verwendeten Schemas.

 

C++ oder C#

Java

Verwendungszweck

Altova

com.altova

Basisbibliothek, enthält allgemeine Runtime-Unterstützung, ist für alle Schemas identisch.

AltovaXML

com.altova.xml

Basisbibliothek, enthält Runtime-Unterstützung für XML, ist für alle Schemas identisch.

[YourSchema]

com.YourSchema

Eine Bibliothek, die anhand des Input-Schemas generierte Deklarationen enthält, die denselben Namen wie die Schema-Datei oder DTD hat. Diese Bibliothek ist ein DOM (W3C Document Object Model) Wrapper, der es Ihnen gestattet, XML-Dokumente einfach und sicher zu lesen, zu bearbeiten und zu erstellen. Alle Daten befinden Sie im DOM und es gibt Methoden, um Daten aus dem DOM zu extrahieren und Daten im DOM zu aktualisieren und zu erstellen.

 

Der generierte C++-Code unterstützt entweder Microsoft MSXML oder Apache Xerces 3. Die Syntax zur Verwendung des generierten Codes ist mit Ausnahme geringer Unterschiede (so unterstützt Xerces z.B. mehr überladene Funktionen) bei beiden DOM-Implementierungen fast die gleiche.

 

Dem generierten C#-Code liegt die .NET Standard System.XML-Bibliothek als DOM-Implementierung zugrunde.

 

Dem generierten Java-Code liegt JAXP (Java API for XML Processing) als DOM-Implementierung zugrunde.

 

Beim Erstellen eines Prototyps einer Applikation anhand eines häufig geänderten XML-Schemas müssen Sie eventuell immer wieder Code im selben Verzeichnis generieren, damit die Änderungen am Schema sofort im Code berücksichtigt werden. Beachten Sie, dass die generierte Testapplikation und die Altova-Bibliotheken jedes Mal, wenn Sie Code im selben Zielverzeichnis generieren, überschrieben werden. Fügen Sie daher keinen Code zur generierten Testapplikation hinzu, sondern integrieren Sie stattdessen die Altova-Bibliotheken in Ihr Projekt (siehe Integrieren von Schema Wrapper-Bibliotheken).

 

Zusätzlich zu den oben aufgelisteten Basisbibliotheken werden einige weitere unterstützende Bibliotheken generiert, die zusammen mit den Altova-Basisbibliotheken verwendet werden und nicht für benutzerdefinierte Integrationen gedacht sind, da sie Änderungen unterworfen sind.

 

Namensgenerierung und Namespaces

MapForce generiert für alle deklarierten Elemente oder complexTypes, die einen complexTyp in Ihrem XML-Schema umdefinieren, Klassen, wobei die durch Erweiterungen von complexTyps in Ihrem XML-Schema definierte Klassenableitung beibehalten wird. Bei komplexen Schemas, in die Komponenten aus mehreren Namespaces importiert werden, behält MapForce diese Informationen durch Generierung der entsprechenden C#- oder C++-Namespaces oder Java-Pakete bei.

 

Im Allgemeinen versucht der Code Generator die Namen für generierte Namespaces, Klassen und Member aus dem Original-XML-Schema beizubehalten. Zeichen, die in Identifiern in der Zielsprache ungültig sind, werden durch ein "_" ersetzt. Namen, die mit anderen Namen oder reservierten Wörtern in Konflikt treten würden, werden durch Anhängen einer Nummer eindeutig identifizierbar gemacht. Die Generierung von Namen kann durch Änderung der Standardeinstellungen in der SPL-Vorlage beeinflusst werden.

 

Die Namespaces aus dem XML-Schema werden in Java in Pakete oder in C#- oder C++-Code in Namespaces konvertiert, wobei das Namespace-Präfix aus dem Schema als Code-Namespace verwendet wird. Die gesamte Bibliothek wird in ein Paket oder einen anhand des Schema-Dateinamens abgeleiteten Namespace eingeschlossen, sodass Sie in einem Programm mehrere generierte Bibliotheken verwenden können, ohne dass es zu Namenskonflikten kommt.

 

Datentypen

XML-Schema hat ein etwas komplexeres Datentypmodell als Java, C# oder C++. Der Code Generator konvertiert die vordefinierten XML-Schematypen in sprachspezifische primitive Typen oder in mit der Altova-Bibliothek bereitgestellte Klassen. ComplexTypes und abgeleitete Typen, die im Schema definiert sind, werden in der generierten Hierarchie in Klassen konvertiert. Enumeration Facets von simpleTypes werden in Symbolkonstanten konvertiert.

 

Das Mapping von simpleTypes kann in der SPL-Vorlage konfiguriert werden, siehe SPL-Referenz.

 

Wenn in Ihren XML-Instanzdateien Schematypen im Zusammenhang mit Uhrzeit und Dauer verwendet werden, so werden diese im Code in native Altova-Klassen konvertiert. Informationen zu den Altova-Bibliotheksklassen finden Sie unter:

 

Referenz zu generierten Klassen (C++)

Referenz zu generierten Klassen (C#)

Referenz zu generierten Klassen (Java)

 

Informationen zur Typkonvertierung und anderen Details zu den einzelnen Sprachen finden Sie unter:

 

Informationen zu Schema Wrapper-Bibliotheken (C++)

Informationen zu Schema Wrapper-Bibliotheken (C#)

Informationen zu Schema Wrapper-Bibliotheken (Java)

 

Speicherverwaltung

Eine DOM-Struktur besteht aus Nodes, die immer einem bestimmten DOM-Dokument zugeordnet sind - selbst, wenn die Nodes derzeit nicht im Inhalt des Dokuments vorkommen. Bei allen generierten Klassen handelt es sich um Referenzen auf die DOM-Nodes, für die sie stehen, nicht um Werte. Dies bedeutet, dass bei Zuweisung einer Instanz einer generierten Klasse nicht der Wert kopiert wird, sondern nur eine zusätzliche Referenz auf dieselben Daten.

 

XML Schema-Unterstützung

Die folgenden XML-Schema-Konstrukte werden in Code übersetzt:

 

a) XML Namespaces

 

b) Simple Types

 

Built-in XML Schema Typen

Durch Extension abgeleitete Simple Types

Durch Restriction abgeleitete Simple Types

Facets

Enumerations

Patterns

 

c) Complex Types:

 

Built-in anyType Node

Benutzerdefinierte Complex Types

Durch Extension abgeleitete: Auf abgeleitete Klassen gemappte

Durch Restriction abgeleitete

Complex Content

Simple Content

Mixed Content

 

Die folgenden komplexen XML-Schema-Funktionen werden in generierten Wrapper-Klassen nicht (oder nicht vollständig) unterstützt:

 

Wildcards: xs:any und xs:anyAttribute

Inhaltsmodelle (sequence, choice, all): Kompositor der obersten Ebene ist in SPL vorhanden, wird aber von den generierten Klassen nicht umgesetzt.

Standardwerte und festgelegte Werte für Attribute: Diese sind in SPL verfügbar, werden aber von den generierten Klassen nicht gesetzt oder umgesetzt.

Attribute xsi:type, abstract types: Verwenden Sie die SetXsiType()-Methode der generierten Klassen, wenn Sie das xsi:type-Attribut schreiben müssen.

Union Types: Es werden nicht alle Kombinationen unterstützt.

Substitution Groups werden zum Teil unterstützt (werden wie "choice" aufgelöst)

Attribut nillable="true" und xsi:nil

Uniqueness Constraints

Identity Constraints (key und keyref)

© 2017-2023 Altova GmbH