Logo

aTool: Grundzüge der technischen Realisierung

6 Grundzüge der technischen Realisierung (Version 1.14, 16. Juli 2000)

6.1 Vorbemerkungen


Dieses Kapitel beschreibt die Ansätze zur Implementierung von aTool. Zunächst werden die Bestandteile des aTool-Kits näher beschrieben. Dabei werden sowohl die enthaltene Information als auch die bereits erkennbaren Ansätze zur Notation erläutert. Als zentraler funktionaler Bestandteil wird die Implementierungsidee zum Mapping näher erläutert. Den Abschluss bilden Detailanforderungen an die Realisierung.

6.2 Bestandteile des aTool-Kits

Jedes aTool-Dokument ist mit einem aTool-Kit verknüpft. Bestandteile des aTool-Kits sind eine aTool-Strukturvorgabe (aTool-Strukturvorgaben), ein aTool-Stylesheet (aTool-Stylesheet), eine Word-Dokumentvorlage (Word-Dokumentvorlage), eine Mapping-Tabelle (Mapping-Tabelle), eine Mustersammlung (Mustersammlung) und XSL-Stylesheets (XSL-Stylesheets). Alle Vorgaben müssen im aTool-Kit enthalten sein. Mit leeren Strukturvorgaben, aTool-Stylesheets oder Mapping-Tabelle verliert man jedoch fundamentale aTool-Funktionalität.

6.2.1 aTool-Strukturvorgaben

aTool-Strukturvorgaben basieren auf XML-DTDs, erweitern sie jedoch um zusätzliche Konstrukte, die sich möglichst in XML Schema formulieren lassen sollen.

Eine aTool-Strukturvorgabe ist eine XML-DTD, die um weitere Information angereichert werden kann. Die Zusatzinformation ist in Form von Kommentaren oder Prozessanweisungen in die DTD eingebracht, so dass auch eine DTD mit Zusatzinformation immer noch eine syntaktisch korrekte XML-DTD ist.

aTool-Strukturvorgaben können demnach mit konventionellen XML-Parsern verwendet werden. Ein konventioneller Parser kann jedoch nicht die gesamte in den Sturkturvorgaben enthaltene Information auswerten und diesbezüglich validieren. Umgekehrt muss nicht jede XML-DTD mit aTool verwendbar sein. Einige der zusätzlichen Informationen können zwingend für die Verwendung als aTool-Strukturvorgabe sein.

Das Autorenwerkzeug unterstützt Namespaces. In der aTool-Strukturvorgabe kann der Namespace für das zu erstellende Dokument angeben werden. Dieser wird beim XML-Export als Default-Namespace gesetzt werden.

aTool-Strukturvorgaben können in Form von Kommentaren oder Prozessanweisungen Vorgaben für Elemente und Attribute machen, die über die der XML-DTD hinausgehen. Dies sind mindestens:
  • Überprüfen von Attributwerten und Textinhalten von Elementen mit regulären Ausdrücken im Sinne von XML DATA. Eine solche Überprüfung kann die Verallgemeinerung des Attributtyps NUMBER zu NMTOKEN kompensieren. Dies schließt Längenbeschränkungen von Textpassagen ein.
  • Bei einer wiederholbaren Auswahl (E1|...|En)* oder (E1|...|En)+ kann die Häufigkeit der einzelnen Teilausdrücke beschränkt werden. Durch diese Konstruktion kann der SGML & Operator nachgebaut werden. Die Reihenfolge der Elemente spielt keine Rolle, jedoch kann für jedes gefordert sein, dass es einmal auftauchen muss.

Eine aTool-Strukturvorgabe enthält Hilfetexte zur intendierten Verwendung von Strukturelementen und ihren Attributen, zur Ursachenanalyse bei Verstößen gegen die Validität von Strukturelementen sowie zur kontextsensitiven Editierunterstützung.

6.2.2 aTool-Stylesheet

Ein aTool-Stylesheet ist ein Word-Formatvorlagenkatalog, der für jedes Strukturelement auf Absatzebene eine Formatvorlage vom Typ Absatz und für jedes Strukturelement auf Zeichenebene eine Formatvorlage vom Typ Zeichen enthält. Die Word-Formatvorlagen sind mit den zugehörigen Elementnamen benannt.

Darüber hinaus enthält ein aTool-Stylesheet Formatvorlagen für Dummy-Elemente auf Absatz- und Zeichenebene, sowie für die Tags von Block-Elementen. Sie haben die Namen DummyParagraph, DummyCharacter und BlockTags.

