Lehrer Nussbaumer - XML, XSL et cetera

XML

  1. Grundlagen
  2. DTD
  3. Schema
  4. CSS

XSL

Anwendungen 

Editoren

Parser u.a.

Schnittstellen


-----------------
letzte änderung:
09 December 2021
-----------------
Lehrer Nussbaumers Seite

... in Arbeit ...

XML-Schema

XML-Schemata werden an Stelle einer DTD eingesetzt, um den Aufbau eines XML-Dokuments zu definieren. Anders als bei der DTD legen XML-Schemata zusätzlich Regeln für die Datentypen der einzelnen Elemente und Attribute fest.

Die Eigenschaften von XML-Schematas werden vom W3C in drei offiziellen Dokumenten veröffentlicht:
  1. XML-Schema (Primer)
  2. XML-Schema (Structures)
  3. XML-Schema (Datatypes)

Zum Erstellen von Schema-Dateien ist jedenfalls ein XML-Editor zu empfehlen.

Wir besprechen die Eigenschaften einer XML-Schema-Datei an Hand des folgenden Beispiels. Sie legt die Struktur für die Beispiel-Datei im Abschnitt "XML-Grundlagen" fest:

<?xml version = "1.0" encoding = "UTF-8"?>
<xsd:schema xmlns:xsd = "http://www.w3.org/2001/XMLSchema"
         elementFormDefault = "qualified">
  <xsd:element name = "schule" id = "schule">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref = "klasse" maxOccurs = "unbounded"/>
      </xsd:sequence>
      <xsd:attribute name = "name" use = "optional" type = "xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name = "klasse" id = "klasse">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref = "schuelerIn" maxOccurs = "unbounded"/>
      </xsd:sequence>
      <xsd:attribute name = "klassenvorstand" use = "optional" type = "xsd:string"/>
      <xsd:attribute name = "klassenname" use = "optional" type = "xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name = "vorname" type = "xsd:string" id = "vornam"/>
  <xsd:element name = "famname" type = "xsd:string" id = "famnam"/>
  <xsd:element name = "schuelerIn" id = "person">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref = "vorname"/>
        <xsd:element ref = "famname"/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
</xsd:schema>

Wir erkennen:

  • Die XML-Schema-Datei ist selbst eine wohlgeformte XML-Datei:
    <?xml version = "1.0" encoding = "UTF-8"?>
    <xsd:schema xmlns:xsd = "http://www.w3.org/2001/XMLSchema"
             elementFormDefault = "qualified">
      <xsd:element name = "schule" id = "schule">
        ...
      </xsd:element>
      ...
    </xsd:schema>
  • Jedes Element und jedes Attribut der XML-Datei wird eigens definiert. Dabei wird der Datentyp genau festgelegt - XML stellt dazu einfache Datentypen (simple types) zur Verfügung. Der Benutzer kann zusätzlich zusammengesetzte Datentypen (complex types) definieren.
  • Die Struktur der XML-Datei wird durch das Inhalts-Modell gebildet: Elemente enthalten weitere Elemente, die entweder alle im XML-Dokument vorkommen müssen, optional oder alternativ gewählt werden.

Einfache Datentypen

Die einfachen Datentypen setzen sich aus den so genannten primitiven Datentypen (primitive datatypes), die von XML-Schema vordefiniert sind, und von den davon abgeleiteten Datentypen (derived datatypes) zusammen. Die wichtigsten primitiven Datentypen sind in der folgenden Tabelle zusammengefasst:

Primitive Datentypen Beschreibung
string Zeichenketten
boolean Boole'sche Datentypen ("wahr" - "falsch")
decimal Dezimalzahlen
dateTime Datum und Tageszeit
date Datum (in der Form CCYY-MM-DD = vierstellige Jahreszahl - zweistellige Monatszahl - zweistellige Tageszahl)
hexBinary Binärzahlen zur Basis 16

Zahlreiche Datentypen werden von den primitiven Datentypen abgeleitet. In der folgenden Tabelle sind einige abgeleitete Datentypen angegeben:

Abgeleitete Datentypen Beschreibung
token Zeichenkette ohne führende oder endende Leerzeichen, Zeilenvorschübe, Wagenrücklaufszeichen, Tabulatoren und aufeinander folgende Leerzeichen.
integer (beliebig große) ganze Zahlen
nonNegativeInteger nicht negative ganze Zahl
positiveInteger positive ganze Zahl
long ganze Zahl zwischen -9223372036854775808 und 9223372036854775807
int ganze Zahl zwischen -2147483648 und 2147483647
short ganze Zahl zwischen -32768 und 32767
byte Byte, ganze Zahl zwischen -128 und 127

Facetten

Facetten legen die Eigenschaften des gewählten Datentyps fest. Für die Praxis spielen etwa die folgenden einschränkenden Facetten eine Rolle, deren Werte vom Benutzer angegeben werden:

