[ Inhalt ] [ Index ] Trennende Zerlegung der Server- Spezifikation der Lösung Spezifikation der Lösung

Erweiterung der VDM-Klassenbibliothek

Für die Verwaltung der Hypertextfunktionen sowie des Hyptertextes selbst ist eine Erweiterung der Klassenbibliothek notwendig. Zum ursprünglich vorliegenden Inhalt der Klassenbibliothek zählt auch die Dokumentation zu ADTs, Implementationen und Operationen, welche als Signatur hinterlegt ist und als Komponentennamen ,,docu`` trägt.

Ziel ist es, sowohl die gesamten bisherigen Dokumentationsinhalte der Klassenbibiliothek hyptertexttauglich zu machen, als auch weitere von ADTs unabhängige Textelemente zu schaffen, die direkt oder über die Dokumentation der ADTs zugänglich sind. Die Hinterlegung von Hypertext soll dabei in der Klassenbibiliothek selbst erfolgen, da diese als eine portable und distributionsfähige Einheit zu betrachten ist.

Integration des Hypertext

    Die Integration von Hyptertextelementen in den Fließtext, der in der VDM Bibliothek enthalten ist, soll über Makros erfolgen, welche durch den VDM Preprozessor in Referenzen aufgelöst werden, die ausreichend durch den HTML-Seitengenerator des VDM Servers interpretiert werden können. Der Vorteil des Einsatzes von Makros liegt in der Möglichkeit, neben HTML auch anderen Hyptertext erzeugen zu können. Beispielsweise Hypertextformate von Firmen wie Adobe oder auch RTF-Dateien, die mit Hilfe des Help-Compilers in Windows-Hilfedateien übersetzt werden können. Diese Formate sind jedoch nicht Thema der vorliegenden Arbeit, für welche als Zielstellung allein das HTML-Format von Bedeutung ist.

Die Erweiterung um Hyptertext betrifft drei Elemente der Klassenbibliothek, welche wie folgt im Punkt-Format ,,adt.impl.oper.comp`` angegeben werden, wobei der Verzicht auf nachgeordnete Hierarchien bei der Angabe als die Gesamtheit dieser angesehen werden:

  1. stdlib.sign.setup.docu
  2. stdlib.sign.setup.hyper
  3. mimelib.aux

Die Erweiterung des ersten Elementes stdlib.sign.setup.docu betrifft die Initialisierung von Dokumentation für die Vorverarbeitung durch den VDM Preprozessor, insbesondere durch Verwendung geeigneter include-Anweisungen. Der derzeitige Inhalt dieser Komponente soll aufgrund seiner Kürze hier wiedergegeben werden:

#include <stdlib/sign/setup/gsig>

#define OPERATOR
#define MEMBERS
#define UPPER

#include <stdlib/sign/setup/cpp>

#undef RUMPF
#undef inline
#define inline
#define RUMPF(x)

#include <stdlib/sign/setup/defp>

#include <stdlib/sign/setup/hyper>

Als neuer Eintrag ist die Include-Anweisung

#include <stdlib/sign/setup/hyper>

in der letzten Zeile hinzugefügt worden(*). Dies ist die geeignetste Stelle in der Datenbank, da der Hypertext eine Übermenge der Dokumentation darstellt. Die Definitionen der Hypertextmakros in der Komponente stdlib.sign.setup.hyper die hierdurch eingebettet wird, soll nicht vorenthalten werden und lauten:

#ifdef GEN_HYPER
#define __HYPERLINK(l,w) <A VDMREF=MKSTRING(w)>l</A>
#define __IMAGELINK(alttxt,imgref) <IMG SRC=MKSTRING(imgref) ALT=MKSTRING(alttxt)>
#define __IMAGELINKALIGN(alttxt,imgref,align> <IMG SRC=MKSTRING(imgref) ALT=MKSTRING(alttxt) ALIGN=align>
#define HYPERBIG(txt) <H3>txt</H3>
#define HYPEREXAMPLE(l,r,e) <A EXAMPLE r=MKSTRING(e)>l</A>
#else 
#define __HYPERLINK(l,w) l
#define __IMAGELINK(alttxt,imgref) imagine MKSTRING(alttxt) here
#define __IMAGELINKALIGN(alttxt,imgref,align) imagine MKSTRING(alttxt) here
#define __HYPERBIG(txt) txt
#define __HYPEREXAMPLE(l,r,e) l

Es ist erkennbar, daß die Umsetzung der Hyptertext-Makros von der Defininition von GEN_HYPER abhängig ist. Der Grund hierfür ist der bereits bestehende VDM Bibliotheksbrowser, welcher die Anzeige einer Hilfe erlaubt, jedoch nur reinen Text akzeptiert. Für ein Bild, welches in einer HTML-Seite durch den Tag <IMG SRC=pictureref ALT=alttxt> eingebunden wird, kann und sollte neben einer Referenz auf das Bild auch ein alternativer Text hinterlegt werden, welcher für HTML-Textbrowser(*) anstelle des Bildes angezeigt wird. Wenn lediglich Dokumentation für den Bibliotheksbrowser erzeugt wird, so wird bei diesem anstelle des Bildes nach obiger Definition imagine ,,bildname`` here ausgegeben. Eine ähnliche Bearbeitung gilt für die weiteren Makros.

