next up previous contents
Nächste Seite: 3 XSLT Aufwärts: 2 XML Schema Vorherige Seite: 2.6 Namensräume   Inhalt


2.7 Techniken zur Wiederverwendung und Strukturierung

Neben der Wiederbenutzbarkeit von Datentypen gibt es auch die Möglichkeit einmal definierte Elemente oder Attribute wieder zu verwenden. Das gilt für alle Elemente und Attribute, die global definiert sind. Global bedeutet, dass sie direkt unterhalb des schema-Elementes spezifiziert wurden. Diese Elemente und Attribute sind im gesamten Schema sichtbar und lassen sich von beliebigen Stellen aus über ihren Namen referenzieren. Für Elemente und Attribute lokaler Definitionen gilt das nicht. Sie lassen sich ausschließlich an der Position benutzen, an der sie definiert werden. Im Gegensatz zu Datentypen müssen Elementen und Attributen immer Namen gegeben werden, unabhängig davon ob sie global oder lokal definiert sind. Diese Namen werden in dem XML-Dokument für die Auszeichnung benutzt. Eine weitere Möglichkeit zur Strukturierung und Wiederverwendung von verschiedenen Elementen wird durch die Anwendung von Gruppen geliefert. Mit ihnen lassen sich verschiedene Elemente zusammenfassen. Dabei sind die gleichen Mechanismen zu verwenden wie bei komplexen Datentypen, also Sequenzen, Wahlmöglichkeiten und das all-Modell. Diese Gruppen können nur global erzeugt werden und sind somit an beliebiger Stelle im Schema referenzierbar. Mittels Gruppen lassen sich dementsprechend gleiche Strukturen einmal definieren und beliebig oft wiederverwenden. Änderungen werden dadurch einfacher machbar, indem sie nur einmal in der Gruppe vorgenommen werden müssen. Diese Technik zur Gruppierung existiert auch für Attribute. Es können Attributgruppen definiert werden, die verschiedene Attribute auflisten. Da Attribute keine Struktur beinhalten, werden in Attributgruppen die Attribute in Form einer Liste aufgeführt. Soll ein Element alle Attribute einer Attributgruppe per Definition zugewiesen bekommen, so lässt sich diese Gruppe referenzieren. Es lassen sich dadurch spezielle Attributgruppen erstellen, die von mehreren Elementen genutzt werden und somit den Einbau von Änderungen erleichtern.

Beispiel 2.7.1:
Eine Nachricht wird definiert, die mittels der Referenz auf eine Attributgruppe einganginfo Attribute hinzugeliefert bekommt. Die Attribute art und datum werden ebenfalls erst definiert und mittels Referenz in die Attributgruppe integriert. Das Datum ist dabei als zwingend gekennzeichnet, während die Art optional ist. Beispielhafte Ausprägungen könnten die folgenden sein:
<nachricht datum="2003-05-01">text 1</nachricht> 
<nachricht art="mail" datum="2003-05-02">text</nachricht>
In der Attributgruppe wurde noch eine Dokumentation eingefügt. Sie ist in der annotation zu finden. Mittels des documentation-Elements ist die für den Betrachter des Schemas lesbare Dokumentation eingetragen.
<xs:attribute name="art" type="xs:string"/>
<xs:attribute name="datum" type="xs:date"/>

<xs:attributeGroup name="einganginfo">
 <xs:annotation>
  <xs:documentation>
   Diese Gruppe enthaelt alle Eingangsinformationen
  </xs:documentation>
 </xs:annotation>
 <xs:attribute ref="art" use="optional"/>
 <xs:attribute ref="datum" use="required"/>
</xs:attributeGroup>

<xs:element name="nachricht">
 <xs:complexType>
  <xs:simpleContent>
   <xs:extension base="xs:string">
    <xs:attributeGroup ref="einganginfo"/>
   </xs:extension>
  </xs:simpleContent>
 </xs:complexType>
