\begin{slide}{Data mapping (Diskussion)}

grundsätzliche Aufgabe:

möglichst enge Beziehung herstellen

zwischen Baumstruktur des Datenmodells der Anwendung

und der Baumstruktur XML-Repräsentation \dots

\bigskip

in den Fällen, wo das geht. --- Wann geht es \emph{nicht}?
wenn Anwendungsdaten keine Bäume sind, sondern andere Graphen
(Relationen). 

\end{slide}


\begin{slide}{Data mapping für algebraische Datentypen}

Mathematik ($=$ Haskell):
\begin{verbatim}
data Tree a 
  = Leaf 
  | Node { key :: a, children :: [ Tree a ] }
\end{verbatim}

Java (naiv)
\begin{verbatim}
class Node<A> {
  A key ; Node<A> [] children ;
}
\end{verbatim}
  
Java (``richtig'')
\begin{verbatim}
interface Tree<A> { void insert (A x); ... }
class Leaf<A> implements Tree<A> { }
class Node<A> implements Tree<A> { }
\end{verbatim}

\end{slide}

\begin{slide}{Data mapping (II)}

Es gibt diese Begriffe/Beziehungen:
\begin{quote}
  Baum, Knoten, Schlüssel, Blatt, (linkes/rechtes) Kind.
\end{quote}
genauer z. B.:
\begin{quote}
  ein \emph{Knoten} ist ein nichtleerer \emph{Baum},
  der zwei Bäume \emph{besitzt}, die er \emph{Kinder} nennt.
\end{quote}

Das muß man auf XML-Struktur abbilden

(Diskussion Übungsaufgabe)

Es gibt (m. E., wie immer)
eine ausführliche Lösung und verkürzende Hacks.

Verkürzungen sind aber gar nicht nötig,
da das niemand von Hand machen sollte.

\end{slide}