6.2.3 Word-Dokumentvorlage

Dem aTool-Kit gehört eine Word-Dokumentvorlage an. Diese definiert insbesondere Formatvorlagen, die sowohl in der Benennung als auch ihren Inhalten auf die Mapping-Tabelle des aTool-Kits abgestimmt sind.

Die Word-Dokumentvorlage kann zusätzliche Ergänzungen enthalten, die den Autor bei der Erstellung eines reinen Word Dokuments unterstützen. Ein korrekt mit dieser Word-Dokumentvorlage erstelltes Word-Dokument befindet sich im Zustand 1 c (siehe Zustandstabelle) und ließe sich somit vollautoamtisch in Zustand 3 überführen.

6.2.4 Mapping-Tabelle

Das Mapping wird durch eine Mapping-Tabelle gesteuert. Eine Zeile dieser Tabelle besteht aus einem Selektor und einem Elementnamen. Der Selektor beschreibt eine Belegung der eingeschränkten Suchausdrücke (siehe Elementgrenzenbestimmung). Der Selektor wählt aus allen Elementen jene aus, die mit diesem Suchausdruck gefunden werden können. Wir sagen auch: "Der Selektor beschreibt dieses Element."

Beschreibt der Selektor einer Zeile ein Element, so ist der diesem Selektor zugeordnete Elementname eine Empfehlung für die Elementzuordnung. Eine Zeile der Mapping-Tabelle wird daher auch Regel genannt.

Ein Beispiel für eine Mapping-Tabelle findet sich im Anhang.

Die Mapping-Tabelle enthält Selektoren für die übliche Verwendung von Formatierungen und Formatvorlagen. Eine spezielle Verwendung ist die Abstimmung auf die Word-Dokumentvorlage, die ebenfalls als Teil des aTool-Kits ausgeliefert wird. Ein mit dieser Dokumentvorlage erstelltes Word-Dokument verwendet nur Formatierungen, die sich in der Mapping-Tabelle finden. Den Elementen eines solchen Dokuments im Zustand 1 c (siehe Zustandstabelle) können vollautomatisch Namen zugewiesen werden.

Technisch wird die Mapping-Tabelle durch ein passendes XML-Dokument beschrieben. Dabei werden Regeln als Selektoren und Elementnamen beschrieben. Tauchen Elementnamen in der Mapping-Tabelle auf, die nicht in den aTool-Strukturvorgaben deklariert sind, so werden diese Regeln beim Einlesen des Mapping-Tabelle ignoriert. Existiert nicht für jedes deklarierte Element wenigstens eine Regel in der Mapping-Tabelle, so kann der Benutzer diese Regeln im Rahmen des Mapping erzeugen.

6.2.5 Mustersammlung

Die Mustersammlung ist ein Paket von strukturierten Textbausteinen. Ein Muster beschreibt einen Teilbaum eines vollständigen aTool-Dokuments. Die Anwenderin oder der Anwender soll die Möglichkeit bekommen, Muster in ihr oder sein Dokument einzufügen. Dabei wird ein passender Anteil des Strukturbaums erzeugt und passender Blindtext erzeugt. Beide Teile sind automatisch korrekt miteinander verbunden.

Die technische Realisierung der Muster ist noch nicht festgelegt. Im Dokument müssen mehrer Muster beschrieben werden. Zu jedem Muster gehört die Beschreibung eines Teilbaums, des passenden Blindtexts und die Verbindungen zwischen diesen Komponenten. Um die Muster möglichst geschickt in ein bereits vorhandenes Dokument einfügen zu können, müssen evtl. Regeln für die Einbettung angegeben werden können. Zur Beschreibung dieser Komponenten in einem Dokument soll eine Sprache in XML definiert werden.

Muster dürfen nur die in den aTool-Strukturvorgaben deklarierten Elemente enthalten. aTool soll beim Einlesen solche Muster vollständig zurückweisen, die nicht mit den aTool-Strukturvorgaben vereinbare Strukturanteile enthalten.

6.2.6 XSL-Stylesheets

Ein oder mehrere zu den aTool-Strukturvorgaben passende XSL-Stylesheets XSL gehören ebenfalls zum aTool-Kit. Mit diesen kann ein externes XML-System ein valides und via "XML Export" exportiertes aTool-Dokument weiterbearbeiten. Übliche Anwendungen sind die Konvertierung in HTML oder die Aufbereitung für den Druck als formatierte und umbrochene (paginierte) Version oder als formatierten Fließtext (Druckfahne) zum Korrekturlesen