</xs:element>
Ein Schema kann schnell sehr komplex und für den Leser unübersichtlich werden. Um das zu vermeiden, gibt es die Möglichkeit zur Dokumentation. Es werden zwei verschiedene Arten von Dokumentationen unterschieden. Die Dokumentation der Elemente, Attribute, etc. für den Anwender (vgl. Beispiel 2.7.1) und die Dokumentation für den Prozessor. Diese Informationen können durch unterschiedliche Elemente auseinandergehalten werden, die jeden beliebigen Inhalt enthalten können. Somit lassen sich für den Anwender jegliche Beschreibungen in lesbarer und leicht verständlicher Form einfügen und für den Prozessor Zusatzinformationen einbinden, die er für eine spezielle Verarbeitung benötigt. Diese Zusatzinformationen hängen von dem Einsatzgebiet der definierten XML-Anwendung ab, werden aber für eine einfache Verarbeitung nicht benötigt. Aufgrund dieser Dokumentationsmöglichkeiten lassen sich aus den Schemadefinitionen automatisch geeignete Dokumentationen generieren. Für das Aufteilen und Zusammenfügen verschiedenartiger Schemata spielen besonders Namensräume eine große Rolle. Für diese Möglichkeit der Strukturierung gibt es drei verschiedene Arten:
  1. Mittels include können Schemata eingefügt werden, die den gleichen oder gar keinen targetNamespace besitzen wie das Schema, in das sie eingefügt werden. Alle Elemente und Attribute bekommen somit den gleichen Namensraum zugewiesen. Auf diese Weise hinzugefügte Definitionen werden genauso behandelt, als wenn sie in dem Schema selber eingegeben worden wären. Hierbei muss mit besonderer Vorsicht auf die Namensvergabe der Elemente, Attribute und Datentypen geachtet werden, damit diese sich nicht gegenseitig überschreiben.
  2. Ähnlich zum Einfügen ganzer Schemata arbeitet redefine. Es können allerdings nur einzelne Typen oder Gruppen aus dem anderen Schema eingefügt werden, die mittels gültigen Veränderungen (Restriktionen oder Erweiterungen, siehe Kapitel 2.4) überdefiniert werden.
  3. Zum Importieren eines Schemas wird das import-Element verwendet. Hiermit wird lediglich der Speicherort des Namensraumes des Schemas angegeben, um einem Parser die Möglichkeit zu geben, die Definition des importierten Schemas zu finden und das Dokument auch anhand dieses Schemas zu validieren.
Eine weitere Möglichkeit zur Strukturierung bilden Substitutionsgruppen substitutiongroup. Durch Angabe der Zugehörigkeit eines Elements zu einer solchen Gruppe, lässt es sich durch ein anderes Element dieser Substitutionsgruppe ersetzen. Innerhalb eines gültigen XML-Dokumentes spielt es dann keine Rolle mehr, welches Element eingesetzt wird, solange es zu der Substitutionsgruppe gehört. Speziell für diesen Einsatz lassen sich auch abstrakte Elemente definieren, die nicht im XML-Dokument auftauchen dürfen. Ein solches Element kann sinnvoll als Grundlage von Substitutionsgruppen dienen, da es nur die Aufgabe eines Platzhalters erfüllt. Diese Technik bietet einen besonderen Ansatz zur objektorientierten Modellierung eines Schemas. Allerdings ist dabei der Typ des Elements, das die Grundlage für die Substitutionsgruppe bildet, zu beachten. Abhängig davon dürfen nur gültige Erweiterungen oder Einschränkungen auf diesem Datentyp der Substitutionsgruppe hinzugefügt werden. Es ist also nicht möglich einen Platzhalter für beliebige Elemente zu definieren.
next up previous contents
Nächste Seite: 3 XSLT Aufwärts: 2 XML Schema Vorherige Seite: 2.6 Namensräume   Inhalt
Tanja Schniederberend 2003-06-11