Homepage-Webhilfe Event-Banner

Ableitung

Den Begriff Ableitung kennen Sie vielleicht von der Objektorientierung bzw., um es genauer zu sagen, von der Vererbung. Die Bedeutung in XSD hat zwar Parallelen, darf jedoch keineswegs gleichgesetzt werden. Unter Ableitung (im Sinne von XML Schema) versteht man im Allgemeinen das Erweitern oder Einschränken eines bestehenden Datentyps. In den nächsten zwei Abschnitten werden wir diese beiden Arten der Ableitung genauer erläutern.


Eine Erweiterung eines Datentyps wird mit dem extension-Element durchgeführt. Dieses wird dem simpleContent- oder complexContent-Element untergeordnet. Innerhalb des extension-Elements können Sie dann angeben, welche Inhalte erweitert werden sollen (z. B. eine Sequenz oder ein Attribut). Über das Attribut base wird im extension-Element festgelegt, von welchem Datentyp der neu definierte Datentyp abgeleitet werden soll. Im folgenden Beispiel definieren wir die Datentypen computer und laptop. Der laptop-Datentyp wird vom computer-Datentyp abgeleitet und um ein Element erweitert:

<xs:complexType name="computer">
    <xs:sequence>
        <xs:element name="prozessor" type="xs:string" />
        <xs:element name="arbeitsspeicher" type="xs:string" />
        <xs:element name="festplatte" type="xs:string" />
    </xs:sequence>
</xs:complexType>
<xs:complexType name="laptop">
    <xs:complexContent>
        <xs:extension base="computer">
            <xs:sequence>
                <xs:element name="display" type="xs:string" />
            </xs:sequence>
        </xs:extension>
    </xs:complexContent>
</xs:complexType>

Übrigens: Das extension-Element haben wir im Thema Komplexe Typen bereits dazu verwendet, einen komplexen Datentyp zu definieren, welcher aus einem direkten Inhalt (einfacher Typ) und einem Attribut besteht.


Das Element restriction kann dazu verwendet werden, Einschränkungen zu definieren. Sie haben das Element ja bereits im vorherigen Thema kennengelernt. Dort haben wir das Element aber nur dazu verwendet, Einschränkungen auf einfache Typen (z. B. eine Längenangabe oder einen Wertebereich) anzuwenden. Es ist aber möglich, bestehende komplexe Datentypen einzuschränken. Der Basistyp, also der Datentyp von welchem abgeleitet werden soll, wird im restriction-Element über das Attribut base festgelegt. Im abzuleitenden Datentyp müssen Sie alle Elemente und Attribute des ursprünglichen Datentyps wiederholen. Der Wert von Attributen wie z. B. minOccurs und maxOccurs kann natürlich durch eine Einschränkung verändert werden.

<xs:complexType name="person">
    <xs:sequence>
        <xs:element name="vorname" type="xs:string" minOccurs="0" />
        <xs:element name="name" type="xs:string" />
        <xs:element name="strasse" type="xs:string" />
        <xs:element name="hausnr" type="xs:string" />
        <xs:element name="plz" type="xs:string" />
        <xs:element name="ort" type="xs:string" />
    </xs:sequence>
    <xs:attribute name="alter" type="xs:integer" />
</xs:complexType>
<xs:complexType name="firma">
    <xs:complexContent>
        <xs:restriction base="person">
            <xs:sequence>
                <xs:element name="name" type="xs:string" />
                <xs:element name="strasse" type="xs:string" />
                <xs:element name="hausnr" type="xs:string" />
                <xs:element name="plz" type="xs:string" />
                <xs:element name="ort" type="xs:string" />
            </xs:sequence>
            <xs:attribute name="alter" type="xs:integer" use="prohibited" />
        </xs:restriction>
    </xs:complexContent>
</xs:complexType>

Wichtig: Bei der Einschränkung kann ein Datentyp nicht so eingeschränkt werden, dass er mit dem ursprünglichen Datentyp komplett inkompatibel ist, d. h. das Weglassen des Elements vorname im XSL Schema des Datentyps firma im obigen Beispiel ist nur deshalb erlaubt, weil es im Datentyp person optional ist (minOccurs="0"). Attribute können hingegen über den Wert prohibited im use-Attribut verboten werden. Auf Grund der genannten „Problematik“ bei Elementen bzw. der Umständlichkeit bei der Einschränkung von Datentypen wird meistens die Erweiterung von Datentypen bei der Ableitung vorgezogen.

Um unsere Webseite für Sie optimal zu gestalten und fortlaufend verbessern zu können, verwenden wir Cookies. Durch die weitere Nutzung der Webseite stimmen Sie der Verwendung von Cookies zu. Weitere Informationen OK