Gern stehe ich zur fachlichen Unterstützung in XML-Technologien, C#.NET, VisualBasic.NET und Java zur Verfügung. Sprechen Sie mich einfach an: Mail oder ☎ 0151 . 750 360 61


Warum XML-Validierung? / xs:element ref

xs:element ref

xs:element ref

xs:element ref erlaubt, XML-Elemente über Referenzierungen in die komplexen Typen einzubinden, die an anderer Stelle durch xs:element name definiert sind.


<?xml version="1.0" encoding="UTF-8"?>
<xs:schema 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    elementFormDefault="qualified" 
    attributeFormDefault="unqualified">
    <xs:simpleType name="stringmax20">
        <xs:restriction base="xs:string">
            <xs:maxLength value="20"/>
            <xs:pattern value="[A-Z][a-z]{1,19}"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:element name="Person">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="Name"/>
                <xs:element ref="Vorname" 
                    maxOccurs="unbounded"/>                
            </xs:sequence>
            <xs:attribute ref="Alter" use="required"/>
        </xs:complexType>
    </xs:element>
    <xs:element name="Name" 
        type="stringmax20"/>
    <xs:element name="Vorname" 
        type="stringmax20"/>
    <xs:attribute name="Alter" 
        type="xs:nonNegativeInteger"/>
    <xs:element name="Persons">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="Person" 
                    maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

So gilt das oben dargestellte XML-Schema beispielsweise sowohl für dieses XML-Dokument, das ein Root-Element Persons mit mehreren Childnodes Person definiert:


<Persons>    
    <Person Alter="33">
        <Name>Rielos</Name>
        <Vorname>Lotte</Vorname>
    </Person>
    <Person Alter="44">
        <Name>Wunschlos</Name>
        <Vorname>Wilma</Vorname>
        <Vorname>Wanja</Vorname>
    </Person>
</Persons>

... als auch für ein einzelnes XML-Dokument, das lediglich ein einziges Root-Element Person umfasst:


<Person Alter="33">
    <Name>Wolkenlos</Name>
    <Vorname>Werner</Vorname>
</Person>

... oder auch nur:


<Name>Kolos</Name>

Kommt ein @targetNamespace hinzu, dann ändert sich auch hier das XML-Schema.


<xs:schema 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    xmlns:wg="http://www.wilfried-grupe.de"
    targetNamespace="http://www.wilfried-grupe.de"
    elementFormDefault="qualified" 
    attributeFormDefault="unqualified">
    <xs:simpleType name="stringmax20">
        <xs:restriction base="xs:string">
            <xs:maxLength value="20"/>
            <xs:pattern value="[A-Z][a-z]{1,19}"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:element name="Person">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="wg:Name"/>
                <xs:element ref="wg:Vorname" 
                    maxOccurs="unbounded"/>                
            </xs:sequence>
            <xs:attribute ref="wg:Alter" use="required"/>
        </xs:complexType>
    </xs:element>
    <xs:element name="Name" 
        type="wg:stringmax20"/>
    <xs:element name="Vorname" 
        type="wg:stringmax20"/>
    <xs:attribute name="Alter" 
        type="xs:nonNegativeInteger"/>
    <xs:element name="Persons">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="wg:Person" 
                    maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

Im Fall , ebenso qualified/qualified und unqualified/unqualified finden Sie beispielsweise diesen Aufbau:


<wg:Persons xmlns:wg="http://www.wilfried-grupe.de">
    <wg:Person wg:Alter="50">
        <wg:Name>Aa</wg:Name>
        <wg:Vorname>Aa</wg:Vorname>
    </wg:Person>    
</wg:Persons>
Vorteil Bei wiederholtem Auftreten derselben Elemente in verschiedenen Verzweigungen (z.B. rekursiver Elementdeklaration) können Mehrfachdeklarationen vermieden werden.
Vorteil Die globalen Elementreferenzierungen bieten eine erhöhte Flexibilität, die nicht das Vorhandensein eines einzelnen, gesamten XML-Baums erzwingt, sondern auch die Validierung von XML-Fragmenten zulässt. Das macht sie auch für die XML-Schema-Validierung während der XSL-Transformation interessant, wie sie in XSLT 2.0 über möglich und sinnvoll sind.
Nachteil Sämtliche XML-Elemente und XML-Attribute befinden sich auf globaler Ebene. Die Beziehungen jedes XML-Elements zu seinen -, -, -, - Nodes ist ohne speziellen Editor eventuell schwer erkennbar. Für den Einsteiger in XML-Schema kann diese Bedeutungsvielfalt eher zur Verwirrung als zur Klarheit beitragen, wenn das Root-Element nicht klar definiert ist und der Überblick über die Gesamtstruktur leicht verloren geht. Das ist jedoch eher ein Problem mangelhafter Dokumentation, jedoch kein Nachteil dieses Designs.

Siehe auch .

wg / 22. April 2019



Fragen? Anmerkungen? Tipps?

Bitte nehmen Sie Kontakt zu mir auf.




xs:group



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_4.html