Ein eigener Datentyp#
Lernziel#
Neben den eingebauten, können Sie eigene Datentypen definieren. Wie, wird hier gezeigt. Dafür gibt es in einer DTD keine vergleichbare Deklarationsmöglichkeit.
Handlungsanweisungen#
- Aufgaben:
Erweitern Sie das Schema aus der vorherigen Station
Die Werte für einen eigenen Datentyp können über Reguläre Ausdrücke sehr genau definiert werden.
Die DTD als Vorlage#
1<?xml version="1.0" encoding="UTF-8"?>
2<!ELEMENT adressdb (adresse+)>
3<!ENTITY % sichtbarkeit "einsicht (privat|public|proteced) #REQUIRED">
4<!ELEMENT adresse (anrede, name, strasse, postanschrift, email?, bild)>
5<!ELEMENT anrede (#PCDATA)>
6<!ELEMENT name (nachname, vorname)>
7<!ELEMENT postanschrift (plz, wohnort)>
8<!ELEMENT nachname (#PCDATA)>
9<!ELEMENT vorname (#PCDATA)>
10<!ELEMENT plz (#PCDATA)>
11<!ELEMENT wohnort (#PCDATA)>
12<!ELEMENT strasse (#PCDATA) >
13<!ELEMENT email (#PCDATA)>
14<!ATTLIST strasse %sichtbarkeit;>
15<!ATTLIST postanschrift land
16 (Deutschland | Schweiz | Oesterreich) #REQUIRED %sichtbarkeit; >
17<!ATTLIST adresse nr CDATA #REQUIRED>
18<!ELEMENT bild EMPTY>
19<!ATTLIST bild bezeichnung CDATA #REQUIRED>
20<!ENTITY email_default "keine E-Mail angegeben" %sichtbarkeit; >
Datentyp PLZ#
Eine Postleitzahl besteht aus maximal 5 Ziffern. Diese Regel soll in einem eigenen Datentyp definiert werden (Siehe Zeilen 54, 82-86).
1<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
2 <xs:element name="adressdb">
3 <xs:annotation>
4 <xs:documentation>Meine Adressammlung</xs:documentation>
5 </xs:annotation>
6 <xs:complexType>
7 <xs:sequence>
8 <xs:element ref="adresse" minOccurs="1" maxOccurs="unbounded"/>
9 </xs:sequence>
10 <xs:attribute ref="nr" use="required"/>
11 </xs:complexType>
12 </xs:element>
13 <xs:element name="adresse">
14 <xs:complexType>
15 <xs:sequence>
16 <xs:element ref="anrede" minOccurs="1"/>
17 <xs:element ref="name" minOccurs="1"/>
18 <xs:element ref="strasse" minOccurs="1"/>
19 <xs:element ref="postanschrift" minOccurs="1"/>
20 <xs:element ref="email" minOccurs="0"/>
21 <xs:element ref="bild" minOccurs="1"/>
22 </xs:sequence>
23 </xs:complexType>
24 </xs:element>
25 <xs:element name="anrede" type="xs:string"/>
26 <xs:element name="name">
27 <xs:complexType>
28 <xs:sequence>
29 <xs:element ref="nachname"/>
30 <xs:element ref="vorname"/>
31 <xs:element name="geburtstag" type="xs:date"/>
32 </xs:sequence>
33 </xs:complexType>
34 </xs:element>
35 <xs:element name="postanschrift">
36 <xs:complexType>
37 <xs:sequence>
38 <xs:element ref="plz"/>
39 <xs:element ref="wohnort"/>
40 </xs:sequence>
41 <xs:attribute name="land" use="required">
42 <xs:simpleType>
43 <xs:restriction base="xs:string">
44 <xs:enumeration value="Deutschland"/>
45 <xs:enumeration value="Schweiz"/>
46 <xs:enumeration value="Östereich"/>
47 </xs:restriction>
48 </xs:simpleType>
49 </xs:attribute>
50 <xs:attribute ref="einsicht" use="required"/>
51 </xs:complexType>
52 </xs:element>
53 <xs:element name="strasse">
54 <xs:element name="plz" type="plz-type"/>
55 <xs:element name="wohnort" type="xs:string"/>
56 <xs:element name="email" type="xs:string"/>
57 <xs:complexType>
58 <xs:attribute ref="einsicht"/>
59 </xs:complexType>
60 </xs:element>
61 <xs:element name="email" type="xs:string" default="Keine E-Mail angegeben"/>
62 <xs:element name="bild">
63 <xs:complexType>
64 <xs:attribute name="bildbezeichnung" use="required"/>
65 </xs:complexType>
66 </xs:element>
67 <xs:element name="nachname" type="xs:string"/>
68 <xs:element name="vorname" type="xs:string"/>
69 <xs:attribute name="einsicht">
70 <xs:simpleType>
71 <xs:restriction base="xs:string">
72 <xs:enumeration value="privat"/>
73 <xs:enumeration value="public"/>
74 </xs:restriction>
75 </xs:simpleType>
76 </xs:attribute>
77 <xs:attribute nr="nr">
78 <xs:simpleType>
79 <xs:restriction base="xs:positiveInteger"/>
80 </xs:simpleType>
81 </xs:attribute>
82 <xs:simpleType name="plz-type">
83 <xs:restriction base="xs:integer">
84 <xs:pattern value="[0-9]{5}"/>
85 </xs:restriction>
86 </xs:simpleType>
87</xs:schema>
Das fertige XML-Dokument#
<adressdb xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="artikel05.xsd">
<adresse nr='1'>
<anrede/>
<name>
<nachname/>
<vorname/>
</name>
<strasse einsicht="privat"/>
<postanschrift einsicht="privat" land="Deutschland">
<plz>14548</plz>
<wohnort/>
</postanschrift>
<email>Keine E-Mail angegeben</email>
<bild bildbezeichnung="testbild.jpg"></bild>
</adresse>
</adressdb>