Übungserie 1: XML-Grundbegriffe 

Theoretische Grundlagen der Informatik, WS 02/03

Musterlösung 

Autor: Marcel Liebi

Aufgabe 1 (Struktur eines XML-Dokuments)

Zeichnen Sie die Baumstruktur des folgenden XML-Dokuments:

<?xml version="1.0"?>
<ATOM>
<ID><NAME>Actinium</NAME>
<SYMBOL>Ac</SYMBOL>
<ATOMIC_NUMBER>89</ATOMIC_NUMBER></ID>
<PHYSICAL_DATA>
<ATOMIC_WEIGHT>227</ATOMIC_WEIGHT>
<BOILING_POINT UNITS="Kelvin">3470</BOILING_POINT>
<DENSITY UNITS="grams/cubic centimeter"> <!-- At 300K -->
10.07
</DENSITY> </PHYSICAL_DATA>
<OXIDATION_STATES>3</OXIDATION_STATES>
<ATOMIC_DATA><ATOMIC_RADIUS UNITS="Angstroms">1.88</ATOMIC_RADIUS>
<ATOMIC_VOLUME UNITS="cubic centimeters/mole">22.5</ATOMIC_VOLUME> <ELECTRON>
<ELECTRON_CONFIGURATION>[Rn] 6d1 7s2</ELECTRON_CONFIGURATION>
<ELECTRONEGATIVITY>1.1</ELECTRONEGATIVITY> </ELECTRON></ATOMIC_DATA>
<IONIZATION_POTENTIAL>5.17</IONIZATION_POTENTIAL>
</ATOM>

 

Atom
--> Id
      --> Name
            --> Wert = Actinium
      --> Symbol
            --> Wert = Ac
      --> Atomic_Number
            --> Wert = 89
-->Physical_Data
      --> Atomic_Weight
            --> Wert = 227
      --> Boiling_Point
            --> Attribut Units
                  --> Wert = Kelvin
            --> Wert = 3470
      --> Density
            --> Attribut Units
                  --> Wert = grams/cubic centimeter
            --> Wert = 10.07
--> Oxidation_States
      --> Wert = 3
--> Atomic_Data
      --> Atomic_Radius
            --> Attribut Units
                  --> Wert = Angstorms
            --> Wert = 1.88
      --> Atomic_Volume
     
      --> Attribut Units
                  --> Wert = cubic centimeters/mole
            --> Wert = 22.5
      --> Electron
            --> Electron_Configuration
                  --> Wert = [Rn] 6dl 7s2
            --> Electronegravity
                  --> Wert = 1.1
--> Ionizatzion_Potential
      --> Wert = 5.17

 

Aufgabe 2 (Elemente und Attribute)

Banken gruppieren die Daten eines Kunden oft unter einem sogenannten Stammkonto, welchem verschiedene "Objekte" (Depot, Konto, Hypothek, etc.) zugeordnet werden können. Schreiben Sie ein gültiges XML-File, welche folgende Kundeninformationen speichert:

Beachten Sie, welche Information als Element bzw. als Attribut gespeichert werden soll. Begründen Sie jeweils Ihre Implementierung.

