Link zu www.kneller-gifs.de

XML-Schema - Elemente und Attribute

Ein XML-Dokument enthält Elemente und Elemente können Attribute enthalten. Elemente können untereinander oder ineinander geschachtelt werden:

XML-Beispieldatei mit Elementen und Attributen
<?xml version="1.0" encoding="UTF-8"?>
<Fahrzeug>
  <Farbe>Rot</Farbe>
  <Kw beiUmdrehung="5000">111</Kw>
  <Verbrauch Stadt="10" Landstrasse="8.5" Autobahn="9"/>
</Fahrzeug>
Das XML-Dokument enthält das komplexe Wurzelelement "Fahrzeug" mit den 3 einfachen Unterelementen "Farbe", "Kw" und "Verbrauch".
Das Unterelement "Farbe" enthält kein Attribut und transportiert den Wert "Rot" im Element.
Das Unterelement "Kw" enthält das Attribute "beiUmdrehung". Sowohl Element als auch Attribut transportieren Daten ("5000" und "111").
Das Unterlement "Verbrauch" enthält 3 Attribute mit Daten, das Element selber transportiert keine Daten.

Die XML-Schemadatei zum obigen Beispiel
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="Fahrzeug">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="Farbe" type="xs:string"/>
        <xs:element name="Kw">
          <xs:complexType>
            <xs:simpleContent>
              <xs:extension base="xs:integer">
                <xs:attribute name="beiUmdrehung" type="xs:integer"/>
              </xs:extension>
            </xs:simpleContent>
          </xs:complexType>
        </xs:element>
        <xs:element name="Verbrauch">
          <xs:complexType>
            <xs:attribute name="Stadtverkehr" type="xs:decimal"/>
            <xs:attribute name="Landstrasse" type="xs:decimal"/>
            <xs:attribute name="Autobahn" type="xs:decimal"/>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>
Zuerst wird das Wurzelelement "Fahrzeug" definiert. Es enthält keine Daten, sondern Unterelemente und ist somit komplex.
Es folgt die Definition für das Unterelement "Farbe", das Daten vom Typ String enthalten darf.
Dann wird das Unterelement "Kw" definiert. Da es ein Attribut enthält muss es als komplexer Typ aufgebaut werden.
Die Typdefinition für "Kw" erfolgt als Extension, dann folgt die eigentliche Attributdefinition "beiUmdrehung". Zum Schluss wird das Element "Verbrauch" definiert, das keine Werte transportiert, sondern nur Attribute.
Die Attribute werden komplex eingehängt und entsprechend des gewünschten Datentyps alle als Dezimal definiert.

Ein weiteres Beispiel für eine XML-Datei mit komplexen Elementen und einem Attribut:
<?xml version="1.0" encoding="UTF-8"?>
<Fahrzeugliste xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <Fahrzeug Nr="1">
    <Farbe>Rot</Farbe>
  </Fahrzeug>
  <Fahrzeug Nr="2">
    <Farbe>Blau</Farbe>
  </Fahrzeug>
  <Fahrzeug Nr="3">
    <Farbe>Grün</Farbe>
  </Fahrzeug>
</Fahrzeugliste>
Ein komplexes Element "Fahrzeugliste" enthält mehrere komplexe Unterelemente "Fahrzeug" die ein Attribut "Nr" und eine einfaches Unterelement enthalten.

Das XML-Schema zum obigen Beispiel
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="Fahrzeugliste">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="Fahrzeug" maxOccurs="unbounded">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="Farbe" type="xs:string"/>
            </xs:sequence>
            <xs:attribute name="Nr" use="required" type="xs:integer"/>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>
Das Element "Fahrzeugliste" wird als komplexes Element angelegt.
Dann wird das Element "Fahrzeug" als komplex angelegt, weil es ein Unterelement und ein Attribut enthält.
Das "maxoccurs=unbounded" bedeutet, dass das Element "Fahrzeug" innerhalb der Fahrzeugliste beliebig oft vorkommen darf.
Das "use=required" bedeutet, dass das Attribut "Nr" im XML-Dokument vorkommen muss. Ansonsten wäre das Attribut optional.