XML Validierung - wozu? / XML Schema / Datentypen, Designs / XML Schema: xs:element abstract, substitutionGroup

XML Schema: xs:element abstract, substitutionGroup

XML Schema: xs:element abstract, substitutionGroup

➪ Zusätzliche Design-Alternativen für XML Schema ergeben sich über abstrakte Elemente. Hierbei wird beispielsweise ein Dummy-Element definiert, das als Platzhalter für andere Elemente dient.

Wurde das Dummy-Element abstract=true gesetzt, muss es zwingend ersetzt werden, bei false kann das Dummy-Element auch selbst verwendet werden. Konzeptionell zeigt sich eine gewisse Nähe zur Deklaration xs:choice, in der ein Element diverse vorher definierte Childelemente haben kann, etwa: ein Element Person habe entweder ein Hobby oder einen Beruf.

Kämen später zusätzliche Alternativen hinzu, meinetwegen Familie, Vereinsposten oder Haustier, so müsste die definierende Choice-Liste selbst ergänzt werden.

Bei abstrakten Dummy-Platzhaltern ist die Änderung des Parent-Elementes nicht nötig, man definiert lediglich ein zusätzliches XML Schema Element als substitutionGroup, das anschliessend legitim in den XML-Dokument eingefügt werden kann. Eventuell über Keys und Keyrefs gesetzte Schlüssel können beibehalten werden, sie beeinträchtigen die nachträglich definierten Elemente nicht.

Damit ergibt sich eine beträchtliche Flexibilität bei späterer Ergänzung der Datenstruktur durch zusätzliche Childelemente, die alternativ zum Dummy eingesetzt werden können: ohne die bisherige Struktur ändern zu müssen.

Die Arbeit mit abstrakten Elementen in XML Schema scheint mir interessant, wenn im weiteren Projektverlauf flexible Ergänzungen von optionalen Teilstrukturen (die keine grundlegende Neukonzeption des Gesamtprojekts voraussetzen) ermöglicht werden sollen.

Hier ein kurzes Beispiel für einen anderen Sachverhalt: das Element "Sprachen" referenziert auf das abstrakte Element "Sprache", das ersetzt werden muß durch "deutsch", "englisch" oder "spanisch".


<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    elementFormDefault="qualified"
    attributeFormDefault="unqualified">
    <xs:element name="Sprachen">
        <xs:complexType>
            <xs:sequence>                
                <xs:element ref="Sprache" 
                    minOccurs="1" 
                    maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="Sprache"  abstract="true"/>
    <xs:element name="deutsch"  substitutionGroup="Sprache"/>
    <xs:element name="englisch" substitutionGroup="Sprache"/>
    <xs:element name="spanisch" substitutionGroup="Sprache"/>
</xs:schema>

pic/XSD_abstrakt.jpg

wg / 11. Februar 2018



Fragen? Anmerkungen? Tips?

Bitte nehmen Sie Kontakt zu mir auf:

Vorname
Nachname
Mailadresse







Vielen Dank für Ihr Interesse an meiner Arbeit.


V.i.S.d.P.: Wilfried Grupe * Klus 6 * 37643 Negenborn

☎ 0151. 750 360 61 * eMail: info10@wilfried-grupe.de

www.wilfried-grupe.de/XSD3_7.html