XML-Validierung / XML-Schema / XML-Schema 1.0 / 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 Root-Element 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 Root-Element Person umfasst:


<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ä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.

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 verloren geht.

wg / 12. April 2018



Fragen? Anmerkungen? Tips?

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