6.3 Zentrale Algorithmen

Das Mapping stellt die zentrale Funktionalität zur Ableitung der Struktur aus einem reinen WordDokument dar. In diesem Abschnitt werden daher die beiden zentralen Algorithmusideen vorgestellt. Das ist zunächst die Bestimmung der Elementgrenzen und danach die Ermittlung eines passenden definierten Elements für ein so erstelltes Dummy-Element, das Mapping.

6.3.1 Elementgrenzenbestimmung

Der Text wird inkrementell in Elemente zerlegt. Dafür wird auf den Zeichen des Textes (eingegliederte Abbildungen, Tabellen usw. werden in diesem Sinne wie ein Zeichen behandelt) eine Äquivalenzrelation definiert. Liegen zwei benachbarte Zeichen in unterschiedlichen Äquivalenzklassen wird dazwischen eine Elementgrenze eingefügt. Neben den sich daraus ergebenden Elementen sind Absätze jeweils einzelne Elemente und jede Abbildung, Tabelle, Formel usw. bildet ein Element für sich. Alle Zeichen eines Elements liegen dann in derselben Äquivalenzklasse.

Die Äquivalenzrelation orientiert sich an den Möglichkeiten, welche die Suchfunktion von Word bietet. Zwei Zeichen sind äquivalent, wenn jeder eingeschränkte Suchausdruck, der eines der beiden Zeichen findet, auch das andere findet. Das heißt, dass die Zeichen in allen eingeschränkt suchbaren Eigenschaften übereinstimmen.

Da in Word natürlich auch nach dem Text selbst gesucht werden kann, müssen die Möglichkeiten der Suche passend beschränkt werden. Daher ist im vorhergehenden Abschnitt von eingeschränkten Suchausdrücken die Rede. Ein Element mit dem Inhalt "Müller" wäre bei unbeschränkten Suchausdrücken nicht möglich, da M und l dann nicht mehr äquivalent wären (Suchausdruck text=M findet M aber nicht l). Die text Eigenschaft wird daher für die eingeschränkte Suche nicht herangezogen.

Welche weiteren Eigenschaften nicht zu den eingeschränkten Suchausdrücken beitragen, wird nach Benutzerrücksprache entschieden. Die Formatierungsinformation der Zeichen (Schriftfamilie, Schriftgröße, Farbe usw.) sowie Absatz- und Zeichenformate gehören zumindest zu den eingeschränkten Suchausdrücken. Die Informationen aus dem Korrekturmodus gehören nicht dazu.

Befinden sich Elementgrenzen innerhalb von Absätzen werden diesen später Text-Elemente zugewiesen. Diese können verschachtelt auftauchen. Elemente werden möglichst spät geschlossen. Ein Text der Form "Dieser Text ist anders" wird in zwei verschachtelte Elemente zerlegt: <Dummy>Dieser <Dummy>Text</Dummy> ist anders</Dummy>.

6.3.2 Algorithmus zum Mapping

Wird das Mapping wie oben beschrieben aktiviert, wird für jede Regel der Mapping-Tabelle getestet, ob der Selektor dieses Element beschreibt. Durch die Wahl der Äquivalenzrelation (siehe Elementgrenzenbestimmung) kann ein Selektor niemals nur einen Teil eines Elements beschreiben. Ist das der Fall, wird er im Fenster zum Mapping erscheinen. Zusätzliche Validitätsprüfungen anhand der DTD und eine Unterscheidung der Elemente in solche auf Absatz- und Zeichenniveau können die Auswahl weiter beschränken.

Oft wird keine eindeutige Auswahl von Elementnamen möglich sein. Über die Selektoren lässt sich hier eventuell eine Priorisierung der Ergebnisse vornehmen. Je spezifischer der eingeschränkte Suchausdruck ist, um so genauer ist die Zuordnung zu diesem Elementnamen. Diese Priorisierung soll sich im Auswahlfenster, zum Beispiel durch die Sortierung der Einträge, niederschlagen.

Ist "Zuordnung merken" angewählt, führt das zu einer neuen Regel in der Mapping-Tabelle. Für das aktuelle Element wird der spezifischste Selektor berechnet. Dieser Selektor wird mit dem ausgewählten Elementnamen in die Mapping-Tabelle eingetragen.

