XML Validierung - wozu? / XML Schema / Datentypen, Designs / 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:element ref="Alter" 
                    minOccurs="0"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="Name" 
              type="stringmax20"/>
  <xs:element name="Vorname" 
              type="stringmax20"/>
  <xs:element 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>

pic/xsd3.png

Die Arbeit mit globalen Elementen erleichtert Teilvalidierungen. So gilt das oben dargestellte XML Schema beispielsweise sowohl für dieses XML-Dokument, das ein Rootelement "Persons" mit mehreren Childnodes "Person" definiert:


<Persons>
    <Person>
        <Name>Rielos</Name>
        <Vorname>Lotte</Vorname>
    </Person>
    <Person>
        <Name>Wunschlos</Name>
        <Vorname>Wilma</Vorname>
        <Vorname>Wanja</Vorname>
    </Person>
</Persons>

... als auch für ein einzelnes XML-Dokument, das lediglich ein einziges Rootelement "Person" umfaßt:


<Person>
    <Name>Lassmichlos</Name>
    <Vorname>Liane</Vorname>
</Person>

... oder auch nur:


<Name>Kolos</Name>

Damit bieten die globalen Elementreferenzierungen eine erhöhte Flexibilität, die nicht das Vorhandensein eines einzelnen, gesamten XML-Baums erzwingt, sondern auch die Validierung von XML - Fragmenten zuläßt. Das macht sie auch für die XML Schema - Validierung während der XSL-Transformation interessant, wie sie in XSLT 2.0 über xsl:import-schema möglich und sinnvoll sind.

Für den Einsteiger in XML Schema kann diese Bedeutungsvielfalt jedoch eher zur Verwirrung als zur Klarheit beitragen, da das Root-Element nicht immer klar definiert ist und der Überblick über die zulässige Gesamtstruktur leicht verlorengeht.

wg / 11. Februar 2018



Fragen? Anmerkungen? Tips?

Bitte nehmen Sie Kontakt zu mir auf:

Vorname
Nachname
Mailadresse





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