Abstract

Neben den Document Type Definitions ist in jüngerer Zeit ein alternativer Ansatz in den Blickpunkt des Interesses gerückt: die XML-Schemasprachen. XML Schema (im Jahre 2001 als Empfehlung des W3C veröffentlicht) ist dabei die heutzutage am meisten verwendete Schemasprache für XML. Sie wurde ersonnen, um die Einschränkungen der DTDs, die in ihrer Dokumentenorientierung wurzeln, zu umgehen und insbesondere die Möglichkeit zur Datentypisierung zu realisieren.

Inhalt (XML Schemasprachen - eine Einführung)

  1. XML Schemasprachen - eine Einführung [4]
  2. XML Schema [50]
    1. Einführendes [5]
    2. Bestandteile von XML-Schema [45]

Der Begriff Schema

Warum ein Schema?

Unzulänglichkeiten und Beschränkungen von DTDs

Für datenintensive Strukturen unterliegt der DTD-Mechanismus folgenden Einschränkungen:

Schemasprachen

Inhalt (XML Schema)

  1. XML Schemasprachen - eine Einführung [4]
  2. XML Schema [50]
    1. Einführendes [5]
    2. Bestandteile von XML-Schema [45]

Inhalt (Einführendes)

  1. XML Schemasprachen - eine Einführung [4]
  2. XML Schema [50]
    1. Einführendes [5]
    2. Bestandteile von XML-Schema [45]

XML Schema

XML Schema definiert...

XML Schema - Einführendes

Gültigkeit hinsichtlich eines Schemas, Gültigkeit und Wohlgeformtheit

Definition der Gültigkeit hinsichtlich eines Schemas

Ein XML-Dokument heißt gültig hinsichtlich eines Schemas (schema valid) , wenn es über ein Schema verfügt, und konform zu diesem aufgebaut ist.

Inhalt (Bestandteile von XML-Schema)

  1. XML Schemasprachen - eine Einführung [4]
  2. XML Schema [50]
    1. Einführendes [5]
    2. Bestandteile von XML-Schema [45]

Verknüpfen eines Dokuments mit einem Schema

Verknüpfen eines Dokuments mit einem Schema - Beispiel

<?xml version="1.0" encoding="UTF-8"?>
<ProjektVerwaltung 
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
 xsi:schemaLocation="http://www.barbara-zengler.de/vorlesung/projektverwaltung.xsd"/>

Schema für Schema - Metaschema!

Schema für Schema - Metaschema!

XML Schema - Typsystem

XML Schema - Typsystem

XML Schema - Datentypen - Datum und Zeit

Typname Beispiel Bemerkung
time 13:20:00-05:00, 13:20:00.000 Uhrzeit, die täglich wiederkehrt, ausgedrückt im Format gemäß ISO 8601
date 2007-11-13 Datumsformat: CCYY-MM-DD, gemäß ISO 8601
gYear 1999, 2001, 2004, 2007 Darstellung von Jahren des gregorianischen Kalenders gemäß ISO 8601
gYearMonth 2007-11 Darstellung eines Monats eines bestimmten Jahres des gregorianischen Kalenders gemäß ISO 8601
gDay ----05, ----31 Darstellung eines wiederkehrenden Tages eines Monats gemäß ISO 8601
gMonthDay --31-12, --01-01 Darstellung eines wiederkehrenden gregorianischen Datums, gebildet aus Tag Monat und Monat im Format --MM-DD , gemäß ISO 8601
gMonth --03, --12 Monatsformat: --MM-- gemäß ISO 8601
dateTime 2007-11-13T08:09:46.000+01:00 Zeitpunkt, ausgedrückt durch Datum und Uhrzeit; beide gemäß ISO 8601 codiert.
duration P1Y2M3DT10H30M12.3S
Zeitraum von einem Jahr, zwei Monaten, drei Tagen, zehn Stunden, 30 Minuten und 12,3 Sekunden
Nach Größe (Signifikanz) geordnete Koordinate im sechs-dimensionalen Raum aus Jahr, Monat, Tag, Stunde, Minute und Sekunde. Formatdefinition laut ISO 8601

XML Schema - Datentypen - String und davon Abgeleitete