Zeigt die Erfahrung im Umgang mit dem Werkzeug, dass dies nicht zu sinnvollen, weil zu spezifischen Regeln, führt, soll der Selektor durch die Eigenschaften der benachbarten Elemente unspezifischer gestaltet werden (siehe Abschnitt 3.2 in InferringStructure00).

6.4 Zugang zu Word

aTool wird als Erweiterung zu Word 2000 implementiert. In den folgenden Abschnitten werden mögliche Erweiterungsmöglichkeiten kurz beschrieben. Word spezifische Integrationsaspekte bilden Abschluss dieses Abschnitts.

6.4.1 Makroaufzeichnung

Der Aufgabenbereich von (Aufzeichnungs-) Makros sind einfache Befehlsfolgen, beispielsweise zur Formatierung. Diese aufgezeichneten Makros können dann durch die Benutzerin oder den Benutzer bearbeitet werden - dies geschieht dann im Visual Basic Editor.

Wird ein reines Aufzeichnungsmakro betrachtet, kann Word keine zusätzliche Funktionalität hinzugefügt werden, sondern nur vorhandene neu verschaltetet werden. Das reicht für dieses Projekt bei weitem nicht aus.

6.4.2 Webskripte

Die Skriptsprache ähnelt den Makros, ist allerdings gedacht zum Einsatz in Worddokumenten, die als Website veröffentlich werden. Diese Variante könnte zu einem späteren Zeitpunkt relevant werden, wenn eine Vorabfassung des Werks als Onlinefassung angezeigt werden soll.

6.4.3 ActiveX-Controls

ActiveX ist ein sprachunabhängiges Format, mit dem Komponenten verteilt werden können und basiert auf COM. ActiveX-Controls können in Web-Pages beispielsweise für Multimedia Effekte und interaktive Objekte eingebunden werden.

Nach den bisherigen Erfahrungen, sind sie nicht direkt in Word integrierbar. Laut Dokumentation sind in VBA 6 zusätzliche ActiveX-Komponenten integrierbar.

6.4.4 Visual Basic Module (VBA-Module)

Diese sogenannten VBA-Makros werden in dem von MS Word mitgelieferten Visual Basic Editor erstellt. Diese Methode zur Erweiterung von MS Word, aber auch allen anderen Office-Komponten, ist der offensichtliche Favorit der Office-Entwickler. Die Zugriffsmöglichkeiten auf Office-Komponenten sind sehr weitreichend und gut dokumentiert. Eigene Beispielprogramme waren ohne erheblichen Aufwand innerhalb kürzester Zeit erstellt.

Da der Sprache jedoch einige grundlegende Konzepte fehlen, soll der Großteil des Projekts nicht in VBA implementiert werden. Daher muss der VBA-Anteil mit anders erstellten Bibliotheken integriert werden.
Integration via VBA

Abbildung 2:Integration via VBA

Die Abbildung 2 veranschaulicht, dass VBA-Module Elemente eines Dokuments sind. Hieraus ergeben sich eventuell Restriktionen bezüglich der Zugriffsmöglichkeiten auf den Dokumenteninhalt beziehungsweise auf Ereignisse.

VBA-Module bietet viele Möglichkeiten, die auch recht umfangreich dokumentiert sind. Allerdings reichen die Möglichkeiten von VBA allein nicht aus. Eventuell ist diese Lösung nicht robust, da man eine Mixtur von Codierungstechniken und Philosophien einsetzt.

6.4.5 OLE Automatisierung

Eine weitere Möglichkeit auf Word zuzugreifen, ist das Einbinden der von Word bereitgestellten Typbibliothek in Visual C++ 6.0 mittels des Class-Wizards.
Zugriff auf Word via OLE

Abbildung 3: Zugriff auf Word via OLE

Entscheidender Nachteil dieser Zugriffsmethode ist das nicht Word, sondern eine andere Anwendung, die Word integriert gestartet werden muss. Hier erwarten wir jedoch Akzeptanzprobleme bei den Autorinnen und Autoren.

6.4.6 COM-Add-Ins

Von den möglichen Erweiterungsmöglichkeiten wird hier eine Implementierung als COM-Add-In in C++ angestrebt. Macros lassen sich schwieriger initial in Word plazieren, dafür ist ihre Verwendung besser dokumentiert. C++ bietet gegenüber der Makro-Implementierungssprache Visual Basic deutliche Geschwindigkeitsvorteile. Außerdem werden notwendige Programmiersprachenkonstrukte wie Vererbung und Ausnahmenbehandlung unterstützt.

