Generieren von Code anhand von XML-Schemas oder DTDs

www.altova.com Dieses Kapitel drucken Vorherige Seite Eine Ebene nach oben Nächste Seite

Startseite >  Benutzerhandbuch und Referenz > Code Generator >

Generieren von Code anhand von XML-Schemas oder DTDs

Sie können mit dem XMLSpy Codegenerator C#-, C++- oder Java-Programmcode anhand von XML-Schemas oder DTDs generieren. Die generierten Schema Wrapper-Bibliotheken können anschließend in Ihre benutzerdefinierte Applikation integriert werden, um XML-Dokumente mittels Programmen lesen oder ändern zu können bzw. in XML-Dokumente schreiben zu können.

 

Generieren von Programmcode

1.Öffnen Sie das Schema, für das Sie Quellcode generieren möchten.
2.Wählen Sie den Menübefehl DTD/Schema | Programmcode generieren.
3.Definieren Sie auf dem Register "Vorlage auswählen" des daraufhin angezeigten Dialogfelds die Codegenerierungsoptionen (siehe Code Generator-Optionen).
4.Klicken Sie auf OK. Darauf hin wird das Dialogfeld Ordner suchen angezeigt.
5.Wählen Sie den Zielordner aus und klicken Sie auf OK.
6.Sie werden aufgefordert, das neu erstellte Projekt in Microsoft Visual Studio zu öffnen. Klicken Sie auf Ja. Wenn Java-Code erzeugt wird, werden Sie aufgefordert, das entsprechende Ausgabeverzeichnis zu öffnen.

 

Wenn XMLSpy Code anhand eines XML-Schemas oder einer DTD generiert, werden die folgenden Bibliotheken generiert:

 

 

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 bei beiden DOM-Implementierungen dieselbe.

 

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.

YourSchemaTest

com.YourSchemaTest

Der generierte Code enthält auch ein Test-Applikationsgerüst, das nach Ihrem Schema (z.B. YourSchemaTest) benannt ist. Es handelt sich hierbei um eine kompilierbare Applikation, die eine leere Example()-Methode aufruft. Um Ihre neu generierte Bibliothek einfach und schnell zu testen, können Sie Ihren Testcode in diese Methode einfügen.

 

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

 

Namensgenerierung und Namespaces

XMLSpy 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 XMLSpy 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 (Spy Programming Language)-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 (Spy Programming Language).

 

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 Simple Types abgeleitete
Durch Restriction abgeleitete Simple Types
Facets
Enumerationen
Patterns

 

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 (Spy Programming Language) vorhanden, wird aber von den generierten Klassen nicht umgesetzt.
Standardwerte und festgelegte Werte für Attribute: Diese sind in SPL (Spy Programming Language) 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)

© 2019 Altova GmbH