Demo: Schema – Attribute

Lernziel

Die Attribute für Elemente definieren.

Handlungsanweisungen

Aufgaben
  1. Erweitern Sie das Schema aus der vorherigen Station

  2. Erstellen Sie das Attribut einsicht und weisen Sie dieses den Elementen postanschrift und strasse zu.

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; >

Attribute definieren

Attribut einsicht definieren und den Elementen postanschrift und strasse zuordnen.

 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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="adressdb">
    <xs:annotation>
      <xs:documentation>Meine Adressammlung</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="adresse" minOccurs="1" maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="adresse">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="anrede" minOccurs="1"/>
        <xs:element ref="name" minOccurs="1"/>
        <xs:element ref="strasse" minOccurs="1"/>
        <xs:element ref="postanschrift" minOccurs="1"/>
        <xs:element ref="email" minOccurs="0"/>
        <xs:element ref="bild" minOccurs="1"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="anrede" type="xs:string"/>
  <xs:element name="name">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="nachname"/>
        <xs:element ref="vorname"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
 <xs:element name="postanschrift">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="plz"/>
        <xs:element ref="wohnort"/>
      </xs:sequence>
      <xs:attribute name="land" use="required">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:enumeration value="Deutschland"/>
            <xs:enumeration value="Schweiz"/>
            <xs:enumeration value="Östereich"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
      <xs:attribute ref="einsicht" use="required"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="strasse">
    <xs:complexType>
      <xs:attribute ref="einsicht"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="email" type="xs:string"/>
  <xs:element name="bild" type="xs:string"/>
  <xs:element name="nachname" type="xs:string"/>
  <xs:element name="vorname" type="xs:string"/>
  <xs:attribute name="einsicht">
    <xs:simpleType>
      <xs:restriction base="xs:string">
        <xs:enumeration value="privat"/>
        <xs:enumeration value="public"/>
      </xs:restriction>
    </xs:simpleType>
  </xs:attribute>
</xs:schema>

Das fertige XML-Dokument

<adressdb xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                xsi:noNamespaceSchemaLocation="artikel05.xsd">
   <adresse>
    <anrede/>
    <name>
      <nachname/>
      <vorname/>
    </name>
    <strasse einsicht="privat"/>
    <postanschrift einsicht="privat" land="Deutschland">
      <plz/>
      <wohnort/>
    </postanschrift>
    <email/>
    <bild/>
  </adresse>
</adressdb>