Die Dokumentation der Klassenbibliothek, die durch den Bibliotheksbrowser angezeigt wird, entstammt ebenfalls der Ausgabe des VDM Preprozessors, welcher mit dem vordefinierten Symbol GEN_DOCU gestartet wird. Hieraus folgt, daß der Preprozessor für die Erzeugung von Hypertext sowohl mit dem vordefinierten Symbol GEN_DOCU als auch mit GEN_HYPER gestartet werden muß. Weitere Informationen zu der Auflösung und der Verarbeitung der aufgelösten Makros durch den Server werden unter [*] gegeben.

Das letzte der Klassenbibliothek neu hinzugefügte Element ist mimelib.aux. Mimelib trägt diesen Namen, da hier jegliche hinterlegte Informationen gültige MIME-Typen sind. Da es sich auch bei HTML (mit dem Mime Haupt- und Untertyp text/html) um einen gültigen Typen handelt, ist auch über die übliche Dokumentation der ADTs hinausgehender Hypertext unter der ADT-Bezeichnung mimelib.aux abgelegt. Die Gruppierung unterhalb der Implementations-Bezeichnung aux (auxiliary) kann per Definition der Datenbank frei gestaltet werden. Bilder könnten nun unter der Operations-Bezeichung pics als Komponente mit ihrem Namen gespeichert werden(*) und weiterer Hypertext unter anderen Bezeichnungen.

Die Kreation des ADT-Eintrages mimelib ist jedoch nicht Bedingung, es können auch Einträge anderen Namens in der Datenbank erfolgen. Der Zugriff auf die Komponenten erfolgt direkt. Es ist lediglich darauf zu achten, daß die Integrität der Datenbank nicht durch Einträge, die ganz oder teilweise der Struktur von ADT-Definitionen entsprechen, verletzt wird.

Design der Hytertextreferenzen

Die durch Makros in den Fließtext eingebundenen Hypertextelemente, werden nach der Bearbeitung durch den Preprozessor in Referenzen aufgelöst. Die Spezifikation hierzu wurde unter [*] dargelegt. Die durch den Preprozessor erzeugten Referenzen bedürfen einer Weiterverarbeitung durch den VDM Server.

Bei den erzeugten Konstrukten handelt es sich um HTML-ähnliche Tags, die aber nicht Bestandteil der HTML-Definitionen sind. Eine direkte Wiedergabe durch den HTML-Browser würde ein schlichtes Ignorieren dieser unbekannten Tags zur Folge haben. Da der VDM Server jedoch alle unbekannten Tags als Text interpretiert, werden diese in der HTML-Kodierung für den Latin-1 Zeichensatz wiedergegeben, können daher vom Browser auch nicht als Tags erkannt werden und die Darstellung erfolgt äquivalent zum Ursprungstext.

Die Umsetzung des zwar durchaus gültigen Tags des HTML-Standards

<ADDRESS>Marko Temme</ADRESS>

hat nach einer Bearbeitung durch den VDM Server folgende Ausgabe zur Folge, wenn dieser den Tag nicht kennt:

&ltADDRESS&gtMarko Temme&lt/ADRESS&gt

Eine Erweiterung der Hypertextmakros ist jederzeit möglich. Verständlicherweise können neue Makros aber nur in solche Tags substituiert werden, zu dessen Interpretation der VDM Server in der Lage ist. Dem Server ist zunächst ein fester Satz von Tags bekannt, dessen Einsatz immer möglich ist. Nun bietet auch HTML selbst zahlreiche Tags, die den Gestaltungsmöglichkeiten des Hyptertextes in der Klassenbibliothek nicht vorenhalten sein sollen.

Diese Tags können über die Konfigurationsdatei des Servers explizit bekannt gemacht werden, wodurch eine Umsetzung in den Latin-1 Zeichensatz vermieden wird. Die Vornahme dieser Konfiguration ist unter [*] erläutert. Das Hinzufügen von <ADDRESS> sowie </ADRESS> zu den bekannten Tags würde die Umsetzung im obigen Beispiel verhindern.

Der feste Kommandosatz des VDM Servers besteht aus folgenden drei Tags, welche eine Vielfalt von Einsatz und Kombinationsmöglichkeiten bieten:

  1. <A VDMREF=reference>description</A>
  2. <IMG SRC=reference [ALIGN=align] ...>
  3. <A EXAMPLE RUN | VIEW| REF = example>description</A>

Der Tag VDMREF ist die klassische Möglichkeit, Verweise aus der ADT-Dokumentation oder anderen Dokumenten zu weiteren Dokumenten, ADT-Dokumentationen der Klassenbibliothek, Bildern oder anderen MIME-Elementen herzustellen. Auf was genau durch VDMREF verwiesen ist, wird durch reference festgelegt.