<?xml version="1.0"?>
<!DOCTYPE Stammkonto [
 <!ENTITY % Kontoinformationen "Kontonummer, Saldo, Transaktion*" >
 <!ENTITY % PersonInfo "Name, Vorname, Adresse, Nationalität" >

 <!ELEMENT Stammkonto (Stammkontonummer, Kundendaten, Identifikationsmethode, KundenberaterName, KontenListe, PersonenMitVollmacht, Dauerauftrag*) >
 <!ELEMENT Stammkontonummer (#PCDATA) >
 <!ELEMENT Identifikationsmethode EMPTY >
 <!ATTLIST Identifikationsmethode
       Id_Methode        (Pass | ID-Karte | Führerschein)  #REQUIRED
       Angestellter_Id  CDATA                                          #REQUIRED>
 <!ELEMENT KundenberaterName (#PCDATA) >
 <!ELEMENT KontenListe (Depotkonto?, Bankkonto*, Hypothek*) >
 <!ELEMENT PersonenMitVollmacht (VollmachtsPerson*) >
 <!ELEMENT Dauerauftrag EMPTY >
 <!ATTLIST Dauerauftrag 
       Begünstigtenname   CDATA                                                    #REQUIRED
       Kontonummer           CDATA                                                    #REQUIRED
       Betrag                         CDATA                                                    #REQUIRED
       Periodizität                 (täglich, monatlich, vierteljährlich, jährlich)   #REQUIRED
       ErsteAusführung      CDATA                                                     #IMPLIED
       LetzteAusführung    CDATA                                                     #IMPLIED
  >

<--! Kundendaten -->
 <!ELEMENT Kundendaten     (%PersonInfo, Geburtsdatum, Telefonnummer, email) >
 <!ELEMENT Geburtsdatum    (#PCDATA) >
 <!ELEMENT Telefonnummer  (Tel_Privat?, Tel_Geschäft?, Tel_Mobile?) >
 <!ELEMENT Tel_Privat           (#PCDATA) >
 <!ELEMENT Tel_Geschäft      (#PCDATA) >
 <!ELEMENT Tel_Mobile         (#PCDATA) >
 <!ELEMENT email                     (#PCDATA) >

 <--! Kontoinformationen -->
 <!ELEMENT Kontonummer     (#PCDATA) >
 <!ELEMENT Saldo                    (#PCDATA) >
 <!ELEMENT Transaktion         (Datum, Betrag, BeteiligtesKonto) >
 <!ATTLIST Transaktion 
       transaktionsart (Einzahlung, Auszahlung, Dauerauftrag) #REQUIRED
 >
 <!ELEMENT Trans_Datum                     (#PCDATA) >
 <!ELEMENT Trans_Betrag                     (#PCDATA) >
 <!ELEMENT Trans_BeteiligtesKonto   (#PCDATA) >

 <--! PersonInfo -->
 <!ELEMENT Name            (#PCDATA) >
 <!ELEMENT Vorname      (#PCDATA) >
 <!ELEMENT Adresse       (#PCDATA) >
 <!ELEMENT Nationalität (#PCDATA) >

<--! Kontotypen -->
 <!ELEMENT Depotkonto (%KontoInformationen) >
 <!ELEMENT Bankkonto   (%Kontoinformationen) >
 <!ELEMENT Hypothek     (%Kontoinformationen) >

<--! Person mit Vollmacht -->
 <!ELEMENT VollmachtsPerson (%PersonInfo) >
]>

<Stammkonto>
  <Stammkontonummer>12-3456-78</Stammkontonummer>
  <Kundendaten>
    <Name>Muster</Name>
    <Vorname>Hans</Vorname>
    <Adresse>Bahnhofstrasse 123, 8640 Rapperswil</Adresse>
    <Nationalität>CH</Nationalität>
    <Geburtsdatum>16.04.1944</Geburtsdatum>
    <Telefonnummer>
      <Privat>055 123 45 67</Privat>
    </Telefonnummer>
    <email>hmuster@world.com</email>
  </Kundendaten>
  <Identifikationsmethode Id_Methode="Pass" Angestellter_Id="987654"></Identifikationsmethode>
  <KundenberaterName>Jakob Müller</KundenberaterName>
  <KontenListe>
    <Bankkonto>
      <Kontonummer>12-3456-78-9</Kontonummer>
      <Saldo>-2876.30</Saldo>
      <Transaktion transaktionsart="Auszahlung">
        <Trans_Datum>31.12.1999</Trans_Datum>
        <Trans_Betrag>3000.00</Trans_Betrag>
        <Trans_BeteiligtesKonto>01-4567-89</Trans_BeteiligtesKonto>
      </Transaktion>
    </Bankkonto>
  </KontenListe>
  <PersonenMitVollmacht>
    <VollmachtsPerson>
      <Name>Muster</Name>
      <Vorname>Josefine</Vorname>
      <Adresse>Bahnhofstrasse 123, 8640 Rapperswil</Adresse>
      <Nationalität>CH</Nationalität>
    </VollmachtsPerson>
    <VollmachtsPerson>
      <Name>Muster</Name>
      <Vorname>Peter</Vorname>
      <Adresse>Bahnhofstrasse 123, 8640 Rapperswil</Adresse>
      <Nationalität>CH</Nationalität>
    </VollmachtsPerson>
  </PersonenMitVollmacht>
  <Dauerauftrag Begünstigtenname="Peter Schweizer" Kontonummer="65-64556-78" Betrag="22.65" Periodizität="jährlich" ErsteAusführung="01.01.2003" LetzteAusführung="01.01.2004" />
</Stammkonto>

Zeichnen Sie die Baumstruktur Ihres Dokuments

<--! Werte werden aus Gründen der Übersichtlichkeit nicht angezeigt -->
Stammkonto
--> Stammkontonummer
--> Kundendaten
    --> Name
    --> Vorname
    --> Adresse
    --> Nationalität
    --> Geburtsdatum
    --> Telefonnummer
          --> Privat
          --> Geschäft
          --> Mobile
    --> email
--> Identifikationsmethode
    --> Attribut Id_Methode
    --> Attribut Angestellter_Id
--> KundenberaterName
--> KontenListe
    --> Bankkonto
          --> Kontonummer
          --> Saldo
          --> Transaktion
              --> Attribut Auszahlung
              --> Trans_Datum
              --> Trans_Betrag
              --> Trans_BeteiligtesKonto
--> PersonenMitVollmacht
    --> VollmachtsPerson
          --> Name
          --> Vorname
          --> Adresse
          --> Nationalität
    --> VollmachtsPerson
          --> Name
          --> Vorname
          --> Adresse
          --> Nationalität
--> Dauerauftrag
    --> Attribut Begünstigtenname
    --> Attribut Kontonummer
    --> Attribut Betrag
    --> Attribut Periodizität
    --> Attribut ErsteAusführung
    --> Attribut LetzteAusführung

 

Aufgabe 3 (HTML und XML)

Nennen Sie fünf wichtige Unterschiede zwischen XML und HTML.

  • XML ist designed um Daten zu beschreiben
  • XML ist für eine strukturierte Datenhaltung gedacht
  • HTML beschreibt wie die Daten auszusehen haben
  • XML ist nicht designed um Aktionen auszuführen
  • XML Tags sind nicht vordefiniert
  • Mit XML können Daten vom HTML getrennt werden
  • HTML: Limitation auf ca. 100 Tags
  • XML ist case-sensitive
  • XML akzeptiert nicht den Start-Tag allein für leere Elemente
  • XML: Attributwerte stehen immer in Anführungszeichen
  • XML: Start-Tag muss immer ein entsprechendes End-Tag haben
  • XML weist dem IMG-Tag und seinen Attributen keine spezielle Bedeutung zu, im Gegensatz zu HTML

 

Aufgabe 4 (W3C-Standards)

Besuchen Sie die Website der W3C, wo die XML 1.0-Spezifikationen veröffentlicht sind.  Erklären auf der Basis dieser Spezifikationen, wie der "Ampersand"-Charakter & in einem XML-Dokument angegeben werden soll, wenn er nicht als 'Steuerzeichen' dienen soll.

"&amp;"

Der Standard ist unter http://www.w3.org/TR/REC-xml abrufbar. Im Abschnitt 2.4 steht die Antwort: "The ampersand character (&) [..] may appear in their literal form only when used as markup delimiters, or within a comment, a processing instruction, or a CDATA section. If [..][it is] needed elsewhere, [..][it] must be escaped using either numeric character references or the strings "&amp;".[..] Definition: A character reference refers to a specific character in the ISO/IEC 10646 character set, for example one not directly accessible from available input devices.]"

 

Aufgabe 5 (BNF, für die Studenten vom 3. Semester)

Überprüfen Sie die Wohlgeformtheit der folgenden XML-Zeile mit Hilfe der BNF-Beschreibung von XML, wie sie in der Version 1.0 der Spezifikationen angegeben ist (siehe auch E. Harold, W. Means, XML in a Nutshell, s. 366 ff):

<Name Geburtsjahr="1980">Dupont</Name>

 Beschreiben Sie die einzelnen Schritte der Überprüfung.

Aufgabe 6 (Parser, für Studenten vom 3. Semester)

Schreiben Sie einen XML-Parser in Java, welcher die Wohlgeformtheit von einfachen XML-Dokumenten überprüft. Ihr Parser muss folgendes kontrollieren:
1) Das Dokument fängt mit einer gültigen XML-Deklaration an
2) Jedem Start Tag entspricht ein End-Tag, ausser wenn es ein Leerelement-Tag ist
3) Es gibt keine überlappende Elemente

xml_validation.java