Schema: Reguläre Ausdrücke

Lernziel

Reguläre Ausdrücke sind eine entscheidende Erweiterung gegenüber DTDs, es wird möglich, Inhalte von Elemente zu prüfen. Denken Sie an die Struktur von Telefonnummern, eMail-Adressen oder Postleitzahlen.

Handlungsanweisungen

Aufgaben

1. Definieren Sie bitte für die Attribute telefonnummer und plz innerhalb der XSD-Datei mit regulären Ausdrücken.

  1. Die Telefonnummer sollte immer das Format „Vorwahl-Nummer“ haben.

  2. Die PLZ sollten genau 5 Zahlen enthalten.

Die beiden regulären Ausdrücke sind: für die PLZ:

[0-9]{5}

für die Telefonnummer:

[0-9]{3,6}-[0-9]{4,8}

Ein XML-Beispiel, welches die obigen Anforderungen erfüllt.

<?xml version="1.0" encoding="ISO-8859-1"?>
<reise-datenbank xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                 xsi:noNamespaceSchemaLocation="reise.xsd">
  <reise telefonnummer="0331-34723423" plz="12344">
    <veranstalter>Fahr-away</veranstalter>
    <ziel>Polen</ziel>
  </reise>
   <reise telefonnummer="0331-43723432" plz="14482">
    <veranstalter>BleibHier</veranstalter>
    <ziel>Deutschland</ziel>
  </reise>
</reise-datenbank>

Wie definieren wir Reguläre Ausdrücke?

In unserer XML-Datei befindet sich das Attribut format. Dieses enthält den Buchstaben a gefolgt von einer einstelligen Zahl. Also: a1, a2, a3, a4, a5 usw.

Nun sollten wir in unserer XSD-Datei prüfen, ob dieses Struktur auch wirklich eingehalten wird. Die Bezeichnungen ab, a11 oder a# sollten als Fehler gemeldet werden. Wie geht das nun? Wir definieren für das Attribut format einen Typ din_typ, der den Test enthalten soll.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
<?xml version="1.0" encoding="ISO-8859-1"?>
<artikel_db xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="artikel_db.xsd">
<artikel format="a4">
    <titel>Der Titel</titel>
    <autor>Heinz Becker</autor>
    <inhalt>Hier irgendein Inhalt.</inhalt>
  </artikel>
  <artikel format="a3">
    <titel>Tanzen</titel>
    <autor>Susanne Martens</autor>
    <inhalt>Hier irgendein Inhalt.</inhalt>
  </artikel>
</artikel_db>

Der Typ din_typ enthält die entscheidende Zeile:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="artikel_db" type="artikel_db_type"/>
  <xs:complexType name="artikel_db_type">
    <xs:sequence>
      <xs:element name="artikel" type="artikel_typ"
        minOccurs="1" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="artikel_typ">
    <xs:sequence>
      <xs:element name="titel" type="xs:string"/>
      <xs:element name="autor" type="xs:string"/>
      <xs:element name="inhalt" type="xs:string"/>
    </xs:sequence>
    <xs:attribute name="format" type="din_typ"/>
  </xs:complexType>

  <xs:simpleType name="din_typ">
    <xs:restriction base="xs:string">
   <xs:pattern value="a[0-9]"/>
    </xs:restriction>
  </xs:simpleType>

</xs:schema>

Der Reguläre Ausdruck prüft, ob dem a eine beliebige Zahl zwischen 0 und 9 folgt.

Den Inhalt von Elementen prüfen

Nun lernen Sie, wie Sie den Inhalt von Elementen mit regulären Ausdrücken prüfen können. Im Element autor sollen folgende Zeichen zugelassen werden:
  • Buchstaben

  • Leerzeichen

  • Bindestrich

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="artikel_db" type="artikel_db_type"/>
  <xs:complexType name="artikel_db_type">
    <xs:sequence>
      <xs:element name="artikel" type="artikel_typ"
        minOccurs="1" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="artikel_typ">
    <xs:sequence>
      <xs:element name="titel" type="xs:string"/>
      <xs:element name="autor" type="nur_text"/>
      <xs:element name="inhalt" type="xs:string"/>
    </xs:sequence>
    <xs:attribute name="format" type="din_typ"/>
  </xs:complexType>

  <xs:simpleType name="din_typ">
    <xs:restriction base="xs:string">
      <xs:pattern value="a[0-9]"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="nur_text">
    <xs:restriction base="xs:string">
      <xs:pattern value="[a-zA-Z -]{1,}"/>
    </xs:restriction>
  </xs:simpleType>

</xs:schema>

Durch hervogehobenen Zeilen wird die Typ-Regel durchgesetzt. Die Elemente des Regurären Ausdruck bedeuten:

Regulärere Ausdruck

Kommentar

[a-zA-Z -]

Alle Buchstaben (groß und klein), Leerzeichen und der Bindestrich

{1,40}

Minimal ein Zeichen, maximal 40

{1,}

Minimal ein Zeichen, maximal: unendlich