Syntax und Spezifikation von reference ist wie folgt:

  1. Referenzierung von ADT-Elementen der Klassenbibliothek

    Durch adt.impl.oper wird die Dokumentation zur Operation oper der Implementation impl des ADTs adt referenziert. Lautet die Referenz bag.automem.all wird die Operation all der Implementation automem des ADTs bag referenziert. Die Dokumentation eines ADTs ist abhängig vom gewählten Operationstypus, der die Zielsprache festlegt. Als Operationstypus wird der im Informations- und Hilfesystem bereits durch den Anwender ausgewählte verwendet.

    Soll durch die Referenzierung ein Wechsel des Operationstypes zu einer anderen Zielsprache erfolgen, so wird dieser der Referenz vorangestellt, so daß diese damit lautet: opertyp.adt.impl.oper, wobei derzeit gültige Werte von opertyp ,,C``, ,,C++`` oder ,,A++``, für die in C++ implementierte automatische Speicherverwaltung, sind. Die große oder kleine Schreibweise des Operationstyps ist nicht von Belang, die Angabe ist nicht ,,case-sensitive``. Eine gültige Referenz auf die Operation mk der Implementation linklist des ADTs map für die Zielsprache C++ würde somit lauten c++.map.linklist.mk. Ist der momentan im Informations- und Hilfesystem gewählt Operationstypus mit der Angabe des neuen identisch, hat diese Art der Referenzierung verständlicheweise keine Wirkung.

    Die Dokumentationen der ADTs bzw. dessen Operationen und Implementationen, die durch diese Art der Referenzierung aus der Klassenbibliothek gewonnen werden, sind identisch mit denen, die mit dem Tool vdmhelp der VDM Klassenbibliothek angezeigt werden können. Sie werden nach den Regeln, welche die Wohlgeformtheit eines ADTs einschließlich seiner Dokumentation, festlegen, gebildet.

  2. Referenzierung von Elementen der gesamten Klassenbibliothek

    Dem Zugriff durch das Hypertextsystem bleibt kein Inhalt der Datenbank verborgen. Zu Informationszwecken können selbst Codefragmente oder Parametrisierungen zur Anzeige gebracht werden, wobei hier selbstverständlich die Definition von Tags und Referenzen zwar möglich aber nicht ratsam ist(*).

    Die direkte Referenzierung erfolgt durch raw:adt.impl.oper.comp gemäß der vierstufigen Hierarchie der Datenbank. Das Schlüsselwort raw bezeichnet ,,puren`` Text, der jedoch auch der Bearbeitung durch den Preprozessor unterliegt und demnach Verweise, Bilder sowie weitere Hypertextelemente enthalten kann.

    Diese Form der Referenzierung macht es möglich neben ADT-spezifischen Informationen auch solche allgemeiner Natur in der Bibliothek zu hinterlegen.

    Ein Beispiel für eine gültige Referenzierung ist raw:mimelib.aux.help.common, welche auch tatsächlich in der Distribution der VDM Klassenbibliothek existiert und allgemeine Hinweise zur Gestaltung von Hypertext enthält. Es obliegt dem Gestalter des Hypertextes die Pflicht, bei der Kreation neuer Hypertexte die Wohlgeformheit der Datenbank nicht zu verletzen. Sie werden daher in der Regel unter der Implementationsrubrik ,,aux`` einzurichten sein.

  3. Referenzierung von MIME-Elementen der Klassenbibliothek

    HTML bietet als Möglichkeit neben der Darstellung formatierten als auch unformatierten Texts auch die Wiedergabe von Bildern, Filmen, Ton und anderen Medien an. Diese liegen in der Regel in einem binären Format vor, das die Aufnahme in die VDM Klassenbibliothek verhindert. Sie werden daher in der standardisierten MIME-Kodierung niedergelegt, die im wesentlichen aus Zeichen und Zahlen besteht und daher für die Aufname in die Datenbank geeignet ist. Die Art der Daten wird anhand der MIME Haupt- und Untertypen klassifiziert, welche per Definition in der ersten Zeile der MIME-Komponente in der Datenbank festgelegt werden.

    Anhand der Referenz erkennt der VDM Server, ob es sich bei dem referenzierten Inhalt um Text oder eine MIME-Komponente handelt. Die Dekodierung des MIME-Formats erfolgt jedoch nicht durch den Server selbst, sondern er teilt dem VDM Server-Klienten mit, daß ein solches Format zu interpretieren ist.

    Die Referenz auf eine MIME-Komponente unterscheidet sich von der vorstehend beschriebenen ,,puren`` raw Referenz durch das Schlüsselwort mime. Die Referenzierung wird damit durch mime:adt.impl.oper.comp vorgenommen. Ein Beispiel für die Referenzierung eines Bildes wäre mime:mimelib.aux.pics.vdmlogo.


[ Inhalt ] [ Index ] Trennende Zerlegung der Server- Spezifikation der Lösung Spezifikation der Lösung

VDM Class Library