XML-Know How

Substitution Groups und abstrakte Elemente

Durch das Attribut substitutionGroup kann in <xs:element> angegeben werden, anstelle welcher anderen Elemente das deklarierte Element stehen darf. Angenommen, eine XSD sieht das Element <Kommentar> vor:

<xs:element name="Kommentar" type="xs:string" />

Nehmen wir nun an, beim Gebrauch dieses Elementes zeigt sich bald, dass eine Differenzierung in <KundenKommentar> und <MitarbeiterKommentar> besser wäre. Also deklariert man die Elemente <KundenKommentar> und <MitarbeiterKommentar> mittels <xs:element> und fügt jeder Deklaration das Attribut substitutionGroup mit dem Wert »Kommentar« bei. Im XML-Dokument kann nun anstelle von <Kommentar> auch <KundenKommentar> oder <MitarbeiterKommentar> stehen:

<xs:element name="KundenKommentar" type="xs:string" substitutionGroup="Kommentar"/>

<xs:element name="MitarbeiterKommentar" type="xs:string" substitutionGroup="Kommentar"/>

Angenommen, man möchte nun, dass das Element <Kommentar> gar nicht mehr verwendet wird, an seiner Stelle sollen nur noch die beiden Ersetzungsvarianten <KundenKommentar> oder <MitarbeiterKommentar> stehen. In diesem Fall kann man <Kommentar> mit dem Attribut abstract als sogenanntes »abstraktes Element« deklarieren. Das Element darf dann im XML-Dokument nicht mehr verwendet werden, nur die Ersetzungsvarianten sind dort erlaubt:

<xs:element name="Kommentar" type="xs:string" abstract="true"/>

Diese Funktionalität kann man auch auch für Deklarationen von Datentypen verwenden, so dass einem Element oder Attribut mehrere Datentypen zugeordnet werden können.