Einschränkende Facetten Beschreibung
length Anzahl der Zeichen für Zeichenketten oder Anzahl der Einträge in Listen
minLength, maxLength Mindestanzahl, Maximalzahl von Dateneinheiten
maxInclusive, minInclusive obere, untere Schranke

Im folgenden Beispiel soll das Element <schuelerzahl> höchstens den Wert 30 annehmen können:

<xsd:element name = "schuelerzahl">
  <xsd:simpleType>
    <xsd:restriction base = "xsd:short">
      <xsd:maxInclusive value = "30"/>
    </xsd:restriction>
  </xsd:simpleType>
</xsd:element>

Zusammengesetzte Datentypen

Zusammengesetzte Datentypen entstehen, wenn ein Element weitere Elemente oder Attribute beinhaltet. Im folgenden Beispiel wird gezeigt, wie das Element <klasse> weitere Elemente beinhaltet:

  <xsd:element name = "klasse" id = "klasse">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref = "schuelerIn" maxOccurs = "unbounded"/>
      </xsd:sequence>
      <xsd:attribute name = "klassenvorstand" use = "optional" type = "xsd:string"/>
      <xsd:attribute name = "klassenname" use = "optional" type = "xsd:string"/>
    </xsd:complexType>
  </xsd:element>

Möglichkeiten, komplexe Datentypen zu bilden werden im Abschnitt Inhaltsmodell beschrieben.

Elemente

Jedes Element muss mit Hilfe des Schema-Elements <element> deklariert werden:

  <xsd:element name = "vorname" type = "xsd:string" id = "vornam"/>
  <xsd:element name = "famname" type = "xsd:string" id = "famnam"/>

Die wichtigsten Attribute dabei sind in der folgenden Tabelle angegeben:

Attribute Beschreibung
id ID, eindeutiger Bezeichner
maxOccurs Legt fest, wie oft das Element im XML-Dokument maximal vorkommen darf. Werte: nicht negative ganze Zahl, unbounded (Defaultwert:1)
name Name des Elementes, mit dem es in komplexen Datentypen referenziert werden kann.
ref Referenz zu einem schon deklarierten Element
type Gibt den Namen eines integrierten Datentyps oder eines benutzerdefinierten Datentyps an

Attribute

Attribute müssen ebenfalls in der XML-Schema-Datei deklariert werden. Dabei wird das Element, das dieses Attribut enthalten soll, und der Datentyp der Attributwerte festgelegt.

Im folgenden Beispiel werden zwei Attribute für das Element <klasse> deklariert:

<xsd:element name = "klasse" id = "klasse">
  <xsd:complexType>
    <xsd:sequence>
      <xsd:element ref = "schuelerIn" maxOccurs = "unbounded"/>
    </xsd:sequence>
    <xsd:attribute name = "klassenvorstand" use = "optional" type = "xsd:string"/>
    <xsd:attribute name = "klassenname" use = "optional" type = "xsd:string"/>
  </xsd:complexType>
</xsd:element>

Die Attribute "type" und "name" sind obligat. In der folgenden Tabelle sind diese und einige weitere Attribute zusammengefasst:

Attribut Beschreibung
default Legt einen Defaultwert für das angegebene Attribut fest. Wird das Attribut im XML-Dokument nicht verwendet, liegt kein Attributwert vor.
fixed Bestimmt einen festen vorgegebenen Wert für das Attribut. Wird das Attribut im XML-Dokument nicht verwendet, liegt dennoch der angegebene Attributwert vor.
name Legt den Namen des Attributes fest.
ref Referenziert eine schon bestehende Attribut-Deklaration.
type Wählt den Datentyp für die Attributwerte aus.
use Legt fest, ob das entsprechende Attribut optional, nicht zugelassen oder zwingend erforderlich ist (Werte: optional (Defaultwert), prohibited, required).

Inhaltsmodell

Einmal deklarierte Elemente können zu benutzerdefinierten Datentypen zusammengesetzt werden. Dies ist mit dem Schema-Element <complexType> mögliche:

	<xsd:element name = "schuelerIn" id = "person">
		<xsd:complexType>
			<xsd:sequence>
				<xsd:element ref = "vorname"/>
				<xsd:element ref = "famname"/>
			</xsd:sequence>
		</xsd:complexType>
	</xsd:element>

Das Element <complexType> dient also zur Definition komplexer Datentypen. Da in der Deklaration eines komplexen Datentyps wieder Elemente mit einem zusammengesetzten Datentyp enthalten sein können, kann auf diese Weise die Baumstruktur des XML-Dokumentes gebildet werden.

Wir unterscheiden drei Fälle:

  1. <sequence> - alle enthaltenen Elemente müssen der Reihe nach im XML-Dokument auftreten.
  2. <choice> - genau ein Element wird aus den enthaltenen Elementen ausgewählt.
  3. <all> - aus den enthaltenen Elementen kann im XML-Dokument eine beliebige Auswahl getroffen werden.

Die oben angeführten drei Möglichkeiten können miteinander kombiniert werden.


© Alfred Nussbaumer, Weblog