Aufgabe
  | 
       
Entwicklung einer Abstrakten Syntax und einer Klassenstruktur
für eine Datenstruktur zur Verarbeitung von XML/HTML-Dokumenten
  | 
  |  | 
     
     
       Aufgabenbeschreibung
  | 
       
         | 
     
     
        | 
       
ein XML/HTML-Dokument besteht aus normalem Text und Elementen
  | 
  |  | 
     
     
        | 
       
normaler Text: ASCII-Zeichen und 
 Ersatzsequenzen für Sonderzeichen,
&<name>; oder &#<zahl>; 
Beispiel: < für <, ! für !
  | 
  |  | 
     
     
        | 
       
Elemente bestehen aus tags und einem Inhalt (body)
  | 
  |  | 
     
     
        | 
       
tags sind in < und > geklammert 
Beispiel: <body ...>
 
 Groß- und Kleinschreibung
ist signifikant 
  | 
  |  | 
     
     
        | 
       
fast alle Elemente besitzt eine Start- und einen Ende-tag 
Beispiel: <p>, <P>
  | 
  |  | 
     
     
        | 
       
Ende-tags besitzen den gleichen Namen mit
mit vorangestelltem / 
Beispiel: <head> und </head>
  | 
  |  | 
     
     
        | 
       
tags können zusätzliche Attribute enthalten, 
 Attribute bestehen aus
 einfachen Namen oder Name-Wert-Paare, 
 bei Attributnamen
ist die Groß- und Kleinschreibung ebenfalls signifikant,
genauso wie bei den Werten. 
Ende-tags haben keine Attribute. 
Beispiel: <tag attr1 attr2=abc attr3="xyz uvw">
  | 
  |  | 
     
     
        | 
       
Kommentare können in den Text an beliebiger Stelle eingefügt werden, 
öffnende Klammer ist <!--, schließende Klammer --> 
Beispiel: xyz<!-- ein Kommentar -->123
  | 
  |  | 
     
     
       Ziel
  | 
       
         | 
     
     
        | 
       
eine abstrakte Syntax in Haskell
  | 
  |  | 
     
     
        | 
       
 und ein OMT-Diagramm für ein
 geeignetes Datenmodell
  | 
  |  | 
     
     
        | 
       
 einfache Beispiele für Verarbeitungsfunktionen: 
 Rücktransformation in einen normalen Text 
 Extraktion der reinen Textteile 
 Sammeln aller referenzierten URLs
  | 
  |  | 
     
     
        | 
       als abstrakte Syntax
         | 
     
     
        | 
       Implementierungs-Skizze
         |