Wiederholung¶

Lernziel¶
Die wiederholte Eingabe eines Kindelementes wird definiert.
Handlungsanweisungen¶
- Aufgaben
Erweitern Sie das Schema aus der vorherigen Station
Fügen Sie ein zweites Element adresse ein.
Die DTD als Vorlage¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | <?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT adressdb (adresse+)>
<!ENTITY % sichtbarkeit "einsicht (privat|public|proteced) #REQUIRED">
<!ELEMENT adresse (anrede, name, strasse, postanschrift, email?, bild)>
<!ELEMENT anrede (#PCDATA)>
<!ELEMENT name (nachname, vorname)>
<!ELEMENT postanschrift (plz, wohnort)>
<!ELEMENT nachname (#PCDATA)>
<!ELEMENT vorname (#PCDATA)>
<!ELEMENT plz (#PCDATA)>
<!ELEMENT wohnort (#PCDATA)>
<!ELEMENT strasse (#PCDATA) >
<!ELEMENT email (#PCDATA)>
<!ATTLIST strasse %sichtbarkeit;>
<!ATTLIST postanschrift land
(Deutschland | Schweiz | Oesterreich) #REQUIRED %sichtbarkeit; >
<!ATTLIST adresse nr CDATA #REQUIRED>
<!ELEMENT bild EMPTY>
<!ATTLIST bild bezeichnung CDATA #REQUIRED>
<!ENTITY email_default "keine E-Mail angegeben" %sichtbarkeit; >
|
Kind-Element in der DTD¶
<!ELEMENT adressdb (adresse+)>
ComplexType als Container¶
1 2 3 4 5 6 7 8 9 10 11 | <?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="adressdb">
<xs:complexType>
<xs:sequence>
<xs:element ref="adresse" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="adresse"/>
</xs:schema>
|
Mit dem neuen Konstrukt werden gleich mehrere Dinge gesteuert:
Die Kombination complexType und sequence erlauben das Zusammenfügen unterschiedlichster Elemente.
Mit ref=“adresse“ referenzieren wir das adress-Element und damit wird addressdb wieder zum Root-Element
mit maxOccurs wird die Entsprechung des Wiederholungzeichen (+) in einer DTD umgesetzt. Es ist nun definiert, dass beliebig viele Elemente adressen in der adressdb untergebracht werden können.
Das fertige XML-Dokument¶
<?xml version="1.0" encoding="UTF-8"?>
<adressdb xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="art03.xsd">
<adresse />
<adresse />
</adressdb>