Typname Beispiel Bemerkung
string     Hello &#xD;&#xA; World
(Carriage Return, Line Feed)
Jedes beliebige Unicode Symbol gemäß XML-Grammatikregel (Syntaxproduktion) 2 .
normalizedString &#20;Hello&#20;World Jedes beliebige Unicode Symbol außer Zeilenvorschub ( #xA ), Wagenrücklauf ( #xD ) und Tabulatoren ( #x9 ).
normalizedString ist eine einschränkende Spezialisierung des Typs string .
token Hello World Jeder normalizedString , unter Weglassung führender, abschließender und mehrfacher Leerzeichen ( #x20 ), sowie Zeilenvorschüben und Tabulatoren.
token ist eine einschränkende Spezialisierung des Typs normalizedString .
language en-GB, en, de-de Sprachcodierung gemäß IETF RFC 1766 und XML Recommendation language identification. Die Identifikationsnamen werden durch ISO 639 sowie ISO 3166 definiert. language ist eine einschränkende Spezialisierung des Typs token .
Name aName, _helloWorld, :notAGoodIdea Ein XML Name gemäß Syntaxproduktion 5 .
Name ist eine einschränkende Spezialisierung des Typs token .
QName xsd:element, element Durch Namensraumpräfix qualifizierter Name gemäß Produktion 8 der XML Namespace Recommendation .
NCName aName, _anotherName, X Name, der keinen Doppelpunkt enthält ( non colonized name ), gemäß Produktion 4 der XML Namespace Recommendation
ID test, XYZ XSD-Darstellung des DTD-Typen ID . Zugelassen sind alle Ausprägungen der Namespaceproduktion 4 (NCName). ID ist eine einschränkende Spezialisierung des Typs NCName .
IDREF test, XYZ XSD-Darstellung des DTD-Typen IDREF . Zugelassen sind alle Ausprägungen der Namespaceproduktion 4 (NCName). IDREF ist eine einschränkende Spezialisierung des Typs NCName .
IDREFS test1 test2 test4, test3 test5 XSD-Darstellung des DTD-Typen IDREFS . Zugelassen sind Listen aus white space separierten Ausprägungen der Namespaceproduktion 4 (NCName). IDREFS ist eine nichtleere Aufzählung von IDREF -Ausprägungen.
ENTITY XSD-Darstellung des DTD-Typen ENTITY . Zugelassen sind alle Satzformen, die der Produktion NCName der XML-Namensräume entsprechen und als ungeparste Entität definiert sind. ENTITY ist eine einschränkende Spezialisierung des Typs NCName .
ENTITIES XSD-Darstellung des DTD-Typen ENTITIES . Zugelassen sind Listen aus white space separierten Ausprägungen des Typs ENTITY . ENTITIES ist eine nichtleere Aufzählung von ENTITY -Ausprägungen
NMTOKEN US, Deutschland XSD-Darstellung des DTD-Typen NMTOKEN . Ausprägungen dieses Typs müssen konform zur Produktion 7 der XML-Spezifikation sein. NMTOKEN ist eine einschränkende Spezialisierung des Typs token .
NMTOKENS US UK Aus, Ger XSD-Darstellung des DTD-Typen NMTOKENS . Zugelassen sind Listen aus white space separierten Ausprägungen des Typs NMTOKEN. NMTOKENS ist eine nichtleere Aufzählung von NMTOKEN-Ausprägungen

XML Schema - Datentypen - decimal und davon Abgeleitete

Typname Beispiel Bemerkung
decimal -1.23, 12678967.543233, +100000.00, 210 Wertebereich: i*10 -n , mit i , n aus integer, n>=0
Ein Prozessor muß mindestens 18 Dezimalstellen unterstützen.
integer ...-1, 0, 1, ... Wertebereich: entspricht der mathematischen Menge der ganzen Zahlen (Z)
integer ist eine einschränkende Spezialisierung des Typs decimal
nonPositiveInteger ... -2, -1, 0 Wertebereich: {..., -2, -1, 0} die unendliche Menge der negativen Zahlen, und die Null
nonPositiveInteger ist eine einschränkende Spezialisierung des Typs integer
negativeInteger ... -2, -1 Wertebereich: {..., -2, -1} , die unendliche Menge der negativen Zahlen
negativeInteger ist eine einschränkende Spezialisierung des Typs nonPositiveInteger
long -9223372036854775808, ... -1, 0, 1, ... 9223372036854775807 Wertebereich: 2 63 <= long <= 2 63 -1
long ist eine einschränkende Spezialisierung des Typs integer
int -2147483648, ... -1, 0, 1, ... 2147483647 Wertebereich: -2 31 <= int <= 2 31 -1
int ist eine einschränkende Spezialisierung des Typs long
short -32768, ... -1, 0, 1, ... 32767 Wertebereich: -2 15 <= short <= 2 15 -1
short ist eine einschränkende Spezialisierung des Typs int
byte -128, ...-1, 0, 1, ... 127 Wertebereich: -2 7 <= byte <= 2 7 -1
byte ist eine einschränkende Spezialisierung des Typs short
nonNegativeInteger 0, 1, 2, ... Wertebereich: 0 <= nonNegativeInteger
nonNegativeInteger ist eine einschränkende Spezialisierung des Typs integer
positiveInteger 1, 2, ... Wertebereich: entspricht der mathematischen Menge der natürlichen Zahlen (N)
positiveInteger ist eine einschränkende Spezialisierung des Typs nonNegativeInteger
unsignedLong 0, 1, ... 18446744073709551615 Wertebereich: 0 <= unsignedLong <= 2 64 -1
unsignedLong ist eine einschränkende Spezialisierung des Typs nonNegativeInteger
unsignedInt 0, 1, ...4294967295 Wertebereich: 0 <= unsignedInt <= 2 32 -1
unsignedInt ist eine einschränkende Spezialisierung des Typs unsignedLong
unsignedShort 0, 1, ... 65535 Wertebereich: 0 <= unsignedShort <= 2 16 -1
unsignedShort ist eine einschränkende Spezialisierung des Typs unsignedInt
unsignedByte 0, 1, ... 255 Wertebereich: 0 <= unsignedByte <= 2 8 -1
unsignedByte ist eine einschränkende Spezialisierung des Typs unsignedShort

XML Schema - Datentypen - weitere vordefinierte Primitivtypen

Typname Beispiel Bemerkung
boolean true, false, 1, 0 Unterstützung der klassischen zweiwertigen Logik
base64Binary SGVsbG8gd29ybGQhCg== Base64-Darstellung eines beliebigen Binär-interpretierten Inhaltes gemäß IETF RFC 2045
hexBinary 0FB7 Hexadezimale Darstellung beliebiger Binär-interpretierter Inhalte
float -1E4, 1267.43233E12, 12.78e-2, 12, INF 32-Bit-Zahl mit einfacher Genauigkeit gemäß IEEE 754-1985.
Wertebereich: m * 2 e , wobei m und e integer -Elemente mit m <= 224, und -149 <= e < 104 sind.
double -1E4, 1267.43233E12, 12.78e-2, 12, INF 64-Bit-Zahl mit doppelter Genauigkeit gemäß IEEE 754-1985.
Wertebereich: m * 2 e , wobei m und e integer -Elemente mit m <= 253, und -1075 <= e < 970 sind.
anyURI http://www.barbara-zengler.de/ Jede gemäß IETF RFC 2396 bzw. IETF RFC 2732 gültige URI
QName xsd:element, element Durch Namensraumpräfix qualifizierter Name gemäß Produktion 8 der XML Namespace Recommendation .
NOTATION XSD-Darstellung des DTD-Typen NOTATION . Zur Verwendung dieses Typs in einem Schema muß eine Ableitung von NOTATION durch den Anwender definiert werden.

XML Schema am Beispiel - Wurzelelement schema

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

XML Schema - Elementdefinitionen

<xsd:element
                    name="elementName"
                    type="typeName"/>

XML Schema - Elementeigenschaften

Des weiteren können folgende Eigenschaften für Elemente mit Hilfe von Attributen angegeben werden:

XML Schema am Beispiel - Elementdefinitionen

Nachfolgend finden Sie einige beispielhafte Elementdeklarationen für nicht strukturierten (= keine Kindelemente), aber typisierten, Elementinhalt:

<element name="geburtsdatum" type="xsd:date"/>
<element name="pi" 
  type="xsd:double" 
  fixed="3.141592653" 
  block="#all"/>
<element name="vorname" 
 type="xsd:token" 
 minOccurs="1" 
 maxOccurs="unbounded"/> 
<element name="artikelNummer" 
 type="xsd:NCName" 
 form="qualified"/>
 <element

Elementdefinition - freies Inhaltsmodell

Zur Umsetzung des freien Inhaltsmodells, das beliebige Inhalte aus den definierten Elementen und freien Texten zuläßt, wird ebenfalls auf das Typsystem zurückgegriffen.
Wird das type Attribut nicht belegt, so wird gemäß Vorgabe der Typ anyType angenommen. Elemente dieses Typs können beliebige wohlgeformte Inhalte beherbergen.
Die beiden nachfolgenden Angaben sind daher äquivalent:

 <element
   name="elementName"
   type="xsd:anyType"/>
<element name="elementName"/>

Verwendung von Typen - complexType - leeres Inhaltsmodell

XSD hat verglichen mit der DTD einen strengeren Typbegriff. Dies zeigt sich deutlich in der Existenz des XSD-Elements complexType . Dieses Element erlaubt die Bildung von Typen losgelöst von ihrere Verwendung. Syntaktisch kann die complexType -Definition sowohl innerhalb einer Elementdefinition, als auch separat erfolgen.
Den einfachsten Anwendungsfall bildet die eingebettete leere complexType -Definition zur Darstellung des leeren Inhaltsmodells.
Die Syntax hierfür lautet (der XSD-Namensraum sei an das Präfix xsd gebunden):

<xsd:element
   name="elementName">
   <xsd:complexType/>
</xsd:element>

In einem Instanzdokument werden für die obige Festlegung ausschließlich die beiden Darstellungsformen zum leeren Element ( <elementName/> bzw. <elementName></elementName> ) akzeptiert.

Verwendung von Typen - complexType - strukturierter Inhalt - Reihenfolgetypen

Elementdefinition und Reihefolgetypen am Beispiel Projektverwaltung

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
 <xsd:element name="ProjektVerwaltung">
  <xsd:complexType>
   <xsd:sequence>
    <xsd:element ref="Person" maxOccurs="unbounded"/>
    <xsd:element ref="Projekt" maxOccurs="unbounded"/>
   </xsd:sequence>
  </xsd:complexType>
 </xsd:element>
 <xsd:element name="Person">
  <xsd:complexType>
   <xsd:sequence>
    <xsd:element name="Vorname" type="xsd:token" maxOccurs="unbounded"/>
    <xsd:element name="Nachname" type="xsd:token"/>
    <xsd:element ref="Qualifikationsprofil" minOccurs="0"/>
   </xsd:sequence>
  </xsd:complexType>
 </xsd:element>
 <xsd:element name="Projekt">
  <xsd:complexType/>
 </xsd:element>
 <xsd:element name="Qualifikationsprofil">
  <xsd:complexType mixed="true">
   <xsd:sequence>
    <xsd:element name="Qualifikation" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/>
    <xsd:element name="Leistungsstufe" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/>
   </xsd:sequence>
  </xsd:complexType>
 </xsd:element>
</xsd:schema>

Gemischtes Inhaltsmodell im Vergleich zur DTD

 <xsd:element name="Qualifikationsprofil">
  <xsd:complexType mixed="true">
   <xsd:sequence>
    <xsd:element name="Qualifikation" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/>
    <xsd:element name="Leistungsstufe" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/>
   </xsd:sequence>
  </xsd:complexType>
 </xsd:element>
<!ELEMENT Qualifikationsprofil (#PCDATA | Qualifikation | Leistungsstufe)*>
<!ELEMENT Qualifikation (#PCDATA)>
<!ELEMENT Leistungsstufe (#PCDATA)>

Globale und lokale Elementdefinitionen

Benannte komplexe Typen

<xsd:schema xmlns:xsd = "http://www.w3.org/2001/XMLSchema">
   <xsd:complexType name="PersonType">
    <xsd:sequence>
    <xsd:element name="Vorname" type="xsd:string" maxOccurs="unbounded"/>
    <xsd:element name="Nachname" type="xsd:string"/>
    <xsd:element ref="Qualifikationsprofil" minOccurs="0"/>
   </xsd:sequence>
   </xsd:complexType>
   
   <xsd:element name="ProjektVerwaltung">
      <xsd:complexType>
         <xsd:sequence>
            <xsd:element name="Person" type="PersonType" maxOccurs="unbounded"/>
            <xsd:element ref="Projekt" maxOccurs="unbounded"/>
         </xsd:sequence>
      </xsd:complexType>
   </xsd:element>

   <xsd:element name="Projekt">
      <xsd:complexType/>
   </xsd:element>

   <xsd:element name="Qualifikationsprofil">
      <xsd:complexType mixed="true">
         <xsd:sequence>
            <xsd:element name="Qualifikation" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/>
            <xsd:element name="Leistungsstufe" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/>
         </xsd:sequence>
      </xsd:complexType>
   </xsd:element>
</xsd:schema>

Erweiterung, Einschränkung und Substitution

Ableitung durch Einschränkung -- Beispiel

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:complexType name="parentType">
 <xsd:sequence>
  <xsd:element name="elementA" type="xsd:int"/>
 </xsd:sequence>
</xsd:complexType>

<xsd:complexType name="childType">
<xsd:complexContent>
 <xsd:restriction base="parentType">
  <xsd:sequence>
   <xsd:element name="elementA" type="xsd:short"/>
  </xsd:sequence>
 </xsd:restriction>
</xsd:complexContent>
</xsd:complexType>

<xsd:element name="usage1" type="parentType"/>
<xsd:element name="usage2" type="childType"/>

</xsd:schema>

Ableitung durch Einschränkung -- weitere Arten der Einschränkung

Es gibt - über die soeben gezeigte Möglichkeit der EInschränkung auf Typisierung hinaus -- weiter Möglichkeiten der Einschränkung, die Sie in der folgenden Tabelle zusammengestellt sehen.

Basistyp Restriktion Bemerkung
default Zusätzliche Belegung eines Elements mit einem Vorgabewert
fixed Beschränkung eines zunächst frei wählbaren Elements auf konstanten Inhalt
type Definition eines Typen für ein zunächst untypisiertes Element. (Auch hierbei handelt es sich um eine einschränkende Redefinition, da allen Elementen ohne Typdefinition standardmäßig der Typ anyType zugeordnet wird.)
minOccurs=n 1 , maxOccurs=m 1 minOccurs=n 2 , maxOccurs=m 2 Restriktion der Auftrittshäufigkeit auf eine geringere Anzahl.Daher gilt: n 1 <= n 2 und m 1 ><= m 2

Ableitung durch Erweiterung -- Beispiel

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

<xsd:complexType name="parentElement">
  <xsd:sequence>
   <xsd:element name="elementA"/>
  </xsd:sequence>
 </xsd:complexType>
 
 <xsd:complexType name="childElement">
  <xsd:complexContent>
   <xsd:extension base="parentElement">
    <xsd:sequence>
     <xsd:element name="elementB"/>
    </xsd:sequence>
   </xsd:extension>
  </xsd:complexContent>
 </xsd:complexType>

<xsd:element name="Test">
  <xsd:complexType>
 <xsd:element name="Elternelement" type="parentElement">
 </xsd:element>
 <xsd:element name="Kindelement" type="childElement">
 </xsd:element>
  </xsd:complexType>
</xsd:element>
</xsd:schema>

Ableitung komplexer Typen von einfachen Typen

Ableitung von komplexen Typen durch einfache Typen -- Beispiel

Dieses Schema definiert das Element Vorname als einfachen Typ (string).

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema  xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
 <xs:element name="Vorname" type="xs:string">
 </xs:element>
</xs:schema>
<?xml version="1.0" encoding="UTF-8"?>
<Vorname xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="./verySimpleContent.xsd">Johanna Eleonore Laura Ottilie
</Vorname>

Hier hingegen wird der Datentyp string erweitert. Das Element enthält immer noch einen einfachen Datentyp ( simpleContent ), darf aber nun ein Attribut ( rufname ) enthalten.

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
 <xs:element name="Vorname">
  <xs:complexType>
   <xs:simpleContent>
    <xs:extension base="xs:string">
     <xs:attribute 
      name="rufname" 
      type="xs:string"/>
    </xs:extension>
   </xs:simpleContent>
  </xs:complexType>
 </xs:element>
</xs:schema>
<?xml version="1.0" encoding="UTF-8"?>
<Vorname xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="./simpleContent.xsd" rufname="Hannelore">Johanna Eleonore Laura Ottilie
</Vorname>

Festlegen eigener primitiver Datentypen -- simpleType

Festlegen eigener primitiver Datentypen -- Listen

  <xsd:simpleType name="dieWochentage">
    <xsd:restriction base="xsd:string">
      <xsd:enumeration value="Montag"/>
      <xsd:enumeration value="Dienstag"/>
      <xsd:enumeration value="Mittwoch"/>
      <xsd:enumeration value="Donnerstag"/>
      <xsd:enumeration value="Freitag"/>
      <xsd:enumeration value="Samstag"/>
      <xsd:enumeration value="Sonntag"/>
    </xsd:restriction>
  </xsd:simpleType>
  <xsd:simpleType name="ListeDerWochentage">
    <xsd:list itemType="dieWochentage"/>
  </xsd:simpleType>

Festlegen eigener primitiver Datentypen -- Vereinigungstypen

  <xsd:element name="Termin" type="termin"/>
  <xsd:element name="Wochentage" type="ListeDerWochentage"></xsd:element>
  <xsd:simpleType name="termin">
    <xsd:union memberTypes="xsd:date ListeDerWochentage"/>
  </xsd:simpleType>

Festlegen eigener primitiver Datentypen -- Ableitung durch Einschränkung

  <xsd:simpleType name="myInteger">
  <xsd:restriction base="xsd:integer">
    <xsd:minInclusive value="10000"/>
    <xsd:maxInclusive value="99999"/>
  </xsd:restriction>
</xsd:simpleType>

Ableitung durch Einschränkung - Arten der Einschränkung

XML Schema definiert 12 voneinander unabhängige sogenannte Fassetten , die zur Begrenzung der erlaubten Werte vom Primitivtypen eingesetzt werden können. Nicht alle Fassetten können auf alle Typen angewendet werden. Eine Übersicht zur Anwendbarkeit findet sich in Anhang B von XML Schema Part 0: Primer .

Reguläre Ausdrücke

Ein Regulärer Ausdruck ist eine Syntax, die eine Menge von Zeichenketten beschreibt.

Reguläre Ausdrücke - Quantoren

Quantoren steuern die Auftrittshäufigkeit von sog. atomaren Einheiten (Zeichen, Zeichenklasse, Regulärer Ausdruck).

Quantifizierte atomare Einheit Bedeutung
S Genau S : Alle Zeichenketten, die S genau entsprechen.
S? Optional : Die leere Zeichenkette oder alle Zeichenketten, die S genau entsprechen.
S* Beliebig : Alle Reihungen von S ; insbesondere auch auch die leere Zeichenkette.
S+ Mindestens einmal : Alle Reihungen von S , die S mindestens einmal enthalten.
S{n,m} n bis m mal : Alle Zeichenketten, die aus mindestens n , jedoch höchstens m Auftreten von S bestehen.
S{n} Genau n mal : Alle Zeichenketten, die aus genau n Auftreten von S bestehen.
S{n,} Mindestens n mal : Alle Zeichenketten, die aus mindestens n Auftreten von S bestehen.
S{0,m} Höchstens m mal : Alle Zeichenketten, die aus höchstens m Auftreten von S bestehen.
S{0,0} Die leere Zeichenkette

Reguläre Ausdrücke - Beispiele für Quantoren

Ausdruck entsprechende Zeichenketten
a*x x, ax, aax, aaax ....
a?x ax, x
a+x ax, aax, aaax ...
(a|b)+x ax, bx, aax, abx, bax, bbx, aaax, aabx, abax, abbx, baax, babx, bbax, bbbx, aaaax ....
[abcde]x ax, bx, cx, dx, ex
[a-e]x ax, bx, cx, dx, ex
[-ae]x -x, ax, ex
[ae-]x ax, ex, -x
[^0-9]x Jedes Zeichen, das keine Ziffer darstellt, gefolgt von dem Buchstaben x.
.x Jedes Zeichen gefolgt von dem Buchstaben x.
.*abc.* 1x2abc, abc1x2, z3456abchooray ....
ab{2}x abbx
ab{2,4}x abbx, abbbx, abbbbx
ab{2,}x abbx, abbbx, abbbbx ....
(ab){2}x ababx

Reguläre Ausdrücke - Fluchtsymbole

Ein Fluchtsymbol (engl.: character escape ) in regulären Ausdrücken dient der Darstellung von Zeichen, die anderweitig nur schwer oder unmöglich in einen regulären Ausdruck schreiben kann (weil sie mit Bedeutung belegt sind oder praktisch schwer zu schreiben sind wie etwa Zeilenumbrüche, Zeilenvorschub oder Tabulatoren). Diese sind in Teilen aus den Programmiersprachen bekannt.

Fluchtsymbol dadurch ausgedrücktes Zeichen
\n Das Zeichen für Zeilenumbruch ( #xA ).
\r Das Zeichen für Zeilenvorschub ( #xD ).
\t Das Tabulator-Zeichen ( #x9 ).
\\ \
\| |
\. .
\- -
\^ ^
\? ?
\* *
\+ +
\{ {
\} }
\( (
\) )
\[ [
\] ]

Reguläre Ausdrücke - Zeichenklassen

Verschiedene Zeichen mit ähnlichen Eigenschaften werden im XML Schema zu Zeichenklassen gruppiert. Diese Zeichen können so in ihrer Gesamtheit durch die Verwendung der sie bezeichnenden Symbole in den regulären Ausdrücken verwendet werden.
So bezeichnet die Angabe der Zeichenklasse \p{X} alle Zeichen aus X. Diese Angaben können durch \P{X} invertiert werden. ( [\P{X}] = [^\p{X}] ).

Reguläre Ausdrücke - Negation und Zeichensequenzen

Reguläre Ausdrücke - Beispiele

XML Schema - Attributdefinitionen

XMl Schema am Beispiel - Attributdefinitionen

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
 <xsd:attribute name="myAtt1"/>
 <xsd:attribute name="myAtt2" type="xsd:decimal"/>
 <xsd:attribute name="myAtt3">
  <xsd:simpleType>
   <xsd:restriction base="xsd:int">
    <xsd:minInclusive value="10"/>
    <xsd:maxInclusive value="20"/>
   </xsd:restriction>
  </xsd:simpleType>
 </xsd:attribute>
 <xsd:simpleType name="myType1">
  <xsd:restriction base="xsd:string">
   <xsd:maxLength value="5"/>
  </xsd:restriction>
 </xsd:simpleType>
 <xsd:attribute name="myAtt4" type="myType1"/>
 <xsd:element name="foo">
  <xsd:complexType>
   <xsd:attribute ref="myAtt1" use="optional"/>
   <xsd:attribute ref="myAtt2" use="required"/>
   <xsd:attribute ref="myAtt3" use="prohibited"/>
   <xsd:attribute ref="myAtt4"/>
   <xsd:attribute name="myAtt5" type="xsd:date" id="myDate"/>
   <xsd:attribute name="myAtt6">
    <xsd:simpleType>
     <xsd:restriction base="xsd:float">
      <xsd:totalDigits value="5"/>
     </xsd:restriction>
    </xsd:simpleType>
   </xsd:attribute>
  </xsd:complexType>
 </xsd:element> 
 <xsd:element name="bar">
   <xsd:complexType>
     <xsd:attribute ref="myAtt1" use="required"/>
   </xsd:complexType>
 </xsd:element>
</xsd:schema>

XML Schema am Beispiel - komplettes Schema der Projektverwaltung

Das vollständige Schema für das Beispiel Projektverwaltung ist hier aufgeführt.

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
 <xsd:element name="Nachname" type="xsd:string"/>
 <xsd:complexType name="PersonType">
  <xsd:sequence>
   <xsd:element ref="Vorname" maxOccurs="unbounded"/>
   <xsd:element ref="Nachname" maxOccurs="unbounded"/>
   <xsd:element name="Qualifikationsprofil" type="QualifikationsprofilType" minOccurs="0"/>
  </xsd:sequence>
  <xsd:attribute name="PersID" type="xsd:ID" use="required"/>
  <xsd:attribute name="Gehaltsgruppe" default="1a">
   <xsd:simpleType>
    <xsd:restriction base="xsd:NMTOKEN">
     <xsd:enumeration value="1"/>
     <xsd:enumeration value="1a"/>
     <xsd:enumeration value="2"/>
    </xsd:restriction>
   </xsd:simpleType>
  </xsd:attribute>
  <xsd:attribute name="mitarbeitInProjekt" type="xsd:IDREFS" use="required"/>
 </xsd:complexType>
 <xsd:complexType name="ProjektType">
  <xsd:attribute name="ID" type="xsd:ID" use="required"/>
  <xsd:attribute name="date" type="xsd:date"/>
  <xsd:attribute name="budget" default="10000.00">
   <xsd:simpleType>
    <xsd:restriction base="xsd:double">
     <xsd:fractionDigits value="2"/>
    </xsd:restriction>
   </xsd:simpleType>
  </xsd:attribute>
  <xsd:attribute name="Projektleiter" type="xsd:IDREF" use="required"/>
  <xsd:attribute name="Mitarbeiter" type="xsd:IDREFS" use="required"/>
 </xsd:complexType>
 <xsd:element name="ProjektVerwaltung">
  <xsd:complexType>
   <xsd:sequence>
    <xsd:element name="Person" type="PersonType" maxOccurs="unbounded"/>
    <xsd:element name="Projekt" type="ProjektType" maxOccurs="unbounded"/>
   </xsd:sequence>
   <xsd:attribute name="version" type="xsd:string" fixed="1.0"/>
  </xsd:complexType>
 </xsd:element>
 <xsd:complexType name="QualifikationsprofilType" mixed="true">
  <xsd:choice minOccurs="0" maxOccurs="unbounded">
   <xsd:element ref="Qualifikation"/>
   <xsd:element ref="Leistungsstufe"/>
   <xsd:any namespace="http://www.w3.org/1999/xhtml"/>
  </xsd:choice>
 </xsd:complexType>
 <xsd:element name="Qualifikation" type="xsd:string"/>
 <xsd:element name="Leistungsstufe" type="xsd:string"/>
 <xsd:element name="Vorname" type="xsd:string"/>
</xsd:schema>

XML Schema am Beispiel - schemakonformes Instanzdokument der Projektverwaltung

Abschließend eine gültige (sowohl valid als auch schema valid) Dokumentinstanz der Projektverwaltungsstruktur.

<?xml version="1.0" encoding="ISO-8859-1"?>
<ProjektVerwaltung xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.barbara-zengler.de/vorlesung/projektverwaltung.xsd">
 <Person PersID="Pers01" mitarbeitInProjekt="Prj01">
  <Vorname>Hans</Vorname>
  <Nachname>Hinterhuber</Nachname>
 </Person>
 <Person PersID="Pers02" mitarbeitInProjekt="Prj02">
  <Vorname>Franz</Vorname>
  <Vorname>Xaver</Vorname>
  <Nachname>Obermüller</Nachname>
  <Qualifikationsprofil>
     IT-Kompetenz verschiedene Betriebssysteme und <Leistungsstufe>professionelle</Leistungsstufe>
   <Qualifikation>Programmierung</Qualifikation> verschiedener Programmiersprachen
     <Qualifikation>Entwickler</Qualifikation> von 1988-1990
     <Qualifikation>Projektleiterfunktion</Qualifikation> von 1990-93 im X42-Projekt in Abteilung AB&amp;C
   </Qualifikationsprofil>
 </Person>
 <Person PersID="Pers03" mitarbeitInProjekt="Prj02">
  <Vorname>Fritz</Vorname>
  <Nachname>Meier</Nachname>
 </Person>
 <Projekt ID="Prj01" Projektleiter="Pers01" Mitarbeiter="Pers01"/>
 <Projekt ID="Prj02" Projektleiter="Pers02" Mitarbeiter="Pers03"/>
</ProjektVerwaltung>

XML Schema - Tools

Mittlerweile existieren eine Reihe von Werkzeugen, mit deren Hilfe XML-Schemata (grafisch) erstellt und gepflegt werden können. Eine kleine Auswahl finden Sie hier versammelt.

XML Schema - Übungsaufgabe

Erstellen Sie ein Schema, das die folgenden Bedingungen abbildet.