
\section{Erzeugung von Hypertext}
Die Erzeugung von Hypertext f"ur eine Visualisierungstechnologie gliedert sich
in zwei Teile. Die Bezugsinformationen, die zus"atzlich zu den
\emph{TL}-Programmbe-schreibungen in expliziter Form ben"otigt werden, m"ussen
aus den Programmbeschreibungen extrahiert werden. Die Programmbeschreibungen
sollen so ver"andert werden, da\ss\ sie als Verweise markierte Textstellen
beinhalten. Diese Verweise sollen Textstellen anderer Programmbeschreibungen,
gem"a\ss\ der Bezugsinformationen, referenzieren.

Die Trennung zwischen der Erzeugung von Hypertext und der Extrahierung von
Bezugsinformationen erlaubt es, Hypertext f"ur verschiedene
Visualisierungstechnologien zu generieren.

Der in diesem Zusammenhang ver"anderte "Ubersetzer erzeugt w"ahrend des
"Ubersetzens zu jeder \emph{TL}-Programmbeschreibung eine Menge von
Bezugsinformationen. Diese Vorgehensweise scheint auch im Hinblick auf zuk"unftige
Erg"anzungen des \emph{Tycoon}-Systems bez"uglich der Programmbeschreibungs- und
Objektdateiverwaltung sinnvoll. Programmbeschreibungen und Programmobjekte
sollen dann im \emph{Tycoon}-Objektspeicher abgelegt werden.

Themen dieses Kapitels sind die Erzeugung von Bezugsinformationen, die
Verwaltung von Bezugsinformationen in Dateien und die Erzeugung von Hypertext
aus \emph{TL}-Programmbeschreibungen und Bezugsinformationen.

\subsection{Die Verwaltung von Bezugsinformationen}
Die Bezugsinformationen, die der "Ubersetzer w"ahrend des "Ubersetzens
sammelt, werden vom Modul \emph{RefDB} als Textpositionsrelationen verwaltet
(vgl. Abschnitt \ref{kapBezugsinformationen}).
Diese Informationen
beschreiben jene Textpositionen der Programmbeschreibungen (in der Regel sind dies
Bezeichner), die andere Textpositionen referenzieren. F"ur jede "ubersetzte
Datei mit Programmbeschreibungen wird eine Datei mit Textpositionsrelationen
erzeugt. Beziehungen, die Textstellen unterschiedlicher Programmbeschreibungsdateien verbinden,
werden in den zugeh"origen Textpositionsrelationendateien gespeichert.

Die Schnittstelle des Verwaltungsmoduls f"ur Textpositionsrelationen gliedert sich in zwei
Kategorien:
\begin{itemize}
\item Funktionen zur Verwaltung von in Dateien gespeicherten Textpositionsrelationen

\item Funktionen zur Ermittlung von Informationen "uber Textpositionsrelationen

\end{itemize}