Die stärkere Unterstützung von Word-Erweiterungen in Visual Basic kann es notwendig machen, einige kleinere Integrationsroutinen in VBA zu implementieren, die dann als Schnittstelle für die Erweiterung fungieren.

Laut Dokumentation handelt es sich bei COM-Add-Ins "... um Zusatzprogramme, die Office-Programme um benutzerfreundliche Befehle und spezialisierte Funktionen erweitern. COM-AddIns können in einer beliebigen Programmieranwendung von Microsoft ... implementiert werden".

Die Abbildung zeigt die Positionierung: die Add-Ins beziehen sich direkt auf Word2000 und nicht auf einzelnen Dokumente, Vorlagen oder Dokumentelemente. Das Add-In wird als separater Thread im Word-Prozess ausgeführt und wird über ein definiertes Interface angesprochen. Der Zugriff auf die Word-Applikation erfolgt über das Word-Objektmodell.

Alle COM-Komponenten können über (global) eindeutige Identifier/Kurznamen angesprochen werden.
Positionierung eines COM-Add-Ins

Abbildung 4: Positionierung eines COM-Add-Ins

6.4.7 Das Objektmodell von Word

Seit Word 97 wird die interne Dokumentstruktur veröffentlicht. In der derzeit aktuellen Version (Word 2000) wurde dieses Modell durch einige Methoden und Eigenschaften erweitert. Das Objektmodell ist eine Baumstruktur, dessen Wurzelelement das Applikationsobjekt darstellt.

6.4.8 Die Schnittstelle IDTExtensibility2

Generell müssen Word-Add-Ins als COM-Dll angelegt sein. Darüber hinaus ist es erforderlich, dass das Add-In das Interface IDTExtensibility2 unterstützt. Der Begriff der unterstützten Schnittstellen stammt aus dem COM-Jargon. Eine sprachenunabhängige Definition dieser Schnittstelle ist im Lieferumfang von Word2000 enthalten.

6.4.9 Änderungsmitteilungen

Eine zentrale Aufgabe von aTool ist die Überwachung von Benutzeraktionen in Word. Sie müssen ausgewertet werden, um inkrementell die Elementgrenzen (siehe Elementgrenzenbestimmung) bestimmen zu können.

Angestrebt wird hier ein Mechanismus, der über einen speziellen Eventhandler von Word immer dann aktiviert wird, wenn der Benutzer für aTool relevante Änderungen am Dokument vorgenommen hat (Push-Ansatz). Relevant sind Änderungen der Formatierung und die Erzeugung oder Zerstörung von Absätzen, Abbildungen, Tabellen usw. Lässt sich der "Push"-Ansatz nicht verwirklichen, muss über einen "Pull"-Mechanismus das vollständige Dokument kontinuierlich auf Änderungen untersucht werden. Für das hier adressierte Anwendungsgebiet (Zeitschriftenartikel) erscheint dieser Ansatz noch realisierbar.

6.5 Detailanforderungen


Die folgende Liste benennt das technische Umfeld von aTool.
  • Zielplattform ist Windows98/NT.
  • Das Autorenwerkzeug ist eine Erweiterung von Microsoft Word 2000.
  • Das Werkzeug ist mehrsprachenfähig. Es unterstützt mindestens die deutsche und die englische Version von Word.
  • Die Anforderungen an Speicher und Rechenleistung werden nicht formal beschränkt, müssen aber für die Anwenderinnen und Anwender vernünftig sein.

Auch an den Entwicklungsprozess werden Anforderungen gestellt. Diese sind hier aufgeführt.
  • Die Systementwicklung wird nutzerorientiert durchgeführt. Die Anforderungen der Nutzerinnen und Nutzer gilt es in erster Linie zu befriedigen.
  • Es wird ein konzeptionelles Modell des Autorenwerkzeugs entwickelt, das insbesondere Klassendiagramme enthält.
  • Als Modellierungssprache dient UML.
  • Dokumentationssprache ist Englisch.
  • Kommentarsprache ist Englisch.
  • Programmiersprache ist C++, eventuell Java oder Visual Basic for Applications.

Created by: system last modification: Wednesday 08 of December, 2004 [00:33:08 UTC] by Sven