Altova XMLSpy 2024 Professional Edition

Der Befehl DTD in Schema konvertieren ist aktiv, wenn eine DTD das aktive Dokument ist. Mit dem Befehl wird eine DTD in ein XML-Schema-Dokument (XSD) konvertiert.

 

Mit dem Befehl wird das Dialogfeld "DTD in W3C-Schema konvertieren" (Abbildung unten) aufgerufen, in dem Sie auswählen können, ob komplexe Elemente in Elemente oder complexTypes konvertiert werden sollen. Bei Klick auf OK werden Sie aufgefordert, einen Ordner auszuwählen, in dem die generierte XSD-Datei gespeichert werden soll. Klicken Sie auf Speichern, um die Konvertierung durchzuführen. Daraufhin wird die XSD-Datei generiert und in XMLSpy geöffnet.

dlgDTD2XSD

Bei der Konvertierung einer DTD in ein XML-Schema macht XMLSpy aufgrund der beschränkten Informationen, die zur Verfügung stehen, einige Annahmen. Beachten Sie vor allem, dass die Werte bestimmter DTD-Komponenten wörtlich interpretiert werden, anstatt dass ihre Semantik geparst wird, da das Programm nicht weiß, welche der vielen Möglichkeiten die richtige ist. Bearbeiten Sie die generierte Konvertierung in diesem Fall.

 

Das Resultat sollte jedenfalls immer genau überprüft und gegebenenfalls verbessert werden. Im Folgenden werden einige Bereiche angegeben, in denen Sie eventuell Korrekturen vornehmen sollten.

 

Definition von Datentypen für Attribute

DTDs unterstützen nur 10 Attribut-Datentypen, während in XML-Schemas z.B. mehr als 40 Datentypen plus davon abgeleitete Datentypen zulässig sind. Durch Verwendung von weniger Datentypen lässt sich ein generiertes XML-Schema unter Umständen verbessern. Beachten Sie, dass Datentyp-Informationen bei der Konvertierung eines XML-Schemas in eine DTD verloren gehen.

 

Namespaces

DTD erkennen keine Namespaces. Wenn daher in einer DTD Namespaces definiert werden, müssen sie in Form von Element- und Attributnamen hartkodiert werden. Bei der Konvertierung von einem Schema in ein anderes kann dies einige Probleme verursachen.

 

Entities

In XML-Schemas gibt es kein Äquivalent für die allgemeinen Entity-Deklarationen von DTDs. Wenn XMLSpy eine DTD in ein XML-Schema konvertiert, ignoriert es die Entity-Deklarationen.

 

Nicht geparste Datendeklarationen

DTDs und XML-Schemas verwenden bei der Behandlung nicht geparster Daten unterschiedliche Mechanismen. Dies wird im Folgenden näher erklärt.

 

DTDs verwenden den folgenden Mechanismus:

 

Eine Notation wird aus einem Namen und einem Identifier bestehend deklariert, z.B.
<!NOTATION gif SYSTEM "image/gif">

Sie deklarieren die Entity, z.B.
<!ENTITY cover_img SYSTEM "graphics/cover_img.gif" NDATA gif>

Normalerweise gibt man zum betreffenden Attribut einen Attributtyp von ENTITY an, z.B.<!ELEMENT img EMPTY>

<!ATTLIST img format ENTITY #REQUIRED>

 

In einem XML-Schema wird hierfür der folgende Mechanismus verwendet:

 

Deklarieren Sie eine Notation. Dies funktioniert auf dieselbe Art wie bei der DTD.

<xs:notation name="gif" public="image/gif"/>

Beachten Sie, dass das Attribut public obligatorisch ist und den Identifier enthält. Ein optionales Attribut system enthält den System Identifier und ist normalerweise eine ausführbare Datei, die Ressourcen des Notationstyps verarbeiten kann.

Man verknüpft die Notationsdeklaration über den NOTATION-Datentyp mit einem bestimmten Attributwert. Sie können den NOTATION-Datentyp jedoch nicht direkt verwenden, sondern müssen einen weiteren Datentyp aus dem NOTATION-Datentyp ableiten.

<xs:simpleType name="formatType">

<xs:restriction base="xs:NOTATION">

<xs:enumeration value="gif"/>

<xs:enumeration value="jpeg"/>

</xs:restriction>

</xs:simpleType>

 

Man verknüpft das Attribut mit dem vom NOTATION-Datentyp abgeleiteten Datentyp, z.B.

<xs:complexType name="imgType">

<xs:attribute name="height"/>

<xs:attribute name="width"/>

<xs:attribute name="location"/>

<xs:attribute name="format" type="formatType" use="required"/>

</xs:complexType>

<xs:element name="img" type="imgType"/>

 

Beim Konvertieren einer DTD in ein XML-Schema geht XMLSpy vor wie folgt:

 

Die folgende Deklaration:

<!ATTLIST image format ENTITY #REQUIRED

...>

 

wird in

<xs:attribute name="format" type="xs:ENTITY" use="required"/>

konvertiert.

 

und die folgende Deklaration

<!NOTATION gif SYSTEM "image/gif">

 

wird in

<xs:notation name="gif" system="image/gif"/>

konvertiert.

 

Nehmen Sie daher die folgenden Änderungen vor:

 

1.In Notationen wie <xs:notation name="gif" system="image/gif"/> ersetzen Sie system durch public und fügen einen optionalen System Identifier hinzu, falls erforderlich.
2.Leiten Sie aus dem NOTATION Datentyp einen Datentyp ab, wie oben für formatType beschrieben.
3.Verknüpfen Sie den abgeleiteten Datentyp mit dem entsprechenden Attribut.

 

Anmerkung: Gemäß der XML-Schemaspezifikation, ist es nicht notwendig - bzw. je nach Sichtweise, nicht möglich - eine externe Entity zu deklarieren.

 

 

 

 

© 2018-2024 Altova GmbH