\subsubsection{Verwaltung von Dateien mit Textpositionsrelationen}
Textpositionsrelationen k"onnen in Dateien gespeichert werden. Die Namen der
vom "Ubersetzer erzeugten Dateien mit Textpositionsrelationen haben einen 
Bezug zu den Namen der \emph{TL}-Programmbeschreibungen, zu denen
diese Relationen generiert wurden. Sie werden genauso benannt
wie diese, erweitert um eine Extension (`.ddb').

Das Modul \emph{RefDB} stellt Funktionen zur Verf"ugung, um
Textpositionsrelationen in Dateien zu speichern und aus Dateien zu
lesen. Textpositionsrelationen k"onnen auch zur"uckgesetzt werden.

Da die Bezugsinformationen verteilt gespeichert werden sollen, d.h. eine
Textpositionsrelation f"ur jede Programmbeschreibung (vgl. Abschnitt
\ref{persSpeiBez}), kann es auch Beziehungen zwischen Textpositionsrelationen
geben. Um diese Beziehungen zu verwalten, wird eine Funktion ben"otigt, die
alle jene Tupel einer Relation l"oscht, die eine andere Relation
referenzieren. Eine weitere Funktion ermittelt alle abh"angigen Relationen
einer Relation. Mit Hilfe dieser beiden Funktionen ist es m"oglich, alle
Referenzen auf eine Textpositionsrelation zu l"oschen.

%\subsubsection{Eine implizite Textpositionsrelation}
%Das Modul \emph{RefDB} verwaltet eine implizite Textpositionsrelation. Auf
%diese Textpositionsrelation kann ohne Angabe einer Referenz zugegriffen
%werden. Die implizite Textpositionsrelation kann in einer Datei gespeichert
%oder zur"uckgesetzt werden. Es ist auch m"oglich Tupel hinzuzuf"ugen.
%
%Der "Ubersetzer ermittelt w"ahrend des "Ubersetzens Beziehungen zwischen
%Programmbeschreibungen. Diese Beziehungen werden in einer
%Textpositionsrelation gesammelt. W"urde eine explizite Textpositionsrelation
%verwendet, m"u\ss ten die Schnittstellen aller beteiligten Funktionen des
%"Ubersetzers um eine Textpositionsrelation als weiteren Parameter erg"anz
%werden. Um dies zu vermeiden wird die implizite Textpositionsrelation ben"otigt.

\subsubsection{Anfragen "uber Textpositionsrelationen}
Es ist m"oglich einfache Anfragen "uber Textpositionsrelationen zu stellen.
F"ur die Darstellung einer Programmbeschreibung als Hypertext werden alle jene
Textpositionen der Programmbeschreibung ben"otigt, die in Beziehung mit
Textpositionen dieser und anderer Programmbeschreibung stehen.
Hierf"ur gibt es eine Funktion, die alle referenzierten und alle referenzierenden
Textpositionen einer Programmbeschreibung ermittelt. Der Name der Funktion ist
\textit{getPos}.

Um eine Hypertextseite mit allen mit einer Textposition in Bezug stehenden
Textpositionen  zu
erstellen (vgl. Abschnitt \ref{erzWWW}),
werden alle diese Textposition referenzierden Textpositionen ben"otigt. 
Die Funktion \textit{queryPos} ermittelt alle diese Textpositionen.

\subsubsection{Aufbau der Verwaltungsdateien}
Um Textpositionsrelationen persistent zu machen, werden Dateien verwendet.
Eine Textpositionrelation ist eine bin"are Relation "uber einer Menge von
Textpositionen. Jedes Tupel einer Textpositionsrelation beinhaltet also zwei
Textpositionen. Eine Textposition einer Programmbeschreibungsdatei wird
beschrieben durch den Dateipfad sowie die Position innerhalb der Datei. Die
Position wird durch die Zeile und die Spalte ausgedr"uckt.

Ein Tupel einer Textpositionsrelation hat folgendes Aussehen:
\begin{verbatim}
[Dateipfad]\n[Zeile]\n[Spalte]\n
[Dateipfad]\n[Zeile]\n[Spalte]\n
\end{verbatim}

Es folgt ein Beispiel f"ur ein Tupel einer Textpositionsrelation:
\begin{verbatim}
/local/nse/teamware/tycoon/tycoon/tycoon/src/stdenv/Iter.ti \n 1 \n 11 \n
/local/tw1/ramme/tl/tycoon/src/refLib/RefDB.ti \n 7 \n 24 \n
\end{verbatim}

Im Beispiel wird das Wort in der ersten Zeile, in der elften Spalte der
Schnittstellenbeschreibung \emph{Iter.ti} durch das Wort in der siebten Zeile,
der vierundzwanzigsten Spalte der Schnittstellenbeschreibung \emph{RefDB.ti}
referenziert. Diese beiden Worte stehen in Beziehung miteinander.

\begin{figure}
  \centering{ \includegraphics*{ddb.eps}}
\caption{Ausz"uge eines Quelltextes und der zugeh"origen Textpositionsrelation}
\label{figDDB}
\end{figure}

\subsection{Modifikation des "Ubersetzers}

Da der \emph{TL}-"Ubersetzer die Textpositionsrelationen w"ahrend des
"Ubersetzens erzeugen soll (vgl. Abschnitt \ref{erzBez}), mu\ss ten an ihm
einige "Anderungen vorgenommen werden.

Der "Ubersetzer ermittelt referentielle Beziehungen zwischen Objekten
der zu "ubersetzenden Programmbeschreibungen. Diese referentiellen
Beziehungen werden innerhalb der Programmbeschreibungen mit Hilfe von
Bezeichern ausgedr"uckt. Um einem im Eingabestrom erkannten Bezeichner einem
anderen Bezeichner zuzuordnen, wird in einer Symboltabelle nach einem
Bezeichner mit gleichem Aussehen gesucht. Wird so ein Bezeichner gefunden, so
ist ein Bezug hergestellt. Bezeichner werden in die Symboltabelle bei einer
Deklaration bzw. Definition eingetragen.

Der "Ubersetzer wurde so ge"andert, da\ss\ er die erfolgreiche Zuordnung
zweier Bezeichner zueinander in eine Textpositionsrelation als Bezug eintr"agt.
\footnote{Eine Programmbeschreibung kann beliebig viele gleiche Bezeichner
  haben, zwei gleiche Bezeichner sind jedoch nie identisch} Diese
Textpositionsrelation beinhaltet also alle erfolgreich ermittelten 
Beziehungen zwischen Bezeichern.

Beschreibungen von Schnittstellen, Moduln und Bibliotheken werden in separaten
Dateien verwaltet. Der "Ubersetzer wurde dahingehend ge"andert, da\ss\ er bei
der "Offnung einer zu "ubersetzenden Datei die Textpositionsrelation, in der
er die Beziehungen der Bezeichner sammelt, zur"ucksetzt. 
%Nach erfolgreicher
%"Ubersetzung speichert der "Ubersetzer die Textpositionsrelation in einer
%Datei mit gleichem Namen, erweitert um ein Extension, wie die "ubersetzte Datei.

Das Ergebnis der Modifikationen am "Ubersetzer ist, da\ss\ der "Ubersetzer nun
zu jeder Schnittstellen-, Modul- oder Bibliotheksbeschreibung eine
Textpositionsrelation erzeugt.
  
\subsection{Modifikation von Programmbeschreibungen}
Die in der Programmiersprache \emph{TL} formulierten Programmbeschreibungen
des \emph{Tycoon}-Systems sollen in Hypertext konvertiert werden. Um dies zu
erreichen, m"ussen Teile der Programmbeschreibungen markiert werden. Eine
Textstelle wird markiert, indem sie eingeklammert wird. Die Art der Klammerung
bestimmt die Art der Markierung. 

Da Programmbeschreibungen durch die
Konvertierung ihre Formatierung nicht verlieren sollen, ist es n"otig, die
Menge der Textstellen, die Formatierungsanweisungen beinhalten, von der Menge
der Textstellen, die f"ur die Konvertierung relevant sind, zu trennen. 
Diese Trennung erlaubt es, Textstellen einer Programmbeschreibung ohne
Ver"anderung der Formatierung der Programmbeschreibung zu modifizieren. 

Das Modul \emph{Lines} erlaubt die Modifikation von Texten ohne Ver"anderung
der Formatierung.

%Die Funktionen des \emph{Lines}-Moduls gliedern sich in folgende Kategorien:
%\begin{itemize}
%\item Konvertierung von Zeichenketten in Lines-Objekte; Konvertierung von
%  Lines-Objekten in Zeichenketten.
%\item Abfragen und Setzen von nichtformatierungsrelevaten Zeichenketten.
%\item Abfragen und Setzen von formatierungsrelevanten Zeichenketten.
%\item Markieren von nichtformatierungsrelevanten Zeichenketten.
%\item Anfragen.
%\end{itemize}

\subsubsection{Lines-Objekte und Zeichenketten}
Texte sind Folgen von Zeichenketten. Formatierungsanweisungen innerhalb von
Zeichenketten werden durch Formatierungszeichen ausgedr"uckt. Um die
Formatierung eines Textes vom Inhalt zu trennen, wird der Text in eine Folge
von Zeichenketten zerlegt. Jedes Element der Folge beschreibt entweder einen
Teil der Formatierung oder einen Teil des Inhaltes des Textes. Die Folge ist
eine alternierende Folge von Formatierungszeichenketten und Inhaltszeichenketten.
Begrenzer, die Worte innerhalb von Zeichenketten trennen, sind
Formatierungszeichen.

\begin{figure}
  \centering{ \includegraphics*{lines.eps}}
\caption{Ein Lines-Objekt}
\label{figLines}
\end{figure}

Da innerhalb des \emph{TL}-"Ubersetzers zwischen zwei Arten von
Formatierungsanweisungen unterschieden wird (Leerzeichen, Zeilenr"ucklauf),
k"onnen bei der Konvertierung einer Zeichenkette in ein Lines-Objekt wahlweise
eine oder zwei Mengen mit Formatierungszeichen angegeben werden.
Werden zwei Mengen von Formatierungszeichen angegeben, so ist die
resultierende Folge eine alternierende Folge von Zeichenketten aus
Formatierungszeichen der einen Formatierungszeichenmenge und alternierenden
Folgen von Zeichenketten der anderen Formatierungszeichmenge und Zeichenketten
der Inhaltszeichenmenge. Abbildung \ref{figLines} zeigt ein solches Lines-Objekt.

Lines-Objekte k"onnen wieder in Zeichenketten konvertiert werden. Werden keine
Formatierungszeichen ver"andert, so hat die resultierende Zeichenkette die
gleiche Formatierung wie die urspr"ungliche.

\subsubsection{Setzen von Worten}
Ein Lines-Objekt ist eine alternierende Folge von Zeichenketten aus
Formatierungszeichen und Nichtformatierungszeichen. Diese Zeichenketten bilden
Worte. Lines-Objekte erlauben es, Worte abzufragen und zu setzen. Im Falle von
zwei Mengen von Formatierungszeichen sind die Nichtformatierungsworte des
Lines-Objektes wiederum Lines-Objekte. 

\subsubsection{Pr"a- und Postfixe}
Lines-Objekte erlauben es, f"ur Worte aus Nichtformatierungszeichen Pr"a- und
Postfixe zu setzen. Bei einer Konvertierung eines Lines-Objektes in eine
Zeichenkette werden diese vor bzw. hinter dem entsprechenden Wort eingef"ugt.
Dies erleichtert das Markieren von Textstellen.

\subsection{Die Erzeugung von HTML-Seiten} \label{erzWWW}
Die Erzeugung von HTML-Seiten wird im Modul \emph{QueryHTML} implementiert.

Jede Textposition einer Progammbeschreibung kann mit einer Menge von anderen
Textpositionen in Beziehung stehen. Eine Textpositionsrelation ist also eine \textbf{n}
zu \textbf{m} Relation. Eine als Verweis markierte Textposition einer nach HTML
konvertierten Programmbeschreibung kann also auf \textbf{n} andere
Textpositionen verweisen. Um dies visualisieren zu k"onnen, wird eine
Verweisseite eingef"uhrt, welche alle mit einer Textpositionsrelation in
Beziehung stehenden Textpositionen auflistet.

Die im Rahmen dieser Studienarbeit vom \emph{TL}-"Ubersetzer erzeugten
Textpositionsrelationen sind nur 1 zu \emph{n} Relationen, da nur Beziehungen
zwischen Bezeichnern beachtet werden. W"urden auch beziehungen zwischen Typen
analysiert werden, so erg"aben sich \emph{n} zu \emph{m} Relationen. Ein Typ
kann mit beliebig vielen anderen Typen in einer Subtypbeziehung stehen.

Es gibt also folgende Arten von HTML-Seiten:
\begin{itemize}
\item Seiten mit einer Liste aller Zeilen von nach HTML konvertierten
  Programmbeschreibungen, die Verweise auf eine
  Quelltextposition beinhalten (Verweisseiten; siehe Abb. \ref{picNet1}).

\item Nach HTML konvertierte Programmbeschreibungen. Die in Beziehung
  stehenden Textposition werden als Verweise auf Verweisseiten markiert (siehe
  Abbildung \ref{picNet2}).
\end{itemize}

\begin{figure}[htbp]
  \centering{\includegraphics*{net1.ps}}
\caption{Beispiel einer Verweisseite}
\label{picNet1}
\end{figure}

\begin{figure}[h]
  \centering{\includegraphics*{net2.ps}}
\caption{Beispiel einer Quelltextseite}
\label{picNet2}
\end{figure}


\subsubsection{Verweisseiten}
Eine Funktion des Moduls \emph{QueryHTML} erstellt HTML-Seiten mit Ausz"ugen aus 
Programmbeschreibungen, in denen eine angegebene Textposition referenziert wird.  Sortiert
werden diese Ausz"uge nach den Namen der zugeh"origen Programmbeschreibungen
und der jeweiligen Entfernung vom Anfang der Programmbeschreibung.

Als Hilfe f"ur die Erzeugung dieser Seiten mit referenzierenden Textstellen
verwendet diese Funktion eine HTML-Rahmenseite (vgl. Anhang \ref{appFrame}),
 in welcher jene Positionen markiert
sind, die durch Programmbeschreibungsausz"uge ersetzt werden sollen. Die Markierungen
werden durch spezielle Schl"usselworte kenntlich gemacht. Tabelle \ref{KeyTab}
zeigt die m"oglichen Schl"usselworte.


\begin{center}
\begin{table}[h]
\begin{tabular}{|l|l|}
  \hline Schl"usselwort & Beschreibung \\ \hline \#NAME\# & Wort an der
  referenzierenden Textposition \\ \#DEFINITION\# & Zeile der referenzierten
  Textposition \\ \#USAGE\# & Weitere Zeilen mit Referenzen auf dieselbe
  Textposition \\ \hline
\end{tabular}
\caption{Schl"usselworte der Rahmenseite}
\label{KeyTab}
\end{table}
\end{center}

Zeilen aus Programmbeschreibungen, die in der Verweisseite zu sehen sind,
werden vor ihrer Darstellung auch nach HTML konvertiert. Die Verweise
innerhalb dieser Zeilen verhalten sich wie die Verweise innerhalb der
zugeh"origen konvertierten Programmbeschreibung. Um die zugeh"orige
Programmbeschreibung direkt anspringen zu k"onnen, wird jede solche Zeile mit
einem Verweis auf die entsprechende Zeile der zur Programmbeschreibung
zugeh"origen HTML-Seite versehen.

\subsubsection{Quelltext als HTML}
Eine andere Funktion des Moduls \emph{QueryHTML} konvertiert eine
Programmbeschreibung nach HTML. Diese Funktion ermittelt zuerst alle jene
Textpositionen die in Beziehung mit anderen Textpositionen stehen. Die Worte
an diesen Textpositionen werden nun durch Verweise auf Verweisseiten
ersetzt. Die Verweisseiten listen alle mit dieser Textposition in Beziehung
stehenden Textposition auf (vgl. Abb. \ref{picNet2}).

\subsection{Das HTTP-Server Gateway}
Damit ein WWW-Client auf die in \emph{TL} implementierte Funktionalit"at zur
Erzeugung von HTML-Seiten zugreifen kann, wird ein CGI-Gateway ben"otigt. Dieses
Gateway stellt die Verbindung zwischen dem HTTP-Server und dem \emph{Tycoon}-Server her.
Das Gateway liest die Umgebungsvariablen aus und "ubergibt diese zusammen mit einer
Spezifikation des Servers und des Netzwerk-Ports an den TIP-Client
(vgl. Kapitel \ref{tipClient}). Die Adresse des Servers und die Nummer 
des Ports werden innerhalb des Gateways festgelegt (siehe Anhang
\ref{anhangGateway} und Abb. \ref{genKom}).

\subsection{Verwendung des Werkzeugs}
Um das w"ahrend dieser Studienarbeit implementierte System benutzen zu k"onnen,
fehlt noch eine Verbindungsfunktion, die die Funktionen des Moduls zur Erzeugung
von HTML (\textit{queryHTML}) mit dem \emph{TIP}-Server verbindet. Diese
Funktion (\textit{webService}) ist Teil des
\emph{TL}-Skriptes (\textit{setUp.tyc}), welches den \emph{TIP}-Server instantiiert. Die Funktion
erkennt anhand der "ubermittelten Parameter des \emph{TIP}-Clients den Typ von
HTML-Seite, der zu erzeugen ist.

Das Gateway, das HTTP-Server und TIP-Server verbindet, geh"ort in das
Verzeichnis der ausf"uhrbaren Dateien des HTTP-Servers.

Es folgen die Beschreibung f"ur den Aufbau einer URL f"ur den Zugriff auf einen
TIP-Server und ein Beispiel:
\begin{alltt}
http://dbis9/\textit{gateway}/FILE+\textit{Programmbeschreiungsdatei}

http://dbis9/tipConnect/FILE+Lines.ti

\end{alltt}

Abbildung \ref{genKom} zeigt HTTP-Client und \emph{Tycoon}-Server.

%%% Local Variables: 
%%% mode: latex
%%% TeX-master: "quas"
%%% End: 
