27.02.2013 Aufrufe

Wandler in digitalen Bibliotheken: Vollautomatische Generierung

Wandler in digitalen Bibliotheken: Vollautomatische Generierung

Wandler in digitalen Bibliotheken: Vollautomatische Generierung

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

<strong>Wandler</strong> <strong>in</strong> <strong>digitalen</strong> <strong>Bibliotheken</strong>:<br />

<strong>Vollautomatische</strong> <strong>Generierung</strong><br />

Diplomarbeit<br />

von<br />

Guido Sautter<br />

Verantwortlicher Gutachter: Prof. Dr. Peter Lockemann<br />

Betreuer: Dipl.-Inform. Michael Christoffel<br />

Tag der Ausgabe: 01. Mai 2004<br />

Tag der Abgabe: 16. Oktober 2004


Kurzfassung<br />

Aufgrund der Heterogenität vieler digitaler <strong>Bibliotheken</strong> spielen <strong>in</strong> der heutigen Zeit<br />

<strong>in</strong>tegrierende Meta-Suchsysteme e<strong>in</strong>e große Rolle, da sie den Benutzer befähigen, se<strong>in</strong>e<br />

Anfrage gleichzeitig an mehrere Informationsquellen zu richten und sich so schnell e<strong>in</strong>en<br />

Überblick zu verschaffen. Damit sich e<strong>in</strong> solches Suchsystem am Markt durchsetzen kann,<br />

müssen zum e<strong>in</strong>en bestehende Informationsquellen auf e<strong>in</strong>fache Art und Weise unter<br />

Wahrung ihrer Unabhängigkeit <strong>in</strong> werden können. Zum anderen muß aber auch die<br />

E<strong>in</strong>b<strong>in</strong>dung der Quellen, die jederzeit Änderungen erfahren können, so gekapselt werden, daß<br />

diese Änderungen die Arbeitsweise des Suchsystems nicht bee<strong>in</strong>trächtigen.<br />

Diese Diplomarbeit befaßt sich mit dieser Problematik h<strong>in</strong>sichtlich e<strong>in</strong>es bestehenden<br />

Recherchesystems im Bereich der Literaturrecherche und -beschaffung, dem UniCats-i-<br />

System, <strong>in</strong> dem e<strong>in</strong> <strong>Wandler</strong> die Heterogenität der <strong>digitalen</strong> <strong>Bibliotheken</strong> kapselt. Ziel der<br />

Arbeit s<strong>in</strong>d der Entwurf und die Realisierung zum e<strong>in</strong>en e<strong>in</strong>es vollautomatischen Generators,<br />

der das System bei Veränderungen an den Informationsquellen von adm<strong>in</strong>istrativen E<strong>in</strong>griffen<br />

unabhängig macht, zum anderen e<strong>in</strong>es <strong>Wandler</strong>-Generators, der e<strong>in</strong>e <strong>Generierung</strong> von<br />

<strong>Wandler</strong>n durch e<strong>in</strong>en Benutzer ermöglicht, wobei dieser <strong>in</strong> e<strong>in</strong>em möglichst hohen Grad von<br />

automatischen Verfahren unterstützt wird und im Idealfall nur e<strong>in</strong>e Kontrollfunktion ausübt.<br />

Der <strong>Wandler</strong> soll fehlertolerant gegenüber der Informationsquelle se<strong>in</strong> und durch den E<strong>in</strong>satz<br />

regulärer Ausdrücke die gewünschten Daten punktgenau extrahieren können.<br />

Dies konnte durch die Umsetzung und Automatisierung des Ansatzes Generation by Example<br />

erreicht werden, bei dem der Benutzer lediglich e<strong>in</strong>e ihm vertraute Beispielrecherche auf der<br />

Informationsquelle durchführt bzw. e<strong>in</strong>e solche von der Automatik auf Basis von<br />

Beispieldaten durchführen läßt. Der <strong>Wandler</strong>-Generator erzeugt aus den dabei gewonnenen<br />

Informationen den vollständige <strong>Wandler</strong>. Zusätzlich wurde e<strong>in</strong>e <strong>Wandler</strong>-Komponente<br />

realisiert, die die erzeugten <strong>Wandler</strong> zur Extraktion von Informationen aus der jeweils<br />

beschriebenen Informationsquelle nutzt und perfekt auf den <strong>Wandler</strong>-Generator abgestimmt<br />

ist. Für die punktgenaue Extraktion der gewünschten Daten wurde e<strong>in</strong>e reguläre Sprache<br />

entwickelt, deren Ausdrücke <strong>in</strong> die pfadbasierten Extraktions<strong>in</strong>formationen des <strong>Wandler</strong>s<br />

<strong>in</strong>tegriert s<strong>in</strong>d. Der Generator für diese Ausdrücke ist <strong>in</strong> die Automatismen des <strong>Wandler</strong>-<br />

Generators e<strong>in</strong>geschlossen. Die <strong>Wandler</strong>-Komponente enthält e<strong>in</strong>en Interpreter, der die<br />

Ausdrücke zur Extraktion e<strong>in</strong>zelner Daten aus Zeichenketten e<strong>in</strong>setzt.


Erklärung<br />

Hiermit erkläre ich, daß ich die vorliegende Diplomarbeit ohne unzulässige Hilfe erstellt und<br />

alle verwendeten Literaturquellen angegeben habe.<br />

Karlsruhe, den 16. Oktober 2004


Inhaltsverzeichnis<br />

fuck<br />

1. E<strong>in</strong>leitung ....................................................................................................... 1<br />

1.1 Motivation ..................................................................................................................1<br />

1.2 Aufgabenstellung ....................................................................................................... 2<br />

1.3 Gliederung der Arbeit................................................................................................. 2<br />

2. Grundlagen ..................................................................................................... 5<br />

2.1 Agenten ...................................................................................................................... 5<br />

2.2 Webservices ............................................................................................................... 6<br />

2.2.1 SOAP.................................................................................................................. 6<br />

2.2.2 WSDL................................................................................................................. 7<br />

2.2.3 WSCL................................................................................................................. 8<br />

2.2.4 UDDI.................................................................................................................. 9<br />

2.3 SGML......................................................................................................................... 9<br />

2.4 HTML......................................................................................................................... 9<br />

2.5 XML......................................................................................................................... 10<br />

2.6 DOM......................................................................................................................... 10<br />

2.7 Baumdarstellung e<strong>in</strong>es HTML-Dokumentes ........................................................... 10<br />

2.8 Vergleich von HTML-Dokumenten......................................................................... 12<br />

2.9 Hierarchische Pfadausdrücke ................................................................................... 15<br />

2.9.1 Bisherige Def<strong>in</strong>ition ......................................................................................... 16<br />

2.9.2 Reguläre Ausdrücke zur Extraktion von Teilstr<strong>in</strong>gs ........................................ 17<br />

2.9.3 Erweiterung der Hierarchischen Pfadausdrücke .............................................. 19<br />

2.10 <strong>Wandler</strong> ....................................................................................................................20<br />

3. Das UniCats-i-Projekt .................................................................................. 23<br />

3.1 Der Aufbau des UniCats-i-Systems ......................................................................... 23<br />

3.1.1 Die Agentenarchitektur .................................................................................... 23<br />

3.1.2 Der Aufbau e<strong>in</strong>er Geme<strong>in</strong>schaft....................................................................... 25<br />

3.2 Der Anbieteragent (AA) im Speziellen.................................................................... 28<br />

3.3 Die Rolle des Generatoragenten (GA) ..................................................................... 30<br />

4. Verwandte Projekte und Arbeiten ................................................................ 31<br />

4.1 W4F.......................................................................................................................... 31<br />

4.1.1 Projektvorstellung ............................................................................................ 31<br />

4.1.2 <strong>Generierung</strong>shilfsmittel.................................................................................... 31<br />

4.1.3 Beurteilung....................................................................................................... 34<br />

4.2 XWRAP ................................................................................................................... 34<br />

4.2.1 Projektvorstellung ............................................................................................ 34<br />

4.2.2 <strong>Generierung</strong>shilfsmittel.................................................................................... 35<br />

4.2.3 Beurteilung....................................................................................................... 36<br />

4.3 Lixto ......................................................................................................................... 37<br />

4.3.1 Projektvorstellung ............................................................................................ 37<br />

4.3.2 <strong>Generierung</strong>shilfsmittel.................................................................................... 38<br />

4.3.3 Beurteilung....................................................................................................... 39<br />

4.4 ROADRUNNER ...................................................................................................... 39<br />

4.4.1 Projektvorstellung ............................................................................................ 39<br />

4.4.2 Bewertung ........................................................................................................ 41<br />

4.5 <strong>Wandler</strong> <strong>in</strong> <strong>digitalen</strong> <strong>Bibliotheken</strong>: Semi-Automatische <strong>Generierung</strong> und<br />

Evaluationsstrategien ............................................................................................... 41<br />

4.5.1 Projektvorstellung ............................................................................................ 41<br />

i


4.5.2 <strong>Generierung</strong>shilfsmittel.................................................................................... 42<br />

4.5.3 Beurteilung....................................................................................................... 43<br />

4.6 Fazit.......................................................................................................................... 43<br />

5. Entwurf ......................................................................................................... 45<br />

5.1 Automatisierungspotential der <strong>Generierung</strong>sverfahren ........................................... 45<br />

5.1.1 Generation by Example.................................................................................... 45<br />

5.1.2 ACME .............................................................................................................. 45<br />

5.1.3 Fazit.................................................................................................................. 46<br />

5.2 Genereller Ablauf des <strong>Generierung</strong>sprozesses......................................................... 46<br />

5.3 F<strong>in</strong>den und Auswahl e<strong>in</strong>es Suchformulars............................................................... 47<br />

5.3.1 Formulare <strong>in</strong> HTML-Dokumenten................................................................... 47<br />

5.3.2 F<strong>in</strong>den von Suchformularen............................................................................. 48<br />

5.3.3 Auswahl e<strong>in</strong>es Suchformulares ........................................................................ 49<br />

5.4 Analyse des Suchformulars...................................................................................... 50<br />

5.4.1 Genereller Ablauf............................................................................................. 51<br />

5.4.2 Klassifizierung der Suchfelder (Textfelder)..................................................... 51<br />

5.4.3 Klassifizierung der Auswahlfelder................................................................... 53<br />

5.4.4 Behandlung der restlichen E<strong>in</strong>gabefelder ........................................................ 56<br />

5.4.5 Durchführen e<strong>in</strong>er Suche über das Formular ................................................... 57<br />

5.5 <strong>Generierung</strong> der Pfade für Suchen mit e<strong>in</strong>em Treffer.............................................. 58<br />

5.5.1 Genereller Ablauf............................................................................................. 58<br />

5.5.2 <strong>Generierung</strong> der Suchanfrage........................................................................... 58<br />

5.5.3 <strong>Generierung</strong> der Pfade...................................................................................... 59<br />

5.6 <strong>Generierung</strong> der Pfade für Suchen mit mehreren Treffern....................................... 60<br />

5.6.1 Genereller Ablauf............................................................................................. 61<br />

5.6.2 <strong>Generierung</strong> der Suchanfrage........................................................................... 61<br />

5.6.3 <strong>Generierung</strong> der Pfade...................................................................................... 62<br />

5.7 <strong>Generierung</strong> regulärer Ausdrücke ............................................................................ 65<br />

5.7.1 Genereller Ablauf............................................................................................. 65<br />

5.7.2 F<strong>in</strong>den und Optimierung der Grenzstr<strong>in</strong>gs....................................................... 65<br />

5.7.3 Erzeugung und Optimierung der Ausdrücke.................................................... 67<br />

5.8 Resultierende Anforderungen an <strong>Generierung</strong>s-Basisdaten .................................... 69<br />

5.8.1 Heuristik-Daten zu Formular-Analyse ............................................................. 69<br />

5.8.2 Heuristik-Daten zur <strong>Generierung</strong> regulärer Ausdrücke ................................... 69<br />

5.8.3 Beispiel-Daten für die Pfad-<strong>Generierung</strong>......................................................... 70<br />

5.9 Zusammenarbeit der Generator-Agenten ................................................................. 70<br />

5.9.1 Möglichkeiten zur Zusammenarbeit................................................................. 70<br />

5.9.2 Übergabe / Übernahme e<strong>in</strong>er Anfrage ............................................................. 71<br />

5.10 Anforderungen an den GeneratorAgenten ............................................................... 72<br />

6. Implementierung........................................................................................... 73<br />

6.1 Allgeme<strong>in</strong>e Überlegungen........................................................................................ 73<br />

6.2 Das Paket generatorAgent........................................................................................ 74<br />

6.2.1 Die Klasse GeneratorAgent.............................................................................. 74<br />

6.2.2 Die Klasse RequestHandler.............................................................................. 74<br />

6.2.3 Die Klasse ContextGenerator........................................................................... 74<br />

6.2.4 Die Klasse IoTool............................................................................................. 74<br />

6.2.5 Die Klasse PAContextRequest......................................................................... 74<br />

6.2.6 Die Klasse GAContextRequest ........................................................................ 74<br />

6.2.7 Die Klasse GaWebServiceInterface ................................................................. 75<br />

ii


6.3 Das Paket generatorAgent.extractionTools.............................................................. 75<br />

6.3.1 Die Klasse DataExtractor ................................................................................. 75<br />

6.3.2 Die Klasse DataExtractionThread.................................................................... 75<br />

6.3.3 Die Klasse LayerDataExtractor........................................................................ 75<br />

6.3.4 Die Klasse LayerDataExtractionThread........................................................... 75<br />

6.3.5 Die Klasse QueryPlan ...................................................................................... 75<br />

6.3.6 Die Klasse ProviderQueryResult ..................................................................... 76<br />

6.3.7 Die Klasse SearchField .................................................................................... 76<br />

6.3.8 Die Klasse SearchQueryGenerator................................................................... 76<br />

6.4 Das Paket generatorAgent.tree................................................................................. 76<br />

6.4.1 Die Klasse AbstractParser................................................................................ 76<br />

6.4.2 Die Klasse FastParser....................................................................................... 76<br />

6.4.3 Die Klasse Parser ............................................................................................. 76<br />

6.4.4 Die Klasse SecureParser................................................................................... 76<br />

6.4.5 Die Klasse Str<strong>in</strong>gStack..................................................................................... 77<br />

6.4.6 Die Schnittstelle LanguageDescription............................................................ 77<br />

6.4.7 Die Klasse Html ............................................................................................... 77<br />

6.4.8 Die Klasse SourceFile ...................................................................................... 77<br />

6.4.9 Die Klasse ParseTreeNode............................................................................... 77<br />

6.4.10 Die Klasse ParseTreeCrawler........................................................................... 77<br />

6.4.11 Die Klasse HtmlParser ..................................................................................... 78<br />

6.4.12 Die Klasse SourceFileParser ............................................................................ 78<br />

6.5 Das Paket generatorAgent.util.................................................................................. 78<br />

6.5.1 Die Klasse GenerateDataConta<strong>in</strong>er.................................................................. 78<br />

6.5.2 Die Klasse SearchFormConta<strong>in</strong>er .................................................................... 78<br />

6.5.3 Die Klasse SearchFieldConta<strong>in</strong>er..................................................................... 78<br />

6.5.4 Die Klasse OptionFieldConta<strong>in</strong>er .................................................................... 78<br />

6.5.5 Die Klasse QueryPartConta<strong>in</strong>er ....................................................................... 79<br />

6.5.6 Die Klasse LayerConta<strong>in</strong>er .............................................................................. 79<br />

6.5.7 Die Klasse LayerCascadeConta<strong>in</strong>er ................................................................. 79<br />

6.5.8 Die Klasse RegExGenerateConta<strong>in</strong>er .............................................................. 79<br />

6.5.9 Die Klasse ResultPart....................................................................................... 79<br />

6.5.10 Die Klasse ProtocolVector............................................................................... 79<br />

6.6 Das Paket generatorAgent.ws .................................................................................. 79<br />

7. Werkzeuge.................................................................................................... 81<br />

7.1 Das Generator-Werkzeug......................................................................................... 81<br />

7.1.1 Das Paket generatorAgent.applet ..................................................................... 81<br />

7.1.2 Das Werkzeug .................................................................................................. 88<br />

7.2 Das Basisdaten-Werkzeug...................................................................................... 104<br />

7.2.1 Das Paket generatorAgent.dataEditor ............................................................ 104<br />

7.2.2 Das Werkzeug ................................................................................................ 105<br />

8. Evaluierung................................................................................................. 111<br />

9. Zusammenfassung und Ausblick................................................................ 113<br />

9.1 Zusammenfassung.................................................................................................. 113<br />

9.2 Ausblick ................................................................................................................. 114<br />

Anhang .............................................................................................................. 115<br />

A Def<strong>in</strong>ition der Quellenbeschreibung .............................................................................. 115<br />

B Def<strong>in</strong>ition der Basisdaten für die <strong>Generierung</strong>............................................................... 120<br />

iii


Abbildungsverzeichnis<br />

Abbildung 2.1: Seite im Browser............................................................................................. 10<br />

Abbildung 2.2: Quelltext der Seite (gekürzt)........................................................................... 11<br />

Abbildung 2.3: HTML-Baum der Seite (gekürzt, BR-Tags ausgelassen)................................ 12<br />

Abbildung 2.4: Vergleich von HTML-Dokumenten................................................................ 13<br />

Abbildung 2.5: Editierdistanz zweier Bäume <strong>in</strong> Str<strong>in</strong>g-Repräsentation .................................. 14<br />

Abbildung 2.6: Vergleich von HTML-Bäumen rekursiv über ihre Ebenen ............................ 15<br />

Abbildung 3.1: Architektur der UniCats-i-Umgebung ............................................................ 24<br />

Abbildung 3.2: Aufbau der UniCats-i-Geme<strong>in</strong>schaft .............................................................. 25<br />

Abbildung 3.3: Struktur des Kommunikationsmoduls............................................................. 26<br />

Abbildung 3.4: Struktur e<strong>in</strong>es Agenten.................................................................................... 28<br />

Abbildung 3.5: Struktur e<strong>in</strong>er Quellenbeschreibung................................................................ 29<br />

Abbildung 4.1: Schichten-Architektur der W4F ...................................................................... 32<br />

Abbildung 4.2: W4F Formular Wizzard .................................................................................. 32<br />

Abbildung 4.3: W4F Extraction Wizzard ................................................................................ 33<br />

Abbildung 4.4: Fertig gestellter W4F <strong>Wandler</strong>........................................................................ 33<br />

Abbildung 4.5: Start-Ansicht des XWRAP-Werkzeuges ........................................................ 35<br />

Abbildung 4.6: Überblick über extrahierte Elemente .............................................................. 36<br />

Abbildung 4.7: Detail der Ansicht zur Benennung extrahierter Elemente .............................. 36<br />

Abbildung 4.8: Zusammenspiel der Lixto-Komponenten........................................................ 37<br />

Abbildung 4.9: Beispielseite im Lixto-Browser ...................................................................... 38<br />

Abbildung 4.10: Hauptmenu des Interactive Pattern Builder ................................................. 38<br />

Abbildung 4.11: Elog-Code e<strong>in</strong>es Lixto-<strong>Wandler</strong>s.................................................................. 38<br />

Abbildung 4.12: Vergleich zweier HTML-Dokumente e<strong>in</strong>er Klasse ...................................... 39<br />

Abbildung 4.13: Architektur des ROADRUNNER-Systems.......................................................... 40<br />

Abbildung 4.14: Ablauf der <strong>Generierung</strong> ................................................................................ 42<br />

Abbildung 4.15: <strong>Generierung</strong>s-Werkzeug ............................................................................... 42<br />

Abbildung 5.1: Prozess der <strong>Wandler</strong>-<strong>Generierung</strong> .................................................................. 47<br />

Abbildung 5.2: <strong>Generierung</strong> der Pfade zu Datenelementen..................................................... 59<br />

Abbildung 5.3: Struktur e<strong>in</strong>er Ergebnis-Liste.......................................................................... 62<br />

Abbildung 5.4: Listen-Basispfad.............................................................................................. 64<br />

Abbildung 5.5: Übergabe / Übernahme e<strong>in</strong>er Anfrage – Ablauf ............................................. 71<br />

Abbildung 6.1: Grob-Architektur des GA................................................................................ 73<br />

Abbildung 7.1: Ansicht zur Suche der Startseite ..................................................................... 89<br />

Abbildung 7.2: Auswahl des Modus für die Suche e<strong>in</strong>es Formulares ..................................... 89<br />

Abbildung 7.3: Dialog zum Laden der Basisdaten-Datei ........................................................ 90<br />

Abbildung 7.4: Ansicht zur Auswahl e<strong>in</strong>es Suchformulares ................................................... 91<br />

Abbildung 7.5: Auswahl des Modus für die Analyse des Suchformulares.............................. 91<br />

Abbildung 7.6: Fenster zur Veränderung der Vorbelegung des Suchformulares .................... 92<br />

Abbildung 7.7: Ansicht zur Klassifizierung der Suchfelder <strong>in</strong> Standarde<strong>in</strong>stellung ............... 92<br />

Abbildung 7.8: Ansicht zur Klassifizierung der Auswahlfelder und ihrer Optionen............... 93<br />

Abbildung 7.9: Auswahl des Modus für die <strong>Generierung</strong> der Pfade für Suchen mit e<strong>in</strong>em<br />

Treffer............................................................................................................................... 94<br />

Abbildung 7.10: Ansicht zu E<strong>in</strong>gabe oder Auswahl der Suchkriterien ................................... 94<br />

Abbildung 7.11: Ansicht zur <strong>Generierung</strong> von Informationsschichten und Pfaden ................ 95<br />

Abbildung 7.12: Ansicht zur Ergänzung der Pfade um Reguläre Ausdrücke.......................... 96<br />

Abbildung 7.13: Auswahl des Modus für die <strong>Generierung</strong> der Pfade für Suchen mit mehreren<br />

Treffern............................................................................................................................. 97<br />

Abbildung 7.14: Fenster zur manuellen Änderung der Pfade.................................................. 97<br />

Abbildung 7.15: Anzeige des durch e<strong>in</strong>en Pfad extrahierten Textstückes............................... 98<br />

v


Abbildung 7.16: Fenster zur Anzeige e<strong>in</strong>er Informationsschicht ............................................ 98<br />

Abbildung 7.17: Ansicht zu E<strong>in</strong>gabe oder Auswahl der Suchkriterien ................................... 98<br />

Abbildung 7.18: Ansicht zur <strong>Generierung</strong> von Informationsschichten und Pfaden .............. 100<br />

Abbildung 7.19: Ansicht zur Ergänzung der Pfade um Reguläre Ausdrücke........................ 100<br />

Abbildung 7.20: Anzeige des durch e<strong>in</strong>e Regulären Ausdruck aus e<strong>in</strong>em Gesamtstr<strong>in</strong>g<br />

extrahierten Teilstr<strong>in</strong>gs................................................................................................... 101<br />

Abbildung 7.21: Ansicht am Ende des <strong>Generierung</strong>sablaufes............................................... 101<br />

Abbildung 7.22: Fenster zur manuellen Änderung der Pfade................................................ 102<br />

Abbildung 7.23: Fenster zur manuellen Änderung der Quellenbeschreibung ....................... 102<br />

Abbildung 7.24: Dialog zum Speichern e<strong>in</strong>er generierten Quellenbeschreibung.................. 103<br />

Abbildung 7.25: Fenster zum Teste<strong>in</strong>satz der erzeugten Quellenbeschreibung .................... 103<br />

Abbildung 7.26: Ansicht zur E<strong>in</strong>gabe und Änderung e<strong>in</strong>es <strong>Generierung</strong>s-Beispieles für<br />

Suchen mit e<strong>in</strong>em Treffer............................................................................................... 105<br />

Abbildung 7.27: PopUp zur Änderung bestehender Werte.................................................... 105<br />

Abbildung 7.28: Ansicht zur E<strong>in</strong>gabe und Änderung e<strong>in</strong>es <strong>Generierung</strong>s-Beispieles für<br />

Suchen mit mehreren Treffern ....................................................................................... 106<br />

Abbildung 7.29: Ansicht zur E<strong>in</strong>gabe der für dieses <strong>Generierung</strong>s-Beispiel zu verwendenden<br />

Suchfelder....................................................................................................................... 107<br />

Abbildung 7.30: Ansicht zur Änderung bestimmter Basiswerte............................................ 107<br />

Abbildung 7.31: Ansicht zur E<strong>in</strong>gabe der für die Ke<strong>in</strong>-Ergebnis-Suche zu verwendenden<br />

Suchfelder....................................................................................................................... 108<br />

Abbildung 7.32: Ansicht zur E<strong>in</strong>gabe von Heuristikwerten zur Erkennung der Bedeutung<br />

e<strong>in</strong>zelner Optionen <strong>in</strong> Auswahlfeldern........................................................................... 108<br />

Abbildung 7.33: Ansicht zur E<strong>in</strong>gabe von Zeichen und B<strong>in</strong>dewörtern, die mit hoher<br />

Wahrsche<strong>in</strong>lichkeit <strong>in</strong>nerhalb der Werte von Datenelementen auftreten....................... 109<br />

vi


Tabellenverzeichnis<br />

Tabelle 3.1: Auflistung aller möglichen Agentenzustände ...................................................... 27<br />

Tabelle 5.1: Formular-Elemente <strong>in</strong> HTML .............................................................................. 48<br />

vii


viii


1. E<strong>in</strong>leitung<br />

1.1 Motivation<br />

Die globale Vernetzung mit e<strong>in</strong>em ständig wachsenden Angebot an Informationsanbietern<br />

be<strong>in</strong>haltet für den <strong>in</strong>formationssuchenden Menschen e<strong>in</strong>e Fülle von Möglichkeiten. Längst<br />

s<strong>in</strong>d ihm Schlagworte wie digitale <strong>Bibliotheken</strong> oder Onl<strong>in</strong>e-Buchvertriebe geläufig, und er<br />

besitzt das nötige Wissen, diese Möglichkeiten der Informationssuche e<strong>in</strong>zusetzen, ohne dabei<br />

von Öffnungszeiten von Gebäuden oder Institutionen abhängig zu se<strong>in</strong>.<br />

Mit dem steigenden Angebot der vorhandenen Informationen und Dienste manifestieren sich<br />

jedoch auch e<strong>in</strong>ige Probleme für den Benutzer:<br />

• Aus der Menge aller Informationsanbieter muß der Benutzer die für ihn potentiell<br />

<strong>in</strong>teressanten Quellen erst herausfiltern. Dies bedeutet für ihn nicht nur e<strong>in</strong>en hohen<br />

zeitlichen Aufwand, sondern stellt für ungeübte Benutzer e<strong>in</strong>e oft nur schwer<br />

überw<strong>in</strong>dbare Hürde dar.<br />

• Handelt es sich um kostenpflichtige Informationen, möchte der Benutzer <strong>in</strong> der Regel<br />

e<strong>in</strong>en Kostenvergleich aufstellen. Dies ist jedoch im allgeme<strong>in</strong>en nur sequentiell durch<br />

Besuch aller potentiellen Informationsquellen möglich, also mit e<strong>in</strong>em zeitlich hohen<br />

Aufwand verbunden. Ist bereits die Informationssuche an sich kostenpflichtig, ist es<br />

dem Benutzer kaum möglich, die entstehenden Kosten im voraus abzuschätzen.<br />

• Neue Informationsanbieter haben das Problem, sich dem Benutzer geeignet<br />

anzubieten, da bereits existierende Anbieter durch ihren Bekanntheitsgrad mehr<br />

Benutzer anziehen. Existieren bessere und im Falle kostenpflichtiger Quellen<br />

günstigere Anbieter, ist es zum Vorteil von Benutzer und Anbieter, wenn ersterer über<br />

das Vorhandense<strong>in</strong> des zweiten <strong>in</strong> Kenntnis gesetzt wird.<br />

• Unterschiedliche Darstellung und Bedienung der Informationsquellen zw<strong>in</strong>gen den<br />

Benutzer, den Umgang mit jeder Informationsquelle zunächst zu erlernen. Zudem<br />

erfordern Änderungen h<strong>in</strong>sichtlich der Darstellung und Bedienung, die <strong>in</strong> den Quellen<br />

von Zeit zu Zeit auftreten können, e<strong>in</strong> erneutes Umlernen.<br />

• Bei der gleichen Informationssuche <strong>in</strong> verschiedenen Quellen müssen die<br />

Suchparameter jedesmal erneut vom Benutzer angegeben werden. Zudem existieren<br />

beim Benutzer meist immer gleichbleibende Suchkriterien, welche die Recherche stets<br />

e<strong>in</strong>schränken, wie zum Beispiel die verwendete Sprache oder Zahlungsarten. Diese<br />

Informationen will der Benutzer nur e<strong>in</strong>mal festlegen müssen und sicher se<strong>in</strong>, da die<br />

dadurch gegebenen E<strong>in</strong>schränkungen bei jeder Informationssuche beachtet werden.<br />

E<strong>in</strong>ige Dienstanbieter begegnen diesen Problemen durch den Versuch, Recherchesysteme<br />

oder Meta-Suchdienste zu etablieren. Diese Recherchesysteme erlauben es dem Benutzer im<br />

allgeme<strong>in</strong>en, zeitgleich und über e<strong>in</strong> und dieselbe Benutzerschnittstelle – oft sogar mit e<strong>in</strong>er<br />

e<strong>in</strong>zigen Suchanfrage – <strong>in</strong> verschiedenen Informationsquellen zu recherchieren und somit auf<br />

e<strong>in</strong>fache Art und Weise die Angebote verschiedener Anbieter zu vergleichen. Auf der anderen<br />

Seite können sich die Informationsanbieter <strong>in</strong> e<strong>in</strong> solches System e<strong>in</strong>b<strong>in</strong>den und auf direktem<br />

Weg den Benutzer erreichen.<br />

E<strong>in</strong> bereits existierendes Recherchesystem ist das UniCats-i-System der Universität<br />

Karlsruhe. In diesem System erfolgt die Anb<strong>in</strong>dung der e<strong>in</strong>zelnen Anbieter und Quellen von<br />

Informationen über <strong>Wandler</strong>, die auf die Internetseiten der Anbieter zugreifen. Die<br />

semiautomatische <strong>Generierung</strong> dieser <strong>Wandler</strong>, die <strong>in</strong> vorangegangenen Arbeiten [Schneider<br />

2001] realisiert wurde, stellt e<strong>in</strong>en großen Fortschritt gegenüber der sehr fehlerträchtigen und<br />

zeitaufwendigen manuellen <strong>Generierung</strong> dar. Allerd<strong>in</strong>gs steht das System auch bei E<strong>in</strong>satz<br />

dieses Verfahrens noch vor e<strong>in</strong>er Reihe von Problemen:<br />

1


• E<strong>in</strong>e kle<strong>in</strong>e Änderung auf Anbieterseite kann im schlimmsten Fall zu e<strong>in</strong>em<br />

kompletten Ausfall der Anb<strong>in</strong>dung an diesen Anbieter führen, den zu beheben das<br />

System nicht selbst <strong>in</strong> der Lage ist. In jedem Fall wird e<strong>in</strong> adm<strong>in</strong>istrativer E<strong>in</strong>griff zur<br />

Anpassung des betroffenen <strong>Wandler</strong>s notwendig, um dessen korrekte Funktion sicher-<br />

oder wiederherzustellen. Dies ist durch die bestehenden Werkzeuge zwar ohne<br />

besonders großen Aufwand zu erledigen, aber bis die Notwendigkeit des E<strong>in</strong>griffs von<br />

e<strong>in</strong>em Adm<strong>in</strong>istrator bemerkt wird, ist die Anb<strong>in</strong>dung an den betroffenen Anbieter<br />

fehlerhaft oder ausgefallen.<br />

• Gerade <strong>in</strong> e<strong>in</strong>em späteren, groß dimensionierten praktischen E<strong>in</strong>satz-Szenario des<br />

UniCats-i-Systems mit Hunderten oder gar Tausenden von Anbietern kann dies e<strong>in</strong>e<br />

längere Zeit <strong>in</strong> Anspruch nehmen. Dies zu vermeiden, zieht durch die Notwendigkeit<br />

der regelmäßigen Funktionskontrolle aller Anbieter-Anb<strong>in</strong>dungen e<strong>in</strong>en erheblichem<br />

Adm<strong>in</strong>istrationsaufwand nach sich.<br />

• Der Ausfall der Anb<strong>in</strong>dung e<strong>in</strong>es Anbieters führt zum e<strong>in</strong>en zu dessen<br />

Benachteiligung gegenüber se<strong>in</strong>en Konkurrenten, zum anderen zu e<strong>in</strong>er<br />

unvollständigen Information des Kunden.<br />

E<strong>in</strong>e <strong>Generierung</strong> und Anpassung der <strong>Wandler</strong> durch e<strong>in</strong>en <strong>in</strong> das System <strong>in</strong>tegrierten<br />

vollautomatischen Generator kann die oben genannten Probleme beheben. Zudem kann die<br />

Anb<strong>in</strong>dung neuer Anbieter und Quellen im Idealfall alle<strong>in</strong> durch Angabe der E<strong>in</strong>stiegsseite <strong>in</strong><br />

Form e<strong>in</strong>er URL erfolgen, da die <strong>Generierung</strong> e<strong>in</strong>es passenden <strong>Wandler</strong>s durch den<br />

vollautomatischen Generator selbständig erfolgt.<br />

1.2 Aufgabenstellung<br />

Im Rahmen der vorliegenden Arbeit soll e<strong>in</strong> vollautomatischer <strong>Wandler</strong>-Generator entworfen,<br />

implementiert und getestet werden. Dieser soll sowohl als eigenständiger Teil des UniCats-i-<br />

Systems <strong>in</strong> Form e<strong>in</strong>es Agenten als auch im Rahmen e<strong>in</strong>es vom System unabhängigen<br />

Werkzeuges e<strong>in</strong>setzbar se<strong>in</strong>. Die generierten Quellenbeschreibungen sollen den <strong>Wandler</strong>-<br />

Agenten des UniCats-i-Systems befähigen, ohne sonstige Anpassungen durch das Stellen von<br />

Suchanfragen und das anschließende Auslesen der Suchergebnisse auf die beschriebene<br />

Informationsquelle zuzugreifen und sie somit <strong>in</strong> das UniCats-i-System zu <strong>in</strong>tegrieren und für<br />

se<strong>in</strong>e Benutzer verfügbar zu machen.<br />

Die bisherigen Möglichkeiten des <strong>Wandler</strong>s und des im Rahmen von [Schneider 2001]<br />

realisierten Generators sollen um folgende Fähigkeiten ergänzt werden:<br />

• Neben der Suchen über HTML-Formulare mit der Standard-Methode GET soll auch<br />

die Suche über Formulare mit der Methode POST ermöglicht werden. Dies wird<br />

aufgrund der immer komplexer werdenden Suchformulare notwendig, die zur<br />

Übertragung ihrer Vielzahl von Variablen <strong>in</strong> zunehmendem Maße die Methode POST<br />

zur Anwendung br<strong>in</strong>gen.<br />

• S<strong>in</strong>d mehrere Informationen nur <strong>in</strong>nerhalb e<strong>in</strong>es Str<strong>in</strong>gs als Gesamtheit verfügbar, so<br />

ist es dem bestehenden <strong>Wandler</strong> nicht möglich, auf diese e<strong>in</strong>zeln zuzugreifen. Der zu<br />

schaffende Generator soll <strong>in</strong> der Lage se<strong>in</strong>, reguläre Ausdrücke zu generieren, deren<br />

Anwendung auf e<strong>in</strong>en solchen Gesamtstr<strong>in</strong>g jeweils e<strong>in</strong>e e<strong>in</strong>zelne Information<br />

heraustrennt und sie somit e<strong>in</strong>zeln verfügbar macht.<br />

1.3 Gliederung der Arbeit<br />

In Kapitel 2 werden zunächst e<strong>in</strong>ige Grundlagen dargestellt, die das Umfeld dieser Arbeit<br />

wesentlich bee<strong>in</strong>flussen.<br />

Kapitel 3 stellt des UniCats-i-System vor, <strong>in</strong> dessen Rahmen die <strong>in</strong> dieser Arbeit entworfenen<br />

und implementierten Software-Komponenten e<strong>in</strong>gesetzt werden sollen. Dabei werden<br />

2


<strong>in</strong>sbesondere die Rolle des Generator-Agenten im Zusammenspiel der UniCats-i-Agenten und<br />

die sich daraus ergebenden Anforderungen an diesen Agenten beleuchtet.<br />

Da neben dem UniCats-i-System auch andere Recherchesysteme existieren, die Anbieter von<br />

Informationen mithilfe von <strong>Wandler</strong>n <strong>in</strong>tegrieren, werden <strong>in</strong> Kapitel 4 solche Projekte speziell<br />

daraufh<strong>in</strong> untersucht, welche Ansätze sie zur <strong>Generierung</strong> dieser <strong>Wandler</strong> verfolgen und<br />

welche Werkzeuge dabei zum E<strong>in</strong>satz kommen. Ebenso wird der bereits existierende<br />

<strong>Wandler</strong>-Generator des UniCats-i-Systems untersucht.<br />

In Kapitel 5 wird auf Basis der Anforderungen der Aufgabenstellung sowie der <strong>in</strong> den<br />

Kapiteln 3 und 4 gezogenen Schlüsse e<strong>in</strong> vollautomatischer <strong>Wandler</strong>-Generator konzipiert.<br />

Das Konzept wird anschließend zu e<strong>in</strong>em konkreten Entwurf weiterentwickelt.<br />

Kapitel 6 beschäftigt sich mit der Implementierung des <strong>in</strong> Kapitel 5 erstellten Entwurfes.<br />

Dabei wird sowohl auf die Umsetzung der Algorithmen e<strong>in</strong>gegangen als auch auf die zu ihrer<br />

Realisierung notwendigen implementierten Zusatzpakete, abstrakten Datentypen und<br />

Hilfsstrukturen.<br />

Die dem Benutzer zur Verfügung gestellten Werkzeuge zur <strong>in</strong>teraktiven Anwendung der<br />

Ergebnisse dieser Arbeit werden <strong>in</strong> Kapitel 7 beschrieben. Dabei wird <strong>in</strong>sbesondere auf ihre<br />

Funktionsweise und Bedienung e<strong>in</strong>gegangen.<br />

Kapitel 8 beschäftigt sich mit der Evaluierung der im Rahmen der Arbeit erstellten<br />

Komponenten und Werkzeuge.<br />

Die Zusammenfassung und der Ausblick des Kapitels 9 bilden den Schlußpunkt der Arbeit.<br />

3


2. Grundlagen<br />

In diesem Kapitel werden e<strong>in</strong>ige Grundlagen behandelt, die das Umfeld dieser Arbeit<br />

bestimmen und daher näher erläutert werden sollen.<br />

Das UniCats-i-System setzt sich aus Agenten zusammen, deren Kommunikation auf der Basis<br />

von Webservices abläuft. Daher spielen beide Technologien für diese Arbeite e<strong>in</strong>e<br />

gleichermaßen entscheidende Rolle und sollen hier erklärt werden.<br />

Die Markierungssprache HyperText Markup Language (HTML) stellt den gängigen Standard<br />

für die Formatierung im Internet angebotener Informationen dar. Damit ist sie die Sprache, <strong>in</strong><br />

der die E<strong>in</strong>gabe der <strong>Wandler</strong> formatiert ist und auf der <strong>Wandler</strong> und damit auch der zu<br />

schaffende <strong>Wandler</strong>-Generator arbeiten müssen. Sie ist daher von großer Bedeutung für diese<br />

Arbeit. Die Struktur e<strong>in</strong>er Markierungssprache läßt sich wiederum durch e<strong>in</strong>e<br />

Def<strong>in</strong>itionssprache wie die Standard Generalized Markup Language (SGML) oder die<br />

eXtensible Markup Language (XML), e<strong>in</strong>er Untermenge von SGML, beschreiben. HTML-<br />

Dokumente wie auch durch XML def<strong>in</strong>ierte Dokumenttypen können durch das Document<br />

Object Model (DOM) beschrieben werden.<br />

Aufgrund der Möglichkeit, HTLM- und XML-Dokumente mithilfe des DOM zu beschreiben,<br />

lassen sie sich durch e<strong>in</strong>en geeigneten Parser <strong>in</strong> e<strong>in</strong>e zum Dokument äquivalente<br />

Baumdarstellung überführen. Diese ist für die Arbeit besonders wichtig, da für Bäume<br />

effiziente Algorithmen und Pfad-basierte Anfragesprachen über hierarchische Pfadausdrücke<br />

existieren und sie somit e<strong>in</strong>e gute Arbeitsgrundlage für <strong>Wandler</strong> darstellen. Ebenso wird auf<br />

Möglichkeiten zum Vergleichen von HTML-Dokumenten e<strong>in</strong>gegangen.<br />

Die Kenntnis von <strong>Wandler</strong>n schließlich ist für deren <strong>Generierung</strong> logischerweise<br />

unabd<strong>in</strong>gbar. Daher soll hier kurz erläutert werden, was genau unter <strong>Wandler</strong>n zu verstehen<br />

ist und welche Aufgaben sie erfüllen. Auf unterschiedliche Ansätze und Funktionspr<strong>in</strong>zipien<br />

von <strong>Wandler</strong>n wird <strong>in</strong> e<strong>in</strong>em späteren Kapitel dieser Arbeit e<strong>in</strong>gegangen.<br />

2.1 Agenten<br />

E<strong>in</strong> Agent ist e<strong>in</strong> Stück Software, welches selbständig auf gewisse Ereignisse und E<strong>in</strong>flüsse<br />

von außen reagieren kann. E<strong>in</strong> Agent agiert autonom. Dies stellt <strong>in</strong>sofern e<strong>in</strong>en Vorteil<br />

gegenüber e<strong>in</strong>em herkömmlichen System dar, als daß e<strong>in</strong> Agent eventuell auf nicht<br />

vorhersehbare Ereignisse reagieren kann, woh<strong>in</strong>gegen solche <strong>in</strong> e<strong>in</strong>em herkömmlichen<br />

System im schlimmsten Fall e<strong>in</strong>en Absturz verursachen können.<br />

E<strong>in</strong>e e<strong>in</strong>deutige Def<strong>in</strong>ition e<strong>in</strong>es Agenten ist schwer zu f<strong>in</strong>den. E<strong>in</strong>e sehr neutrale Def<strong>in</strong>ition<br />

von Wooldridge und Jenn<strong>in</strong>gs [Wooldridge 2000] lautet folgendermaßen:<br />

„An Agent is a computer system that is situated <strong>in</strong> some environment, and that<br />

is capable of autonomous action <strong>in</strong> this environment <strong>in</strong> order to meet its design<br />

objectives.“<br />

Wooldridge [Wooldridge 2002] beschreibt zusätzlich <strong>in</strong>telligente Agenten, die e<strong>in</strong> flexibles<br />

Verhalten aufweisen.<br />

Diese Flexibilität zeichnet sich durch folgende Eigenschaften aus:<br />

• Reaktivität: Die Fähigkeit, auf wahrgenommene Veränderungen der Umgebung -<br />

unter Berücksichtigung der verfolgten Ziele - zeitlich angemessen reagieren zu<br />

können.<br />

• Proaktivität: Die Fähigkeit, Handlungen aus eigenem Antrieb zu <strong>in</strong>itiieren, um Ziele<br />

zu erreichen.<br />

• Soziale Kompetenz: Die Fähigkeiten, die zur Interaktion mit anderen Agenten<br />

notwendig bzw. förderlich s<strong>in</strong>d und auf diesem Weg letztlich das Erreichen von Zielen<br />

begünstigen mögen, etwa durch Kommunikation, Koord<strong>in</strong>ation und Kooperation.<br />

5


„Es ist anzumerken, daß <strong>in</strong>sbesondere die Balance zwischen Reaktivität und<br />

Proaktivität e<strong>in</strong> schwieriges Unterfangen ist, welches selbst Menschen Probleme<br />

bereitet. Auf der e<strong>in</strong>en Seite sollen bestimmte Ziele erreicht werden, auf der<br />

anderen Seite muß man auf e<strong>in</strong>e ständig wechselnden Umgebung reagieren und<br />

dabei die eigenen Ziele ständig anpassen. E<strong>in</strong>e der Eigenschaften alle<strong>in</strong>e zu<br />

erreichen, ist dagegen recht e<strong>in</strong>fach; erst die Komb<strong>in</strong>ation macht die<br />

Schwierigkeit aus.“ [D<strong>in</strong>kloh 2003].<br />

2.2 Webservices<br />

”E<strong>in</strong> Webservice ist e<strong>in</strong>e über das Netzwerk zugängliche Schnittstelle zu<br />

Anwendungsfunktionen, die mit Hilfe von Standardtechniken des Internets<br />

realisiert wird.“[Snell 2002]<br />

E<strong>in</strong> Webservice ist somit – praktisch gesprochen – e<strong>in</strong>e Methode oder e<strong>in</strong>e Prozedur, die man<br />

auf e<strong>in</strong>em beliebigen Rechner <strong>in</strong> e<strong>in</strong>em Netzwerk ausführen kann. Sie kann auf e<strong>in</strong>em<br />

Rechner <strong>in</strong> e<strong>in</strong>er beliebigen Programmiersprache implementiert se<strong>in</strong>. Da die Schnittstellen<br />

sich an e<strong>in</strong>en Standard halten, ist Interoperabilität zwischen verschiedenen Betriebssystemen<br />

möglich.<br />

”Webservices s<strong>in</strong>d e<strong>in</strong> nachrichtenorientiertes System. Die e<strong>in</strong>zige<br />

E<strong>in</strong>schränkung, der Webservices unterliegen, besteht dar<strong>in</strong>, daß sie Nachrichten<br />

mit Hilfe e<strong>in</strong>er Komb<strong>in</strong>ation von Standard-Internetprotokollen senden und<br />

empfangen können müssen.“[Snell 2002]<br />

Nach außen gesehen verhält sich e<strong>in</strong> Webservice wie e<strong>in</strong>e Blackbox. Es wird e<strong>in</strong>e Nachricht<br />

h<strong>in</strong>e<strong>in</strong>geschickt, diese wird <strong>in</strong>tern bearbeitet und es wird e<strong>in</strong>e Antwort zurückgegeben. UDDI,<br />

WSDL und SOAP stellen die zentralen Elemente für den Bau von allgeme<strong>in</strong> e<strong>in</strong>setzbaren<br />

Schnittstellen für Webservices dar. Diese benötigen e<strong>in</strong>e zentrale Registrierung. Dazu<br />

gründeten Ariba, IBM und Microsoft die UDDI-Initiative, der mittlerweile über 220 weitere<br />

Unternehmen beigetreten s<strong>in</strong>d. Um e<strong>in</strong>en Webservice nutzbar machen zu können, muß e<strong>in</strong>e<br />

Beschreibung von ihm existieren, die darstellt, wie er über das Internet kommunizieren kann.<br />

Die Beschreibung def<strong>in</strong>iert zum e<strong>in</strong>en den <strong>in</strong>haltlichen Aufbau der Nachrichten, die sie<br />

austauschen. Hier nahm das WWW-Konsortium [W3C] den Vorschlag Web Service<br />

Description Language (WSDL) an, den unter anderem HP, IBM, Intel, Microsoft, Oracle und<br />

SAP e<strong>in</strong>reichten. Zum anderen müssen sich die Webservices auf e<strong>in</strong> e<strong>in</strong>heitliches Transport-<br />

Protokoll e<strong>in</strong>igen. Dieses def<strong>in</strong>iert, wie Webservices ihre Nachrichten über das Internet<br />

verschicken. Hier kommt SOAP <strong>in</strong>s Spiel, das festlegt, wie die Services über HTTP XML-<br />

Nachrichten austauschen.<br />

2.2.1 SOAP<br />

Das Simple Object Access Protokoll (SOAP) hat sich als e<strong>in</strong> Standard bei der Übertragung<br />

von Nachrichten zwischen Anwendungen – speziell auch für Webservices – etabliert. Es stellt<br />

lediglich e<strong>in</strong>e feste „Verpackungse<strong>in</strong>heit“ für e<strong>in</strong>zelne Objektdaten dar, welche durch e<strong>in</strong><br />

Netzwerk, respektive das Internet gesendet werden. Durch diese e<strong>in</strong>heitliche „Verpackung“<br />

ist es letztendlich irrelevant, <strong>in</strong> welcher Programmiersprache e<strong>in</strong> Webservice implementiert<br />

ist, entscheidend ist lediglich, daß sich die Implementierung an den SOAP Standard hält.<br />

„SOAP ist XML. Das heißt, SOAP ist e<strong>in</strong>e Anwendung der XML-Spezifikation.<br />

SOAP stützt sich <strong>in</strong> Def<strong>in</strong>ition und Arbeitsweise stark auf XML-Standards wie<br />

XML-Schema und XML-Namespaces.“[Snell 2002]<br />

E<strong>in</strong>e SOAP-Nachricht besteht immer aus e<strong>in</strong>em Request- und e<strong>in</strong>em Response-Teil. Die<br />

beiden Nachrichten s<strong>in</strong>d gleich aufgebaut, unterscheiden sich jedoch <strong>in</strong> Bezug auf den Inhalt.<br />

6


Als erstes enthält die SOAP-Nachricht e<strong>in</strong>en HTTP-Header, der aber für die Ausführung e<strong>in</strong>es<br />

Webservice ke<strong>in</strong>erlei relevante Informationen enthält. Daraufh<strong>in</strong> folgt e<strong>in</strong> Teil, der zum e<strong>in</strong>en<br />

den Namen der aufgerufenen Funktion bzw. Methode be<strong>in</strong>haltet, zum anderen Typen und<br />

Werte der übergebenen Parameter. E<strong>in</strong> beispielhafter Request könnte folgendes Aussehen<br />

besitzen:<br />

<br />

<br />

<br />

<br />

42<br />

<br />

<br />

<br />

2.2.2 WSDL<br />

In der Web Service Description Language (WSDL) wird beschrieben, welche Informationen <strong>in</strong><br />

den SOAP-Nachrichten se<strong>in</strong> müssen. WSDL beruht auf XML und beschreibt, wie der<br />

Versender e<strong>in</strong>e Nachricht strukturieren muß. E<strong>in</strong> Webservice def<strong>in</strong>iert mit Hilfe von WSDL<br />

also se<strong>in</strong>e Schnittstellen. Er legt fest, welche Nachrichten er annimmt, welche Informationen<br />

(Parameter) die Nachricht enthalten muß und welche Antworten er mit welchen Parametern<br />

zurückgibt. Damit bildet WSDL e<strong>in</strong>e Interface Def<strong>in</strong>ition Language (IDL) für Webservices.<br />

Die Def<strong>in</strong>ition von WSDL erfolgt im W3C [W3C] unabhängig von e<strong>in</strong>er bestimmten<br />

Transportschicht. Derzeit werden WSDL über so genannte B<strong>in</strong>d<strong>in</strong>gs drei Transport-<br />

Möglichkeiten zugeordnet: SOAP, HTTP und MIME (Multi Purpose Internet Mail<br />

Extensions). Der generelle Aufbau e<strong>in</strong>er WSDL-Beschreibung für e<strong>in</strong>en e<strong>in</strong>fachen Webservice<br />

ist wie folgt:<br />

• Typdef<strong>in</strong>itionen<br />

• Nachrichtendef<strong>in</strong>ition<br />

• Porttypdef<strong>in</strong>ition<br />

• B<strong>in</strong>dungen<br />

• Dienstdef<strong>in</strong>ition<br />

Dies sei an folgender e<strong>in</strong>facher Methode erläutert:<br />

public class example {<br />

private <strong>in</strong>t verbosity = 5;<br />

private Str<strong>in</strong>g url =<br />

"http://localhost:8079/example/services/example";<br />

}<br />

public Str<strong>in</strong>g getUserNameFromID(<strong>in</strong>t id) {<br />

return "User" + id;<br />

}<br />

In der Typdef<strong>in</strong>ition der WSDL Beschreibung können <strong>in</strong>dividuelle Typen def<strong>in</strong>iert werden,<br />

welche an dem Funktionsaufruf beteiligt s<strong>in</strong>d [W3C, Walsh 2002]. In obrigem Beispiel ist<br />

dies nicht notwendig, da ke<strong>in</strong>e nicht-primitiven Datentypen am Funktionsaufruf beteiligt s<strong>in</strong>d.<br />

Im nächsten Abschnitt, der Nachrichtendef<strong>in</strong>ition, werden die e<strong>in</strong>gehenden und ausgehenden<br />

Nachrichten spezifiziert. Dies be<strong>in</strong>haltet die Übergabeparameter und den Rückgabewert.<br />

7


<br />

<br />

<br />

<br />

<br />

In der sogenannten Porttypdef<strong>in</strong>ition wird die Reihenfolge der zu übergebenden Parameter<br />

festgelegt. Dazu kommt die Angabe, welche der vorher def<strong>in</strong>ierten Nachrichten E<strong>in</strong>gabe-<br />

bzw. Ausgabenachrichten s<strong>in</strong>d. Im Beispiel ist getUserNameFromIDRequest die e<strong>in</strong>gehende<br />

und getUserNameFromIDResponse die ausgehende Nachricht.<br />

<br />

<br />

<br />

<br />

<br />

<br />

In den B<strong>in</strong>d<strong>in</strong>gs wird festgelegt, welches Protokoll zur Übertragung der Daten verwendet<br />

werden soll. Zur Auswahl stehen Erweiterungen von SOAP, HTTP GET/POST und MIME. In<br />

den B<strong>in</strong>d<strong>in</strong>gs muß genau e<strong>in</strong> Protokoll def<strong>in</strong>iert werden. Im Beispiel ist dies e<strong>in</strong>e Erweiterung<br />

zu SOAP.<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

In der Dienstdef<strong>in</strong>ition wird die Adresse angegeben, unter welcher der Webservice bzw. das<br />

dazugehörige B<strong>in</strong>d<strong>in</strong>g später erreichbar ist. Dies be<strong>in</strong>haltet auch die Angabe e<strong>in</strong>es Ports.<br />

<br />

<br />

<br />

<br />

<br />

2.2.3 WSCL<br />

Für den Zugriff auf e<strong>in</strong>en Webservice spielt die Reihenfolge der Nachrichten, <strong>in</strong> der diese<br />

ausgetauscht werden, e<strong>in</strong>e entscheidende Rolle. WSDL kann diese nicht def<strong>in</strong>ieren, da es nur<br />

Schnittstellen und ke<strong>in</strong>e Interaktionen beschreibt. Aus diesem Grunde wurde die WebService<br />

Conservations Language (WSCL) e<strong>in</strong>geführt. WSCL-Dokumente beschreiben die Reihenfolge,<br />

<strong>in</strong> der die XML-Nachrichten für den ordnungsgemäßen Ablauf e<strong>in</strong>es Webservice-Zugriffs<br />

8


ausgetauscht werden müssen. Damit ermöglicht WSCL auch die Veröffentlichung von<br />

komplexen Webservices, bei denen e<strong>in</strong> Zugriff nicht nur aus e<strong>in</strong>er Anfrage und e<strong>in</strong>er Antwort<br />

besteht. Sobald WSDL-Def<strong>in</strong>itionen <strong>in</strong> der UDDI-Registry veröffentlicht werden, legt e<strong>in</strong><br />

Webservice-Anbieter entsprechende WSCL-Beschreibungen <strong>in</strong> der Registry ab. E<strong>in</strong><br />

zugreifendes Programm lädt dann die entsprechenden Def<strong>in</strong>itionen.<br />

2.2.4 UDDI<br />

Nachdem e<strong>in</strong>e Beschreibung e<strong>in</strong>es Webservice erzeugt wurde, muß e<strong>in</strong> potentieller Nutzer <strong>in</strong><br />

die Lage versetzt werden, diesen Dienst f<strong>in</strong>den zu können. Dazu dient das UDDI-Projekt<br />

(Universal Description, Discovery, and Integration), welches e<strong>in</strong> durchsuchbares Register<br />

von Diensten und deren Beschreibungen darstellt.<br />

„UDDI besteht aus zwei Teilen: E<strong>in</strong>er Registry aller Metadaten e<strong>in</strong>es<br />

Webservice (e<strong>in</strong>schließlich e<strong>in</strong>es Verweises auf die WSDL-Beschreibung e<strong>in</strong>es<br />

Dienstes) sowie aus e<strong>in</strong>er Reihe von WSDL-Port-Typ-Def<strong>in</strong>itionen zum<br />

Verändern und Durchsuchen dieser Registratur.“ [Snell 2002].<br />

2.3 SGML<br />

Die Standard Generalized Markup Language (SGML) [Rieger 1995, Goldfarb 1991] ist e<strong>in</strong><br />

ISO-Standard zur Beschreibung von Dokumentstrukturen. Sie ist zugleich als standardisiertes<br />

Dateiformat zum Austausch von Dokumenten zu sehen. SGML erlaubt dabei durch e<strong>in</strong>en<br />

(programmier-)sprachlichen Ansatz, e<strong>in</strong> Regelwerk für Dokumente (Document Type<br />

Def<strong>in</strong>ition, DTD) festzulegen, bei dem Syntax und Semantik getrennt def<strong>in</strong>iert werden<br />

können. SGML standardisiert jedoch nur die Sprache zum Entwickeln e<strong>in</strong>es solchen<br />

Regelwerkes, nicht das Regelwerk selbst. Für e<strong>in</strong> Dokument ist es nicht ausreichend zu sagen,<br />

es liegt im SGML-Format vor, vielmehr ist logisch betrachtet die DTD e<strong>in</strong> Teil des<br />

Dokuments.<br />

2.4 HTML<br />

Die HyperText Markup Language (HTML) [W3C] ist das Format, <strong>in</strong> dem die Text- und<br />

Hypertext-Informationen im Internet gespeichert und übertragen werden und ist mittels der<br />

Sprachdef<strong>in</strong>ition SGML def<strong>in</strong>iert, entspricht also e<strong>in</strong>em SGML-Document-Type. HTML<br />

unterstützt e<strong>in</strong> logisches Markup, bei dem die logische Bedeutung der Textteile festgelegt<br />

wird, so da sie von e<strong>in</strong>em Web-Browser <strong>in</strong> e<strong>in</strong>er geeigneten Art und Weise <strong>in</strong>terpretiert und<br />

dargestellt werden können. HTML ist e<strong>in</strong>e e<strong>in</strong>gebettete Sprache, was bedeutet, die HTML-<br />

Befehle werden im Dokument selbst plaziert.<br />

Die HTML-Befehle, welche dieses logische Markup beschreiben, werden auch Tags genannt.<br />

E<strong>in</strong> Tag besteht dabei aus e<strong>in</strong>em Tag-Namen und e<strong>in</strong>er optionalen Reihe von Tag-Attributen<br />

und wird von e<strong>in</strong>em Paar spitzer Klammern („< .... >“) umrahmt. Die meisten Tags bestehen<br />

aus e<strong>in</strong>em Anfangs- und e<strong>in</strong>em Ende-Tag und bee<strong>in</strong>flussen nur den Textabschnitt, der sich<br />

zwischen diesen beiden Teilen bef<strong>in</strong>det. Das Ende-Tag besitzt den gleichen Tag-Namen h<strong>in</strong>ter<br />

e<strong>in</strong>em normalen Schrägstrich („/“), die Attribute entfallen.<br />

<br />

...<br />

<br />

Des weiteren existieren auch e<strong>in</strong>ige HTML-Befehle ohne Ende-Tag, welche den kompletten<br />

nachfolgenden Dokumentteil bee<strong>in</strong>flussen und aus diesem Grund ke<strong>in</strong>e End-Markierung<br />

benötigen, oder aber für sich stehen und ke<strong>in</strong>e weiteren Tags enthalten können.<br />

9


2.5 XML<br />

Die eXtensible Markup Language (XML) [W3C] ist e<strong>in</strong>e Untermenge von SGML und eignet<br />

sich ebenfalls zur Def<strong>in</strong>ition von Dokumenttypen. Die Syntax, Struktur und Bedeutung der<br />

Tags wird <strong>in</strong> XML wie <strong>in</strong> SGML mit e<strong>in</strong>er Document Type Def<strong>in</strong>ition (DTD) oder e<strong>in</strong>em<br />

Schema def<strong>in</strong>iert. Wie die Elemente sichtbar dargestellt werden sollen, kann mit der<br />

eXtensible Stylesheet Language (XSL) oder durch Cascad<strong>in</strong>g Style Sheets (CCS) def<strong>in</strong>iert<br />

werden. Die Grundidee von XML ist letztlich, die logische Bedeutung von Daten,<br />

Informationen und Texten festzulegen. XML unterscheidet sich von HTML unter anderem<br />

dadurch, daß Informationsanbieter eigene Tags und deren Attribute nach Bedarf selbst<br />

def<strong>in</strong>ieren können. Durch die gegenüber HTML deutlich strengere Syntax von XML ist es<br />

zudem wesentlich e<strong>in</strong>facher und effizienter, XML-Dokumente auszutauschen und <strong>in</strong>nerhalb<br />

von Programmen weiterzuverarbeiten.<br />

2.6 DOM<br />

Das Document Object Model (DOM) [W3C] des WWW-Konsortiums ist e<strong>in</strong>e plattform- und<br />

sprachunabhängige Schnittstellendef<strong>in</strong>ition, welche es erlaubt, sowohl XML- als auch HTML-<br />

Dokumente zu beschreiben. Es ermöglicht dabei sowohl e<strong>in</strong>en dynamischen Zugriff, als auch<br />

die dynamische Bearbeitung der Dokumente und hat sich mittlerweile <strong>in</strong> zahlreichen<br />

Implementierungen dieser Schnittstellendef<strong>in</strong>itionen bewährt.<br />

Die DOM-Spezifikation ist <strong>in</strong> drei Teile untergliedert: Das Kernmodul, das HTML-Modul und<br />

das XML-Modul. Die Schnittstellen des Kernmoduls s<strong>in</strong>d m<strong>in</strong>imal gehalten und repräsentieren<br />

dabei strukturierte Dokumente. Sie s<strong>in</strong>d somit die Basis für Zugriffe sowohl auf XML-, als<br />

auch auf HTML-Dokumente. Das HTML- und das XML-Modul unterstützen e<strong>in</strong>e zusätzliche,<br />

auf spezielle Bedürfnisse des Dokumenttyps angepaßte Sicht und erlauben e<strong>in</strong>en leichteren<br />

direkteren Zugriff auf das jeweilige Dokument.<br />

DOM wurde bisher <strong>in</strong> drei Stufen (Levels) entwickelt: Stufe 1 def<strong>in</strong>iert das Kern-, HTML- und<br />

XML-Modell. Stufe 2 enthält e<strong>in</strong> Style Sheet Object Model mitsamt der Funktionalität, diese<br />

Style Sheets e<strong>in</strong>es Dokuments zu bearbeiten. Zudem enthält diese Stufe die Möglichkeit,<br />

Dokumente zu traversieren, def<strong>in</strong>iert e<strong>in</strong> Modell zur Ereignissteuerung und unterstützt XML-<br />

Namensräume. Stufe 3 def<strong>in</strong>iert das Laden und Speichern von Dokumenten sowie die zu den<br />

Dokumenten gehörenden Modelle wie e<strong>in</strong>e DTD. Weiterh<strong>in</strong> realisiert sie Sichten auf<br />

Dokumente und deren Formatierung und ermöglicht Ereignisse und Ereignisgruppen.<br />

2.7 Baumdarstellung e<strong>in</strong>es HTML-Dokumentes<br />

Abbildung 2.1: Seite im Browser<br />

10


Jedes korrekte HTML-Dokument kann auf e<strong>in</strong>e Baumdarstellung, genauer auf e<strong>in</strong>e Tag-<br />

Hierarchie abgebildet werden [Flanagan 1998]. Dieser Baum ist so aufzubauen, daß e<strong>in</strong><br />

<strong>in</strong>nerer Tag stets K<strong>in</strong>d des nächst äußeren Tags ist. Die Abbildungen 2.1, 2.2 und 2.3 zeigen<br />

e<strong>in</strong>e Seite <strong>in</strong> e<strong>in</strong>em gängigen Browser, den Quelltext dieser Seite sowie se<strong>in</strong>e<br />

Baumdarstellung.<br />

E<strong>in</strong>e wichtige Eigenschaft von HTML-Dokumenten und HTML-Bäumen ist, daß e<strong>in</strong>e<br />

äquivalente Abbildung von korrekten HTML-Dokumenten <strong>in</strong> die zugehörigen<br />

Baumdarstellungen möglich ist. Korrekt bedeutet hier die E<strong>in</strong>haltung der dem HTML-<br />

Standard zugrundeliegenden Sprachdef<strong>in</strong>itionen, was <strong>in</strong> der Realität jedoch <strong>in</strong> der Regel nicht<br />

gewährleistet ist. Mittels fehlertoleranter Parser lassen sich auch nicht korrekte HTML-<br />

Dokumente <strong>in</strong> Baumdarstellungen überführen, die zu e<strong>in</strong>er korrekten Version des<br />

Dokumentes äquivalent s<strong>in</strong>d.<br />

Der HTML-Baum besitzt drei Arten von Knoten: Den Wurzelknoten, die <strong>in</strong>ternen Knoten und<br />

die Blattknoten. Entspricht der Knoten e<strong>in</strong>em normalen HTML-Tag, so ist der Knotenname<br />

gleich dem Tag-Namen, ansonsten handelt es sich um e<strong>in</strong>e Textpassage und der Knoten erhält<br />

den Namen PcData und hat die Textpassage zum Inhalt. Der Wurzelknoten besitzt ke<strong>in</strong>en<br />

Vaterknoten und repräsentiert das -Tag. Interne Knoten repräsentieren die<br />

textumschließenden Tags, bestehend aus Anfangs- und Ende-Tags, und können auf<br />

K<strong>in</strong>dknoten verweisen. Blattknoten dürfen ke<strong>in</strong>e K<strong>in</strong>dknoten besitzen und repräsentieren<br />

Textpassagen oder Tags, die für sich alle<strong>in</strong>e stehen und nicht weiter verschachtelt werden<br />

können (z.B. oder ).<br />

Abbildung 2.2: Quelltext der Seite (gekürzt)<br />

11


Abbildung 2.3: HTML-Baum der Seite (gekürzt, BR-Tags ausgelassen)<br />

E<strong>in</strong>e weitere wichtige Eigenschaft ist die Rekonstruierbarkeit. Sie besagt, daß das Orig<strong>in</strong>al-<br />

Dokument wieder aus dem HTML-Baum durch e<strong>in</strong>e Tiefensuche gewonnen werden kann,<br />

<strong>in</strong>dem die Knotennamen ane<strong>in</strong>ander gereiht und verknüpft werden, wobei natürlich bei<br />

textumschließenden Tags zu jedem Anfangs-Tag nach den enthaltenen Tags auch e<strong>in</strong> Ende-<br />

Tag gesetzt werden muß. Dieses Verfahren stellt also die äquivalente Rückabbildung e<strong>in</strong>es<br />

HTML-Baumes <strong>in</strong> das zugehörige HTML-Dokument dar. Die Abbildung e<strong>in</strong>es (nicht<br />

unbed<strong>in</strong>gt korrekten) HTML-Dokumentes <strong>in</strong> e<strong>in</strong>en HTML-Baum und dann zurück <strong>in</strong> e<strong>in</strong><br />

korrektes HTML-Dokument kann folglich auch zur Korrektur von Fehlern <strong>in</strong> HTML-<br />

Dokumenten genutzt werde.<br />

2.8 Vergleich von HTML-Dokumenten<br />

An e<strong>in</strong>igen Stellen dieser Arbeit werden Möglichkeiten zum Vergleich von HTML-<br />

Dokumenten benötigt. Zieht man ihre Baum-Darstellung mit <strong>in</strong> Betracht, so ergeben sich drei<br />

Varianten:<br />

• Der e<strong>in</strong>fachste und exakteste Vergleich wäre die simple Überprüfung, ob die Str<strong>in</strong>g-<br />

Repräsentationen der HTML-Dokumente übere<strong>in</strong>stimmt. Dabei würde sich allerd<strong>in</strong>gs<br />

bereits durch den Austausch e<strong>in</strong>es Banners oder durch die Änderung e<strong>in</strong>es Sitzungs-<br />

Schlüssels <strong>in</strong> e<strong>in</strong>em versteckten Feld e<strong>in</strong>es Formulars () e<strong>in</strong>e<br />

Ungleichheit ergeben. E<strong>in</strong>e Gleichheit im S<strong>in</strong>ne dieses Verfahrens existiert lediglich<br />

bei vollkommen identischen HTML-Dokumenten. S<strong>in</strong>d dynamische Inhalte enthalten,<br />

wird dieser Fall nur sehr selten e<strong>in</strong>treten.<br />

• Anhand der Baum-Darstellungen der HTML-Dokumente läßt sich e<strong>in</strong>e syntaktische<br />

Gleichheit def<strong>in</strong>ieren: Zwei HTML-Dokumente s<strong>in</strong>d dann gleich, wenn ihre Baum-<br />

Darstellungen übere<strong>in</strong>stimmen. Als Kriterium der Übere<strong>in</strong>stimmung zweier Knoten<br />

wird lediglich die Gleichheit der durch sie repräsentierten HTML-Tags herangezogen,<br />

nicht aber ihre Parameter oder, bei PcData-Knoten, ihr Wert. Dadurch wird e<strong>in</strong>e<br />

12


Abstraktion der Gleichheit vom dargestellten Inhalt der HTML-Dokumente erreicht.<br />

Das bedeutet, es spielt ke<strong>in</strong>e Rolle, welcher Text oder welche Graphik angezeigt wird,<br />

sehr wohl aber, an welcher Stelle <strong>in</strong>nerhalb der Struktur des Dokumentes die Anzeige<br />

erfolgt und welches Aussehen der Text hat. Abbildung 2.4 veranschaulicht diese Art<br />

des Vergleiches: Baum 1 und Baum 2 s<strong>in</strong>d syntaktisch gleich, obwohl die Inhalte der<br />

PcData-Knoten – und damit die Str<strong>in</strong>g-Repräsentation der HTML-Dokumente – nicht<br />

übere<strong>in</strong>stimmen. Baum 1 und Baum 3 dagegen s<strong>in</strong>d trotz identischer Inhalte <strong>in</strong> den<br />

PcData-Knoten syntaktisch nicht gleich, da <strong>in</strong> Baum 3 im l<strong>in</strong>ken Zweig e<strong>in</strong> das<br />

HTML-Tag repräsentierender Knoten h<strong>in</strong>zu gekommen ist. Baum 1 und<br />

Baum 4 s<strong>in</strong>d syntaktisch nicht gleich, da <strong>in</strong> Baum 4 die Struktur der Tabelle <strong>in</strong> drei<br />

-Zweige gegliedert ist, gegenüber zwei -Zweigen <strong>in</strong> Baum 1.<br />

• Die syntaktische Gleichheit läßt sich auf e<strong>in</strong>e strukturelle Gleichheit reduzieren,<br />

<strong>in</strong>dem beim Vergleich der HTML-Bäume nur solche Knoten beachtet werden, die e<strong>in</strong><br />

HTML-Tag mit Auswirkung auf die Struktur des HTML-Dokumentes repräsentieren<br />

(z.B. , ), nicht aber solche, die für HTML-Tags zur Bee<strong>in</strong>flussung des<br />

Aussehens von dargestelltem Text stehen (z.B. , ). Das bedeutet, daß<br />

Baum 1 und Baum 3 (syntaktisch nicht gleich, siehe oben) strukturell gleich s<strong>in</strong>d, da<br />

der <strong>in</strong> Baum 3 gegenüber Baum 1 h<strong>in</strong>zu gekommene das HTML-Tag <br />

repräsentierende Knoten nicht beachtet wird. Baum 1 und Baum 4 s<strong>in</strong>d dagegen auch<br />

strukturell nicht gleich, da der Unterschied hier <strong>in</strong> e<strong>in</strong>em das HTML-Tag <br />

repräsentierenden Knoten besteht.<br />

Abbildung 2.4: Vergleich von HTML-Dokumenten<br />

Bisher wurde lediglich die Gleichheit von HTML-Dokumenten betrachtet. An manchen<br />

Stellen ist jedoch auch der Grad der Ähnlichkeit zweier HTML-Dokumente von Interesse.<br />

Unter E<strong>in</strong>beziehung der Baum-Darstellung ergeben sich wiederum drei Möglichkeiten, die zu<br />

den oben zur Feststellung der Gleichheit angeführten quasi identisch s<strong>in</strong>d. Der e<strong>in</strong>zige<br />

Unterschied besteht dar<strong>in</strong>, daß nicht auf Gleichheit getestet wird, sondern e<strong>in</strong>e graduelle<br />

E<strong>in</strong>stufung der Ähnlichkeit der verglichenen HTML-Dokumente gewünscht ist.<br />

13


Für den Vergleich der Str<strong>in</strong>g-Repräsentationen kann ihre m<strong>in</strong>imale Editierdistanz (für deren<br />

Bestimmung existieren effiziente Algorithmen wie die Levenshte<strong>in</strong>-Distanz) zur mittleren<br />

Länge beider Str<strong>in</strong>gs <strong>in</strong>s Verhältnis gesetzt werden. Bei den beiden auf der Baum-Darstellung<br />

basierenden Vergleichsverfahren ist diese allerd<strong>in</strong>gs nicht ohne weiteres anwendbar. E<strong>in</strong>e<br />

Möglichkeit besteht dar<strong>in</strong>, beide Bäume <strong>in</strong> Tiefen- und / oder Breitensuche zu traversieren<br />

und <strong>in</strong> e<strong>in</strong>e Art Str<strong>in</strong>g-Darstellung umzuwandeln, wobei jedes durch e<strong>in</strong>en Knoten<br />

repräsentierte HTML-Tag auf e<strong>in</strong> Zeichen abgebildet wird: gleiche Tags auf das jeweils<br />

gleiche Zeichen, unterschiedliche immer auf unterschiedliche. Zwischen diesen beiden<br />

Zeichenketten ließe sich nun wiederum die m<strong>in</strong>imale Editierdistanz bestimmen und zu ihrer<br />

mittleren Länge <strong>in</strong>s Verhältnis setzen.<br />

Abbildung 2.5: Editierdistanz zweier Bäume <strong>in</strong> Str<strong>in</strong>g-Repräsentation<br />

Dabei ergibt sich allerd<strong>in</strong>gs das Problem, daß Unterschiede immer gleich stark gewichtet<br />

werden, egal, wie nahe sie bei der Wurzel des Baumes liegen oder wie weit entfernt von<br />

dieser. Abbildung 2.5 verdeutlicht dies: E<strong>in</strong>e Änderung an der Struktur des HTML-<br />

Dokumentes wird <strong>in</strong> gleichem Maße als Unterschied gewertet wie e<strong>in</strong>e Änderung am<br />

Ersche<strong>in</strong>ungsbild e<strong>in</strong>es Stückes dargestellten Textes. Diese Diskrepanz läßt sich vermeiden,<br />

wenn der Vergleich der Bäume rekursiv über die Baum-Ebenen durchgeführt wird (Ebene:<br />

Menge aller Knoten mit gleicher Pfadlänge zur Wurzel). Dies erfolgt auf Basis folgender zwei<br />

Regeln:<br />

• Verglichen werden immer Knoten, die sich auf der gleichen Ebene bef<strong>in</strong>den und<br />

gleiche HTML-Tags repräsentieren.<br />

• Zwei Knoten s<strong>in</strong>d immer so gleich wie das Mittel ihrer K<strong>in</strong>d-Knoten, gewichtet nach<br />

der Anzahl der Knoten <strong>in</strong> den Teilbäumen unter ihnen. Ist m<strong>in</strong>destens e<strong>in</strong>er der beiden<br />

Knoten e<strong>in</strong> Blatt-Knoten, so werden lediglich die durch sie repräsentierten HTML-<br />

Tags verglichen. Bei gleichen HTML-Tags ist die Gleichheit 1, sonst 0. Hat e<strong>in</strong><br />

Knoten ke<strong>in</strong>en Vergleichs-Partner, wird der Vergleich als 0 gewertet. Haben beide<br />

14


Knoten mehrere K<strong>in</strong>d-Knoten, so wird die Zuordnung dieser zue<strong>in</strong>ander gewertet, die<br />

die höchste Ähnlichkeit ergibt.<br />

Auf diese Art werden die beiden zu vergleichenden HTML-Bäume von der Wurzel zu den<br />

Blättern <strong>in</strong> Beziehung zue<strong>in</strong>ander gesetzt, um anschließend den Grad der Ähnlichkeit von den<br />

Blättern zur Wurzel zu berechnen. Abbildung 2.6 veranschaulicht dieses Verfahren. Baum 1<br />

und Baum 2 unterscheiden sich lediglich <strong>in</strong> e<strong>in</strong>em das HTML-Tag <br />

repräsentierenden Knoten, Baum 3 und Baum 4 dagegen <strong>in</strong> der Struktur der Teilbäume unter<br />

dem Wurzelknoten, der das HTML-Tag repräsentiert. Das Vergleichsverfahren<br />

f<strong>in</strong>det für Baum 1 und Baum 2 e<strong>in</strong>e Ähnlichkeit von 59%, für Baum 3 und Baum 4 dagegen<br />

nur 53%. Die Änderung am Aussehen e<strong>in</strong>es Dargestellten Text-Stückes durch das E<strong>in</strong>fügen<br />

des HTML-Tags verm<strong>in</strong>dert die Ähnlichkeit zweier HTML-Dokumente also nicht<br />

so stark wie e<strong>in</strong>e Umorganisation <strong>in</strong> der Struktur e<strong>in</strong>er Tabelle.<br />

Abbildung 2.6: Vergleich von HTML-Bäumen rekursiv über ihre Ebenen<br />

2.9 Hierarchische Pfadausdrücke<br />

Hierarchische Pfadausdrücke [Bak 1999, Bodor 1999] verfolgen e<strong>in</strong>en Ansatz, der e<strong>in</strong>e<br />

hierarchiebasierte Navigation durch den HTML-Baum der Informationsquelle erlaubt und<br />

somit die Informationsextraktion aus e<strong>in</strong>em Knoten dieses Baumes ermöglicht. Zunächst wird<br />

die bisher verwendete Def<strong>in</strong>ition erläutert, anschließend wird sie so erweitert, daß die an diese<br />

Arbeit gestellten Anforderungen damit umsetzbar s<strong>in</strong>d.<br />

15


2.9.1 Bisherige Def<strong>in</strong>ition<br />

Der <strong>in</strong> [Schneider 2001] verwendete Pfadausdruck besitzt folgende Syntax:<br />

ZAHL ::= 0 | ...<br />

INDEX ::= ZAHL | *<br />

KNAME ::= {Menge aller HTML-Tags}<br />

KNOTEN ::= KNAME[INDEX]<br />

OP ::= attlist[INDEX] | #PCDATA<br />

AUSDRUCK ::= (KNOTEN)+ OP<br />

Wie aus der Syntaxdef<strong>in</strong>ition ersichtlich ist, besteht e<strong>in</strong> Ausdruck aus e<strong>in</strong> oder mehreren<br />

h<strong>in</strong>tere<strong>in</strong>ander gekoppelten Knotenausdrücken und e<strong>in</strong>er abschließenden Operation auf dem<br />

oder den zuletzt erreichten Knoten. Der Knotenausdruck besteht hierbei aus dem Namen e<strong>in</strong>es<br />

HTML-Tags und der Angabe e<strong>in</strong>es Index <strong>in</strong> eckigen Klammern, wobei der Index e<strong>in</strong>e<br />

natürliche Zahl ( ≥ 0 ) oder e<strong>in</strong> Stern (*) ist. Die Navigation durch den HTML-Baum wird<br />

dabei so beschrieben, daß der Knotenname mit dem Tag-Namen des augenblicklich erreichten<br />

Knotens übere<strong>in</strong>stimmt und der Index den oder die K<strong>in</strong>dknoten beschreibt. Der erste<br />

Knotenname lautet dabei grundsätzlich html und beschreibt die Wurzel des HTML-Baums.<br />

Obwohl die Bestimmung der K<strong>in</strong>dknoten und somit auch die gesamte Navigation durch die<br />

Indizes alle<strong>in</strong> vollzogen werden kann, wird die Angabe des nächsten Knotennamens dazu<br />

verwendet, den jeweils erreichten Knoten zu verifizieren, da der erreichte Knoten mit dem<br />

angegebenen Knotennamen übere<strong>in</strong>stimmen muß. Der Index selbst <strong>in</strong>diziert den K<strong>in</strong>dknoten<br />

<strong>in</strong> fortlaufender Numerierung und beg<strong>in</strong>nt bei attributlosen Knoten bei [0], bei<br />

attributbehafteten Knoten bei [1]. In letzterem Fall ist der Index [0] für die<br />

Attributextraktion reserviert. Ist der Index durch e<strong>in</strong>en Stern ausgedrückt, wird an der Stelle<br />

im Baum verzweigt und die Navigation bei allen K<strong>in</strong>dknoten mit folgendem geforderten<br />

Knotennamen fortgesetzt. Dementsprechend ist auch nicht e<strong>in</strong> e<strong>in</strong>zelner Knoten zu erwarten,<br />

sondern e<strong>in</strong>e Knotenmenge. Die letzte Angabe des Ausdrucks ist e<strong>in</strong>e Knotenoperation, wobei<br />

zum e<strong>in</strong>en durch den attlist[]-Operator Attribute extrahiert werden können, zum anderen<br />

der Inhalt e<strong>in</strong>es PcData-Knotens extrahiert werden kann. Die Angabe des Attributs geschieht<br />

analog wie die Knoten<strong>in</strong>dizierung, <strong>in</strong> fortlaufender Numerierung.<br />

Anhand des Beispiel-Dokumentes aus Abschnitt 2.7 wird erklärt, wie e<strong>in</strong> bestimmter Teil des<br />

HTML-Dokumentes mithilfe e<strong>in</strong>es hierarchischen Pfadausdrucks ausgewählt werden kann.<br />

Als Beispiel stehen hier drei hierarchische Pfadausdrücke mit ihren Ergebnissen.<br />

Anfrage : html[1]body[0]table[1]tr[1]td[3]#PCDATA<br />

Ergebnis : ["ISBN 0-596-00283-1"]<br />

Anfrage : html[1]body[0]table[1]tr[1]td[7]a[1]#PCDATA<br />

Ergebnis : ["UB Karlsruhe"]<br />

Anfrage : html[1]body[0]table[1]tr[1]td[*]a[1]#PCDATA<br />

Ergebnis : ["UB Karlsruhe", "Volltext / Multimedia"]<br />

Nachteile dieser Pfadausdruck s<strong>in</strong>d folgende:<br />

• E<strong>in</strong>e Lesbarkeit für den Benutzer geht wegen der une<strong>in</strong>heitlichen Indizierungsweise<br />

(Indizes bei attributlosen und attributbehafteten Knoten) verloren.<br />

• Die Extraktion von Knoten-Attributen, z.B. des href-Parameters e<strong>in</strong>es Knotens, der<br />

das HTML-Tag repräsentiert, ist unsicher, da die Reihenfolge der Parameter von<br />

HTML-Tags und damit die der Knoten-Attribute nicht fest def<strong>in</strong>iert ist.<br />

• Das *-Index kann nur e<strong>in</strong>mal per Ausdruck vorkommen - ke<strong>in</strong>e ausreichende HTML-<br />

Syntax ist damit gesichert (Man betrachte etwa e<strong>in</strong>e Anfrage wie „allen Bücher aller<br />

Autoren über Java“).<br />

• Die direkt Anwendung regulärer Ausdrücke auf das Ergebnis e<strong>in</strong>er Anfrage ist nicht<br />

vorgesehen.<br />

16


2.9.2 Reguläre Ausdrücke zur Extraktion von Teilstr<strong>in</strong>gs<br />

E<strong>in</strong>e der wichtigsten Anforderungen an diese Arbeit ist, den <strong>Wandler</strong> <strong>in</strong> die Lage zu<br />

versetzen, e<strong>in</strong>zelne Datenelemente (Teilstr<strong>in</strong>gs) aus Str<strong>in</strong>gs extrahieren zu können. Dazu<br />

wurden reguläre Ausdrücke entwickelt, die auf Str<strong>in</strong>gs angewendet werden können. Sie haben<br />

folgende Form:<br />

GRENZE ::= {Menge alle Zeichenketten}<br />

ZIEL ::= {?} + | § | *{?} + | {?} + *<br />

RESTL ::= {+} + | *GRENZE | GRENZE<br />

RESTR ::= {+} + | GRENZE* | GRENZE<br />

AUSDRUCK ::= {RESTL} * ZIEL{RESTR} *<br />

Die Idee dabei ist, den Str<strong>in</strong>g, aus dem e<strong>in</strong>e Teil extrahiert werden soll, anhand von immer<br />

vorhandenen, zwischen den veränderlichen Datenelementen stehenden Zeichenfolgen<br />

(Grenzstr<strong>in</strong>g, GRENZE) zu zerlegen. Dabei haben die Zeichen §, ?, * und + besondere<br />

Bedeutungen:<br />

• §: Der zu extrahierende Teilstr<strong>in</strong>g (Zielstr<strong>in</strong>g), sofern dieser e<strong>in</strong>e variable Länge hat,<br />

beispielsweise der Titel e<strong>in</strong>es Buches<br />

• ?: E<strong>in</strong> Zeichen des zu extrahierenden Teilstr<strong>in</strong>gs (Zielstr<strong>in</strong>g), sofern dieser e<strong>in</strong>e feste<br />

Länge hat, wie etwa das Ersche<strong>in</strong>ungsjahr e<strong>in</strong>es Buches oder se<strong>in</strong>e ISBN-Nummer<br />

• *: E<strong>in</strong> nicht zu extrahierender Teilstr<strong>in</strong>g (Abfallstr<strong>in</strong>g), sofern dieser e<strong>in</strong>e variable<br />

Länge hat, e<strong>in</strong> gerade nicht zu extrahierendes Datenelement variabler Länge<br />

• +: E<strong>in</strong> Zeichen e<strong>in</strong>es nicht zu extrahierenden Teilstr<strong>in</strong>gs (Abfallstr<strong>in</strong>g), sofern dieser<br />

e<strong>in</strong>e feste Länge hat<br />

Die Anwendung auf e<strong>in</strong>en E<strong>in</strong>gabestr<strong>in</strong>g erfolgt von l<strong>in</strong>ks nach rechts mittels folgendem<br />

Algorithmus:<br />

So lange unbearbeitete Teile des Regulären Ausdrucks vorhanden s<strong>in</strong>d {<br />

Erster Teil ist Abfallstr<strong>in</strong>g variabler Länge (*)<br />

Nächster Teil ist Zielstr<strong>in</strong>g fester Länge ({?} + )<br />

E<strong>in</strong>gabestr<strong>in</strong>g endet mit Zielstr<strong>in</strong>g fester Länge<br />

Zielstr<strong>in</strong>g zurückgeben<br />

Übernächster Teil ist e<strong>in</strong> Abfallstr<strong>in</strong>g fester Länge ({+} + )<br />

E<strong>in</strong>gabestr<strong>in</strong>g endet mit dem Abfallstr<strong>in</strong>g fester Länge<br />

Zielstr<strong>in</strong>g zurückgeben<br />

Drittnächster Teil ist e<strong>in</strong> Grenzstr<strong>in</strong>g (GRENZE)<br />

Grenzstr<strong>in</strong>g und alles danach abschneiden<br />

Übernächster Teil ist e<strong>in</strong> Grenzstr<strong>in</strong>g (GRENZE)<br />

Grenzstr<strong>in</strong>g und alles danach abschneiden<br />

Nächster Teil ist e<strong>in</strong> Grenzstr<strong>in</strong>g (GRENZE)<br />

Grenzstr<strong>in</strong>g und alles davor abschneiden<br />

Zielstr<strong>in</strong>g variabler Länge (§)<br />

E<strong>in</strong>gabestr<strong>in</strong>g endet mit dem Zielstr<strong>in</strong>g variabler Länge<br />

Zielstr<strong>in</strong>g zurückgeben<br />

Nächster Teil ist e<strong>in</strong> Abfallstr<strong>in</strong>g fester Länge ({+} + )<br />

E<strong>in</strong>gabestr<strong>in</strong>g endet mit dem Abfallstr<strong>in</strong>g fester Länge<br />

Zielstr<strong>in</strong>g zurückgeben<br />

Übernächster Teil ist e<strong>in</strong> Grenzstr<strong>in</strong>g (GRENZE)<br />

Zielstr<strong>in</strong>g zurückgeben<br />

Nächster Teil ist e<strong>in</strong> Grenzstr<strong>in</strong>g (GRENZE)<br />

Zielstr<strong>in</strong>g zurückgeben<br />

Zielstr<strong>in</strong>g fester Länge ({?} + )<br />

Zielstr<strong>in</strong>g zurückgeben<br />

Abfallstr<strong>in</strong>g fester Länge ({+} + )<br />

Abfallstr<strong>in</strong>g vom Anfang des E<strong>in</strong>gabestr<strong>in</strong>gs entfernen<br />

Grenzstr<strong>in</strong>g (GRENZE)<br />

Grenzstr<strong>in</strong>g vom Anfang des E<strong>in</strong>gabestr<strong>in</strong>gs entfernen<br />

}<br />

17


An folgenden Beispielen soll die Anwendung dieser Regulären Ausdrücke auf e<strong>in</strong>en<br />

E<strong>in</strong>gabestr<strong>in</strong>g verdeutlicht werden:<br />

E<strong>in</strong>gabestr<strong>in</strong>g: Java <strong>in</strong> a nutshell : a desktop quick reference ;<br />

[covers Java 1.4] / David Flanagan. - 4. ed.. - Cambridge ; Köln :<br />

O'Reilly, 2002. - XXI, 969 S.; (engl.)<br />

Regulärer Ausdruck: § / *<br />

Ergebnis: Java <strong>in</strong> a nutshell : a desktop quick reference ; [covers<br />

Java 1.4]<br />

E<strong>in</strong>gabestr<strong>in</strong>g: (wie oben)<br />

Regulärer Ausdruck: * / §. - *<br />

Ergebnis: David Flanagan<br />

E<strong>in</strong>gabestr<strong>in</strong>g: (wie oben)<br />

Regulärer Ausdruck: *. - *. - §++++++. - *<br />

Ergebnis: Cambridge ; Köln : O’Reilly<br />

E<strong>in</strong>gabestr<strong>in</strong>g: (wie oben)<br />

Regulärer Ausdruck: *. - *. - *????. - *<br />

Ergebnis: 2002<br />

E<strong>in</strong>gabestr<strong>in</strong>g: Java <strong>in</strong> a nutshell / David Flanagan, 2002<br />

Regulärer Ausdruck: § / *<br />

Ergebnis: Java <strong>in</strong> a nutshell<br />

E<strong>in</strong>gabestr<strong>in</strong>g: (wie oben)<br />

Regulärer Ausdruck: * / §++++++<br />

Ergebnis: David Flanagan<br />

E<strong>in</strong>gabestr<strong>in</strong>g: (wie oben)<br />

Regulärer Ausdruck: *????<br />

Ergebnis: 2002<br />

Die Anwendung des Ausdrucks „*. - *. - §++++++. - *“ auf den E<strong>in</strong>gabestr<strong>in</strong>g „Java<br />

<strong>in</strong> a nutshell : a desktop quick reference ; [covers Java 1.4] / David<br />

Flanagan. - 4. ed.. - Cambridge ; Köln : O'Reilly, 2002. - XXI, 969 S.;<br />

(engl.)“ soll an dieser Stelle noch e<strong>in</strong>mal genau und <strong>in</strong> ihren e<strong>in</strong>zelnen Schritten betrachtet<br />

werden:<br />

E<strong>in</strong>gabestr<strong>in</strong>g = Java <strong>in</strong> a nutshell : a desktop quick reference ;<br />

[covers Java 1.4] / David Flanagan. - 4. ed.. - Cambridge ; Köln :<br />

O'Reilly, 2002. - XXI, 969 S.; (engl.)<br />

Regulärer Ausdruck: *. - *. - §++++++. - *<br />

*. - *. - §++++++. - * zerfällt <strong>in</strong>:<br />

* (Abfallstr<strong>in</strong>g variabler Länge)<br />

. – (Grenzstr<strong>in</strong>g)<br />

* (Abfallstr<strong>in</strong>g variabler Länge)<br />

. – (Grenzstr<strong>in</strong>g)<br />

§ (Zielstr<strong>in</strong>g variabler Länge)<br />

++++++ (Abfallstr<strong>in</strong>g fester Länge)<br />

. – (Grenzstr<strong>in</strong>g)<br />

* (Abfallstr<strong>in</strong>g variabler Länge)<br />

Anwendung *. - auf E<strong>in</strong>gabestr<strong>in</strong>g �<br />

E<strong>in</strong>gabestr<strong>in</strong>g = 4. ed.. - Cambridge ; Köln : O'Reilly, 2002. - XXI,<br />

969 S.; (engl.)<br />

Anwendung *. - auf E<strong>in</strong>gabestr<strong>in</strong>g �<br />

E<strong>in</strong>gabestr<strong>in</strong>g = Cambridge ; Köln : O'Reilly, 2002. - XXI, 969 S.;<br />

(engl.)<br />

Anwendung §++++++. - auf E<strong>in</strong>gabestr<strong>in</strong>g �<br />

Ergebnis = Cambridge ; Köln : O'Reilly<br />

18


2.9.3 Erweiterung der Hierarchischen Pfadausdrücke<br />

Der <strong>in</strong> Abschnitt 2.9.1 vorgestellte Ansatz der hierarchischen Pfadausdrücke wird für diese<br />

Arbeit etwas abgewandelt und erweitert, um den gestellten Anforderungen (z.B. nach der<br />

Fähigkeit zur Anwendung regulärer Ausdrücke auf den Inhalt von PcData-Knoten) gerecht<br />

werden zu können und die aufgezählten Nachteile zu beseitigen:<br />

ZAHL ::= 0 | ...<br />

BEREICH ::= ZAHL-ZAHL | ZAHL-*<br />

INDEXTEIL ::= ZAHL | BEREICH<br />

INDEX ::= * | INDEXTEIL | INDEXTEIL, INDEXTEIL, ...<br />

KNAME ::= {Menge aller HTML-Tags}<br />

KNOTEN ::= KNAME | [INDEX] | KNAME[INDEX] |<br />

WERT ::= "Wert", Wert beliebige Zeichenkette<br />

ENDKNOTEN ::= KNOTEN | WERT[INDEX] | WERT<br />

ATTNAME ::= {Menge aller Attribute aller HTML-Tags}<br />

REGEX ::= {Menge aller Regulären Ausdrücke aus 2.9.2}<br />

OP ::= ATTNAME | (REGEX) | ATTNAME(REGEX)<br />

PFAD ::= {KNOTEN.} * + ENDKNOTEN<br />

AUSDRUCK ::= PFAD | PFAD + OP<br />

Die Indizierung der K<strong>in</strong>dknoten beg<strong>in</strong>nt dabei immer bei 0. Die Pfadausdrücke werden wie<br />

folgt <strong>in</strong>terpretiert:<br />

• Ist [INDEX] <strong>in</strong> e<strong>in</strong>em KNOTEN oder im ENDKNOTEN nicht angegeben, so wird dies als<br />

[0] <strong>in</strong>terpretiert.<br />

• Ist INDEX gleich *, so werden dadurch alle K<strong>in</strong>d-Knoten des aktuellen Knotens<br />

adressiert.<br />

• E<strong>in</strong> BEREICH entspricht der Aufzählung aller ZAHLen zwischen den beiden<br />

angegebenen. 4-7 entspricht z.B. 4,5,6,7. Ist die zweite ZAHL durch e<strong>in</strong>en * ersetzt,<br />

so wird an dessen Stelle dynamisch die Anzahl der K<strong>in</strong>d-Knoten des aktuellen<br />

Knotens e<strong>in</strong>gesetzt. Ist die zweite ZAHL kle<strong>in</strong>er als die erste, so werden sie vertauscht.<br />

• Besteht INDEX aus mehreren INDEXTEILen, so werden dadurch alle durch e<strong>in</strong>en der<br />

INDEXTEILe adressierten K<strong>in</strong>d-Knoten adressiert. Dieser Aufbau von INDEX entspricht<br />

damit e<strong>in</strong>er e<strong>in</strong>schränkenderen Variante von *.<br />

• [INDEX] adressiert den INDEX-ten K<strong>in</strong>d-Knoten des aktuellen Knotens, wenn ke<strong>in</strong><br />

KNAME oder WERT angegeben ist.<br />

• KNAME[INDEX] adressiert den INDEX-ten K<strong>in</strong>d-Knoten des aktuellen Knotens, dessen<br />

Typ KNAME ist.<br />

• WERT[INDEX] adressiert den nach Tiefensuche INDEX-ten PcData-Knoten im Teilbaum<br />

unter dem aktuellen Knoten, dessen Wert die Zeichenfolge Wert enthält.<br />

• Ist OP nicht angegeben, wird der Wert des Knotens zurückgegeben. Außer bei Knoten<br />

vom Typ PcData ist dieser immer leer.<br />

• Hat OP die Form (REGEX), so wird REGEX auf den Wert des Knotens angewendet und<br />

das Ergebnis zurückgegeben.<br />

• Hat OP die Form ATTNAME, so wird der Wert des Attributes ATTNAME zurückgegeben,<br />

falls dieses gesetzt ist, andernfalls ParameterNotSet.<br />

• Hat OP die Form ATTNAME(REGEX), so wird REGEX auf den Wert des Attributes<br />

ATTNAME angewendet und das Ergebnis zurückgegeben.<br />

Anhand des Beispiel-Dokumentes aus Abschnitt 2.7 wird erklärt, wie e<strong>in</strong> bestimmter Teil des<br />

HTML-Dokumentes mithilfe e<strong>in</strong>es hierarchischen Pfadausdrucks ausgewählt werden kann.<br />

Als Beispiel steht hier e<strong>in</strong>e Reihe von hierarchischen Pfadausdrücken mit ihren Ergebnissen.<br />

Die ersten drei s<strong>in</strong>d die den Beispielen aus Abschnitt 2.9.1 entsprechenden.<br />

19


Anfrage : html[0].body[0].table[0].tr[0].td[0].PcData[1]<br />

Ergebnis : ["ISBN 0-596-00283-1"]<br />

Anfrage : html[0].body[0].table[0].tr[0].td[0].a[0].PcData[0]<br />

Ergebnis : ["UB Karlsruhe"]<br />

Anfrage : html[0].body[0].table[0].tr[0].td[0].a[*].PcData[0]<br />

Ergebnis : ["UB Karlsruhe", "Volltext / Multimedia"]<br />

Anfrage : html[0].body[0].table[0].tr[0].td[0]."ISBN"[0]<br />

Ergebnis : ["ISBN 0-596-00283-1"]<br />

Anfrage : html.body.table."ISBN"<br />

Ergebnis : ["ISBN 0-596-00283-1"]<br />

Anfrage : html[0].body[0].table[0].tr[0].td[0]."ISBN"[0](+++++§)<br />

Ergebnis : ["0-596-00283-1"]<br />

Anfrage : html[0].body[0].table[0].tr[0].td[0].a[0]href<br />

Ergebnis : [href-Parameter des -Knotens als Str<strong>in</strong>g]<br />

2.10 <strong>Wandler</strong><br />

Zunächst ist zu klären, was genau im Zusammenhang mit Software unter e<strong>in</strong>em <strong>Wandler</strong> zu<br />

verstehen ist. Bei [TFD] f<strong>in</strong>det sich folgende Def<strong>in</strong>ition:<br />

„Aus <strong>in</strong>formatischer Sicht beschreibt das Wort <strong>Wandler</strong> e<strong>in</strong>e Komponente, die<br />

festlegt, wie e<strong>in</strong>e ihr übergebene Code-Sequenz ausgeführt wird.<br />

Der <strong>Wandler</strong> fungiert als Schnittstelle zwischen se<strong>in</strong>em Aufrufer und der ihm<br />

übergebenen Code-Sequenz. Dies kann zum e<strong>in</strong>en der Kompatibilität dienen, z.B.<br />

wenn der zu wandelnde Code <strong>in</strong> e<strong>in</strong>er anderen Programmiersprache oder unter<br />

anderen Aufruf-Bed<strong>in</strong>gungen vorliegt als der ausführende, zum zweiten der<br />

Sicherheit, z.B. um den ausführenden Code vom Aufruf bestimmter Funktionen oder<br />

Methoden <strong>in</strong>nerhalb der zu wandelnden Codes abzuhalten, und zum dritten der<br />

Emulation e<strong>in</strong>er bestimmten Umgebung für den zu wandelnden Code durch den<br />

<strong>Wandler</strong>, z.B. zur Interpretation von Skriptsprachen <strong>in</strong>nerhalb e<strong>in</strong>es Web-Browsers.<br />

Der letztliche S<strong>in</strong>n besteht dar<strong>in</strong>, den zu wandelnden Code ausschließlich über den<br />

<strong>Wandler</strong> zugreifbar zu machen.“<br />

Diese Def<strong>in</strong>ition greift deutlich weiter, als man den Begriff Wrapper landläufig versteht, wird<br />

er doch <strong>in</strong> der Regel Programmen, Komponenten und Skripten zugeordnet, die der Extraktion<br />

von Informationen aus Internetseiten dienen. Obrige Def<strong>in</strong>ition schließt dagegen auch jegliche<br />

Interpreter und Virtual Mach<strong>in</strong>es mit e<strong>in</strong>. Streng genommen kann man sogar das Geheimnis-<br />

Pr<strong>in</strong>zip objektorientierter Programmiersprachen wie Java unter die Def<strong>in</strong>ition fassen, s<strong>in</strong>d<br />

doch als private deklarierte Variablen und Methoden der Objekte von außerhalb nur <strong>in</strong>direkt<br />

über nicht so deklarierte Methoden zugreifbar, wenn überhaupt.<br />

Es f<strong>in</strong>den sich aber auch Def<strong>in</strong>itionen, die der landläufigen Interpretation deutlich näher<br />

kommen und den Begriff des Wrappers mit der Weiterverarbeitung von Internetseiten durch<br />

spezielle Komponenten <strong>in</strong> Zusammenhang br<strong>in</strong>gen:<br />

• [Azavant 2000] „[<strong>Wandler</strong> s<strong>in</strong>d] Software-Komponenten, die im Internet [über<br />

HTML-Seiten] veröffentlichte Informationen <strong>in</strong> e<strong>in</strong>e Applikation <strong>in</strong>tegrieren”<br />

• [Cohen 1999] „E<strong>in</strong> <strong>Wandler</strong> ist e<strong>in</strong> spezielles Programm, das Informationen aus<br />

Internetseiten e<strong>in</strong>es bestimmten Formates extrahiert.”<br />

• [Grieser 2000] „Intuitiv betrachtet beschreiben <strong>Wandler</strong>, wie sich weitestgehend<br />

unstrukturierte Informationen (Text, Bilder, ...) <strong>in</strong> e<strong>in</strong>en syntaktischen Rahmen<br />

fassen lassen. Umgekehrt legten sie damit implizit fest, wie diese Informationen<br />

<strong>in</strong> semi-strukturierten Quellen lokalisiert und aus diesen extrahiert werden<br />

können.“<br />

20


• [Kuhl<strong>in</strong>s 2004] „Im Problembereich der automatisierten Informationsextraktion<br />

aus HTML-Seiten des WWW versteht man unter Wrappern spezialisierte<br />

Softwarerout<strong>in</strong>en, die im Wesentlichen drei Aufgaben erfüllen: Erstens müssen<br />

sie HTML-Seiten von e<strong>in</strong>er Website herunterladen. Zweitens die gewünschten<br />

Daten <strong>in</strong> den Seiten lokalisieren sowie extrahieren. Und drittens die so<br />

gewonnenen Daten <strong>in</strong> e<strong>in</strong>em geeignet strukturierten Ausgabeformat zur weiteren<br />

Manipulation zur Verfügung stellen. Die Daten können dann von anderen<br />

Anwendungen e<strong>in</strong>gelesen und weiterverarbeitet werden.“<br />

Diese letzten vier Def<strong>in</strong>itionen legen folgendes Fazit nahe: Die Informationen auf<br />

Internetseiten s<strong>in</strong>d für das <strong>in</strong>tuitive Verständnis durch Menschen aufgearbeitet und<br />

strukturiert, nicht für die Lesbarkeit durch Software. Der Begriff des <strong>Wandler</strong>s beschreibt<br />

Programme, Komponenten und Skripte, die diese Lücke überbrücken. Welche technischen<br />

Ansätze dabei zur Anwendung kommen, wir <strong>in</strong> e<strong>in</strong>em späteren Kapitel dieser Arbeit<br />

beleuchtet.<br />

21


3. Das UniCats-i-Projekt<br />

In diesem Kapitel soll zunächst das UniCats-i-System als Ganzes beschrieben werden, da es<br />

das Umfeld für den späteren E<strong>in</strong>satz der im Rahmen dieser Arbeit zu erstellenden<br />

Komponenten und Werkzeuge darstellt. Anschließend wird der Anbieter-Agent beschrieben,<br />

der den <strong>Wandler</strong> enthält und mit dem der zu schaffende Generator-Agent daher direkt<br />

zusammenarbeiten soll. Abschließend wird die Rolle des zu schaffenden Generator-Agenten<br />

<strong>in</strong> Bezug auf das gesamte UniCats-i-System beleuchtet.<br />

Ziel des Projektes UniCats-i ist die Entwicklung e<strong>in</strong>er Infrastruktur für offene Märkte. Die<br />

Anwendungsdomäne s<strong>in</strong>d Märkte der wissenschaftlichen Literaturversorgung [Christoffel<br />

2003]. E<strong>in</strong>e Vielzahl von Anbietern und Diensten existierender Informationsquellen im<br />

Bibliotheksbereich sollen mittels der UniCats-i-Umgebung e<strong>in</strong>heitlich den Benutzern zur<br />

Verfügung gestellt werden. Somit soll das jeweilige Erlernen der verschiedenen Schnittstellen<br />

umgangen werden und die E<strong>in</strong>arbeitungszeit erheblich verkürzt werden.<br />

Die UniCats-i-Umgebung besteht aus den folgenden Teilnehmern:<br />

• Anbieter: Anbieter stellen Dienste zur Suche und Beschaffung wissenschaftlicher<br />

Literatur bereit. Zu den Anbietern zählen <strong>Bibliotheken</strong>, Verlage und Buchhändler.<br />

• Kunden: Kunden aus dem wissenschaftlichen Bereich suchen wissenschaftliche<br />

Literatur für wissenschaftliche Zwecke. Kunden s<strong>in</strong>d Hochschulangehörige,<br />

Studierende und Forschende.<br />

• Kundenorganisationen: Kundenorganisationen vertreten die Interessen von<br />

Kundengruppen, wie beispielsweise Hochschulen oder Firmen.<br />

• F<strong>in</strong>anzorganisationen: F<strong>in</strong>anzorganisationen führen die F<strong>in</strong>anzdienstleistungen<br />

zwischen Marktteilnehmern aus, wie beispielsweise Banken.<br />

3.1 Der Aufbau des UniCats-i-Systems<br />

3.1.1 Die Agentenarchitektur<br />

Die UniCats-i-Umgebung basiert auf e<strong>in</strong>er Agentenarchitektur und besteht aus mehreren<br />

mite<strong>in</strong>ander kommunizierenden UniCats-i-Agenten. Agenten s<strong>in</strong>d selbständig agierende<br />

Softwareanwendungen. Jeder dieser Agenten besitzt e<strong>in</strong>en Agententyp, der die Aufgabe des<br />

Agenten und se<strong>in</strong>e Schnittstelle bestimmt. Im folgenden werden die e<strong>in</strong>zelnen Agententypen<br />

vorgestellt und ihre Funktionsweise erläutert.<br />

• Systemverwaltungsagent (SVA): Der SVA dient zur Überwachung der UniCats-i-<br />

Umgebung. Im Fehlerfall wird der SVA <strong>in</strong>formiert und kann <strong>in</strong> das Geschehen<br />

e<strong>in</strong>greifen.<br />

• Agentennamenagent (ANA): Der ANA verwaltet das Agentennamenregister.<br />

• Gruppennamenagent (GNA): Der GNA verwaltet das Gruppennamenregister.<br />

• Kundenschnittstellenagent (KSA): Der KSA ist für den Benutzerzugang<br />

verantwortlich und stellt die Benutzerschnittstelle zur Verfügung.<br />

• Kundenauthentifizierungsagent (KAA): Der KAA verwaltet die Zugangsnamen und<br />

Paßwörter der Kunden.<br />

• Kundenagent (KA): Der KA ist für die Ausführung der Literaturanfrage und für die<br />

Bereitstellung des persönlichen Arbeitsplatzes jedes Kunden verantwortlich. Am<br />

persönlichen Arbeitsplatz kann der Kunde Anfragen und Ergebnisse planen, ansehen<br />

und bearbeiten.<br />

• Anbietervermittlungsagent (AVA): Der AVA sucht für e<strong>in</strong>e Literaturanfrage e<strong>in</strong>en<br />

geeigneten Anbieter.<br />

23


• Integrationsagent (IA): Der IA stellt Anfragen parallel an mehrere Anbieter und fügt<br />

die Ergebnisse zu e<strong>in</strong>er e<strong>in</strong>heitlichen Ergebnisliste zusammen.<br />

• Anbieteragent (AA): E<strong>in</strong> AA ist genau e<strong>in</strong>em Anbieter zugewiesen und bietet ihm<br />

e<strong>in</strong>e Schnittstelle zum System.<br />

• Kundenorganisationsagent (KOA): Der KOA leitet Anfragen von Kunden, die zu<br />

Organisationen gehören, weiter und benutzt dabei besondere Konditionen der<br />

Benutzerorganisation.<br />

• Zahlungsagent (ZA): Der ZA stellt Verb<strong>in</strong>dungen zu Banken her und überwacht die<br />

Ausführung f<strong>in</strong>anzieller Transaktionen.<br />

• Rechnungsagent (RA): Der RA ist für die Rechnungsstellung und die Überwachung<br />

der Zahlungsabwicklungen zuständig.<br />

• Agentenauthentifizierungsagent (AAA): Der AAA hält Register, <strong>in</strong> denen<br />

Zertifikate der Vertrauenswürdigkeit und Zuverlässigkeit der Agenten enthalten s<strong>in</strong>d.<br />

• Generatoragent (GA): Der GA sichert die Anb<strong>in</strong>dung der Anbieter durch den AA. Er<br />

ist fähig, den AA an e<strong>in</strong>e veränderte Web-Schnittstelle anzupassen. Der GA wird im<br />

Rahmen diese Arbeit entwickelt.<br />

Jeder Agent gehört zu genau e<strong>in</strong>er UniCats-i-Geme<strong>in</strong>schaft. Die Geme<strong>in</strong>schaften agieren auf<br />

Anweisungen der Agenten. In der UniCats-i-Umgebung können mehrere Geme<strong>in</strong>schaften<br />

existieren. Die verschiedenen Geme<strong>in</strong>schaften können auf beliebig vielen Rechnern verteilt<br />

se<strong>in</strong>. Die Kommunikation erfolgt über das Internet. Um die Geme<strong>in</strong>schaften e<strong>in</strong>deutig<br />

identifizieren zu können, besitzen alle Geme<strong>in</strong>schaften e<strong>in</strong>e Adresse, die aus der IP-Adresse<br />

des Rechners und dem dazugehörigen Port besteht. Die Agenten s<strong>in</strong>d durch ihren<br />

Agentennamen identifizierbar, der <strong>in</strong>nerhalb der Geme<strong>in</strong>schaft und e<strong>in</strong>es Agentenregisters<br />

e<strong>in</strong>deutig ist.<br />

Neben den erwähnten Geme<strong>in</strong>schaften und den Agenten gibt es auch UniCats-i-Gruppen, die<br />

mehrere Agenten be<strong>in</strong>halten können. E<strong>in</strong> Agent kann dabei mehreren Gruppen angehören.<br />

Die Gruppen besitzen e<strong>in</strong>en Gruppennamen, der <strong>in</strong>nerhalb des Gruppenregisters e<strong>in</strong>deutig ist.<br />

Abbildung 3.1: Architektur der UniCats-i-Umgebung<br />

24


3.1.2 Der Aufbau e<strong>in</strong>er Geme<strong>in</strong>schaft<br />

Die UniCats-i-Geme<strong>in</strong>schaft besteht im Wesentlichen aus dem Verwaltungsmodul, dem<br />

Kommunikationsmodul, dem Sicherheitsmodul und e<strong>in</strong>em Agentenconta<strong>in</strong>er, der e<strong>in</strong>en oder<br />

mehrere Agenten halten kann. Alle erwähnten Komponenten besitzen für Test- und<br />

Wartungszwecke e<strong>in</strong>e graphische Benutzeroberfläche, die Systemsteuerung. Abbildung 3.2<br />

zeigt grafisch den Aufbau der UniCats-i-Geme<strong>in</strong>schaft.<br />

Abbildung 3.2: Aufbau der UniCats-i-Geme<strong>in</strong>schaft<br />

3.1.2.1 Das Verwaltungsmodul<br />

Das Verwaltungsmodul (engl. Adm<strong>in</strong>istrationModule) ist für das Auslesen der<br />

Konfigurationsdatei der Geme<strong>in</strong>schaft zuständig. In dieser Konfigurationsdatei s<strong>in</strong>d unter<br />

anderem die Adresse der Geme<strong>in</strong>schaft, der Name der Log-Datei, das zu verwendende<br />

Debuglevel und e<strong>in</strong>e Liste aller Konfigurationsdateien der zu startenden Agenten angegeben.<br />

Mit diesen Informationen startet das Verwaltungsmodul das Kommunikationsmodul, die<br />

Systemsteuerung des Verwaltungsmoduls und den Agentenconta<strong>in</strong>er mit den zugehörigen<br />

Agenten. Außerdem ist das Verwaltungsmodul für das ordnungsgemäße Beenden des Systems<br />

verantwortlich. Dabei wird über den Agentenconta<strong>in</strong>er das Herunterfahren aller Agenten<br />

e<strong>in</strong>geleitet. Sobald alle Agenten gelöscht wurden, gilt die Geme<strong>in</strong>schaft als beendet.<br />

3.1.2.2 Das Kommunikationsmodul<br />

E<strong>in</strong>en zweiten wichtigen Teil der Geme<strong>in</strong>schaft stellt das Kommunikationsmodul dar. Um zu<br />

kommunizieren, tauschen Agenten untere<strong>in</strong>ander Nachrichten durch Webservices aus. Dabei<br />

existieren drei Arten von Nachrichten:<br />

• Agentenkommunikation: Sie f<strong>in</strong>det zwischen zwei Agenten statt.<br />

• Gruppenkommunikation: Sie f<strong>in</strong>det zwischen e<strong>in</strong>em Agenten und allen Mitgliedern<br />

e<strong>in</strong>er Gruppe statt, <strong>in</strong> der der Agent Mitglied ist.<br />

25


• Geme<strong>in</strong>schaftskommunikation: Sie f<strong>in</strong>det zwischen e<strong>in</strong>em Agenten und e<strong>in</strong>er<br />

Geme<strong>in</strong>schaft statt.<br />

Die Kommunikation wird durch das Kommunikationsmodul unterstützt. Möchte e<strong>in</strong> Agent<br />

e<strong>in</strong>e Nachricht versenden, so wird diese nicht an den Empfänger direkt gesendet, sondern an<br />

das Kommunikationsmodul. Das Kommunikationsmodul entscheidet darüber, ob die<br />

Nachricht lokal, das heißt <strong>in</strong>nerhalb der Geme<strong>in</strong>schaft, verschickt werden muß. Ist dies nicht<br />

der Fall, so wird die Nachricht extern über WebServices verschickt. Über die Lokalität<br />

entscheidet das Kommunikationsmodul mit Hilfe des Agentrepository, welches die<br />

Referenzen aller <strong>in</strong> der Geme<strong>in</strong>schaft existierenden Agenten enthält. Die Informationen über<br />

zugehörige Agenten erhält das Kommunikationsmodul von dem Verwaltungsmodul.<br />

E<strong>in</strong>e Nachricht be<strong>in</strong>haltet neben dem Nachrichten<strong>in</strong>halt und der Angabe des empfangenden<br />

Agenten als zusätzliche Informationen den Typ der Nachricht, die Daten des Senders, die<br />

Nachrichtenidentifikationsnummer, die Kontextidentifikationsnummer sowie e<strong>in</strong>en<br />

Zeitstempel. Bei Gruppen- oder Geme<strong>in</strong>schaftskommunikation werden außerdem die Daten<br />

zur Gruppe und e<strong>in</strong>e Liste aller Gruppenmitglieder, beziehungsweise die Adresse der<br />

Geme<strong>in</strong>schaft mit übergeben.<br />

Außerdem verfügt das Kommunikationsmodul für den Testbetrieb über e<strong>in</strong> Communication-<br />

ControlPanel, e<strong>in</strong>er Benutzerschnittstelle zur Überwachung und Ansicht der ablaufenden<br />

Kommunikation. Die nachfolgende Abbildung 12 zeigt die Struktur des<br />

Kommunikationsmoduls.<br />

Abbildung 3.3: Struktur des Kommunikationsmoduls<br />

3.1.2.3 Das Sicherheitsmodul<br />

Das Sicherheitsmodul ist für die Sicherheit <strong>in</strong>nerhalb e<strong>in</strong>er UniCats-i-Geme<strong>in</strong>schaft<br />

zuständig. Es besitzt e<strong>in</strong> erworbenes Zertifikat, mit Hilfe dessen es weitere Zertifikate bei<br />

Anforderung ausstellen kann. Diese Zertifikate werden vom Kundenauthentifizierungsagenten<br />

und vom Agentenauthentifizierungsagenten benötigt, um ihrerseits Ausweise für Kunden<br />

bzw. Agenten ausstellen zu können. Da e<strong>in</strong> Zertifikat nicht gespeichert wird und bei Beenden<br />

26


des Agenten verfällt, ist es für e<strong>in</strong>en Agenten notwendig, bei jedem Neustart e<strong>in</strong> neues<br />

Zertifikat beim Sicherheitsmodul anzufordern. Außerdem verfügt das Sicherheitsmodul über<br />

e<strong>in</strong>e Sperrliste, mit Hilfe dessen das Sicherheitsmodul ausgestellten Zertifikaten die Gültigkeit<br />

entziehen kann. Somit kann auf Fehlverhalten reagiert werden.<br />

3.1.2.4 Der Agent<br />

Der Agentenconta<strong>in</strong>er be<strong>in</strong>haltet alle Instanzen der Geme<strong>in</strong>schaft zugehörigen Agenten. Der<br />

Agentenconta<strong>in</strong>er ist für das Erzeugen der Agenten verantwortlich. Darüber h<strong>in</strong>aus kann der<br />

Agentenconta<strong>in</strong>er auch während der Laufzeit neue Agenten h<strong>in</strong>zufügen.<br />

E<strong>in</strong> Agent erhält vom Agentenconta<strong>in</strong>er e<strong>in</strong>e Referenz auf das Verwaltungsmodul und das<br />

Kommunikationsmodul, um auf deren Methoden zugreifen zu können. Des Weiteren wird<br />

e<strong>in</strong>e Referenz auf den Date<strong>in</strong>amen der Konfigurationsdatei übergeben, <strong>in</strong> der die<br />

Konfiguration des Agenten beschrieben ist. Die Konfiguration des Agenten be<strong>in</strong>haltet die<br />

persönlichen Daten des Agenten, e<strong>in</strong>e Liste mit den bekannten Agenten, e<strong>in</strong>e Liste mit den<br />

bekannten Geme<strong>in</strong>schaften und e<strong>in</strong>e Liste mit den bekannten Gruppen e<strong>in</strong>schließlich der<br />

jeweiligen Gruppenmitglieder. Diese Listen s<strong>in</strong>d <strong>in</strong> den zugehörigen Repositories abgelegt:<br />

• Das AgentRepository be<strong>in</strong>haltet zu jedem bekannten Agenten den <strong>in</strong>ternen Namen<br />

des Agenten und se<strong>in</strong>e Daten, bestehend aus Name, Typ und Adresse.<br />

• Das GroupRepository be<strong>in</strong>haltet zu jeder bekannten Gruppe den <strong>in</strong>ternen Namen,<br />

e<strong>in</strong>e Liste mit allen Gruppenmitgliedern sowie die Daten zur Gruppe, bestehend aus<br />

dem Namen der Gruppe.<br />

• Das CommunityRepository be<strong>in</strong>haltet die Adresse zu jeder bekannten Geme<strong>in</strong>schaft.<br />

• In dem ContextRepository s<strong>in</strong>d die aktiven Kontexte aller Agenten aufgelistet. Jeder<br />

Kontext besteht aus e<strong>in</strong>er Sammlung zusammenhängender Nachrichten. Durch die<br />

Verwendung von Kontexten ist es dem Agenten möglich, empfangene oder gesendete<br />

Nachrichten <strong>in</strong> Zusammenhänge e<strong>in</strong>zuordnen.<br />

Des weiteren wird der Date<strong>in</strong>ame des Agenten abgespeichert und se<strong>in</strong> Status gesetzt. E<strong>in</strong><br />

Agent kann während der Laufzeit mehrere Zustände e<strong>in</strong>nehmen, die mit ihrer Bedeutung <strong>in</strong><br />

Tabelle 2 aufgelistet s<strong>in</strong>d. Der Startzustand e<strong>in</strong>es Agenten ist immer Active.<br />

Zustand Bedeutung<br />

Active Der Agent ist bereit Aufträge anzunehmen.<br />

Busy Der Agent nimmt Aufträge nur e<strong>in</strong>geschränkt<br />

entgegen.<br />

Ill Der Agent bef<strong>in</strong>det sich im Fehlerfall und<br />

nimmt Aufträge nur e<strong>in</strong>geschränkt entgegen.<br />

Stopped Der Agent nimmt nur Nachrichten der<br />

Systemverwaltung entgegen.<br />

Shutdown Der Agent nimmt ke<strong>in</strong>e Aufträge entgegen.<br />

Tabelle 3.1: Auflistung aller möglichen Agentenzustände<br />

Des Weiteren besitzt e<strong>in</strong> Agent e<strong>in</strong>en Zähler, der die Nachrichtenidentifkationsnummer sowie<br />

die Kontextidentifikationsnummer berechnet. Diese werden für den Versand von Nachrichten<br />

benötigt.<br />

Ebenso wie das Verwaltungsmodul und das Kommunikationsmodul besitzt jeder Agent e<strong>in</strong>e<br />

eigene Systemsteuerung, um Wartungsarbeiten und Testläufe zu unterstützen. Über diese<br />

Systemsteuerung kann der Agent gesteuert werden, Nachrichten versendet werden und<br />

Informationen über die Repositories des Agenten e<strong>in</strong>geholt werden. Je nach Agententyp kann<br />

von der Systemsteuerung aus auf weitere agententypische Funktionen zugegriffen werden.<br />

27


Abbildung 3.4 stellt die allgeme<strong>in</strong>e Struktur e<strong>in</strong>es Agenten dar:<br />

Abbildung 3.4: Struktur e<strong>in</strong>es Agenten<br />

3.2 Der Anbieteragent (AA) im Speziellen<br />

In diesem Absatz wird näher auf die Rolle des Anbieteragenten <strong>in</strong>nerhalb des UniCats-i-<br />

Systems e<strong>in</strong>gegangen.<br />

Der Anbieteragent fungiert als B<strong>in</strong>deglied zwischen dem Anbieter e<strong>in</strong>erseits und dem<br />

UniCats-i-System andererseits. Er muß daher <strong>in</strong> der Lage se<strong>in</strong>, Suchanfragen an den Anbieter<br />

zu stellen, die er im UniCats-i-<strong>in</strong>ternen Format erhält, sowie die Ergebnisse der Suche vom<br />

Anbieter zu lesen und sie <strong>in</strong> das UniCats-i-<strong>in</strong>terne Format umzuwandeln. Als Schnittstelle<br />

nutzt er dabei die Internetseite des Anbieters. Durch die <strong>in</strong>dividuelle, zudem auf menschliche<br />

Benutzer ausgelegte Gestaltung dieser Seiten und die daraus resultierende Heterogenität<br />

ergibt sich dabei e<strong>in</strong>e Reihe von Problemen:<br />

• Die UniCats-i-<strong>in</strong>ternen Suchanfragen müssen <strong>in</strong> e<strong>in</strong>e Anfrage an den Internet-Server<br />

des Anbieters übersetzt werden, die beim Ausfüllen e<strong>in</strong>es Suchformulars mit den<br />

entsprechenden Suchkriterien durch e<strong>in</strong>en menschlichen Benutzer und das<br />

anschließende Abschicken des Formulars durch e<strong>in</strong>en Browser generiert würde.<br />

• Aus der als Antwort auf diese Anfrage erhaltenen HTML-Seite müssen die Ergebnisse<br />

der Suche extrahiert und <strong>in</strong> das UniCats-i-<strong>in</strong>terne Format übersetzt werden. Diese<br />

Seiten s<strong>in</strong>d wiederum auf die Lesbarkeit durch menschliche Benutzer h<strong>in</strong> abgestimmt<br />

und daher teilweise kaum strukturiert. Sie werden oftmals dynamisch generiert,<br />

ebenso wie die Hyperl<strong>in</strong>ks zu Seiten mit weiteren Ergebnissen oder Ergebnis-Details.<br />

Zur Überw<strong>in</strong>dung dieser Probleme ist e<strong>in</strong> auf jeden Anbieter <strong>in</strong>dividuell angepaßter <strong>Wandler</strong><br />

notwendig. Diese <strong>in</strong>dividuelle Anpassung ist über e<strong>in</strong>e für jeden Anbieter <strong>in</strong>dividuelle<br />

Quellenbeschreibung realisiert, so daß der Anbieteragent selbst nicht angepaßt werden muß.<br />

Vielmehr wird er durch die Quellenbeschreibung <strong>in</strong> die Lage versetzt, Suchanfragen über e<strong>in</strong><br />

Formular des dar<strong>in</strong> beschriebenen Anbieters zu stellen und anschließend die Ergebnisse der<br />

28


Suche zu lesen und im UniCats-i-<strong>in</strong>ternen Format zurückzuliefern. Abbildung 3.5 zeigt die<br />

Struktur e<strong>in</strong>er solchen Quellenbeschreibung, die komplette Form ist aus Anhang A ersichtlich.<br />

<br />

<br />

...<br />

<br />

<br />

...<br />

<br />

<br />

...<br />

<br />

<br />

...<br />

<br />

<br />

...<br />

<br />

<br />

Abbildung 3.5: Struktur e<strong>in</strong>er Quellenbeschreibung<br />

Wie aus der Abbildung bereits ersichtlich ist, besteht e<strong>in</strong>e Quellenbeschreibung aus fünf<br />

Hauptteilen:<br />

• Der Metadaten-Teil () enthält allgeme<strong>in</strong>e Informationen über den<br />

beschriebenen Anbieter: Den Namen des Anbieters <strong>in</strong> Form der URL se<strong>in</strong>es Internet-<br />

Auftritts, das Erstellungsdatum der Quellenbeschreibung, die Angabe, ob die Suche<br />

bei diesem Anbieter kostenpflichtig ist, sowie e<strong>in</strong>e Liste der Informationen, die über<br />

bei diesem Anbieter gefundene Literatur verfügbaren s<strong>in</strong>d.<br />

• Der Suchkosten-Teil () gibt bei kostenpflichtigen Anbietern die<br />

Kosten für e<strong>in</strong>e Suche und für die Bereitstellung der Ergebnisse an. Bei nicht<br />

kostenpflichtigen Anbietern ist er leer.<br />

• Der Suchdaten-Teil () beschreibt die Umsetzung e<strong>in</strong>er Anfrage im<br />

UniCats-i-<strong>in</strong>ternen Format auf e<strong>in</strong> bestimmtes Suchformular des Anbieters,<br />

<strong>in</strong>sbesondere die Belegung der Variablen des Formulars mit den Suchwerten und<br />

weiteren, teilweise im Formular selbst gegebenen Daten.<br />

• Der E<strong>in</strong>zelergebnis-Teil () enthält die Daten, die notwendig<br />

s<strong>in</strong>d, um Informationen über das Suchergebnis aus der Ergebnisseite zu extrahieren,<br />

sofern die Suche nur e<strong>in</strong>en Treffer ergab. Diese spezielle Betrachtung ist notwendig,<br />

da sich e<strong>in</strong>e solche Ergebnisseite bei vielen Anbietern von der e<strong>in</strong>er Suche mit<br />

mehreren Treffern unterscheidet.<br />

• Der Ergebnislisten-Teil () enthält die Daten, die notwendig s<strong>in</strong>d,<br />

um Informationen über die Suchergebnisse aus der Ergebnisseite e<strong>in</strong>er Suche zu<br />

extrahieren, sofern die Suche mehrere Treffer ergab. Dies ist der als allgeme<strong>in</strong><br />

angenommene Fall. Lediglich bei Versagen der Daten dieses Teils greift der<br />

Anbieteragent auf den E<strong>in</strong>zelergebnis-Teil zurück.<br />

Die Daten für das Auslesen der Informationen über die Suchergebnisse aus den<br />

Ergebnisseiten liegen <strong>in</strong> Form von Pfadausdrücken vor, die die e<strong>in</strong>zelnen Teil<strong>in</strong>formationen<br />

im HTML-Baum der Ergebnisseite adressieren. Auch die Hyperl<strong>in</strong>ks zu Seiten mit weiteren<br />

Ergebnissen oder Ergebnis-Details s<strong>in</strong>d durch Pfadausdrücke adressiert. Dies ermöglicht e<strong>in</strong><br />

dynamisches Auslesen der verl<strong>in</strong>kten URLs aus dem HTML-Baum der Suchergebnisseite,<br />

wodurch das Problem dynamisch generierter Hyperl<strong>in</strong>ks gelöst wird.<br />

29


3.3 Die Rolle des Generatoragenten (GA)<br />

Der Generatoragent hat <strong>in</strong>nerhalb des UniCats-i-Systems die Aufgabe, die korrekte Funktion<br />

der Anbieter-Anb<strong>in</strong>dung durch die Anbieteragenten zu sichern. So lange diese gegeben ist,<br />

besteht für ihn ke<strong>in</strong> Grund, aktiv zu werden. Fällt aber die Anb<strong>in</strong>dung e<strong>in</strong>es Anbieters aus, so<br />

ist er <strong>in</strong> der Lage, diese durch die <strong>Generierung</strong> e<strong>in</strong>er neuen Quellenbeschreibung<br />

wiederherzustellen.<br />

E<strong>in</strong> solcher Ausfall der Anb<strong>in</strong>dung führt zum e<strong>in</strong>en zur Benachteiligung des betroffenen<br />

Anbieters gegenüber se<strong>in</strong>en Konkurrenten, zum anderen zu e<strong>in</strong>er unvollständigen Information<br />

des Kunden. Es können mehrere Faktoren dafür verantwortlich se<strong>in</strong>:<br />

• Das Ausführen von Suchanfragen funktioniert nicht mehr. Dies kann dann auftreten,<br />

wenn das im Suchdaten-Teil der Quellenbeschreibung beschriebene Suchformular<br />

nicht mehr existiert oder wenn es derart verändert wurde, daß ihm die Beschreibung<br />

nicht mehr entspricht.<br />

• Die Ergebnisse der Suche können nicht mehr gelesen werden. Dies kann auftreten,<br />

wenn die Struktur der Suchergebnisseiten geändert wurde, so daß die <strong>in</strong><br />

E<strong>in</strong>zelergebnis- und Ergebnislisten-Teil der Quellenbeschreibung angegebenen<br />

Pfadausdrücke im HTML-Baum der Suchergebnisseite entweder <strong>in</strong>s Leere oder nicht<br />

zu den gewünschten Informationen führen. E<strong>in</strong>e weitere mögliche Ursache ist, daß die<br />

Suche aufgrund von Änderungen am Formular zwar noch funktioniert, aber ke<strong>in</strong>e oder<br />

nicht die gewünschten Ergebnisse liefert.<br />

• Der Internet-Server des Anbieters ist für den betroffenen Anbieteragenten<br />

(vorübergehend) nicht erreichbar. Dafür kann e<strong>in</strong> Netzwerk-Problem auf Seiten des<br />

Agenten oder auf Seiten des Anbieters verantwortlich se<strong>in</strong>.<br />

E<strong>in</strong>en durch Netzwerk-Probleme bed<strong>in</strong>gten Ausfall kann das UniCats-i-System ebenso wenig<br />

selbst beheben wie jedes andere Software-System. Wohl aber ist der Generatoragent <strong>in</strong> der<br />

Lage, die Probleme zu beheben, die aus anbieterseitigen Änderungen am benutzten<br />

Suchformular oder an der Struktur der Ergebnis-Darstellung resultieren. Vom betroffenen<br />

Anbieteragenten benachrichtigt untersucht er zu diesem Zweck die Internet-Seiten des<br />

betroffenen Anbieters, generiert e<strong>in</strong>e neue Quellenbeschreibung, mit der der Anbieteragent<br />

wieder <strong>in</strong> die Lage versetzt wird, korrekt auf den betroffenen Anbieter zugreifen zu können,<br />

und liefert diese an ihn zurück.<br />

30


4. Verwandte Projekte und Arbeiten<br />

In diesem Kapitel werden Projekte vorgestellt und untersucht, die sich mit der automatischen<br />

<strong>Generierung</strong> von <strong>Wandler</strong>n beschäftigen. Insbesondere wird dabei auf die jeweils verfolgten<br />

Ansätze und die angewandten Verfahren e<strong>in</strong>gegangen. Diese werden auf die UniCats-ispezifischen<br />

Anforderungen h<strong>in</strong> geprüft, um anschließend ihre Anwendbarkeit im Rahmen<br />

der Realisierung e<strong>in</strong>e vollautomatischen <strong>Wandler</strong>-Generators zu beurteilen.<br />

4.1 W4F<br />

Die World Wide Web Wrapper Factory (W4F) [W4F] ist aus zwei Gründen <strong>in</strong>teressant für<br />

diese Arbeit: Zum e<strong>in</strong>en bietet dieses Projekt e<strong>in</strong> Konzept e<strong>in</strong>es flexiblen <strong>Wandler</strong>s zur<br />

Informationsextraktion, zum anderen stellt es Werkzeuge zur <strong>Generierung</strong> solcher <strong>Wandler</strong><br />

zur Verfügung. Nach e<strong>in</strong>er kurzen Projektvorstellung werden diese <strong>Generierung</strong>swerkzeuge<br />

anhand ihrer Nützlichkeit untersucht und bewertet.<br />

4.1.1 Projektvorstellung<br />

Die Architektur der W4F ist <strong>in</strong> drei Schichten unterteilt [Sahuguet 2000]:<br />

• Retrieval Rules: Die Retrieval Rules beschreiben das Laden von Seiten aus dem<br />

Internet. Diese werden anschließend <strong>in</strong> e<strong>in</strong>e DOM-Struktur geparst (siehe auch Kapitel<br />

2.7).<br />

• Extraction Rules: Die Extraction Rules dienen der Informationsgew<strong>in</strong>nung aus<br />

geladenen HTML-Dokumenten. In ihnen kommt die im Rahmen des W4F-Projektes<br />

entwickelte HTML Extraction Language (HEL) zur Anwendung [Sahuguet 1998].<br />

Diese ermöglicht e<strong>in</strong>e genaue Adressierung der zu extrahierenden Informationen im<br />

HTML-Baum. Die Extraktion geschieht dabei durch die Zuordnung e<strong>in</strong>es HEL-<br />

Pfadausdrucks zu e<strong>in</strong>em Variablennamen. Die Ergebnisse der Pfadausdrücke werden<br />

<strong>in</strong> geschachtelten Zeichenketten (Nested Str<strong>in</strong>g List, kurz NSL) zurückgegeben, wobei<br />

die Dimension der Ergebnistupel durch den Pfadausdruck festgelegt ist. Die<br />

Pfadausdrücke unterstützen sowohl e<strong>in</strong>e Hierarchie-basierte als auch e<strong>in</strong>e<br />

Dokumentfluß-basierte Navigation gemäß der Tiefensuche im Baum. Auf die durch<br />

die Knotennavigation erreichten Knoten können anschließend spezielle<br />

Knotenoperatoren angewendet werden, unter anderem die Textrückgabe bei den<br />

PcData-Blattknoten, die Quellcoderückgabe bei normalen Knoten, die<br />

Attributrückgabe bei attributbehafteten Knoten sowie weitere für die<br />

Informationsgew<strong>in</strong>nung nützliche Operatoren.<br />

• Mapp<strong>in</strong>g Rules: Die Mapp<strong>in</strong>g Rules beschreiben die Umsetzung der Nested Str<strong>in</strong>g<br />

List <strong>in</strong> e<strong>in</strong> Java-Objekt, das an die anfragende Komponente zurückgegeben wird. E<strong>in</strong>e<br />

Ausgabe <strong>in</strong> XML ist nur über Umwege möglich.<br />

Diese Architektur erlaubt allerd<strong>in</strong>gs ke<strong>in</strong>e Def<strong>in</strong>ition verschiedenartiger HTML-Dokumente<br />

<strong>in</strong> e<strong>in</strong>em Extraktionsvorgang. Folglich ist die Navigation über verschieden aufgebaute<br />

HTML-Seiten nicht möglich, wodurch auch die Extraktion verteilter Information<br />

ausgeschlossen wird. Die erzeugten <strong>Wandler</strong> s<strong>in</strong>d somit als Seitenparser zu verstehen. E<strong>in</strong>e<br />

Ausnahme bildet der Spezialfall, daß die Informationen auf mehreren Seiten gleichen<br />

Aufbaus verteilt s<strong>in</strong>d, was z.B. bei e<strong>in</strong>er auf mehrere Seiten gleicher Struktur verteilten<br />

Ergebnisliste zutrifft. Hier kann e<strong>in</strong> rekursives Vorgehen def<strong>in</strong>iert werden.<br />

4.1.2 <strong>Generierung</strong>shilfsmittel<br />

Der Benutzer wird bei der Erstellung oben genannter Regeln von e<strong>in</strong>er Reihe von<br />

Werkzeugen unterstützt [Sahuguet 2000], deren Zusammenwirken aus Abbildung 4.1<br />

31


ersichtlich ist. Es existiert jedoch ke<strong>in</strong> Gesamt-Werkzeug, das alle diese E<strong>in</strong>zel-Werkzeuge<br />

<strong>in</strong>tegriert und so die Möglichkeit bietet, e<strong>in</strong>en kompletten <strong>Wandler</strong> zu generieren. Die E<strong>in</strong>zel-<br />

Werkzeuge werden im folgenden kurz vorgestellt.<br />

Abbildung 4.1: Schichten-Architektur der W4F<br />

Zum Erzeugen der Retrieval Rules steht dem Benutzer e<strong>in</strong> Werkzeug zur Anzeige der<br />

Formularseite und somit der zugehörigen Retrieval Rule <strong>in</strong> e<strong>in</strong>em Web-Browser zur<br />

Verfügung, der sogenannten Formular Wizzard (siehe Abbildung 4.2). Die Retrieval Rule<br />

muß dabei nicht manuell entwickelt werden, wodurch für den Nutzer im Optimalfall generell<br />

ke<strong>in</strong>e Kenntnisse über den Aufbau von Retrieval Rules notwendig s<strong>in</strong>d. Es besteht jedoch<br />

ke<strong>in</strong>e Möglichkeit, die gewonnene Retrieval Rule automatisch <strong>in</strong> e<strong>in</strong>en generierten <strong>Wandler</strong><br />

zu übernehmen. Dies muß vom Benutzer manuell vorgenommen werden. Zudem beherrscht<br />

dieses Werkzeug ke<strong>in</strong>e Frames, was den E<strong>in</strong>satz auf Internet-Seiten ohne solche limitiert.<br />

Abbildung 4.2: W4F Formular Wizzard<br />

Das Entwickeln der Extraction Rules wird durch den Extraction Wizzard (siehe Abbildung<br />

4.3) erleichtert, der die ursprünglich geladene HTML-Seite so modifiziert, daß bei Anzeige <strong>in</strong><br />

e<strong>in</strong>em Browser bei Mauskontakt den HEL-Pfadausdruck der entsprechenden Stelle anzeigt.<br />

Damit ist es jedem Benutzer ohne Kenntnis von HEL-Sprache und HTML-Tags möglich,<br />

32


Extraction Rules zu entwickeln. Diese werden ihm gewohnten Browseransicht der HTML-<br />

Seite angezeigt. Dieses Werkzeug ist jedoch auf den Internet Explorer beschränkt und<br />

funktioniert zudem nicht bei allen HTML-Tags, z.B. nicht bei Knöpfen. Zudem werden e<strong>in</strong>ige<br />

mächtige Operatoren der HEL-Sprache nicht genutzt, die zur Informationsgew<strong>in</strong>nung sehr<br />

nützlich s<strong>in</strong>d und oft zur Erstellung der gewünschten Extraction Rules benötigt werden.<br />

Außerdem ist es nicht möglich, die erstellten Extraction Rules automatisch <strong>in</strong> e<strong>in</strong>en zu<br />

generierenden <strong>Wandler</strong> zu übernehmen. Dies muß der Benutzer wiederum manuell ausführen.<br />

Abbildung 4.3: W4F Extraction Wizzard<br />

Als letztes Werkzeug steht dem Benutzer der Construction Wizzard zur Verfügung, der die<br />

Schichten der Architektur graphisch visualisiert. Er erlaubt die manuelle E<strong>in</strong>gabe der<br />

Retrieval- und Extraction Rules und zeigt die Ausgabe der Ergebnisse graphisch <strong>in</strong> Form<br />

e<strong>in</strong>es Baumes an. Die anderen Werkzeuge s<strong>in</strong>d jedoch nicht e<strong>in</strong>gebunden, was die Erstellung<br />

der Regeln wesentlich erschwert. Somit handelt es sich im eigentlichen S<strong>in</strong>ne nur um e<strong>in</strong>en<br />

Editor mit e<strong>in</strong>gebauter graphischer Visualisierung der Ergebnisse.<br />

Abbildung 4.4: Fertig gestellter W4F <strong>Wandler</strong><br />

33


4.1.3 Beurteilung<br />

Die W4F bietet e<strong>in</strong>e Reihe <strong>in</strong>teressanter Ideen zur Gew<strong>in</strong>nung von Informationen aus dem<br />

Internet, die sich jedoch leider auf e<strong>in</strong>zelne Seiten bzw. der rekursiven Anwendung der<br />

Informationsgew<strong>in</strong>nung auf gleichartig strukturierte Seiten beschränken. Zur <strong>Generierung</strong><br />

e<strong>in</strong>es <strong>Wandler</strong>s werden dem Benutzer nützliche Werkzeuge zur Verfügung gestellt, ohne<br />

diese jedoch zu e<strong>in</strong>em Gesamt-Werkzeug zu <strong>in</strong>tegrieren.<br />

E<strong>in</strong>ige Ideen des W4F-Projektes kommen <strong>in</strong> dem im Rahmen dieser Arbeit entwickelten<br />

<strong>Generierung</strong>s-Werkzeug zur Anwendung, nicht jedoch im vollautomatischen <strong>Wandler</strong>-<br />

Generator.<br />

4.2 XWRAP<br />

Das eXtensible Wrapper Generation System (XWRAP) [XWRAP] des Oregon Graduate<br />

Institute of Science and Technology ist e<strong>in</strong> XML-basiertes Software-System zur semiautomatischen<br />

<strong>Generierung</strong> e<strong>in</strong>es <strong>Wandler</strong>s für webbasierte Informationsquellen. E<strong>in</strong>e für<br />

diese Arbeit <strong>in</strong>teressante Eigenschaft dieses Projekts ist die vollständige <strong>Generierung</strong> e<strong>in</strong>es<br />

<strong>Wandler</strong>s durch e<strong>in</strong> e<strong>in</strong>ziges graphisches Werkzeug. Dieses Werkzeug wird nach e<strong>in</strong>er kurzen<br />

Projektvorstellung näher betrachtet.<br />

4.2.1 Projektvorstellung<br />

Die <strong>Generierung</strong> e<strong>in</strong>es <strong>Wandler</strong> mit XWRAP erfolgt <strong>in</strong> mehrere aufe<strong>in</strong>ander folgenden<br />

Phasen:<br />

• Phase 1 - Objekt- und Element-Extraktion: In dieser Phase wird e<strong>in</strong>e Element-<br />

Extraktions-Komponente generiert, die e<strong>in</strong> HTML- Dokument <strong>in</strong> e<strong>in</strong> XML-Dokument<br />

konvertiert. Die Code-Erzeugung für diese Komponente läuft <strong>in</strong> folgenden Schritten<br />

ab:<br />

o Zuerst gibt der Benutzer die URL der Internet-Seite an, die er bearbeiten will.<br />

o Anschließend kann der Benutzer über die geöffnete Seite navigieren, wie er es<br />

aus e<strong>in</strong>em normalen Browser gewohnt ist, um die Seite zu f<strong>in</strong>den, für die<br />

letztendlich e<strong>in</strong> <strong>Wandler</strong> erzeugt werden soll.<br />

o Nach dem Klick auf den <strong>Generierung</strong>s-Knopf sucht das Werkzeug im<br />

gewählten HTML-Dokument automatisch nach Objekten und Elementen und<br />

teilt es dadurch auf. Dabei lernt das Werkzeug e<strong>in</strong>ige Objekt- und Element-<br />

Extraktions-Heuristiken, die später den Kern der Extraktions-Komponente<br />

bilden. Liefern diese automatisch generierten Extraktions-Heuristiken nicht die<br />

gewünschten Ergebnisse, so kann der Benutzer sie mit Hilfe der Oberfläche<br />

anpassen. Dies geschieht mittels Baumpfad-basierter regulärer Ausdrücke.<br />

o Anschließend kann der Benutzer jedes extrahierte Datenelement benennen,<br />

se<strong>in</strong>en Datentyp und auch die Gruppierung zu Objekten anpassen.<br />

o Zum Schluß dieser Phase generiert das Werkzeug den Code e<strong>in</strong>e Java-<br />

Komponente, die als E<strong>in</strong>gabe e<strong>in</strong>e URL erhält und die Extraktionsergebnisse<br />

mit den vom Benutzer spezifizierten Benennungen als XML-Dokument<br />

zurückliefert. Erfolgt der Zugang zum gewünschten HTML-Dokument über<br />

die HTTP-Methode POST, muß <strong>in</strong> der E<strong>in</strong>gabe zusätzlich e<strong>in</strong> Anfrage-Str<strong>in</strong>g<br />

übergeben werden.<br />

• Phase 2 - Suchformular-Extraktion: In dieser Phase kann der Benutzer die <strong>in</strong> Phase<br />

1 generierte Komponente <strong>in</strong>sofern erweitern, daß sie aus gegebenen Stichworten die<br />

URL des gewünschten HTML-Dokumentes selbst erzeugen kann. Zu diesem Zweck<br />

markiert er die dynamischen Teile der URL und des Anfrage-Str<strong>in</strong>gs und benennt sie<br />

34


mit Stichworten. Das Werkzeug generiert anschließend den Code e<strong>in</strong>er Java-<br />

Komponente, die gegebene Stichworte <strong>in</strong> e<strong>in</strong>en Anfrage-Str<strong>in</strong>g umsetzt.<br />

• Phase 3 - Code-Integration: In dieser letzten Phase werden die beiden generierten<br />

Komponenten zu e<strong>in</strong>er <strong>in</strong>tegriert. Das Ergebnis ist e<strong>in</strong>e Komponente, die als E<strong>in</strong>gabe<br />

Stichworte erhält, diese <strong>in</strong>tern <strong>in</strong> e<strong>in</strong>e URL übersetzt und die aus dem durch diese<br />

adressierten HTML-Dokument extrahierten Daten <strong>in</strong> dem vom Benutzer spezifizierten<br />

XML-Format zurückliefert. Zusätzlich hat der Benutzer die Möglichkeit, den<br />

generierten <strong>Wandler</strong> über die XWRAP-Seite allgeme<strong>in</strong> zugänglich und so auch für<br />

andere benutzbar zu machen.<br />

Es ist jedoch anzumerken, daß mit XWRAP nur e<strong>in</strong> Seitenparser vorliegt, der die <strong>Generierung</strong><br />

e<strong>in</strong>es <strong>Wandler</strong> nur für strukturell gleiche HTML-Seiten erlaubt.<br />

4.2.2 <strong>Generierung</strong>shilfsmittel<br />

XWRAP stellt e<strong>in</strong> Werkzeug zur Verfügung, <strong>in</strong> dessen graphischer Benutzeroberfläche alle<br />

zur <strong>Generierung</strong> e<strong>in</strong>es <strong>Wandler</strong>s erforderlichen Hilfsmittel <strong>in</strong>tegriert s<strong>in</strong>d (siehe Abbildung<br />

4.5). Dabei wird dem Benutzer das geladene HTML-Dokument <strong>in</strong> e<strong>in</strong>er Browserdarstellung<br />

angezeigt, die ihm die aus dem Alltag vertraute Ansicht zur Verfügung stellt. Der Vorgang<br />

der <strong>Generierung</strong> verfolgt den Ansatz Generation by Example. Hierbei wird die Extraktion der<br />

gewünschten Information anhand e<strong>in</strong>er Beispielextraktion durchgeführt (Abbildungen 4.6 und<br />

4.7 zeigen zwei der beteiligten Ansichten) und daraufh<strong>in</strong> von dieser e<strong>in</strong>zelnen Extraktion auf<br />

die allgeme<strong>in</strong>e Extraktion geschlossen. Anhand dieser durchgeführten Analyse wird<br />

anschließend der Wrapper generiert. Dies macht die <strong>Generierung</strong> für den Benutzer e<strong>in</strong>fach,<br />

besonders dadurch, daß ke<strong>in</strong> Spezialwissen erforderlich ist. Zudem existiert e<strong>in</strong> Test-<br />

Werkzeug, mit dem der erzeugte <strong>Wandler</strong>s auf strukturell gleichartigen, <strong>in</strong>haltlich jedoch<br />

verschiedenen HTML-Dokumenten getestet werden kann.<br />

Abbildung 4.5: Start-Ansicht des XWRAP-Werkzeuges<br />

35


Abbildung 4.6: Überblick über extrahierte Elemente<br />

Abbildung 4.7: Detail der Ansicht zur Benennung extrahierter Elemente<br />

4.2.3 Beurteilung<br />

Mit XWRAP liegt lediglich e<strong>in</strong> Seitenparser vor, wodurch ke<strong>in</strong>e <strong>Generierung</strong> e<strong>in</strong>es <strong>Wandler</strong>s<br />

zur Extraktion verteilter Information möglich ist. Allerd<strong>in</strong>gs s<strong>in</strong>d e<strong>in</strong>ige <strong>in</strong>teressante Konzepte<br />

verwendet worden. Zum e<strong>in</strong>en ist hier die graphische Benutzeroberfläche zu nennen, die die<br />

vollständige <strong>Generierung</strong> e<strong>in</strong>es <strong>Wandler</strong>s <strong>in</strong> e<strong>in</strong>em Werkzeug vere<strong>in</strong>t. E<strong>in</strong>ige dieser Konzepte<br />

36


werden dabei <strong>in</strong> den <strong>in</strong> dieser Diplomarbeit realisierten <strong>Generierung</strong>s-Werkzeug<br />

übernommen. Zum anderen erweist sich das Vorgehen Generation by Example als <strong>in</strong>tuitiv<br />

und für den Benutzer als leicht erlernbar. Zudem läßt es sich mit Hilfe von geeigneten<br />

Basisdaten automatisieren, was im H<strong>in</strong>blick auf den im Rahmen dieser Arbeit realisierten<br />

vollautomatischen <strong>Wandler</strong>-Generator <strong>in</strong>teressant wird.<br />

4.3 Lixto<br />

Der Lixto Visual Wrapper [Baumgartner 2001, LIXTO] der Lixto Software GmbH (diese g<strong>in</strong>g<br />

als Sp<strong>in</strong>-Off aus dem Lixto-Projekt der Technischen Universität Wien hervor) bietet e<strong>in</strong><br />

komplettes Werkzeug zu <strong>in</strong>teraktiven <strong>Generierung</strong> von <strong>Wandler</strong>n. Für diese Arbeit ist Lixto<br />

vor allem <strong>in</strong>sofern <strong>in</strong>teressant, daß es die Extraktion von über mehrere HTML-Dokumente<br />

verteilten Informationen ermöglicht. Nach e<strong>in</strong>er kurzen Projektvorstellung werden die<br />

<strong>Generierung</strong>s- und Extraktionsmechanismen näher betrachtet.<br />

4.3.1 Projektvorstellung<br />

Das komplette Lixto-Paket besteht aus mehreren Teilen, deren Zusammenspiel Abbildung 4.8<br />

veranschaulicht:<br />

• Der Interactive Pattern Builder ist das Werkzeug, mit dem der Benutzer e<strong>in</strong>en<br />

<strong>Wandler</strong> generiert. Dies geschieht durch die Def<strong>in</strong>ition so genannter Pattern <strong>in</strong><br />

hierarchischer Reihenfolge, deren Namen gewöhnliche XML-Namen s<strong>in</strong>d. Jedes<br />

Pattern besteht aus e<strong>in</strong>em oder mehreren Filtern, die jeweils bestimmte Informationen<br />

<strong>in</strong> e<strong>in</strong>em HTML-Dokument adressieren und durch zusätzliche Bed<strong>in</strong>gungen<br />

e<strong>in</strong>grenzbar s<strong>in</strong>d. Der Benutzer verwendet dabei Beispielseiten, um gewünschte<br />

Informationen aus dem HTML-Dokument zu isolieren. Die Patterns, genauer die<br />

Filter, durch die sie def<strong>in</strong>iert s<strong>in</strong>d, werden anschließend automatisch <strong>in</strong> die Lixto<strong>in</strong>terne<br />

Sprache Elog übersetzt. Diese besteht aus Baumpfad-basierten regulären<br />

Ausdrücken, die e<strong>in</strong>em Datenelement-Namen zugeordnet s<strong>in</strong>d.<br />

• Der Extractor stellt den Interpreter für die <strong>in</strong> Elog vorliegenden <strong>Wandler</strong> dar. Er<br />

generiert aus HTML-Dokumenten entsprechend dem Elog-<strong>Wandler</strong> e<strong>in</strong>e so genannte<br />

Pattern Instance Base, e<strong>in</strong>e Baum-förmige Datenstruktur, die die extrahierten Daten <strong>in</strong><br />

hierarchischer Ordnung enthält.<br />

• Der XML-Translator überführt die Pattern Instance Base <strong>in</strong> e<strong>in</strong>e vom Benutzer<br />

def<strong>in</strong>ierte XML-Darstellung, die ebenfalls aus mehreren Hierarchie-Ebenen bestehen<br />

kann.<br />

Abbildung 4.8: Zusammenspiel der Lixto-Komponenten<br />

37


4.3.2 <strong>Generierung</strong>shilfsmittel<br />

Lixto stellt mit dem Interactive Pattern Builder e<strong>in</strong> Werkzeug zur Verfügung, das den<br />

Benutzer durch alle Schritte der <strong>Generierung</strong> führt (siehe Abbildung 4.9). Dabei wird dem<br />

Benutzer das geladene HTML-Dokument <strong>in</strong> e<strong>in</strong>er Browserdarstellung angezeigt, die ihm die<br />

vertraute Ansicht zur Verfügung stellt. Der Vorgang der <strong>Generierung</strong> erfolgt auch <strong>in</strong> Lixto<br />

nach dem Pr<strong>in</strong>zip Generation by Example. Abbildung 4.10 zeigt das Hauptmenu des<br />

Interactive Pattern Builder, über das alle notwendigen Funktionen erreichbar s<strong>in</strong>d. In<br />

Abbildung 4.11 ist der mit Hilfe des Interactive Pattern Builder generierte Elog-Code e<strong>in</strong>es<br />

Lixto-<strong>Wandler</strong>s dargestellt.<br />

Abbildung 4.9: Beispielseite im Lixto-Browser<br />

Abbildung 4.10: Hauptmenu des Interactive Pattern Builder<br />

Abbildung 4.11: Elog-Code e<strong>in</strong>es Lixto-<strong>Wandler</strong>s<br />

38


4.3.3 Beurteilung<br />

Der Lixto Visual Wrapper ist für diese Arbeit <strong>in</strong> zweierlei H<strong>in</strong>sicht <strong>in</strong>teressant. Zum e<strong>in</strong>en ist<br />

er fähig, über mehrere HTML-Dokumente verteilte zusammengehörige Informationen zu<br />

extrahieren, wobei diese <strong>in</strong> hierarchischer Ordnung ausgewertet werden. Zum anderen ist<br />

se<strong>in</strong>e Architektur so ausgelegt, daß die Hauptkomponente des letztendlichen <strong>Wandler</strong>s, der<br />

Extractor, nicht auf jede Internet-Seite <strong>in</strong>dividuell angepaßt, sondern lediglich mit e<strong>in</strong>er<br />

<strong>in</strong>dividuell generierten Steuerdatei konfiguriert werden muß. Dies stellt e<strong>in</strong>e wesentliche<br />

Parallele zur Architektur des UniCats-i-<strong>Wandler</strong>s dar, der ebenfalls durch e<strong>in</strong>e <strong>in</strong>dividuell<br />

generierte Quellenbeschreibung konfiguriert wird und selbst nicht angepaßt werden muß.<br />

4.4 ROADRUNNER<br />

Das ROADRUNNER-Projekt der Universität Rom [Crescenzi 2001] bietet e<strong>in</strong>e Ansatz zur<br />

vollautomatischen <strong>Generierung</strong> von <strong>Wandler</strong>n. E<strong>in</strong>ige für diese Arbeit <strong>in</strong>teressante Aspekte<br />

sollen hier näher betrachtet werden.<br />

4.4.1 Projektvorstellung<br />

Das ROADRUNNER-Projekt zielt darauf ab, Daten automatisch aus großen HTML-<br />

Dokumenten zu extrahieren. Das Augenmerk ist dabei vor allem auf Internet-Seiten gerichtet,<br />

die große Datenmengen <strong>in</strong> e<strong>in</strong>er mittelmäßig komplexen Struktur darstellen. Dabei wird als<br />

E<strong>in</strong>gabe lediglich e<strong>in</strong>e Start-URL übergeben, die Ausgabe der extrahierten Daten erfolgt <strong>in</strong><br />

e<strong>in</strong>er Datenbank-ähnlichen Formatierung.<br />

Den im Rahmen dieses Projektes entwickelten Verfahren liegen e<strong>in</strong>ige Annahmen über<br />

Internet-Seiten zugrunde, die große Datenmengen anzeigen:<br />

• Die angezeigten Daten s<strong>in</strong>d <strong>in</strong> e<strong>in</strong>er Datenbank gespeichert, und die HTML-<br />

Dokumente werden über Skripte dynamisch generiert.<br />

• Die fraglichen Internet-Seiten enthalten mehrere verschiedene Klassen von HTML-<br />

Dokumenten, wobei immer diejenigen HTML-Dokumente zu e<strong>in</strong>er Klasse<br />

zusammengefaßt werden, die durch dasselbe Skript generiert wurden.<br />

Abbildung 4.12: Vergleich zweier HTML-Dokumente e<strong>in</strong>er Klasse<br />

39


Aufgrund dieser Annahmen betrachtet das ROADRUNNER-Projekt die dynamische<br />

<strong>Generierung</strong> von HTML-Dokumenten aus <strong>in</strong> e<strong>in</strong>er Datenbank gespeicherten Daten durch e<strong>in</strong><br />

Skript als e<strong>in</strong>e Kodierung des Datenbank-Inhaltes <strong>in</strong> HTML. Folglich wird umgekehrt die<br />

Extraktion der Daten und ihre Umformung <strong>in</strong> e<strong>in</strong> Datenbank-ähnliches Schema durch e<strong>in</strong>en<br />

<strong>Wandler</strong> als Dekodierung verstanden, quasi als Umkehrfunktion des Skriptes, durch das das<br />

HTML-Dokument generiert wurde. Der ROADRUNNER -<strong>Wandler</strong> basiert dabei auf regulären<br />

Ausdrücken bzw. regulären Grammatiken, die mit der E<strong>in</strong>schränkung versehen s<strong>in</strong>d, ke<strong>in</strong>e<br />

UNION-Operationen enthalten zu dürfen.<br />

Diese Grammatiken werden, jeweils für e<strong>in</strong>e Klasse von HTML-Dokumenten, anhand der<br />

Betrachtung mehrerer Beispiel-Dokumente dieser Klasse generiert. Das Verfahren trägt den<br />

Namen Align, Collapse, Match and Extract (ACME) und basiert auf dem F<strong>in</strong>den von<br />

Geme<strong>in</strong>samkeiten und Unterschieden zwischen den Beispiel-Dokumenten (siehe Abbildung<br />

4.12). Dabei werden die Geme<strong>in</strong>samkeiten als zugrunde liegende Struktur, die Unterschiede<br />

als die zu extrahierenden Datenelemente <strong>in</strong>terpretiert. Bei diesem vollautomatischen Prozeß<br />

s<strong>in</strong>d e<strong>in</strong>ige Aspekte zu beachten:<br />

• Da das ACME-Verfahren auf dem Vergleich von HTML-Dokumenten derselben<br />

Klasse basiert, müssen die von e<strong>in</strong>er Internet-Seite kommenden HTML-Dokumente<br />

zuerst <strong>in</strong> Klassen e<strong>in</strong>geteilt werden.<br />

• Internet-Seiten können auch HTML-Dokumente enthalten, die <strong>in</strong> ihrer Klasse alle<strong>in</strong><br />

stehen. Bei diesen kann die Vergleichstechnik nicht angewandt werden, so daß e<strong>in</strong><br />

spezielles Verfahren für sie benötigt wird.<br />

• Da die Lokalisierung der relevanten Datenelemente <strong>in</strong> den HTML-Dokumenten<br />

lediglich auf dem F<strong>in</strong>den von Unterschieden zwischen den Beispiel-Dokumenten<br />

beruht, muß die Bedeutung der extrahierten Datenelemente später noch geklärt<br />

werden.<br />

Abbildung 4.13: Architektur des ROADRUNNER-Systems<br />

40


Die Architektur des ROADRUNNER -Systems (siehe Abbildung 4.13) löst diese Probleme <strong>in</strong><br />

mehreren Schritten. Das System besteht aus folgenden Komponenten:<br />

• Der Classifier nimmt die E<strong>in</strong>teilung der HTML-Dokumente <strong>in</strong> die Klassen vor. Er<br />

enthält e<strong>in</strong>e Crawler, der über die zu untersuchende Internet-Seite navigiert. Zudem<br />

verfügt er über Heuristiken, die die E<strong>in</strong>teilung der durch den Crawler geladenen<br />

HTML-Dokumente <strong>in</strong> Klassen steuern.<br />

• Die <strong>Generierung</strong> von <strong>Wandler</strong>n für die HTML-Dokumente e<strong>in</strong>er Klasse erfolgt im<br />

Aligner, der das ACME-Verfahren implementiert.<br />

• E<strong>in</strong>zel-Dokumente werden im Expander bearbeitet. Dieser wendet andere Verfahren<br />

an als der Aligner, die ohne den Vergleich zweier HTML-Dokumente auskommen.<br />

• Am Ende des <strong>Generierung</strong>sprozesses bestimmt der Labler die Bedeutung der<br />

extrahierten Datenelemente.<br />

4.4.2 Bewertung<br />

Das ACME-Verfahren bietet e<strong>in</strong>en <strong>in</strong>teressanten Ansatz zur vollautomatischen <strong>Generierung</strong><br />

von <strong>Wandler</strong>n. Vor allem die E<strong>in</strong>teilung der Ergebnisdokumente <strong>in</strong> Klassen ist e<strong>in</strong> wichtiger<br />

Aspekt, der zwar <strong>in</strong> anderen <strong>Wandler</strong>-Generatoren ebenfalls implizit enthalten ist, dort aber<br />

nie explizit zum Ausdruck kommt oder gar umgesetzt wird. Allerd<strong>in</strong>gs läßt es e<strong>in</strong>ige Fragen<br />

offen. Erstens bleibt ungeklärt, mithilfe welcher Daten der Crawler z.B. Suchanfragen<br />

ausführen soll, um mehrere HTML-Dokumente e<strong>in</strong>er Klasse zu erhalten. Gibt es ke<strong>in</strong>erlei<br />

Anhaltspunkte, welche Art von Daten auf der zu bearbeitenden Internet-Seite veröffentlicht<br />

werden, so ist es kaum möglich, entsprechende Beispiel-Daten zur Verfügung zu stellen.<br />

Zudem ist ke<strong>in</strong> Verfahren zur Analyse von (Such-) Formularen vorhanden, wodurch das<br />

Ausführen von Suchanfragen generell extrem erschwert wird. Zweitens ist die Extraktion von<br />

über mehrere HTML-Dokumente verteilten zusammengehörigen Informationen durch das<br />

ROADRUNNER -System nicht vorgesehen. Drittens basiert das Verfahren zur Feststellung der<br />

Bedeutung extrahierter Datenelemente auf Heuristiken, wobei ke<strong>in</strong> Verfahren zum Abfangen<br />

dabei auftretender Fehler vorgesehen ist. Viertens steht ke<strong>in</strong> Werkzeug zu Verfügung, mit<br />

dem die generierten <strong>Wandler</strong> geprüft und im Fehlerfall korrigiert oder bei Versagen des<br />

automatischen Verfahrens manuell oder semi-automatisch erzeugt werden können.<br />

4.5 <strong>Wandler</strong> <strong>in</strong> <strong>digitalen</strong> <strong>Bibliotheken</strong>: Semi-Automatische <strong>Generierung</strong><br />

und Evaluationsstrategien<br />

Der von Jürgen Schneider [Schneider 2001] für das UniCats-i-Projektes realisierte semiautomatischen<br />

<strong>Wandler</strong>-Generator ist als direkter Vorgänger des im Rahmen dieser Arbeit<br />

realisierten Generators zu sehen. Er bietet e<strong>in</strong> komplettes Werkzeug zu <strong>in</strong>teraktiven<br />

<strong>Generierung</strong> e<strong>in</strong>es <strong>Wandler</strong>s. Nach e<strong>in</strong>er kurzen Projektvorstellung wird dieses Werkzeug<br />

näher beleuchtet.<br />

4.5.1 Projektvorstellung<br />

Die <strong>Generierung</strong> e<strong>in</strong>es <strong>Wandler</strong>s, genauer gesagt e<strong>in</strong>er Quellenbeschreibung für den UniCatsi-<strong>Wandler</strong>,<br />

läuft <strong>in</strong> mehreren Schritten ab (siehe Abbildung 4.14):<br />

• Nach der E<strong>in</strong>gabe e<strong>in</strong>e URL wird das durch diese adressierte HTML-Dokument<br />

geladen.<br />

• Von dieser Startseite ausgehend navigiert der Benutzer über die Internet-Seite, um<br />

Suchformulare zu f<strong>in</strong>den. Nach der Auswahl e<strong>in</strong>es Formulars wird dieses analysiert<br />

und versetzt den Benutzer somit <strong>in</strong> die Lage, durch die E<strong>in</strong>gabe von Suchbegriffen<br />

Beispiel-Suchen durchführen zu können.<br />

41


• Im Ergebnis-Dokument der Suche markiert der Benutzer nun zu extrahierende<br />

Datenelemente und führt durch e<strong>in</strong>en Knopf die Extraktion durch. Des weiteren hat er<br />

die Möglichkeit, Hyperl<strong>in</strong>ks zu verfolgen und so zu weiteren HTML-Dokumenten mit<br />

zusätzlichen Informationen zu den Treffern der durchgeführten Suche oder zu<br />

weiteren Treffern zu gelangen.<br />

Abbildung 4.14: Ablauf der <strong>Generierung</strong><br />

Die <strong>Generierung</strong> erfolgt nach dem Pr<strong>in</strong>zip der Generation by Example, wobei der Benutzer<br />

e<strong>in</strong>e Beispiel-Suche ausführt. Die Analyse der Ergebnis-Dokumente dieser Suche wird<br />

anschließend auf die Ergebnis-Dokumente e<strong>in</strong>er beliebigen Suche über dasselbe Formular<br />

verallgeme<strong>in</strong>ert. Die Adressierung der Datenelemente und auch der Hyperl<strong>in</strong>ks zu weiteren<br />

HTML-Dokumenten mit zusätzlichen Informationen erfolgt über Pfade <strong>in</strong> der<br />

Baumdarstellung der HTML-Dokumente.<br />

Abbildung 4.15: <strong>Generierung</strong>s-Werkzeug<br />

4.5.2 <strong>Generierung</strong>shilfsmittel<br />

Die <strong>Generierung</strong> e<strong>in</strong>es <strong>Wandler</strong>s, genauer gesagt e<strong>in</strong>er Quellenbeschreibung für den UniCatsi-<strong>Wandler</strong>,<br />

wird <strong>in</strong> diesem Projekt durch e<strong>in</strong> graphisches <strong>in</strong>teraktives Werkzeug unterstützt,<br />

42


das den Benutzer durch alle <strong>Generierung</strong>sschritte führt. Das gerade bearbeitete HTML-<br />

Dokument wird dabei <strong>in</strong> mehreren Ansichten dargestellt:<br />

• Die Baum-Ansicht zeigt die Baumdarstellung des aktuellen HTML-Dokumentes.<br />

• Die Inhalts-Ansicht zeigt die <strong>in</strong> diesem <strong>Generierung</strong>sschritt extrahierbaren Inhalte des<br />

aktuellen HTML-Dokumentes.<br />

• Die Browser-Ansicht zeigt das aktuelle HTML-Dokument <strong>in</strong> der dem Benutzer<br />

vertrauten Form an. Sie besitzt allerd<strong>in</strong>gs ke<strong>in</strong>e <strong>in</strong>teraktiven Funktionen. Insbesondere<br />

kann der Benutzer nicht <strong>in</strong> vertrauter Art und Weise über die Hyperl<strong>in</strong>ks navigieren.<br />

Zudem bietet das Werkzeug mehrere Sichten auf die <strong>in</strong> <strong>Generierung</strong> bef<strong>in</strong>dliche<br />

Quellenbeschreibung und die Protokollausgaben der H<strong>in</strong>tergrund-Komponenten. Abbildung<br />

4.15 zeigt die Oberfläche des Werkzeugs.<br />

4.5.3 Beurteilung<br />

Dieser <strong>Wandler</strong>-Generator ist durch die vertraute Browser-Ansicht leicht zu bedienen und<br />

führt <strong>in</strong>teraktiv durch den <strong>Generierung</strong>s-Prozeß. Das realisierte Pr<strong>in</strong>zip der Generation by<br />

Example ist für den Benutzer e<strong>in</strong>fach und leicht verständlich. Die Extraktion über mehrere<br />

HTML-Dokumente verteilter zusammengehöriger Informationen ist möglich. Die Mehrfach-<br />

Darstellung e<strong>in</strong>es HTML-Dokumentes <strong>in</strong> Baum-, Inhalts- und Browser-Ansicht f<strong>in</strong>det sich <strong>in</strong><br />

weiterentwickelter Form <strong>in</strong> dem im Rahmen dieser Arbeit realisierten <strong>in</strong>teraktiven <strong>Wandler</strong>-<br />

Generator wieder.<br />

Nachteilig ist zum e<strong>in</strong>en die fehlende Möglichkeit zur Navigation über Hyperl<strong>in</strong>ks <strong>in</strong> der dem<br />

Benutzer vertrauten Browser-Ansicht zu vermerken. Zum anderen würde e<strong>in</strong>e gleichzeitige<br />

Anzeige aller HTML-Dokumente, auf denen zu extrahierende Datenelemente lokalisiert<br />

wurden oder werden, den Überblick erleichtern. Zuletzt bleiben im Bereich des<br />

Suchformulars noch zwei Frage offen. Zum e<strong>in</strong>en, wie der <strong>Wandler</strong> e<strong>in</strong>e UniCats-i-<strong>in</strong>terne<br />

Anfrage auf das beschriebene Suchformular übersetzen soll, da die generierte<br />

Quellenbeschreibung ke<strong>in</strong>e Angaben über die Bedeutung der E<strong>in</strong>gabefelder für die Suche<br />

enthält. Zum anderen ist der Umgang mit versteckten E<strong>in</strong>gaben ()<br />

nicht geklärt. Diese sollten bei jeder Anfrage dynamisch geladen werden, da sie unter<br />

anderem eventuell Sitzungs-Schlüssel enthalten können, ohne die e<strong>in</strong>e Anfrage nicht<br />

funktioniert.<br />

4.6 Fazit<br />

In den betrachteten Projekten f<strong>in</strong>den sich viele für diese Arbeit <strong>in</strong>teressante Ansätze.<br />

Insbesondere das Pr<strong>in</strong>zip der Generation by Example hat sich <strong>in</strong> vier der fünf Projekte<br />

bewährt. Die Integration des gesamten <strong>Generierung</strong>s-Prozesses und dessen Unterstützung <strong>in</strong><br />

e<strong>in</strong>em kompletten Werkzeug ist ebenfalls e<strong>in</strong> wichtiger Aspekt <strong>in</strong> drei der fünf betrachteten<br />

Projekte. Bis auf ROADRUNNER beschäftigen sich jedoch alle ausschließlich mit der semiautomatischen<br />

<strong>Generierung</strong> von <strong>Wandler</strong>n durch e<strong>in</strong>en von e<strong>in</strong>em oder mehreren Werkzeugen<br />

unterstützten Benutzer, Ansätze zur vollständigen Automatisierung der umgesetzten<br />

Verfahren fehlen völlig. Umgekehrt läßt der im Rahmen des ROADRUNNER-Projektes<br />

realisierte Ansatz allerd<strong>in</strong>gs so viele Fragen offen (siehe Abschnitt 4.4.2), daß von e<strong>in</strong>er<br />

Verwendung desselben <strong>in</strong> den im Rahmen dieser Arbeit realisierten Komponenten und<br />

Werkzeuge abgesehen werden sollte.<br />

43


5. Entwurf<br />

In diesem Kapitel werden Ansätze zur <strong>Generierung</strong> von <strong>Wandler</strong>n daraufh<strong>in</strong> untersucht,<br />

<strong>in</strong>wiefern sie für e<strong>in</strong>e vollständige Automatisierung <strong>in</strong> Frage kommen. E<strong>in</strong> besonderes<br />

Augenmerk liegt dabei auch auf den Möglichkeiten, die sie zur Analyse von Suchformularen<br />

vorsehen. Anschließend wird auf Basis der angestellten Überlegungen e<strong>in</strong> vollautomatisches<br />

Verfahren zur <strong>Generierung</strong> von <strong>Wandler</strong>n entworfen.<br />

5.1 Automatisierungspotential der <strong>Generierung</strong>sverfahren<br />

In Kapitel 4 f<strong>in</strong>den sich unterschiedliche Ansätze zur <strong>Generierung</strong> von <strong>Wandler</strong>n. In der<br />

Mehrzahl s<strong>in</strong>d sie semi-automatisch und werden vom Benutzer mithilfe von Werkzeugen<br />

durchgeführt, aber es f<strong>in</strong>det sich auch e<strong>in</strong>e bereits vollautomatisches Verfahren. Hier soll nun<br />

untersucht werden, <strong>in</strong>wiefern sich diese Verfahren verändern und weiterentwickeln lassen, um<br />

die Anforderungen zu erfüllen, die an den im Rahmen dieser Arbeit zu entwickelnden<br />

<strong>Wandler</strong>-Generator gestellt s<strong>in</strong>d (siehe auch Abschnitt 1.2):<br />

• Analyse von Suchformularen<br />

• <strong>Generierung</strong> regulärer Ausdrücke zum Heraustrennen e<strong>in</strong>zelner Datenelemente aus<br />

Str<strong>in</strong>gs<br />

• vollständiger Automatismus<br />

5.1.1 Generation by Example<br />

Das <strong>Generierung</strong>s-Verfahren Generation by Example basiert auf e<strong>in</strong>er vom Benutzer<br />

durchgeführten Beispiel-Suche, wobei im Ergebnis-Dokument und, falls das Werkzeug dies<br />

erlaubt, <strong>in</strong> von dort aus über Hyperl<strong>in</strong>ks erreichbaren HTML-Dokumenten die zu<br />

extrahierenden Datenelemente markiert werden. Die so gewonnenen Extraktionsregeln<br />

werden anschließend auf alle Ergebnis-Dokumente von Suchanfragen über das verwendete<br />

Formular und die <strong>in</strong> diesen verl<strong>in</strong>kten HTML-Dokumente verallgeme<strong>in</strong>ert.<br />

E<strong>in</strong> möglicher Ansatz zur Automatisierung dieses Verfahrens wäre, die Suche nicht durch den<br />

Benutzer durchführen zu lassen, sondern nach vorgegebenen Begriffen zu suchen, bei denen<br />

der Inhalt des Ergebnis-Dokumentes – also die zu extrahierenden Datenelemente – bereits<br />

bekannt ist. Sucht man z.B. nach der ISBN-Nummer e<strong>in</strong>es Buches, so stehen die restlichen<br />

Merkmale des Suchergebnisses (Autor, Titel, Verlag, etc) bereits fest. Diese bekannten<br />

Datenelemente können anschließend im Ergebnis-Dokument der Suche und <strong>in</strong> über<br />

Hyperl<strong>in</strong>ks von diesem aus erreichbaren HTML-Dokumenten lokalisiert werden, ohne daß sie<br />

durch den Benutzer markiert werden, z.B. durch e<strong>in</strong>e Tiefensuche über die Werte der PcData-<br />

Knoten <strong>in</strong> der Baumdarstellung der Ergebnis-Dokumente. Die Beispiel-Daten selbst könnten<br />

etwa aus e<strong>in</strong>er e<strong>in</strong>em vollautomatischen <strong>Wandler</strong>-Generator zur Verfügung stehenden Datei<br />

stammen.<br />

5.1.2 ACME<br />

Das ACME-Verfahren zur <strong>Generierung</strong> von <strong>Wandler</strong>n ist bereits voll automatisiert. Um den<br />

Anforderungen an den <strong>Wandler</strong>-Generator gerecht zu werden, der im Rahmen dieser Arbeit<br />

realisiert werden soll, müssen allerd<strong>in</strong>gs andere Fragen geklärt werden.<br />

Erstens muß e<strong>in</strong>e Möglichkeit geschaffen werden, dem Generator mehrere HTML-<br />

Dokumente e<strong>in</strong>er Klasse zur Analyse zur Verfügung zu stellen. Dies könnte wiederum durch<br />

e<strong>in</strong>e Suche nach gegebenen Beispiel-Daten erfolgen. Zweitens muß das Verfahren um e<strong>in</strong>e<br />

Technik zur Extraktion von über mehrere HTML-Dokumente verteilten zusammengehörigen<br />

Informationen erweitert werden. Dabei ist auch zu beachten, wie das Seitenvergleichs-<br />

Verfahren um das Auff<strong>in</strong>den von Hyperl<strong>in</strong>ks zu HTML-Dokumenten mit diesen weiteren<br />

45


Informationen erweitert werden kann. Drittens muß e<strong>in</strong> sicherer Weg gefunden werden, die<br />

Bedeutung der extrahierten Datenelemente festzustellen. Dies könnte etwa wiederum durch<br />

entsprechende Beispiel-Daten erfolgen.<br />

5.1.3 Fazit<br />

Die besondere Stärke des ACME-Verfahrens besteht gerade dar<strong>in</strong>, ke<strong>in</strong>erlei Kenntnis über<br />

den Inhalt der zu bearbeitenden Internet-Seiten zu benötigen. Werden aber für den Bezug der<br />

zur <strong>Generierung</strong> notwendigen HTML-Dokumente Beispiel-Daten benötigt, so müssen diese<br />

sicherlich zum<strong>in</strong>dest grob auf den Inhalt der zu bearbeitenden Internet-Seite abgestimmt se<strong>in</strong>.<br />

Wären die Beispiel-Daten z.B. die Titel von Büchern, so würden sie für die Internet-Seite<br />

e<strong>in</strong>es Onl<strong>in</strong>e-Buchvertriebes sicherlich ihren Zweck erfüllen. Bei der Internet-Seite e<strong>in</strong>er<br />

Onl<strong>in</strong>e-Bibliothek für PDF-Dokumente wäre e<strong>in</strong> auf diese Beispiel-Daten gestützter Versuch<br />

zur <strong>Generierung</strong> e<strong>in</strong>es <strong>Wandler</strong>s dagegen mit großer Wahrsche<strong>in</strong>lichkeit zum Scheitern<br />

verurteilt.<br />

Damit büßt das ACME-Verfahren den Vorteil der Inhalts- und Daten-Unabhängigkeit e<strong>in</strong>, der<br />

es bei all se<strong>in</strong>er Komplexität gegenüber der recht simplen Generation by Example<br />

auszeichnet.<br />

Letztlich ersche<strong>in</strong>t die Automatisierung des Verfahrens Generation by Example auf Basis der<br />

<strong>in</strong> Abschnitt 5.1.1 angestellten Überlegungen deutlich e<strong>in</strong>facher realisierbar zu se<strong>in</strong> als e<strong>in</strong>e<br />

Erweiterung des ACME-Verfahrens um die <strong>in</strong> Abschnitt 5.1.2 herausgestellten Punkte. Daher<br />

wird dieser Ansatz im folgenden ausgearbeitet und später <strong>in</strong> e<strong>in</strong>em vollautomatischen<br />

<strong>Wandler</strong>-Generator umgesetzt.<br />

5.2 Genereller Ablauf des <strong>Generierung</strong>sprozesses<br />

Nachdem nun die Entscheidung für die Automatisierung des Ansatzes Generation by Example<br />

mithilfe von Beispiel-Daten gefallen ist, soll der generelle Ablauf e<strong>in</strong>es <strong>Generierung</strong>s-<br />

Vorganges genauer betrachtet werden. Das hier entwickelte generelle Verfahren wird später<br />

<strong>in</strong> se<strong>in</strong>en e<strong>in</strong>zelnen Schritten genauer ausgearbeitet und <strong>in</strong> den Entwurf von Algorithmen zu<br />

se<strong>in</strong>er Durchführung umgesetzt.<br />

Der Vorgang der <strong>Generierung</strong> e<strong>in</strong>es <strong>Wandler</strong>s soll als E<strong>in</strong>gabe lediglich die URL der zu<br />

bearbeitenden Internet-Seite benötigen. Er kann <strong>in</strong> mehrere Schritte unterteilt werden (siehe<br />

auch Abbildung 5.1):<br />

• Zunächst wird das durch dies e<strong>in</strong>gegebene URL adressierte HTML-Dokument geladen<br />

(Startseite). Es dient als E<strong>in</strong>stiegspunkt für die komplette restliche <strong>Generierung</strong>.<br />

• Ausgehend von dieser Startseite muß nun als erstes e<strong>in</strong> Suchformular gefunden<br />

werden. Dieses ist für die Durchführung von Beispiel-Anfragen logischerweise<br />

unabd<strong>in</strong>gbar.<br />

• Sobald e<strong>in</strong> Suchformular lokalisiert wurde, gilt es, dieses genauer zu analysieren.<br />

Dabei ist zu klären, wie die Felder des Formulars auszufüllen s<strong>in</strong>d und an welche URL<br />

die Anfrage geschickt werden muß.<br />

• Als nächstes ersche<strong>in</strong>t es nun s<strong>in</strong>nvoll, e<strong>in</strong>e Suche mit nur e<strong>in</strong>em Treffer auszuführen<br />

und das Ergebnis-Dokument sowie die auf diesem verl<strong>in</strong>kten HTML-Dokumente zu<br />

analysieren. Dies ist notwendig, da sich Ergebnis-Dokumente von Suchen mit e<strong>in</strong>em<br />

Treffer oftmals von solchen von Suchen mit mehreren Treffern unterscheiden. So<br />

zeigen E<strong>in</strong>zelergebnis-Dokumente oftmals Detail<strong>in</strong>formationen an, die von<br />

Ergebnislisten-Dokumenten erst nach Verfolgen e<strong>in</strong>es Hyperl<strong>in</strong>ks erreichbar s<strong>in</strong>d, also<br />

dort e<strong>in</strong> verl<strong>in</strong>ktes HTML-Dokument mit weiteren Informationen darstellen. Daher<br />

können die aus der Analyse dieses Ergebnis-Dokumentes gewonnenen Daten im<br />

nächsten Schritt mit großer Wahrsche<strong>in</strong>lichkeit wiederverwendet werden.<br />

46


• Den Abschluß der Analyse-Schritte bildet e<strong>in</strong>e möglichst allgeme<strong>in</strong>e Beispiel-Suche<br />

mit mehreren Treffern. Das Ergebnis-Dokument dieser Suche stellt den allgeme<strong>in</strong>en<br />

Fall dar. Es wird, ebenso wie die von ihm aus über Hyperl<strong>in</strong>ks erreichbaren HTML-<br />

Dokumente, auf zu extrahierende Datenelemente h<strong>in</strong> analysiert. Wird dabei e<strong>in</strong><br />

verl<strong>in</strong>ktes HTML-Dokument gefunden, das dem Ergebnis-Dokument der Suche mit<br />

e<strong>in</strong>em Treffer gleicht, so können die Analyse-Ergebnisse aus dieser Beispiel-Suche<br />

wiederverwendet werden.<br />

• Die <strong>in</strong> den vorhergehenden <strong>Generierung</strong>sschritten gesammelten Analyse-Daten<br />

werden abschließend <strong>in</strong> e<strong>in</strong>e Quellenbeschreibung für die bearbeitete Internet-Seite<br />

umgesetzt. Dabei fließen die Beschreibung des Suchformulars sowie die Extraktions-<br />

Regeln für die Ergebnis-Dokumente von Suchen mit e<strong>in</strong>em und mit mehreren Treffern<br />

e<strong>in</strong>.<br />

Abbildung 5.1: Prozeß der <strong>Wandler</strong>-<strong>Generierung</strong><br />

In den folgenden Abschnitten werden nun die e<strong>in</strong>zelnen Schritte der <strong>Generierung</strong> e<strong>in</strong>es<br />

<strong>Wandler</strong>s bzw. e<strong>in</strong>er Quellenbeschreibung für e<strong>in</strong>en durch e<strong>in</strong>e solche konfigurierbaren<br />

<strong>Wandler</strong> genauer betrachtet. Insbesondere wird dabei auf die Automatisierung dieser Schritte<br />

und die dabei zu beachtenden Probleme e<strong>in</strong>gegangen.<br />

5.3 F<strong>in</strong>den und Auswahl e<strong>in</strong>es Suchformulars<br />

Zunächst wird das durch dies e<strong>in</strong>gegebene URL adressierte HTML-Dokument geladen<br />

(Startseite). Es dient als E<strong>in</strong>stiegspunkt für die komplette restliche <strong>Generierung</strong>. Ausgehend<br />

von dieser Startseite muß nun als erstes e<strong>in</strong> Suchformular gefunden werden. Dieses ist für die<br />

Durchführung von Beispiel-Anfragen logischerweise unabd<strong>in</strong>gbar.<br />

5.3.1 Formulare <strong>in</strong> HTML-Dokumenten<br />

Formulare können <strong>in</strong> HTML-Dokumenten für unterschiedliche Zwecke verwendet werden:<br />

• Für E<strong>in</strong>träge <strong>in</strong> Gästebüchern von Internet-Seiten<br />

• Zum E<strong>in</strong>trag <strong>in</strong> e<strong>in</strong>em Mail<strong>in</strong>g-Liste oder zum Bestellen von Newslettern<br />

• Um Kunden e<strong>in</strong>e Feedback-Möglichkeit zu bieten<br />

• Bei Onl<strong>in</strong>e-Mailprovidern zum Verfassen und Absenden von eMails<br />

• Zur Anmeldung an e<strong>in</strong>em Onl<strong>in</strong>e-Dienst, wenn e<strong>in</strong> Log<strong>in</strong> benötigt wird<br />

• Bei Recherche-Systemen jeder Art – ob Suchmasch<strong>in</strong>e oder Onl<strong>in</strong>e-Anbieter<br />

irgendwelcher Produkte – zur E<strong>in</strong>gabe von Suchkriterien und zum Durchführen der<br />

Suche<br />

Diese Liste erhebt ke<strong>in</strong>en Anspruch auf Vollständigkeit, es s<strong>in</strong>d sicherlich noch e<strong>in</strong>e Vielzahl<br />

anderer E<strong>in</strong>satzmöglichkeiten für Formulare denkbar. Technisch dagegen unterscheiden sich<br />

all diese Formulare nicht, im Quellcode e<strong>in</strong>es HTML-Dokumentes s<strong>in</strong>d sie alle nach<br />

demselben Muster aufgebaut. Sie beg<strong>in</strong>nen mit e<strong>in</strong>em -Tag und enden mit e<strong>in</strong>em<br />

-Tag. Zwischen diesen beiden Tags enthalten sie, eventuell neben anderen HTML-<br />

Elementen, <strong>in</strong> der Regel auch spezielle Formular-Elemente. Dies s<strong>in</strong>d HTML-Elemente, die<br />

47


nur <strong>in</strong>nerhalb von Formularen e<strong>in</strong>e Funktion haben, sieht man von Skript-Teilen e<strong>in</strong>es<br />

HTML-Dokumentes e<strong>in</strong>mal ab. Tabelle 5.1 gibt e<strong>in</strong>en Überblick über die Formular-Elemente.<br />

Repräsentiert e<strong>in</strong> e<strong>in</strong>zeiliges Textfeld. Das Attribut NAME<br />

def<strong>in</strong>iert den Attributnamen, VALUE def<strong>in</strong>iert e<strong>in</strong>en<br />

Vorgabewert.<br />

Identisch mit dem e<strong>in</strong>zeiligen Textfeld, jedoch wird auf<br />

dem Bildschirm die E<strong>in</strong>gabe nur als Folge von Sternchen<br />

dargestellt. Die E<strong>in</strong>gabe wird jedoch weiterh<strong>in</strong> als Klartext<br />

zum Server übertragen.<br />

Steht für e<strong>in</strong>en markierbaren Kasten. Das Attribut NAME<br />

repräsentiert den Attributnamen, wobei erlaubt ist,<br />

mehreren Auswahlkästen den gleichen Namen zu geben<br />

und somit e<strong>in</strong>e Mehrfachauswahl zuzulassen. Mit dem<br />

Attribut VALUE kann der Wert angegeben werden, der bei<br />

gesetzter Markierung übertragen wird. Das Attribut<br />

CHECKED legt die Vore<strong>in</strong>stellung auf markiert.<br />

Identisch mit TYPE="RADIO", erlaubt jedoch bei<br />

mehreren Auswahlmöglichkeiten mit gleichem Namen nur<br />

e<strong>in</strong>e e<strong>in</strong>zige Auswahl aus den zur Verfügung stehenden<br />

Möglichkeiten.<br />

Def<strong>in</strong>iert e<strong>in</strong>en Parameter mitsamt e<strong>in</strong>er Belegung, auf<br />

den der Benutzer ke<strong>in</strong>en E<strong>in</strong>fluß hat. Mit den Attributen<br />

NAME und VALUE wird der Parameter mitsamt dem Wert<br />

def<strong>in</strong>iert und übertragen.<br />

Repräsentiert e<strong>in</strong>en Knopf, der die Datenübertragung<br />

auslöst, wenn er gedrückt wird. Das Attribut VALUE legt<br />

den sichtbaren Namen des Knopfes fest.<br />

Steht für e<strong>in</strong>en Knopf, der sämtliche Formulare<strong>in</strong>gaben<br />

zurücksetzt. VALUE steht für die Aufschrift des Knopfes.<br />

Verhält sich wie e<strong>in</strong> TYPE="SUBMIT", aber anstatt e<strong>in</strong>es<br />

Knopfes wird e<strong>in</strong>e Graphik angezeigt, welche durch<br />

Angabe der URL im Attribut SRC gegeben ist.<br />

Repräsentiert e<strong>in</strong> mehrzeiliges Texte<strong>in</strong>gabefeld. Die<br />

Attribute ROWS und COLS def<strong>in</strong>ieren Aussehen und Größe.<br />

Es muß mit dem Ende-Tag abgeschlossen<br />

werden. Zwischen und steht<br />

der Vorgabetext.<br />

Erstellt e<strong>in</strong> Auswahlfeld, das e<strong>in</strong>e Selektion unter<br />

mehreren Vorgaben erlaubt, wobei durch das Attribut<br />

NAME der Name angegeben wird. Es wird durch das Ende-<br />

Tag abgeschlossen und enthält im Innern die<br />

Auswahloptionen. Diese werden mit dem Tag <br />

def<strong>in</strong>iert, gefolgt von dem angezeigten Text der Option.<br />

Das Attribut VALUE gibt den übertragenen Parameterwert<br />

an, und SELECTED bestimmt, ob es sich um die Vorgabe<br />

handelt. Der Parameter MULTIPLE erlaubt die<br />

gleichzeitige Anwahl mehrerer Punkte.<br />

Tabelle 5.1: Formular-Elemente <strong>in</strong> HTML<br />

5.3.2 F<strong>in</strong>den von Suchformularen<br />

Aufgrund der im letzten Abschnitt festgestellten Eigenschaften ist es wenig problematisch,<br />

Formulare <strong>in</strong> HTML-Dokumenten ausf<strong>in</strong>dig zu machen. Es genügt, den HTML-Baum des<br />

48


Dokumentes nach den Knoten zu durchsuchen, die e<strong>in</strong> -Tag repräsentieren, die<br />

Teilbäume unterhalb dieser Knoten repräsentieren dann den Inhalt des jeweiligen Formulars.<br />

Allerd<strong>in</strong>gs genügt es zur <strong>Generierung</strong> e<strong>in</strong>es <strong>Wandler</strong>s nicht, e<strong>in</strong>fach irgende<strong>in</strong> Formular zu<br />

f<strong>in</strong>den, vielmehr muß e<strong>in</strong>es für die Suche nach Literatur bei dem jeweils gerade bearbeiteten<br />

Anbieter ausf<strong>in</strong>dig gemacht werden. Daher wird e<strong>in</strong> Verfahren benötigt, das feststellt, ob es<br />

sich bei e<strong>in</strong>em Formular um e<strong>in</strong> solches zur Literatursuche handelt.<br />

Bestimmte Formulare können aufgrund von Eigenschaften, die für Suchformulare allgeme<strong>in</strong><br />

annehmbar s<strong>in</strong>d, ohne weitere Tests ausgeschlossen werden:<br />

• Suchformulare dienen nicht der Anmeldung an Onl<strong>in</strong>e-Diensten, die e<strong>in</strong>en Log<strong>in</strong><br />

benötigen. Es existieren zwar durchaus Onl<strong>in</strong>e-Anbieter von Literatur, bei denen e<strong>in</strong>e<br />

Suche nur nach e<strong>in</strong>em Log<strong>in</strong> möglich ist. Dieser erfolgt jedoch zuallermeist separat,<br />

nicht über das Suchformular.<br />

• Suchformulare bieten die Möglichkeit, die gesuchte Literatur durch die E<strong>in</strong>gabe von<br />

Suchkriterien <strong>in</strong> Text-Feldern () zu charakterisieren.<br />

• Das auf Anfragen von Suchformularen zurückerhaltene Ergebnis-Dokument ist von<br />

den gemachten E<strong>in</strong>gaben abhängig. Daher können Formulare ausgeschlossen werden,<br />

bei denen dies nicht der Fall ist.<br />

Die ersten beiden Kriterien s<strong>in</strong>d leicht zu überprüfen. Log<strong>in</strong>- Formulare lassen sich daran<br />

erkennen, daß sie e<strong>in</strong> Paßwort-Feld () enthalten, und das<br />

Vorhandense<strong>in</strong> von Text-Feldern <strong>in</strong> e<strong>in</strong>em Formular ist ebenfalls e<strong>in</strong>fach zu prüfen.<br />

Die Abhängigkeit des Ergebnis-Dokumentes von den gemachten E<strong>in</strong>gaben festzustellen ist<br />

dagegen etwas komplizierter. Der Weg führt hier über das Ausfüllen des ersten Text-Feldes<br />

mit m<strong>in</strong>destens zwei unterschiedlichen Test-Suchbegriffen, das jeweils anschließendes<br />

Abschicken des Formulars und den Vergleich der jeweils erhaltenen Ergebnis-Dokumente.<br />

Wählt man dabei den ersten Test-Suchbegriff so, daß e<strong>in</strong>e Suche im Produkt-Katalog e<strong>in</strong>es<br />

beliebigen Onl<strong>in</strong>e-Anbieters, im speziellen auch e<strong>in</strong>es solchen von Literatur, mit Sicherheit<br />

ke<strong>in</strong>en Treffer liefert (beispielsweise „azbycxdwevfugthsirjqkplomn“), alle weiteren dagegen<br />

so, daß e<strong>in</strong>e Suche mit sehr großer Wahrsche<strong>in</strong>lichkeit m<strong>in</strong>destens e<strong>in</strong>en Treffer liefert (z.B.<br />

„Java“, „Physik“, „Goethe“ etc), so kann mit an Sicherheit grenzender Wahrsche<strong>in</strong>lichkeit<br />

ausgeschlossen werden, daß es sich um e<strong>in</strong> Suchformular handelt, wenn alle weiteren<br />

Ergebnis-Dokumente mit dem ersten übere<strong>in</strong>stimmen.<br />

Als Vergleichskriterium ist <strong>in</strong> diesem Zusammenhang die Übere<strong>in</strong>stimmung der Baum-<br />

Darstellungen der HTML-Dokumente s<strong>in</strong>nvoll, da gerade bei kommerziellen Anbietern viele<br />

Dokumente dynamische Inhalte haben, die zufällig e<strong>in</strong>gefügt werden und nicht von E<strong>in</strong>gaben<br />

<strong>in</strong> e<strong>in</strong>em Formular abhängen (z.B. Werbe-Banner). Zudem werden die Formular-E<strong>in</strong>gaben<br />

teilweise <strong>in</strong> dem als Antwort erhaltenen HTML-Dokument wiederholt. Daher wäre bei e<strong>in</strong>em<br />

Vergleich der Str<strong>in</strong>g-Repräsentationen das Risiko zu groß, <strong>in</strong> diesem Kontext gleiche Seiten<br />

als ungleich e<strong>in</strong>zustufen. Handelt es sich bei dem betrachteten Formular z.B. um e<strong>in</strong> Bestell-<br />

Formular für e<strong>in</strong>en Newsletter, so könnte das nach dem Abschicken des Formulars erhaltene<br />

HTML-Dokument etwa e<strong>in</strong>e Text-Passage wie „Herzlich willkommen bei unserem<br />

kostenlosen Benachrichtigungsservice, Herr #NAME#. Sie werden ...“ enthalten, wobei<br />

#NAME# der zuvor zufällig im Namensfeld e<strong>in</strong>gegebene Beispiel-Suchbegriff wäre.<br />

5.3.3 Auswahl e<strong>in</strong>es Suchformulars<br />

Bei vielen Anbietern ist direkt auf der Startseite e<strong>in</strong>e Schnellsuche plaziert. In von dort aus<br />

über Hyperl<strong>in</strong>ks erreichbaren HTML-Dokumenten f<strong>in</strong>den sich aber oftmals weitere<br />

Suchformulare, die e<strong>in</strong>e deutlich genauere Charakterisierung der gesuchten Literatur zulassen,<br />

<strong>in</strong>dem sie z.B. die E<strong>in</strong>gabe mehrerer Suchkriterien und deren logische Verknüpfung<br />

untere<strong>in</strong>ander erlauben. Es ersche<strong>in</strong>t daher s<strong>in</strong>nvoll, nicht das erste gefundene Suchformular<br />

49


zu verwenden, sondern erst e<strong>in</strong>ige Suchformulare zu sammeln und anschließend e<strong>in</strong>es<br />

auszuwählen.<br />

Dies ist durch e<strong>in</strong> Verfolgen der Hyperl<strong>in</strong>ks auf der Startseite und der Suche von Formularen<br />

<strong>in</strong> den durch diese adressierten HTML-Dokumenten realisierbar, eventuell kann dieses<br />

Verfahren sogar rekursiv bis zu e<strong>in</strong>er bestimmten Tiefe angewandt werden. Dabei besteht<br />

allerd<strong>in</strong>gs das Risiko, z.B. über Werbe-Banner oder e<strong>in</strong>e L<strong>in</strong>k-Liste zu den Internet-Seiten<br />

anderer Anbieter zu gelangen. Da für das <strong>Generierung</strong>s-Verfahren nur Formulare <strong>in</strong>teressant<br />

s<strong>in</strong>d, die der Suche bei dem gerade bearbeiteten Anbieter dienen, muß das Verlassen von<br />

dessen Internet-Seite während der Formular-Suche vermieden werden. Dies ist durch e<strong>in</strong>e<br />

Überprüfung der Hyperl<strong>in</strong>ks zu realisieren, die deren Verfolgung ausschließt, falls sie die<br />

gerade bearbeitete Internet-Seite verlassen. Die Überprüfung erfolgt gegen die Basis-URL der<br />

bearbeiteten Seite, und zwar <strong>in</strong>sofern, als daß diese m<strong>in</strong>destens zur Hälfte zusammenhängend<br />

<strong>in</strong> der URL des Hyperl<strong>in</strong>ks enthalten se<strong>in</strong> muß. E<strong>in</strong>e Überprüfung gegen die Basis-URL<br />

„www.buchladen.de“ würde beispielsweise das Verfolgen des Hyperl<strong>in</strong>ks zu der URL<br />

„suche.buchladen.de“ zulassen, das dessen zu „www.buchladen.de/suche“ ebenso, das dessen<br />

zu „www.buch.de“ dagegen nicht.<br />

Wurden nun aus mehreren HTML-Dokumenten e<strong>in</strong>e Anzahl von Formularen isoliert und<br />

solche ausgeschlossen, die nicht der Suche bei dem gerade bearbeiteten Anbieter dienen, so<br />

muß unter den verbliebenen nun das Formular ausgefiltert werden, das für den weiteren<br />

<strong>Generierung</strong>s-Prozeß und später auch durch den <strong>Wandler</strong> verwendet werden soll. Hier ist das<br />

Ziel, das vielseitigste Formular zu wählen, so daß der <strong>Wandler</strong> die ihm übergebenen<br />

Suchkriterien später möglichst genau auf e<strong>in</strong>e Suchanfrage abbilden kann. Für die Beurteilung<br />

der Vielseitigkeit e<strong>in</strong>es Formulars können mehrere Kriterien herangezogen werden:<br />

• Die Anzahl der Text-Felder () legt die Anzahl der <strong>in</strong> e<strong>in</strong>e<br />

Anfrage e<strong>in</strong>br<strong>in</strong>gbaren Suchkriterien fest (e<strong>in</strong> Kriterium je Text-Feld). Daher dient sie<br />

als wichtigstes Kriterium für die Vielseitigkeit e<strong>in</strong>es Suchformulars.<br />

• In vielen Formularen kann die Bedeutung der Suchfelder, also z.B. auf welches<br />

Datenelement der e<strong>in</strong>gegebene Suchbegriff angewendet wird, über Auswahl-Felder<br />

() bee<strong>in</strong>flußt werden. Dies erhöht die Vielseitigkeit der Suche <strong>in</strong>sofern, als<br />

daß mehr Datenelemente als Such-Kriterien zur Verfügung stehen. Daher dient die<br />

Anzahl der Auswahl-Felder ebenfalls e<strong>in</strong> wichtiges Kriterium.<br />

• Über versteckte E<strong>in</strong>gaben () steuern viele Formulare<br />

Sitzungen und Server-seitige Heuristiken, die die Qualität der Suchergebnisse<br />

verbessern. Dies trägt zwar nicht direkt zur Vielseitigkeit des Formulars bei, die<br />

Anzahl der versteckten E<strong>in</strong>gaben kann aber dennoch als Kriterium genutzt werden.<br />

• Das Verhalten e<strong>in</strong>es Suchformulars läßt sich oft auch durch E<strong>in</strong>stellungen<br />

bee<strong>in</strong>flussen, die über weitere E<strong>in</strong>gabe-Felder (, ) vorzunehmen s<strong>in</strong>d. Auch diese tragen zu se<strong>in</strong>er Vielseitigkeit bei.<br />

Insofern kann auch die Anzahl der E<strong>in</strong>gabefelder <strong>in</strong>sgesamt als Kriterium<br />

herangezogen werden.<br />

Die Auswahl des weiterverwendeten Suchformulars erfolgt nun durch sequentielle<br />

Anwendung dieser Kriterien. Dabei werden die <strong>in</strong> Frage kommenden Formulare so lange<br />

mite<strong>in</strong>ander verglichen, bis nur noch e<strong>in</strong>es übrig ist, zuerst nach der Anzahl der Text-Felder,<br />

herrscht hier Gleichheit, nach der Anzahl der Auswahl-Felder, usw. Das verbliebene<br />

Suchformular wird dann für den restlichen <strong>Generierung</strong>s-Prozeß und später auch durch den<br />

<strong>Wandler</strong> benutzt.<br />

5.4 Analyse des Suchformulars<br />

Ist nun die Entscheidung für e<strong>in</strong> bestimmtes der gefundenen Suchformulare gefallen, so<br />

besteht der nächste Schritt dar<strong>in</strong>, die Funktionsweise dieses Formulars möglichst genau zu<br />

50


erforschen, so daß der <strong>Wandler</strong> später die Suchanfragen des UniCats-i-Systems möglichst<br />

genau darauf umsetzen kann, um e<strong>in</strong> optimales Suchergebnis im S<strong>in</strong>ne der Anfrage zu<br />

erzielen.<br />

5.4.1 Genereller Ablauf<br />

Neben den eigentlichen Suchfeldern (Textfeldern) s<strong>in</strong>d <strong>in</strong> e<strong>in</strong>em Suchformular mit großer<br />

Wahrsche<strong>in</strong>lichkeit noch weitere Formular-Elemente (siehe Tabelle 5.1) zur E<strong>in</strong>gabe von<br />

Daten vorhanden. Diese bee<strong>in</strong>flussen das Verhalten des Formulars und damit das Ergebnis der<br />

Suche oft entscheidend. Insbesondere Auswahlfelder s<strong>in</strong>d an dieser Stelle von Interesse, da<br />

über solche oft zum e<strong>in</strong>en die logische Verknüpfung der e<strong>in</strong>zelnen Suchkriterien gesteuert<br />

werden kann, zum anderen auch die Bedeutung der Suchfelder, d.h. auf welches<br />

Datenelement der e<strong>in</strong>gegebene Wert als Suchkriterium angewandt wird. Insgesamt s<strong>in</strong>d<br />

folgende Punkte zu klären:<br />

• Zunächst ist zu klären, an welche URL ist die Suchanfrage zu schicken ist und über<br />

welche HTTP-Methode (GET oder POST) sie versendet werden muß.<br />

• Weiterh<strong>in</strong> ist wichtig, welches Suchfeld <strong>in</strong> den Standard-E<strong>in</strong>stellungen des Formulars<br />

den e<strong>in</strong>gegebenen Suchwert auf welches Datenelement anwendet. Dies ist<br />

<strong>in</strong>sbesondere dann so, wenn die Bedeutung der Suchfelder nicht durch Auswahlfelder<br />

bee<strong>in</strong>flußbar ist.<br />

• S<strong>in</strong>d Auswahlfelder vorhanden, so ist zunächst ihre Funktion <strong>in</strong>nerhalb des<br />

Suchformulars zu klären, d.h. ob sie die Bedeutung der Suchfelder bee<strong>in</strong>flussen, die<br />

logische Verknüpfung der e<strong>in</strong>gegebenen Suchkriterien, oder e<strong>in</strong>en anderen<br />

Suchparameter. In den ersten beiden Fällen ist weiterh<strong>in</strong> festzustellen, die Bedeutung<br />

welches Suchfeldes bzw. die logische Verknüpfung welcher Suchkriterien e<strong>in</strong><br />

bestimmtes Auswahlfeld bee<strong>in</strong>flußt und welche Funktion die e<strong>in</strong>zelnen <strong>in</strong> ihm<br />

enthaltenen Optionen besitzen. Im letzten Fall ist die generelle Funktion des<br />

Auswahlfeldes für die Suche zu klären.<br />

• Zuletzt muß die Bedeutung der weiteren vorhandenen Formular-Elemente<br />

herausgefunden werden.<br />

Die erste Frage wird durch die Parameter ACTION (URL zum Abschicken der Anfrage) und<br />

METHOD (HTTP-Methode zur Parameterübergabe) des -Tags beantwortet. Lediglich die<br />

URL ist, falls relativ gegeben, durch die Basis-URL der gerade untersuchten Internet-Seite zu<br />

ergänzen. Auf Möglichkeiten zur Umsetzung der anderen Punkte und dabei gegebenen<br />

E<strong>in</strong>schränkungen soll <strong>in</strong> den nächsten Abschnitten e<strong>in</strong>gegangen werden.<br />

5.4.2 Klassifizierung der Suchfelder (Textfelder)<br />

Um e<strong>in</strong>e s<strong>in</strong>nvolle Suchanfrage mit brauchbarem Ergebnis über e<strong>in</strong> Suchformular stellen zu<br />

können, ist es notwendig, die Bedeutung der e<strong>in</strong>zelnen Suchfelder zu kennen, d.h. auf welches<br />

Datenelement der jeweils e<strong>in</strong>gegebene Wert als Suchkriterium angewandt wird. So wäre z.B.<br />

das Suchergebnis mit Sicherheit nicht verwendbar im S<strong>in</strong>ne der Suchwünsche des Benutzers,<br />

wenn der Name e<strong>in</strong>es Autors als Kriterium <strong>in</strong> e<strong>in</strong> Suchfeld e<strong>in</strong>getragen wird, das für die<br />

Suche über die Titel der verfügbaren Bücher vorgesehen ist.<br />

E<strong>in</strong>em menschlichen Benutzer erschließt sich die Bedeutung der e<strong>in</strong>zelnen Suchfelder <strong>in</strong> der<br />

Regel durch e<strong>in</strong>e geeignete Beschriftung des Formulars. Er erkennt die Zugehörigkeit e<strong>in</strong>es<br />

Stückes dargestellten Textes zu e<strong>in</strong>em Suchfeld durch die räumliche Anordnung. Aus dem<br />

Quellcode des HTML-Dokumentes und auch aus se<strong>in</strong>er Baum-Darstellung ist diese jedoch<br />

nicht ohne weiteres zu erschließen, da zum e<strong>in</strong>en die Beschriftungen kaum von anderem im<br />

Formular dargestelltem Text (z.B. den Beschriftungen anderer E<strong>in</strong>gabefelder) zu<br />

unterscheiden s<strong>in</strong>d, zum zweiten die räumliche Anordnung von Formular zu Formular sehr<br />

unterschiedlich ausfallen kann, so daß sich an dieser Stelle ke<strong>in</strong>e Regeln aufstellen lassen, und<br />

51


zum dritten die gleiche räumliche Anordnung der Formularelemente <strong>in</strong> der Browser-<br />

Darstellung durch verschiedene sehr unterschiedliche Strukturen im HTML-Dokument<br />

erreicht werden kann. Es ist sogar denkbar, daß die Beschriftung gar nicht als Klartext im<br />

Quellcode des HTML-Dokumentes vorliegt, sondern etwa durch <strong>in</strong>nerhalb des Formulars<br />

e<strong>in</strong>geblendete Bilder oder Grafiken dargestellt wird.<br />

E<strong>in</strong>e weitere Möglichkeit ist, die e<strong>in</strong>zelnen Suchfelder durch mehrfache Suchanfragen nach<br />

geeigneten Suchwerten zu testen, deren Bedeutung bekannt ist. Die Überprüfung der<br />

Suchergebnisse kann dann Anhaltspunkte für die Bedeutung des Suchfeldes liefern. In diesem<br />

Zusammenhang ist zuallererst von Interesse, ob die Suche Treffer hatte oder nicht. Dies läßt<br />

sich anhand des Ergebnis-Dokumentes über den Vergleich von HTML-Dokumenten (siehe<br />

Abschnitt 2.8) feststellen, sofern das Aussehen e<strong>in</strong>es solchen e<strong>in</strong>er Suche ohne Treffer<br />

bekannt ist. Dies kann erreicht werden, <strong>in</strong>dem man vor der Suche nach Suchwerten mit<br />

bekannter Bedeutung e<strong>in</strong>e Suche nach e<strong>in</strong>em Wert durchführt, für den die Suche im Produkt-<br />

Katalog e<strong>in</strong>es beliebigen Onl<strong>in</strong>e-Anbieters, im speziellen auch e<strong>in</strong>es solchen von Literatur,<br />

mit Sicherheit ke<strong>in</strong>en Treffer liefert (z.B. „azbycxdwevfugthsirjqkplomn“, siehe auch<br />

Abschnitt 5.3.2). Das Ergebnis-Dokument dieser Suche wird im folgenden als Ke<strong>in</strong>-Treffer-<br />

Dokument bezeichnet.<br />

Die Klassifizierung jedes Suchfeldes, also die Feststellung se<strong>in</strong>er Bedeutung, funktioniert nun<br />

durch Suchanfragen nach Suchwerten mit bekannter Bedeutung. Gleicht das Ergebnis-<br />

Dokument nicht dem Ke<strong>in</strong>-Treffer-Dokument, so ist über das Suchfeld mit großer<br />

Wahrsche<strong>in</strong>lichkeit e<strong>in</strong>e Suche mit dem Datenelement als Kriterium möglich, das der<br />

Bedeutung des verwendeten Suchwertes entspricht. Ergeben sich auf diese Weise mehrere als<br />

Kriterium benutzbare Datenelemente, handelt es sich mit großer Wahrsche<strong>in</strong>lichkeit um e<strong>in</strong><br />

Freitext-Feld. Bei diesem Verfahren zur Klassifizierung gibt es allerd<strong>in</strong>gs noch e<strong>in</strong>ige Punkte<br />

zu beachten, die die Qualität des Ergebnisses entscheidend bee<strong>in</strong>flussen können.<br />

• So ist etwa e<strong>in</strong>e e<strong>in</strong>zige Test-Suche je bekannte Bedeutung / Datenelement nicht<br />

ausreichend, um e<strong>in</strong> aussagekräftiges Ergebnis zu erzielen. Es steht dann nicht fest, ob<br />

nur dieser bestimmte Test-Suchwert ke<strong>in</strong>e Treffer liefert, oder das durch ihn<br />

repräsentierte Datenelement über das Suchfeld generell nicht als Suchkriterium<br />

angewendet werden kann. Folglich s<strong>in</strong>d je Datenelement mehrere Test-Anfragen<br />

notwendig. Die Anzahl der Erfolgreichen Test-Anfragen je Datenelement werden<br />

anschließend ausgewertet, und die Bedeutung des Suchfeldes wird als das<br />

Datenelement klassifiziert, zu dem die meisten Test-Anfragen Treffer geliefert haben.<br />

• Um e<strong>in</strong>e Verzerrung der Klassifizierung zu vermeiden, sollten die gewählten Test-<br />

Suchwerte zudem jeweils zusammenhängende Gruppen bilden, wobei zu jedem<br />

Datenelement <strong>in</strong> jeder Gruppe e<strong>in</strong> Test-Suchwert vorhanden ist. Dies ist z.B. zu<br />

erreichen, <strong>in</strong>dem man jeweils die zu e<strong>in</strong>em bestimmten Buch gehörigen<br />

Datenelemente (Titel, Autor, Verlag, ISBN-Nummer, Ersche<strong>in</strong>ungsjahr, etc)<br />

verwendet. Andernfalls könnte das Ergebnis dadurch verfälscht werden, daß sich zu<br />

e<strong>in</strong>em stark selektiven Datenelement (z.B. der ISBN-Nummer) zu 80% der Test-<br />

Suchwerte e<strong>in</strong> Treffer im Katalog des untersuchten Anbieters bef<strong>in</strong>det, zu e<strong>in</strong>em<br />

anderen (z.B. dem Titel) aber nur zu 30% der Test-Suchwerte. Dies kann im<br />

schlimmsten Fall zur E<strong>in</strong>stufung e<strong>in</strong>es Freitext-Suchfeldes zu e<strong>in</strong>em bestimmten<br />

Datenelement h<strong>in</strong> führen.<br />

• Zuletzt ist noch zu beachten, daß Test-Anfragen Treffer liefern können, obwohl das<br />

durch den verwendeten Test-Suchwert repräsentierte Datenelement über das Suchfeld<br />

eigentlich nicht als Kriterium angewandt werden kann. Dies tritt dann e<strong>in</strong>, wenn der<br />

Test-Suchwert im Wert e<strong>in</strong>es Datenelementes enthalten ist, das über das Suchfeld als<br />

Kriterium angewandt werden kann. So kann etwa das Ersche<strong>in</strong>ungsjahr e<strong>in</strong>es Buches<br />

sehr wohl im Titel e<strong>in</strong>es anderen enthalten se<strong>in</strong>, oder der Verlag trägt e<strong>in</strong>en Namen,<br />

der auch der Name e<strong>in</strong>es Autors ist. Um diese der Natur der Datenelemente<br />

52


<strong>in</strong>newohnende Problematik zu umgehen, muß die Wahrsche<strong>in</strong>lichkeit dieser<br />

e<strong>in</strong>gebetteten Treffer bei der Auswertung der Anzahl der Test-Anfragen mit Treffern<br />

je Datenelement berücksichtigt werden. Dies geschieht durch Ignorieren der Test-<br />

Anfragen mit Treffern für das Datenelement mit höherer Wahrsche<strong>in</strong>lichkeit von<br />

e<strong>in</strong>gebetteten Treffern. So wird z.B. e<strong>in</strong> Suchfeld mit Treffern bei Test-Anfragen nach<br />

Test-Suchwerten für die Datenelemente Titel und Ersche<strong>in</strong>ungsjahr so klassifiziert, als<br />

ob es nur für die Test-Suchwerte für Titel Treffer geliefert hätte, da e<strong>in</strong><br />

Ersche<strong>in</strong>ungsjahr (z.B. „2003“) deutlich wahrsche<strong>in</strong>licher <strong>in</strong> e<strong>in</strong>em Buchtitel<br />

(beispielsweise „Fischer Weltalmanach 2003“) enthalten ist als umgekehrt. Der<br />

umgekehrte Fall ist bei entsprechender Wahl der Test-Suchwerte annähernd<br />

auszuschließen. Allerd<strong>in</strong>gs ist bei der Auswahl der Test-Suchwerte zu beachten, daß<br />

für m<strong>in</strong>destens zwei der durch sie repräsentierten Datenelemente nicht von<br />

e<strong>in</strong>gebetteten Treffern auszugehen se<strong>in</strong> darf. Andernfalls würden alle Suchen mit<br />

Treffern auf e<strong>in</strong>em Freitext-Feld als e<strong>in</strong>gebettete Treffer e<strong>in</strong>gestuft, bis auf die nach<br />

Test-Suchbegriffen, die das e<strong>in</strong>e Datenelement mit der ger<strong>in</strong>gsten Wahrsche<strong>in</strong>lichkeit<br />

für e<strong>in</strong>gebettete Treffer repräsentieren. Damit würden Freitext-Felder zwangsläufig<br />

immer so klassifiziert, als würden sie nur dieses e<strong>in</strong>e Datenelement als Suchkriterium<br />

anwenden.<br />

Die Auswertung der Anzahl der Test-Anfragen mit Treffern je Datenelement läuft nach<br />

folgenden Kriterien:<br />

• Die Test-Anfragen mit Treffern nach Test-Suchwerten für e<strong>in</strong> Datenelement werden<br />

ignoriert, sofern die Anzahl der Test-Anfragen mit Treffern nach Test-Suchwerten für<br />

e<strong>in</strong> anderes Datenelement m<strong>in</strong>destens doppelt so groß ist.<br />

• Des weiteren werden Test-Anfragen mit Treffern nach Test-Suchwerten für<br />

Datenelemente ignoriert, deren Wahrsche<strong>in</strong>lichkeit für e<strong>in</strong>gebettete Treffer <strong>in</strong> e<strong>in</strong>em<br />

anderen Datenelement groß ist, für dessen Test-Suchwerte m<strong>in</strong>destens genauso viele<br />

Test-Anfragen Treffer geliefert haben.<br />

Ist nach dieser Elim<strong>in</strong>ierung unter den Datenelementen, für die die Test-Anfrage nach<br />

m<strong>in</strong>destens e<strong>in</strong>em ihrer Test-Suchwerte Treffer geliefert hat, nur noch e<strong>in</strong> Datenelement<br />

übrig, so wird das Suchfeld so klassifiziert, daß es der Anwendung dieses Datenelementes als<br />

Kriterium dient. Ist mehr als e<strong>in</strong> Datenelement übrig, wird es als Freitext-Feld klassifiziert.<br />

5.4.3 Klassifizierung der Auswahlfelder<br />

Auswahlfelder liefern of e<strong>in</strong>en großen Beitrag zur Vielseitigkeit e<strong>in</strong>es Suchformulars. Sie<br />

dienen oft zur Festlegung des Datenelementes, auf das der <strong>in</strong> e<strong>in</strong>em Suchfeld e<strong>in</strong>gegebene<br />

Suchwert als Kriterium angewandt wird. Zudem werden sie zur logischen Verknüpfung der <strong>in</strong><br />

den e<strong>in</strong>zelnen Suchfeldern e<strong>in</strong>gegebenen Kriterien genutzt. Des weiteren können sie auch <strong>in</strong><br />

anderer Weise zur Steuerung e<strong>in</strong>es Suchformulars verwendet werden. Bei der Analyse der<br />

Auswahlfelder s<strong>in</strong>d folgende Punkte von Interesse:<br />

• Zunächst ist zu klären, <strong>in</strong> welcher Weise e<strong>in</strong> Auswahlfeld das Verhalten des<br />

Suchformulars bee<strong>in</strong>flußt, also ob es das von e<strong>in</strong>em Suchfeld als Kriterium<br />

angewandte Datenelement (Element-Auswahl), die logische Verknüpfung von<br />

Suchkriterien (Verknüpfungs-Auswahl) oder etwas anderes (Allgeme<strong>in</strong>e Auswahl)<br />

bee<strong>in</strong>flußt.<br />

• Dann muß <strong>in</strong> den ersten beiden Fällen festgestellt werden, die von welchem Suchfeld<br />

als Kriterium angewandte Datenelement bzw. die logische Verknüpfung der über<br />

welche Suchfelder e<strong>in</strong>gegebenen Suchkriterien das Auswahlfeld steuert. Im letzten<br />

Fall muß herausgefunden werden, <strong>in</strong>wiefern es das Verhalten des Suchformulars<br />

überhaupt steuert.<br />

53


• Zuletzt ist die Bedeutung der e<strong>in</strong>zelnen im Auswahlfeld enthaltenen Optionen zu<br />

klären.<br />

Der erste Punkt läßt sich am besten nach der Klärung des letzten beurteilen, da Auswahlfelder<br />

<strong>in</strong> vielen Formularen ohne jede Beschriftung dastehen und ihre Bedeutung sich dem Benutzer<br />

alle<strong>in</strong> durch die dar<strong>in</strong> zur Auswahl stehenden Optionen erklärt. Die enthaltenen Optionen<br />

bieten im Falle e<strong>in</strong>er automatischen Analyse zudem den Vorteil, im Quellcode des HTML-<br />

Dokumentes als Klartext (lediglich die HTML-spezifische Kodierung von Sonderzeichen ist<br />

zu beachten) vorzuliegen und dem Auswahlfeld e<strong>in</strong>deutig zugeordnet zu se<strong>in</strong>. Auch die<br />

Standard-E<strong>in</strong>stellung ist leicht zu ermitteln: Ist ke<strong>in</strong>e der Optionen e<strong>in</strong>es Auswahlfeldes mit<br />

dem Standardauswahl-Parameter SELECTED markiert, so ist standardmäßig die erste Option<br />

ausgewählt. Somit sollte zunächst versucht werden, die Bedeutung der Optionen e<strong>in</strong>es<br />

Auswahlfeldes zu bestimmen, um dann von dieser auf die Bedeutung des Auswahlfeldes<br />

selbst zu schließen.<br />

Das primäre Ziel hierbei ist die Erkennung von Element- und Verknüpfungs-Auswahlen.<br />

Diese tragen zum e<strong>in</strong>en <strong>in</strong> hohem Maße dazu bei, System-<strong>in</strong>terne Suchanfragen genau auf das<br />

Suchformular umsetzen zu können, zum anderen entstammen die <strong>in</strong> ihnen enthaltenen<br />

Optionen <strong>in</strong> der Regel e<strong>in</strong>er recht kle<strong>in</strong>en Menge von Begriffen, die die für Literatur<br />

relevanten Datenelemente (z.B. Titel, Autor) und die Konjunktionen zum Ausdruck logischer<br />

Verknüpfungen (z.B. „und“, „oder“) umfaßt. Dies schafft die Möglichkeit, die Optionen<br />

mithilfe von Heuristik-Daten zu identifizieren, die die UniCats-i-<strong>in</strong>ternen Bezeichner für<br />

Datenelemente und logische Verknüpfungen den im Literatur-Umfeld dafür verwendeten<br />

Begriffen zuordnet. Aufgrund der identifizierten Optionen läßt sich nun auch e<strong>in</strong>e Aussage<br />

darüber treffen, ob es sich um e<strong>in</strong>e Element-, e<strong>in</strong>e Verknüpfungs- oder eben um e<strong>in</strong>e<br />

allgeme<strong>in</strong>e Auswahl handelt.<br />

Allerd<strong>in</strong>gs ist dabei nicht auszuschließen, daß sich auch unter den Optionen e<strong>in</strong>er allgeme<strong>in</strong>en<br />

Auswahl e<strong>in</strong> Begriff bef<strong>in</strong>det, der erkannt wird und damit zur E<strong>in</strong>stufung dieses<br />

Auswahlfeldes als Element- oder Verknüpfungs-Auswahl führt. Um die Wahrsche<strong>in</strong>lichkeit<br />

e<strong>in</strong>er solchen Fehlerkennung zu reduzieren, kann nun zunächst festgelegt werden, daß der<br />

Heuristik-Wert (z.B. „und“) die gesamte Option darstellen muß und es nicht genügt, wenn er<br />

im Wert der Option enthalten ist. Dadurch wird etwa die Erkennung der Option „Spezial- und<br />

Sonderangebote“ als Option für den UniCats-i-<strong>in</strong>teren Verknüpfungs-Operator „and“ und<br />

damit die E<strong>in</strong>stufung des sie enthaltenden Auswahlfeldes als Verknüpfungs-Auswahl<br />

vermieden. Weiterh<strong>in</strong> kann die Durchsetzung folgender Annahmen helfen, die sich aus der<br />

Betrachtung vieler Suchformulare mit Element- und Verknüpfungs-Auswahlen ergeben:<br />

• Wenn Element-Auswahlen <strong>in</strong> e<strong>in</strong>em Suchformular vorhanden s<strong>in</strong>d, so ist für jedes<br />

Suchfeld genau e<strong>in</strong>e solche vorhanden. Dies bedeutet <strong>in</strong>sbesondere, daß genau so viele<br />

Element-Auswahlen wie Suchfelder Vorhanden s<strong>in</strong>d.<br />

• Wenn Verknüpfungs-Auswahlen <strong>in</strong> e<strong>in</strong>em Suchformular vorhanden s<strong>in</strong>d, so ist für<br />

jedes Suchfeld genau e<strong>in</strong>e solche vorhanden. Diese dient, je nach Position (vor oder<br />

nach dem Suchfeld) zu dessen logischer Verknüpfung mit dem nachfolgenden oder<br />

vorangehenden. Bei Verknüpfung zum vorangehenden Suchfeld ist eventuell das erste<br />

ohne Verknüpfungs-Option, bei Verknüpfung zum nachfolgenden Suchfeld eventuell<br />

das letzte. Dies bedeutet <strong>in</strong>sbesondere, daß <strong>in</strong> e<strong>in</strong>em Suchformular genauso gleich<br />

viele Verknüpfungs-Optionen vorhanden s<strong>in</strong>d wie Suchfelder oder genau e<strong>in</strong>e<br />

weniger.<br />

Wurden <strong>in</strong>sgesamt weniger Auswahlfelder als Element-Auswahlen e<strong>in</strong>gestuft als Suchfelder<br />

vorhanden s<strong>in</strong>d, so kann aufgrund der ersten Annahme davon ausgegangen werden, daß diese<br />

E<strong>in</strong>stufungen fehlerhaft waren und es sich um allgeme<strong>in</strong>e Auswahlen handelt. Wurden<br />

<strong>in</strong>sgesamt weniger Auswahlfelder als Verknüpfungs-Auswahlen e<strong>in</strong>gestuft als die Anzahl der<br />

Suchfelder m<strong>in</strong>us e<strong>in</strong>s, so kann aufgrund der zweiten Annahme davon ausgegangen werden,<br />

54


daß diese E<strong>in</strong>stufungen fehlerhaft waren und es sich um allgeme<strong>in</strong>e Auswahlen handelt.<br />

Wurden dagegen mehr Auswahlfelder als Element- oder Verknüpfungs-Auswahlen e<strong>in</strong>gestuft<br />

als nach obrigen Annahmen zulässig, so kann deren Anzahl per Ausschluß-Verfahren<br />

reduziert werden, wodurch irrtümliches Erkennen von Auswahlfeldern als solche korrigiert<br />

wird. Bei diesem Verfahren können mehrere Kriterien <strong>in</strong> Bezug auf die enthaltenen Optionen<br />

angewandt werden:<br />

• Es kann angenommen werden, daß <strong>in</strong> e<strong>in</strong>er Element- oder Verknüpfungs-Auswahl<br />

aufgrund der kle<strong>in</strong>en Menge von möglichen enthaltenen Optionen bei entsprechender<br />

Auswahl der Heuristik-Daten entweder m<strong>in</strong>destens die Hälfte der enthaltenen<br />

Optionen durch deren Anwendung erkannt wird oder sich m<strong>in</strong>destens die Hälfte der<br />

vorhandenen Heuristik-Daten <strong>in</strong> den Optionen wiederf<strong>in</strong>det. Ist beides nicht der Fall,<br />

so kann davon ausgegangen werden, daß es sich bei den erkannten Optionen um<br />

Zufallstreffer handelt und die Auswahlfelder eigentlich Allgeme<strong>in</strong>e Auswahlen s<strong>in</strong>d.<br />

• Die Beobachtung zeigt, daß die Element-Auswahlen <strong>in</strong> Bezug auf die jeweils<br />

enthaltenen Optionen <strong>in</strong> der Regel übere<strong>in</strong>stimmen. F<strong>in</strong>det sich unter den als Element-<br />

Auswahlen e<strong>in</strong>gestuften Auswahlfeldern e<strong>in</strong>e Gruppe von solchen, <strong>in</strong> denen dieselben<br />

Optionen bei der Anwendung der Heuristik-Daten erkannt wurden, und enthält diese<br />

Gruppe e<strong>in</strong>e Anzahl von potentiellen Element-Auswahlen, die mit der Anzahl der<br />

Suchfelder übere<strong>in</strong>stimmt, so kann daher davon ausgegangen werden, daß es sich<br />

hierbei um die korrekt erkannten Element-Auswahlen handelt. Damit s<strong>in</strong>d alle anderen<br />

als Element-Auswahlen e<strong>in</strong>gestuften Auswahlfelder fälschlicherweise so behandelt<br />

worden und können als Allgeme<strong>in</strong>e Auswahlen e<strong>in</strong>gestuft werden.<br />

• Dieselbe Beobachtung gilt mit derselben Schlußfolgerung auch für Verknüpfungs-<br />

Auswahlen, allerd<strong>in</strong>gs mit der Erweiterung, daß die Anzahl derer <strong>in</strong> der Gruppe von<br />

solchen, <strong>in</strong> denen dieselben Optionen bei der Anwendung der Heuristik-Daten erkannt<br />

wurden, auch um e<strong>in</strong>s ger<strong>in</strong>ger se<strong>in</strong> darf als die Anzahl der Suchfelder im Formular.<br />

• S<strong>in</strong>d nach Überprüfung dieser drei Annahmen noch immer mehr Auswahlfelder als<br />

Element- oder Verknüpfungs-Auswahlen e<strong>in</strong>gestuft als nach Anzahl der vorhandenen<br />

Suchfelder zulässig, so kann der Anteil der durch Anwendung der Heuristik-Daten<br />

erkannten an den vorhandenen Optionen zum Ausschluß weiterer Auswahlfelder<br />

genutzt werden. Auch der Anteil der <strong>in</strong> mehreren Auswahlfeldern erkannten an den<br />

vorhandenen Optionen kann aufgrund der zweiten und dritten Annahme als Kriterium<br />

genutzt werden. Ersteres Ausschluß-Verfahren ist <strong>in</strong>sbesondere dann notwendig, wenn<br />

das Formular nur e<strong>in</strong> Suchfeld enthält, letzteres ist bei Vorhandense<strong>in</strong> mehrerer<br />

Suchfelder gut anwendbar. Die jeweils ausgeschlossenen Auswahlfelder werden als<br />

Allgeme<strong>in</strong>e Auswahlen e<strong>in</strong>gestuft.<br />

Nach der Klassifizierung der Auswahlfelder <strong>in</strong> Element-, Verknüpfungs- und allgeme<strong>in</strong>e<br />

Auswahlen müssen die der ersten beiden Gruppen zu den Suchfeldern des Formulars<br />

zugeordnet werden. Dies wiederum ist durch Testanfragen möglich, <strong>in</strong>dem e<strong>in</strong> Suchfeld mit<br />

e<strong>in</strong>em Test-Suchwert ausgefüllt wird und anschließend Test-Anfragen mit mehreren Optionen<br />

e<strong>in</strong>er Element-Auswahl durchgeführt werden. Alle anderen Auswahlfelder des Formulars<br />

werden mit ihren Standard-Optionen belegt, egal zu welcher Gruppe sie gehören, um so<br />

unerwünschte Effekte durch nicht ausgefüllte Felder zu vermeiden. Der Vergleich der<br />

jeweiligen Ergebnis-Dokumente klärt dann die Beziehung der Element-Auswahl zum<br />

verwendeten Suchfeld: S<strong>in</strong>d die Ergebnis-Dokumente alle gleich, hat die verwendete<br />

Element-Auswahl wahrsche<strong>in</strong>lich ke<strong>in</strong>e Auswirkungen auf die Bedeutung des verwendeten<br />

Suchfeldes, andernfalls hat sie e<strong>in</strong>e Bedeutung. Auf diese Weise kann nach und nach e<strong>in</strong>e Art<br />

Abhängigkeitsmatrix für Element-Auswahlen e<strong>in</strong>erseits und Suchfelder andererseits erstellt<br />

werden, aus der dann die Zugehörigkeit der Element-Auswahlen zu den Suchfeldern<br />

abgelesen werden kann. Dasselbe Verfahren kann auch für die Verknüpfungs-Auswahlen<br />

55


angewandt werden, wobei hier immer zwei aufe<strong>in</strong>ander folgende Suchfelder mit Test-<br />

Suchwerten zu belegen s<strong>in</strong>d.<br />

Dieses Verfahren ist allerd<strong>in</strong>gs sehr aufwendig. Dem Benutzer erschließt sich die<br />

Zugehörigkeit der Element- und Verknüpfungs-Auswahlen zu den Suchfeldern dagegen durch<br />

deren räumliche Anordnung im Suchformular. Geht man nun davon aus, daß die Anordnung<br />

zusammengehöriger Teile (je e<strong>in</strong> Suchfeld, e<strong>in</strong>e Element- und e<strong>in</strong>e Verknüpfungs-Auswahl)<br />

zue<strong>in</strong>ander jeweils gleich ist, eröffnet sich e<strong>in</strong>e deutlich e<strong>in</strong>fachere Möglichkeit: S<strong>in</strong>d<br />

Gruppen von Tags <strong>in</strong> der Browser-Darstellug e<strong>in</strong>es HTML-Dokumentes <strong>in</strong><br />

korrespondierenden Mustern angeordnet, so stehen die <strong>in</strong> den e<strong>in</strong>zelnen Ausprägungen dieser<br />

Muster dargestellten e<strong>in</strong>zelnen Tags <strong>in</strong> der Baum-Darstellung des HTML-Dokumentes <strong>in</strong><br />

derselben Tiefensuch-Reihenfolge. Dies bedeutet <strong>in</strong> diesem speziellen Fall, daß die zu den<br />

Element- und Verknüpfungs-Auswahlen korrespondierenden Knoten <strong>in</strong> der Baum-Darstellung<br />

des das Formular enthaltenden HTML-Dokumentes <strong>in</strong> derselben Tiefensuch-Reihenfolge<br />

stehen wie die zu den Suchfeldern korrespondierenden, zu denen sie gehören. Durch diese<br />

Eigenschaft ist die Zuordnung deutlich e<strong>in</strong>facher und schneller zu vollziehen als durch das<br />

Verfahren der Test-Suche. Für die korrekte Zuordnung der Verknüpfungs-Auswahlen ist<br />

allerd<strong>in</strong>gs noch zu klären, ob sie das im zugehörigen Suchfeld e<strong>in</strong>gegebene Suchkriterium<br />

logisch mit dem im nächsten oder dem im vorhergehenden e<strong>in</strong>gegebenen verknüpfen. E<strong>in</strong><br />

Benutzer würde e<strong>in</strong>e vor dem Suchfeld stehende Verknüpfungs-Auswahl als logische<br />

Verknüpfung zum vorigen Suchfeld <strong>in</strong>terpretieren, e<strong>in</strong>e dah<strong>in</strong>ter stehende als solche zum<br />

nächsten. Dies kann als Anhaltspunkt genutzt werde. Steht e<strong>in</strong> Tag <strong>in</strong> der Browser-<br />

Darstellung e<strong>in</strong>es HTML-Dokumentes vor e<strong>in</strong>em anderen, so liegt se<strong>in</strong> korrespondierende<br />

Knoten <strong>in</strong> der Baum-Darstellung des Dokumentes <strong>in</strong> Tiefensuch-Reihenfolge vor dem des<br />

anderen. Liegt nun also der zur ersten Verknüpfungs-Auswahl korrespondierende Knoten <strong>in</strong><br />

der Baum-Darstellung des das Formular enthaltenden HTML-Dokumentes vor dem des ersten<br />

Suchfeldes, so stehen die Verknüpfungs-Auswahlen im Formular vor den Suchfeldern und<br />

verb<strong>in</strong>den diese logisch mit dem jeweils vorhergehenden, andernfalls stehen sie dah<strong>in</strong>ter und<br />

verb<strong>in</strong>den diese logisch mit dem jeweils nächsten.<br />

Durch die Zuordnung der Element-Auswahlen zu den Suchfeldern ergibt sich e<strong>in</strong>e neue<br />

Möglichkeit zur Klassifizierung der Suchfelder <strong>in</strong> den Standard-E<strong>in</strong>stellungen des Formulars:<br />

Statt des aufwendigen Testsuch-Verfahrens, das <strong>in</strong> Abschnitt 5.4.2 entwickelt wurde, kann<br />

nun e<strong>in</strong>fach die standardmäßig ausgewählte Option der zu e<strong>in</strong>em Suchfeld gehörenden<br />

Element-Auswahl ausgelesen werden, sofern diese durch die Anwendung der Heuristik-Daten<br />

erkannt wurde. Dafür ist es allerd<strong>in</strong>gs notwendig, die Reihenfolge der Arbeitsschritte <strong>in</strong>sofern<br />

zu verändern, als daß zuerst die Auswahl- und erst anschließend die Suchfelder klassifiziert<br />

werden.<br />

Zuletzt bleibt noch die weitere Behandlung der als allgeme<strong>in</strong>e Auswahlen klassifizierten<br />

Auswahlfelder zu klären. Deren mögliche Bedeutung kann jedoch so unterschiedlich<br />

ausfallen, daß e<strong>in</strong>e genaue Bestimmung durch oben entwickelte Verfahren auf Basis von<br />

Heuristik-Daten quasi nicht möglich ist. Zudem können sie für die Umsetzung von UniCats-i<strong>in</strong>ternen<br />

Suchanfragen kaum genutzt werden, da ihre Funktion und ihr Vorhandense<strong>in</strong> über<br />

die unterschiedlichen Anbieter derart variiert, daß dem UniCats-i-Benutzer, dessen Anfrage ja<br />

an viele Anbieter gestellt werden können soll, kaum Optionen zur Verfügung gestellt werden<br />

können, die ihre Möglichkeiten nutzen. Daher werden diese Auswahlfelder bei jeder<br />

Suchanfrage jeweils mit ihrer standardmäßig ausgewählten Optionen belegt.<br />

5.4.4 Behandlung der restlichen E<strong>in</strong>gabefelder<br />

Nachdem die Bedeutung von Suchfeldern () und Auswahlfeldern<br />

() geklärt ist, bleibt nun noch, die von Checkboxen (),<br />

Radio-Knöpfen () und versteckten E<strong>in</strong>gaben () herauszuf<strong>in</strong>den. Die Bedeutung von Knöpfen (,<br />

56


und ) ist trivialerweise klar. Mehrzeilige<br />

Textfelder ( ... ) treten <strong>in</strong> Suchformularen nur mit sehr ger<strong>in</strong>ger<br />

Wahrsche<strong>in</strong>lichkeit auf und werden hier daher nicht näher betrachtet.<br />

Versteckte E<strong>in</strong>gaben s<strong>in</strong>d vom Benutzer nicht zu bee<strong>in</strong>flussen und sollten daher auch von<br />

e<strong>in</strong>er über das Formular suchenden Software-Komponente nicht verändert werden. Da sie<br />

jedoch für die Funktion e<strong>in</strong>es Formulars respektive für die des Skriptes, das Server-seitig die<br />

e<strong>in</strong>gegebenen Daten weiterverarbeitet, oft e<strong>in</strong>en wichtige Rolle spielen, müssen sie<br />

unverändert übertragen werden. Zudem werden sie vielfach dynamisch erzeugt (z.B.<br />

Sitzungs-Schlüssel), wodurch es notwendig wird, vor jeder Suchanfrage das das Formular<br />

enthaltende HTML-Dokument zu laden und sie auszulesen, um ihre Aktualität zu<br />

gewährleisten.<br />

Die Bedeutung von Checkboxen und Radio-Knöpfen erschließt sich dem Benutzer über die<br />

Beschriftung des Formulars. Dadurch gilt für sie Ähnliches wie für nicht durch Element-<br />

Auswahlen beschriftete Suchfeldern: Ihre Bedeutung ist nur durch extrem aufwendige<br />

Verfahren zu bestimmen, zumal ihre genaue Funktion für die Suche im Gegensatz zu der der<br />

Suchfelder extrem unterschiedlich se<strong>in</strong> kann. E<strong>in</strong>e Klassifizierung über die Beobachtung von<br />

Veränderungen am Ergebnis-Dokument e<strong>in</strong>er Suche ist somit quasi ausgeschlossen, da<br />

ke<strong>in</strong>erlei Anhaltspunkt besteht, welcher Art diese Veränderung se<strong>in</strong> könnte. Aus diesem<br />

Grund werden diese Formular-Elemente so behandelt wie allgeme<strong>in</strong>e Auswahlen: Sie werden<br />

bei jeder Suchanfrage mit ihrer Standard-E<strong>in</strong>stellung belegt.<br />

5.4.5 Durchführen e<strong>in</strong>er Suche über das Formular<br />

Nach der Analyse des gewählten Suchformulars steht für dieses e<strong>in</strong>e sehr komplexe<br />

Beschreibung mit e<strong>in</strong>er Fülle verschiedener E<strong>in</strong>stellungsmöglichkeiten zur Verfügung.<br />

Dadurch kann e<strong>in</strong>e UniCats-i-<strong>in</strong>terne Suchanfrage zum e<strong>in</strong>en zwar sehr genau auf das<br />

Formular übersetzt werden, zum anderen ist diese Übersetzung allerd<strong>in</strong>gs recht komplex.<br />

Gerade wenn nicht jedes Datenelement über jedes Suchfeld als Kriterium genutzt werden<br />

kann, ist es je nach Anfrage sogar sehr komplex, die e<strong>in</strong>zelnen Suchbed<strong>in</strong>gungen auf die<br />

Suchfelder zu verteilen. Zudem s<strong>in</strong>d nicht <strong>in</strong> jedem Formular alle Datenelemente als Kriterien<br />

anwendbar. Daher muß immer auch entschieden werden, welche der <strong>in</strong> der UniCats-i-<strong>in</strong>ternen<br />

Suchanfrage spezifizierten Kriterien über das Formular überhaupt anwendbar s<strong>in</strong>d und<br />

welchen dies nicht zutrifft. Diese müssen dann auf Freitext-Felder übersetzt werden, sofern<br />

solche <strong>in</strong> genügender Anzahl verfügbar s<strong>in</strong>d. Andenfalls bleibt nicht anderes übrig, als die<br />

betroffenen Kriterien <strong>in</strong> der auf das Formular übersetzten Suchanfrage nicht zu<br />

berücksichtigen. Dasselbe gilt, wenn die Anzahl der <strong>in</strong> der UniCats-i-<strong>in</strong>ternen Suchanfrage<br />

spezifizierten Kriterien die der Suchfelder im Formular übersteigt. Zudem muß vor jedem<br />

Stellen e<strong>in</strong>er Suchanfrage das das Formular enthaltene HTML-Dokument geladen werden, um<br />

eventuell vorhandene Versteckte E<strong>in</strong>gaben samt ihren Werten auszulesen, da diese dynamisch<br />

se<strong>in</strong> können (z.B. Sitzungs-Schlüssel). Auch die URL zum Abschicken der Anfrage kann sich<br />

von Mal zu Mal unterscheiden, wenn z.B. für jede Sitzung auf dem Server des Anbieters<br />

dynamisch e<strong>in</strong> eigenes Verzeichnis angelegt wird, und muß daher für jede Anfrage neu<br />

ausgelesen werden.<br />

Das Stellen von Suchanfragen ist zwar genau wie das Lesen der Ergebnisse Aufgabe des<br />

<strong>Wandler</strong>s, doch ist es auch für den weiteren Prozeß der <strong>Generierung</strong> notwendig, Suchanfragen<br />

über das gewählte Formular stellen zu können. Daher wird e<strong>in</strong>e separate Komponente<br />

geschaffen, die die besagte Übersetzung vornimmt. Diese soll die Beschreibung des<br />

Formulars laden und dadurch <strong>in</strong> die Lage versetzt werden, Suchanfragen von der UniCats-i<strong>in</strong>ternen<br />

Form auf das Formular zu überführen, ähnlich wie der <strong>Wandler</strong> durch das Laden der<br />

Quellenbeschreibung zum Zugriff auf e<strong>in</strong>en bestimmten Anbieter befähigt wird. Diese<br />

Komponente soll später auch vom <strong>Wandler</strong> selbst zum Stellen von Suchanfragen an den durch<br />

57


ihn repräsentierten Anbieter benutzt werden. Sie wird im folgenden als Anfrage-Generator<br />

bezeichnet.<br />

5.5 <strong>Generierung</strong> der Pfade für Suchen mit e<strong>in</strong>em Treffer<br />

Nach Abschluß der Analyse des Suchformulars ist der Generator nun <strong>in</strong> der Lage,<br />

zielgerichtete Suchanfragen an die Internet-Seite des untersuchten Anbieters zu stellen. Dies<br />

bedeutet <strong>in</strong>sbesondere, daß nun das Pr<strong>in</strong>zip der Generation by Example zur Untersuchung der<br />

Ergebnis-Dokumente von Suchanfragen und von diesen aus über Hyperl<strong>in</strong>ks erreichbare<br />

HTML-Dokumente angewandt werden kann.<br />

Zunächst werden die Ergebnis-Dokumente solcher Suchanfragen behandelt, die nur e<strong>in</strong>en<br />

e<strong>in</strong>zigen Treffer liefern. Dies ist notwendig, da sich solche Ergebnis-Dokumente oftmals von<br />

denen von Suchanfragen mit mehreren Treffern unterscheiden. So zeigen E<strong>in</strong>zelergebnis-<br />

Dokumente oftmals Detail<strong>in</strong>formationen an, die von Ergebnislisten-Dokumenten erst nach<br />

Verfolgen e<strong>in</strong>es Hyperl<strong>in</strong>ks erreichbar s<strong>in</strong>d, also dort e<strong>in</strong> verl<strong>in</strong>ktes HTML-Dokument mit<br />

weiteren Informationen darstellen. Daher können die aus der Analyse dieses Ergebnis-<br />

Dokumentes gewonnenen Daten bei der <strong>Generierung</strong> der Pfade für Suchen mit mehreren<br />

Treffern mit großer Wahrsche<strong>in</strong>lichkeit wiederverwendet werden.<br />

5.5.1 Genereller Ablauf<br />

Die <strong>Generierung</strong> der Pfadausdrücke, die der Extraktion von Datenelementen aus dem<br />

Ergebnis-Dokument e<strong>in</strong>er Suchanfrage mit e<strong>in</strong>em Treffer dienen, verläuft <strong>in</strong> mehreren<br />

Schritten:<br />

• Zunächst muß e<strong>in</strong>e Suchanfrage erzeugt werden, die genau e<strong>in</strong>en Treffer liefert, d.h.<br />

zu deren Kriterien genau e<strong>in</strong> Buch existiert, das diese erfüllt.<br />

• Anschließend wird diese Suchanfrage durch den Anfrage-Generator auf das<br />

untersuchte Formular übersetzt und an die Internet-Seite des untersuchten Anbieters<br />

gestellt.<br />

• Nun muß festgestellt werden, ob die Suche erfolgreich war, d.h. ob sie den erwarteten<br />

Treffer geliefert hat. Dies erfolgt durch den Vergleich des erhaltenen Ergebnis-<br />

Dokumentes mit dem schon bei der Formular-Analyse e<strong>in</strong>gesetzten Ke<strong>in</strong>-Treffer-<br />

Dokument. S<strong>in</strong>d diese beiden HTML-Dokumente verschieden, so hat die Suchanfrage<br />

e<strong>in</strong>en Treffer geliefert, d.h. das gesuchte Buch ist im Katalog des untersuchten<br />

Anbieters enthalten und die Analyse kann fortgesetzt werden. Andernfalls muß e<strong>in</strong>e<br />

neue Suchanfrage nach e<strong>in</strong>em anderen Buch gestellt werden.<br />

• Nun können die das gesuchte Buch beschreibenden Datenelemente wie z.B. Titel und<br />

Autor im Ergebnis-Dokument lokalisiert werden, um aus den gefundenen Positionen<br />

(PcData-Knoten) anschließend Pfadausdrücke zu generieren, die die Extraktion dieser<br />

Datenelemente aus dem Ergebnis-Dokument e<strong>in</strong>er Suche bei dem untersuchten<br />

Anbieter erlauben, sofern diese genau e<strong>in</strong>en Treffer geliefert hat.<br />

In den folgenden Abschnitten werden die e<strong>in</strong>zelnen Schritte genau untersucht und Verfahren<br />

zu ihrer Umsetzung entwickelt.<br />

5.5.2 <strong>Generierung</strong> der Suchanfrage<br />

Bei der <strong>Generierung</strong> der Suchanfrage ist es besonders wichtig, daß die Suche genau e<strong>in</strong>en<br />

Treffer liefert. Dies bedeutet im Literatur-Umfeld, daß die Anfrage so konkret se<strong>in</strong> muß, daß<br />

nur e<strong>in</strong>e bestimmte Ausgabe e<strong>in</strong>es bestimmten Buches die angegebenen Kriterien erfüllt. Dies<br />

ist dadurch zu erreichen, daß Datenelemente mit hoher Selektivität als Suchkriterien<br />

verwendet werden, also beispielsweise ISBN-Nummer und Titel.<br />

58


Optimal ist e<strong>in</strong>e Suche mit e<strong>in</strong>em für Literatur e<strong>in</strong>deutigen Schlüssel als Kriterien-<br />

Komb<strong>in</strong>ation, wobei diese Eigenschaft nur der ISBN-Nummer zugeschrieben werden kann.<br />

Die Komb<strong>in</strong>ation aus Titel, Autor und Ersche<strong>in</strong>ungsjahr kommt ihr zwar recht nahe, doch ist<br />

es gerade im Bereich wissenschaftlicher Literatur nicht unüblich, daß e<strong>in</strong> Buch noch im<br />

selben Jahr übersetzt wird und auch <strong>in</strong> e<strong>in</strong>er anderen Sprache ersche<strong>in</strong>t. S<strong>in</strong>d beim<br />

untersuchten Anbieter beide Versionen verfügbar, so liefert die Suche mehr als e<strong>in</strong>en Treffer.<br />

Welche Datenelemente als Kriterien zur Anwendung kommen können, unterscheidet sich<br />

zudem von Anbieter zu Anbieter bzw. von Formular zu Formular. Es ist daher s<strong>in</strong>nvoll, alle<br />

verfügbaren Datenelemente des als Beispiel verwendeten Buches mit e<strong>in</strong>er ihrer Selektivität<br />

entsprechenden Priorisierung als Suchkriterien anzugeben, wobei das selektivste am<br />

wichtigsten e<strong>in</strong>gestuft wird. Die Auswahl der Kriterien, die letztlich <strong>in</strong> der auf das Formular<br />

übersetzen Suchanfrage berücksichtigten werden, nimmt der Anfrage-Generator gemäß der<br />

als Kriterium verfügbaren Datenelemente und der Anzahl der möglichen Kriterien vor.<br />

5.5.3 <strong>Generierung</strong> der Pfade<br />

Durch den Vergleich des Ergebnis-Dokumentes mit dem Ke<strong>in</strong>-Treffer-Dokument wird nun<br />

festgestellt, ob die Suchanfrage nach dem als Beispiel gewählten Buch dieses als Treffer<br />

geliefert hat oder nicht. Von ersterem kann ausgegangen werden, wenn die HTML-<br />

Dokumente verschieden s<strong>in</strong>d, letzteres ist an ihrer strukturellen Gleichheit zu erkennen und<br />

tritt dann e<strong>in</strong>, wenn es nicht im Katalog des untersuchten Anbieters enthalten ist. In diesem<br />

Fall muß e<strong>in</strong> anderes Buch als Beispiel herangezogen und e<strong>in</strong>e neue Suchanfrage generiert,<br />

übersetzt und gestellt werden.<br />

Abbildung 5.2: <strong>Generierung</strong> der Pfade zu Datenelementen<br />

Hat die Suche nun genau e<strong>in</strong>e Treffer geliefert, so bedeutet dies, daß das Ergebnis-Dokument<br />

Informationen enthält, die das als Beispiel gewählte Buch beschreiben. Insbesondere s<strong>in</strong>d also<br />

die Werte von Datenelementen wie etwa Titel und Autor e<strong>in</strong>erseits bekannt, andererseits <strong>in</strong><br />

diesem HTML-Dokument enthalten und können daher per Suche über die PcData-Knoten <strong>in</strong><br />

der Baum-Darstellung des Ergebnis-Dokumentes lokalisiert werden. Nun kann die Kenntnis<br />

59


der die Datenelemente enthaltenden PcData-Knoten dazu genutzt werden, um Pfadausdrücke<br />

zu generieren, die diese Knoten adressieren, und diese den Datenelementen zuzuweisen.<br />

Abbildung 5.2 verdeutlicht dieses Verfahren.<br />

Wurden auf diese Weise alle bekannten und im Ergebnis-Dokument enthaltenen<br />

Datenelemente lokalisiert und <strong>in</strong> sie adressierende Pfade umgesetzt, so besteht die nächste<br />

Aufgabe dar<strong>in</strong>, dasselbe Verfahren aus von diesem aus über Hyperl<strong>in</strong>ks erreichbare HTML-<br />

Dokumente anzuwenden und so weitere Datenelemente für die Extraktion verfügbar zu<br />

machen. Dazu werden zunächst alle im Ergebnis-Dokument enthaltenen Hyperl<strong>in</strong>ks gesucht<br />

(Knoten, die e<strong>in</strong> -Tag repräsentieren) und anschließend die durch sie (den href-Parameter<br />

der -Knoten) adressierten HTML-Dokumente geladen. Anschließend können sie, genau<br />

wie schon das Ergebnis-Dokument, nach den für das Beispiel-Buch bekannten Werten der<br />

Datenelemente durchsucht werden. Enthält e<strong>in</strong> Dokument Datenelemente, die im Ergebnis-<br />

Dokument nicht enthalten s<strong>in</strong>d, so ist es als Lieferant zusätzlicher Informationen e<strong>in</strong>zustufen<br />

und wird beibehalten, andernfalls braucht es nicht weiter beachtet zu werden und wird<br />

gelöscht. Dieses Vorgehen kann nun rekursiv angewendet werden, um alle verfügbaren<br />

Informationen ausf<strong>in</strong>dig zu machen.<br />

Wurden nun vom Ergebnis-Dokument über Hyperl<strong>in</strong>ks direkt oder <strong>in</strong>direkt erreichbaren<br />

HTML-Dokumentes mit weiteren Informationen gefunden, so ist als nächstes zu klären, wie<br />

diese für die Extraktion zugänglich gemacht werden können. Die e<strong>in</strong>fachste Möglichkeit wäre<br />

die Speicherung der Hyperl<strong>in</strong>k-URLs. Da diese aber oft dynamisch generiert werden und<br />

somit von e<strong>in</strong>em Ergebnis-Dokument zum anderen variieren können, führt dieses Vorgehen<br />

zur Extraktion falscher Informationen oder dazu, daß das adressierte Dokument gar nicht<br />

mehr existiert. Es ist daher sehr <strong>in</strong>stabil und somit wenig zweckdienlich. E<strong>in</strong>e weitere<br />

Möglichkeit besteht <strong>in</strong> der Speicherung der Pfade der Knoten, die die Hyperl<strong>in</strong>ks <strong>in</strong> der<br />

Baum-Darstellung der HTML-Dokumente repräsentieren. Dadurch kann die konkrete URL<br />

bei jedem Extraktionsvorgang dynamisch ausgelesen werden und ist damit <strong>in</strong> jedem Fall<br />

aktuell und korrekt. Erleichtert wird dies noch durch die Fähigkeit der verwendeten<br />

Pfadausdrücke, Knoten-Parameter direkt zu adressieren.<br />

Das Ergebnis dieses rekursiven Verfahrens aus <strong>Generierung</strong> von Pfaden und Verfolgung der<br />

vorhandenen Hyperl<strong>in</strong>ks ist e<strong>in</strong>e Kaskade von HTML-Dokumenten, wobei jedes als e<strong>in</strong>e<br />

Informationsschicht oder kurz Schicht bezeichnet wird. Diese stellt e<strong>in</strong>e Baumstruktur dar,<br />

deren Wurzel das Ergebnis-Dokument ist. Die Vater-K<strong>in</strong>d-Beziehung entsteht dadurch, daß<br />

als Vater-Dokument e<strong>in</strong>es HTML-Dokumentes immer jenes angesehen wird, das den<br />

Hyperl<strong>in</strong>k enthält, der es adressiert.<br />

Die Beschreibung e<strong>in</strong>er Schicht enthält die aus dieser extrahierbaren Datenelemente sowie<br />

deren Pfade. Der Pfad des den Hyperl<strong>in</strong>k zu e<strong>in</strong>er Schicht repräsentierenden Knotens <strong>in</strong> der<br />

Baum-Darstellung der jeweiligen Vater-Schicht wird als Adresse der Schicht bezeichnet.<br />

Diese wird <strong>in</strong> der Beschreibung der K<strong>in</strong>d-Schicht gespeichert, ist aber <strong>in</strong> der Vater-Schicht<br />

auszuführen.<br />

5.6 <strong>Generierung</strong> der Pfade für Suchen mit mehreren Treffern<br />

Abschließend muß nun das Ergebnis-Dokument e<strong>in</strong>er allgeme<strong>in</strong>en Suchanfrage mit e<strong>in</strong>er<br />

unbestimmten Anzahl von Treffern analysiert werden. Dieses stellt den allgeme<strong>in</strong>en Fall dar.<br />

Es wird, ebenso wie die von ihm aus über Hyperl<strong>in</strong>ks erreichbaren HTML-Dokumente, auf zu<br />

extrahierende Datenelemente h<strong>in</strong> analysiert. Wird dabei e<strong>in</strong> verl<strong>in</strong>ktes HTML-Dokument<br />

gefunden, das dem Ergebnis-Dokument der Suchanfrage mit e<strong>in</strong>em Treffer gleicht, so können<br />

die Ergebnisse aus diesem <strong>Generierung</strong>sschritt wiederverwendet werden. Es gilt allerd<strong>in</strong>gs<br />

noch zu beachten, daß das Ergebnis e<strong>in</strong>er Suchanfrage mit vielen Treffern oft als Liste<br />

angezeigt wird und daß diese Liste oft <strong>in</strong> bestimmte Intervalle (Teillisten) unterteilt ist, so daß<br />

das Ergebnis-Dokument z.B. nur die ersten 30 Treffer der Suche enthält und die nächste<br />

Teilliste über e<strong>in</strong>en Hyperl<strong>in</strong>k erreichbar ist.<br />

60


5.6.1 Genereller Ablauf<br />

Die <strong>Generierung</strong> der Pfadausdrücke, die der Extraktion von Datenelementen aus dem<br />

Ergebnis-Dokument e<strong>in</strong>er allgeme<strong>in</strong>en Suchanfrage mit e<strong>in</strong>er unbestimmten Anzahl von<br />

Treffern dienen, verläuft ebenfalls <strong>in</strong> mehreren Schritten:<br />

• Zunächst muß e<strong>in</strong>e Suchanfrage erzeugt werden, die e<strong>in</strong>e große Anzahl von Treffern<br />

liefert. Gleichzeitig ist aber darauf zu achten, daß die Treffermenge überschaubar<br />

genug bleibt, um e<strong>in</strong>e gewisse Anzahl der Treffer voraussagen zu können.<br />

• Anschließend wird diese Suchanfrage durch den Anfrage-Generator auf das<br />

untersuchte Formular übersetzt und an die Internet-Seite des untersuchten Anbieters<br />

gestellt.<br />

• Nun muß festgestellt werden, ob die Suche erfolgreich war, d.h. ob sie mehr als e<strong>in</strong>en<br />

Treffer geliefert hat. Dies erfolgt durch den Vergleich des erhaltenen Ergebnis-<br />

Dokumentes mit dem Ke<strong>in</strong>-Treffer-Dokument und dem Ergebnis-Dokument der<br />

Suchanfrage mit e<strong>in</strong>em Treffer. Ist das Ergebnis-Dokument von diesen beiden HTML-<br />

Dokumente verschieden, so hat die Suchanfrage mehr als e<strong>in</strong>en Treffer geliefert, d.h.<br />

zu dem verwendeten Suchbegriff s<strong>in</strong>d mehrere Bücher im Katalog des untersuchten<br />

Anbieters enthalten und die Analyse kann fortgesetzt werden. Andernfalls muß e<strong>in</strong>e<br />

neue Suchanfrage mit e<strong>in</strong>em anderen Suchbegriff gestellt werden.<br />

• Nun können die Datenelemente wie etwa Titel und Autor im Ergebnis-Dokument<br />

lokalisiert werden, die die für den verwendeten Suchbegriff als Treffer vermuteten<br />

Bücher beschreibenden, um aus den gefundenen Positionen (PcData-Knoten)<br />

anschließend Pfadausdrücke zu generieren, die die Extraktion dieser Datenelemente<br />

aus dem Ergebnis-Dokument e<strong>in</strong>er Suche bei dem untersuchten Anbieter erlauben,<br />

sofern diese mehrere Treffer geliefert hat.<br />

• Zuletzt müssen noch e<strong>in</strong>ige weitere Daten <strong>in</strong> Bezug auf die Ergebnis-Liste ermittelt<br />

werden, die die allgeme<strong>in</strong>e Struktur der Teillisten beschreiben: Die verallgeme<strong>in</strong>erte<br />

Position des ersten und des letzten Treffers <strong>in</strong> der jeweiligen Teilliste, die Anzahl der<br />

pro Teil-Liste angezeigten Treffer und der Hyperl<strong>in</strong>k zu nächsten Teilliste.<br />

In den folgenden Abschnitten werden die e<strong>in</strong>zelnen Schritte genau untersucht und Verfahren<br />

zu ihrer Umsetzung entwickelt.<br />

5.6.2 <strong>Generierung</strong> der Suchanfrage<br />

Bei der <strong>Generierung</strong> der Suchanfrage für mehrere Treffer muß gesichert werden, daß sie<br />

e<strong>in</strong>erseits e<strong>in</strong>e gewisse Anzahl von Treffern liefert, diese aber andererseits nicht so groß ist,<br />

daß ke<strong>in</strong>e genügend hohe Anzahl der Treffer mehr vorhergesagt werden kann. Dies ist<br />

deshalb notwendig, um auf der e<strong>in</strong>en Seite sicherzustellen, daß die Treffer m<strong>in</strong>destens den<br />

ersten Teil (d.h. dem Ergebnis-Dokument) der oft mehrteiligen Ergebnisliste e<strong>in</strong>er solchen<br />

Suche füllen und damit der Hyperl<strong>in</strong>k zum nächsten Teil der Liste bestimmt werden kann, auf<br />

der anderen Seite aber im Ergebnis-Dokument genügend bekannte Informationen vorhanden<br />

s<strong>in</strong>d, die identifiziert werden können.<br />

An dieser Stelle ist die Selektivität der e<strong>in</strong>zelnen Datenelemente wenig hilfreich. So liefert<br />

e<strong>in</strong>e Suchanfrage, die die am wenigsten selektiven Datenelemente (z.B. Ersche<strong>in</strong>ungsjahr,<br />

Verlag) als Kriterium nutzt, <strong>in</strong> der Regel e<strong>in</strong>e zu große Anzahl von Treffern, um noch<br />

genügend viele vorhersagen zu können, zumal die jeweils bei e<strong>in</strong>em konkreten Anbieter<br />

vorhandenen Bücher je nach dessen Spezialisierung auf e<strong>in</strong>e bestimmte Sparte von Literatur<br />

sehr unterschiedlich se<strong>in</strong> können. Werden dagegen Datenelemente mit hoher Selektivität als<br />

Kriterium herangezogen, so s<strong>in</strong>d mit großer Wahrsche<strong>in</strong>lichkeit nicht genügend Treffer<br />

vorhanden. Für diese Suchanfrage ist also e<strong>in</strong> spezieller Beispiel-Suchwert erforderlich, der<br />

e<strong>in</strong>e genügend große Anzahl von Treffern aus e<strong>in</strong>em genügend überschaubaren Umfeld, d.h.<br />

61


zu e<strong>in</strong>em speziellen Thema liefert (z.B. „Java Enterprise“, „Theoretische Physik“). Dieser<br />

Beispiel-Suchwert muß dann über e<strong>in</strong> Freitext-Feld gesucht werden, da ja Stichwörter oder<br />

Kurzbeschreibungen Bücher als Kriterium dienen sollen, nicht konkrete Daten wie Titel,<br />

Autor oder Verlag. Mit Kenntnis der aktuellen Standardwerke zu diesem Thema, die mit<br />

großer Wahrsche<strong>in</strong>lichkeit bei jedem Anbieter verfügbar s<strong>in</strong>d, besteht nun e<strong>in</strong>e gute Chance,<br />

e<strong>in</strong>e genügend große Anzahl von Treffern identifizieren zu können. Die Übersetzung dieser<br />

Anfrage auf das Formular kann wiederum vom Anfrage-Generator übernommen werden.<br />

5.6.3 <strong>Generierung</strong> der Pfade<br />

Durch den Vergleich des Ergebnis-Dokumentes mit dem Ke<strong>in</strong>-Treffer-Dokument und dem<br />

Ergebnis-Dokument der Suchanfrage mit e<strong>in</strong>em Treffer wird nun festgestellt, ob die<br />

Suchanfrage nach dem Beispiel-Suchwert mehrere Treffer geliefert hat oder nicht. Von<br />

ersterem kann ausgegangen werden, wenn das Ergebnis-Dokument von beiden anderen<br />

HTML-Dokumenten verschieden ist, letzteres ist an se<strong>in</strong>er strukturellen Gleichheit mit e<strong>in</strong>em<br />

der beiden zu erkennen und tritt dann e<strong>in</strong>, wenn zu dem gewählten Beispiel-Suchwert nicht<br />

genügen Bücher im Katalog des untersuchten Anbieters enthalten s<strong>in</strong>d. In diesem Fall muß<br />

e<strong>in</strong> anderer Beispiel-Suchwert benutzt und e<strong>in</strong>e neue Suchanfrage generiert, übersetzt und<br />

gestellt werden.<br />

Abbildung 5.3: Struktur e<strong>in</strong>er Ergebnis-Liste<br />

Hat die Suche aber mehrere Treffer geliefert, so bedeutet dies, daß das Ergebnis-Dokument<br />

mit großer Wahrsche<strong>in</strong>lichkeit Informationen enthält, die e<strong>in</strong>ige der vorhergesehenen Treffer<br />

beschreiben. Insbesondere s<strong>in</strong>d also die Werte von Datenelementen wie Titel und Autor<br />

e<strong>in</strong>erseits für die vorhergesagten Treffer bekannt, andererseits mit großer Wahrsche<strong>in</strong>lichkeit<br />

<strong>in</strong> diesem HTML-Dokument enthalten und können daher per Suche über die PcData-Knoten<br />

<strong>in</strong> der Baum-Darstellung des Ergebnis-Dokumentes lokalisiert werden. Nun kann die<br />

Kenntnis der die Datenelemente enthaltenden PcData-Knoten dazu genutzt werden, um<br />

Pfadausdrücke zu generieren, die diese Knoten adressieren, und diese den Datenelementen<br />

zuzuweisen. Dies geschieht analog zu Abschnitt 5.5.3, allerd<strong>in</strong>gs noch ohne das Verfolgen<br />

62


von Hyperl<strong>in</strong>ks und mit dem Unterschied, daß zu jedem Datenelement mehrere Pfade<br />

existieren, nämlich zu jedem vorhergesagten Treffer, der tatsächlich im ersten Teil der<br />

Ergebnis-Liste enthalten ist, je e<strong>in</strong>er.<br />

Dies ist nicht das Ziel der <strong>Generierung</strong>, denn diese soll pro Datenelement und Schicht e<strong>in</strong>en<br />

Pfad ergeben, aber e<strong>in</strong>e wichtige Grundlage für den nächsten Schritt. Bei der Mehrzahl der<br />

Anbieter werden die Treffer-Listen durch e<strong>in</strong> Skript dynamisch generiert, was <strong>in</strong>sbesondere<br />

bedeutet, daß die je Treffer angezeigten Informationen <strong>in</strong> das immer gleiche Struktur-Muster<br />

(im folgenden Treffer-Struktur genannt) e<strong>in</strong>gefügt werden und dadurch <strong>in</strong>nerhalb desselben<br />

alle gleich strukturiert s<strong>in</strong>d. Anschließend werden die Ausprägungen der Treffer-Struktur,<br />

also die Informationen zu je e<strong>in</strong>em Treffer, <strong>in</strong> e<strong>in</strong>e größere Rahmenstruktur e<strong>in</strong>gefügt. Dies<br />

führt dazu, daß alle Ausprägungen der Treffer-Struktur <strong>in</strong> der Baum-Darstellung des<br />

Ergebnis-Dokumentes der Suchanfrage e<strong>in</strong>en geme<strong>in</strong>samen Vater-Knoten haben. Dieser wird<br />

als Listen-Kopfknoten bezeichnet, der Wurzelknoten e<strong>in</strong>er Ausprägung der Treffer-Struktur<br />

wird mit Treffer-Kopfknoten benannt. Abbildung 5.3 veranschaulicht diese Struktur.<br />

Um nun nicht nur die Pfade zu den korrekt vorausgesagten Treffern generieren zu können,<br />

sondern solche, die die Extraktion der Datenelemente aller <strong>in</strong> der Liste vorhandenen Treffer<br />

erlauben, ist es notwendig, zunächst den Listen-Kopfknoten ausf<strong>in</strong>dig zu machen, um bei der<br />

Extraktion über dessen K<strong>in</strong>d-Knoten, die Treffer-Kopfknoten, iterieren und die<br />

Datenelemente aus den e<strong>in</strong>zelnen Ausprägungen der Treffer-Struktur extrahieren zu können.<br />

Der Pfad des Listen-Kopfknotens ergibt sich nun durch die Bestimmung des längsten<br />

geme<strong>in</strong>samen Pfades der Pfade für e<strong>in</strong> Datenelement, für das <strong>in</strong> m<strong>in</strong>destens zwei Treffern e<strong>in</strong><br />

Beispiel-Wert identifiziert wurde, so daß auch m<strong>in</strong>destens zwei Pfade existieren. Diese<br />

unterscheiden sich nämlich genau <strong>in</strong> dem Schritt, der den Übergang vom Listen-Kopfknoten<br />

auf den jeweiligen Treffer-Kopfknoten ausdrückt. Zuvor verlaufen sie geme<strong>in</strong>sam bis zum<br />

Listen-Kopfknoten, und auch anschließend verlaufen sie, dann <strong>in</strong>nerhalb der jeweiligen<br />

Ausprägung der Treffer-Struktur, analog. Der geme<strong>in</strong>same Pfad bis zum Listen-Kopfknoten<br />

wird als Listen-Basispfad bezeichnet, der Pfad <strong>in</strong>nerhalb der Treffer-Struktur ist der<br />

eigentliche Pfad des Datenelementes <strong>in</strong> dieser Schicht. Abbildung 5.4 verdeutlicht diesen<br />

Sachverhalt.<br />

Nun muß noch herausgefunden werden, welche der K<strong>in</strong>dknoten des Listen-Kopfknotens<br />

extrahierbare Daten enthalten. Dies muß nicht immer jeder se<strong>in</strong>er K<strong>in</strong>dknoten se<strong>in</strong>, sie<br />

können bei jedem beliebigen Index größer oder gleich null beg<strong>in</strong>nen sowohl<br />

aufe<strong>in</strong>anderfolgend als auch <strong>in</strong> regelmäßigen Abständen größer e<strong>in</strong>s angeordnet se<strong>in</strong>. Wohl<br />

aber s<strong>in</strong>d e<strong>in</strong>ige se<strong>in</strong>er K<strong>in</strong>dknoten bekannt, die extrahierbare Daten enthalten: Die Treffer-<br />

Kopfknoten der identifizierten Treffer. Ihre Indizes geben erste H<strong>in</strong>weise auf den Abstand der<br />

Treffer-Kopfknoten (im folgenden Treffer-Abstand genannt): Er ist <strong>in</strong> jedem Fall der größte<br />

geme<strong>in</strong>same Teiler der Indizes der Treffer-Kopfknoten der identifizierten Treffer oder e<strong>in</strong><br />

Teiler von diesem. Ergibt die Berechnung dieses ggT 1, so steht der Treffer-Abstand fest. Ist<br />

er größer, so müssen er und alle se<strong>in</strong>e Teile überprüft werden. Es ist s<strong>in</strong>nvoll, dies <strong>in</strong><br />

aufsteigender Reihenfolge durchzuführen, denn ist die Prüfung bei 1 bereits positiv, so<br />

können alle weiteren entfallen. E<strong>in</strong>e Prüfung kann erfolgen, <strong>in</strong>dem der Teilbaum unter dem<br />

Treffer-Kopfknoten des ersten identifizierten Treffers (Baum der Treffer-Struktur) <strong>in</strong><br />

Schritten des gerade geprüften potentiellen Abstandes mit den Teilbäumen unter den anderen<br />

Treffer-Kopfknoten verglichen wird, bis der Index des Treffer-Kopfknotens des letzten<br />

identifizierten Treffers erreicht ist. S<strong>in</strong>d alle diese Teilbäume syntaktisch gleich, so ist der<br />

Treffer-Abstand kle<strong>in</strong>er oder gleich dem gerade geprüften potentiellen Abstand, falls nicht,<br />

wird der nächst größere potentielle Abstand geprüft.<br />

63


Abbildung 5.4: Listen-Basispfad<br />

Steht erst e<strong>in</strong>mal der Abstand der Indizes aller Treffer-Kopfknoten fest, so läßt sich auch der<br />

Index des ersten <strong>in</strong> der Liste und ihre Anzahl bestimmen. Wandert man vom Treffer-<br />

Kopfknoten des ersten identifizierten Treffers <strong>in</strong> der Liste <strong>in</strong> Schritten des Treffer-Abstandes<br />

nach oben (Index absteigend), so ist der Index des ersten Treffer-Kopfknotens <strong>in</strong> der Liste<br />

der, für den letztmalig zum e<strong>in</strong>en der Teilbaum unter ihm mit dem unter dem Treffer-<br />

Kopfknoten des ersten identifizierten Treffers syntaktisch gleich, zum anderen der Index<br />

größer null ist (dieser Index wird im folgenden Treffer-Anfang genannt). Wandert man<br />

dagegen vom Treffer-Kopfknoten des letzten identifizierten Treffers <strong>in</strong> der Liste <strong>in</strong> Schritten<br />

des Treffer-Abstandes nach unten (Index aufsteigend), so ist der Index des letzten Treffer-<br />

Kopfknotens <strong>in</strong> der Liste der, für den letztmalig zum e<strong>in</strong>en der Teilbaum unter ihm mit dem<br />

unter dem Treffer-Kopfknoten des letzten identifizierten Treffers syntaktisch gleich, zum<br />

anderen der Index kle<strong>in</strong>er der Anzahl der K<strong>in</strong>dknoten des Listen-Kopfknotens ist (dieser<br />

Index wird im folgenden Treffer-Ende genannt). Die Treffer-Anzahl <strong>in</strong> der Liste berechnet<br />

sich dann zu ((Treffer-Ende - Treffer-Anfang) / Treffer-Abstand) + 1.<br />

Als nächstes gilt es, den Hyperl<strong>in</strong>k zur nächsten Teilliste ausf<strong>in</strong>dig zu machen. In der Regel<br />

bef<strong>in</strong>det sich dieser nicht <strong>in</strong>nerhalb der Treffer der Suchanfrage, d.h. der ihn <strong>in</strong> der Baum-<br />

Darstellung des Ergebnis-Dokumentes repräsentierende Knoten bef<strong>in</strong>det sich nicht im<br />

Teilbaum unterhalb des Listen-Kopfknotens. Des weiteren kann davon ausgegangen werden,<br />

daß das die nächste Teil-Liste enthaltende HTML-Dokument zum Ergebnis-Dokument e<strong>in</strong>e<br />

hohe syntaktische Ähnlichkeit aufweist, da es e<strong>in</strong> vom gleichen Skript mit Inhalten befüllt<br />

wurde, lediglich mit anderen Informationen. Die e<strong>in</strong>fachste Möglichkeit zum Auff<strong>in</strong>den<br />

dieses Hyperl<strong>in</strong>ks ist also, alle Hyperl<strong>in</strong>ks des Ergebnis-Dokumentes zu verfolgen, die sich<br />

nicht im Teilbaum unter dem Listen-Kopfknoten bef<strong>in</strong>den, und die erhaltenen HTML-<br />

Dokumente mit dem Ergebnis-Dokument syntaktisch zu vergleichen. Das diesem syntaktisch<br />

ähnlichste wird als dasjenige angenommen, das die nächste Teilliste enthält. Der Hyperl<strong>in</strong>k<br />

dorth<strong>in</strong> wird <strong>in</strong> Form des Pfades gespeichert, der den ihn <strong>in</strong> der Baum-Darstellung des<br />

64


Ergebnis-Dokumentes repräsentierenden Knoten adressiert, aus denselben Gründen wie die<br />

Hyperl<strong>in</strong>ks zu K<strong>in</strong>d-Schichten.<br />

Zuletzt müssen die über Hyperl<strong>in</strong>ks erreichbaren HTML-Dokumente mit weiteren<br />

Informationen untersucht werden. Diese s<strong>in</strong>d für jeden der <strong>in</strong> der Teil-Liste aufgeführten<br />

Treffer der Suchanfrage unterschiedlich, weshalb davon ausgegangen werden kann, daß sich<br />

die diese Hyperl<strong>in</strong>ks repräsentierenden Knoten für die e<strong>in</strong>zelnen Treffer <strong>in</strong> den Teilbäumen<br />

unterhalb der jeweiligen Treffer-Kopfknoten bef<strong>in</strong>den. Daher werden die Hyperl<strong>in</strong>ks <strong>in</strong> den<br />

Teilbäumen unter den Treffer-Kopfknoten der identifizierten Treffer verfolgt, und es wird<br />

jeweils durch rekursive Identifikation der Datenelemente und Verfolgung der Hyperl<strong>in</strong>ks e<strong>in</strong>e<br />

Kaskade von Schichten erstellt. Diese Kaskaden werden anschließend verglichen und<br />

zusammengeführt. In der Regel s<strong>in</strong>d sie <strong>in</strong>sofern gleich, daß jede dieselbe Abfolge von<br />

Schichten und <strong>in</strong>nerhalb dieser dieselben Datenelemente enthält. Falls Unterschiede bestehen,<br />

werden diese <strong>in</strong> e<strong>in</strong>e Vere<strong>in</strong>igungsmenge der <strong>in</strong> den Kaskaden enthaltenen Schichten und der<br />

<strong>in</strong> den Schichten enthaltenen Datenelement-Pfade überführt, so daß ke<strong>in</strong> Datenelement für die<br />

Extraktion verloren geht. Wird dabei e<strong>in</strong> HTML-Dokument erreicht, das dem Ergebnis-<br />

Dokument der Suchanfrage mit e<strong>in</strong>em Treffer gleicht, so kann die dort generierte Kaskade<br />

wiederverwendet werden.<br />

5.7 <strong>Generierung</strong> regulärer Ausdrücke<br />

E<strong>in</strong>e der Hauptanforderungen an diese Arbeit ist, Datenelemente mithilfe regulärer Ausdrücke<br />

aus Str<strong>in</strong>gs extrahieren zu können. Die Form und Funktion dieser Ausdrücke wurde <strong>in</strong><br />

Abschnitt 2.9.2 vorgestellt. Nun wird noch e<strong>in</strong> Verfahren benötigt, um aus e<strong>in</strong>em<br />

Gesamtstr<strong>in</strong>g, der mehrere bekannte Werte von Datenelementen enthält, für jedes dieser<br />

Datenelemente e<strong>in</strong>en regulären Ausdruck zu generieren, der zur Extraktion des jeweiligen<br />

Wertes auf e<strong>in</strong>en beliebigen Gesamtstr<strong>in</strong>g angewendet werden kann, dessen Form dem<br />

Beispiel-Str<strong>in</strong>g gleicht.<br />

5.7.1 Genereller Ablauf<br />

Die <strong>Generierung</strong> regulärer Ausdrücke zur Extraktion von Datenelementen aus e<strong>in</strong>em<br />

Gesamtstr<strong>in</strong>g verläuft <strong>in</strong> mehreren Schritten:<br />

• Zunächst muß die Struktur des Gesamtstr<strong>in</strong>gs herausgefunden werden, um von den<br />

konkret enthaltenen Werten von Datenelementen zu abstrahieren. Dadurch wird e<strong>in</strong>en<br />

Extraktion der verbliebenen Teile des Gesamtstr<strong>in</strong>gs möglich, die nicht die<br />

enthaltenen Datenelemente darstellen. Aus diesen werden die Grenzstr<strong>in</strong>gs erzeugt.<br />

• S<strong>in</strong>d die Grenzstr<strong>in</strong>gs gefunden, so kann anschließend für jedes im Gesamtstr<strong>in</strong>g<br />

identifizierte Datenelement e<strong>in</strong> regulärer Ausdruck nach 2.9.2 erzeugt werden, dessen<br />

Anwendung auf e<strong>in</strong>en Str<strong>in</strong>g von der Form des Gesamtstr<strong>in</strong>gs das jeweilige<br />

Datenelement extrahiert. Anschließend können die erzeugten Ausdrücke noch<br />

optimiert werden, um e<strong>in</strong>e schnelle und sichere Ausführung zu gewährleisten. Dabei<br />

kann Wissen über das jeweilige Datenelement genutzt werden, zu dessen Extraktion<br />

der Ausdruck dient.<br />

In den folgenden Abschnitten werden die e<strong>in</strong>zelnen Schritte genau untersucht und Verfahren<br />

zu ihrer Umsetzung entwickelt.<br />

5.7.2 F<strong>in</strong>den und Optimierung der Grenzstr<strong>in</strong>gs<br />

Zur Extraktion der Datenelemente s<strong>in</strong>d <strong>in</strong> erster L<strong>in</strong>ie die Grenzstr<strong>in</strong>gs wichtig, die diese<br />

vone<strong>in</strong>ander trennen. Sie spiegeln quasi die Struktur des Gesamtstr<strong>in</strong>gs wider. Zu ihrer<br />

Extraktion können zunächst die Werte aller erkannten Datenelemente im Gesamtstr<strong>in</strong>g durch<br />

Tags für die Datenelemente selbst ersetzt werden. Bei Datenelementen fester Länge werden<br />

diese durch e<strong>in</strong> führendes ! markiert. Folgendes Beispiel verdeutlicht diesen Vorgang:<br />

65


Gesamtstr<strong>in</strong>g:<br />

Java <strong>in</strong> a nutshell : a desktop quick reference ; [covers Java 1.4] /<br />

David Flanagan. - 4. ed.. - Cambridge ; Köln : O'Reilly, 2002. - XXI,<br />

969 S.; (engl.)<br />

Erkannte Werte von Datenelementen:<br />

- Titel: Java <strong>in</strong> a nutshell : a desktop quick reference ; [covers<br />

Java 1.4]<br />

- Autor: David Flanagan<br />

- Verlag: Cambridge ; Köln : O'Reilly<br />

- Ersche<strong>in</strong>ungsjahr: 2002<br />

Gesamtstr<strong>in</strong>g nach Ersetzung dieser Werte:<br />

/ . - 4. ed.. - , . - XXI,<br />

969 S.; (engl.)<br />

Nun zeigt sich die Struktur des Gesamtstr<strong>in</strong>gs schon deutlicher. Allerd<strong>in</strong>gs kann er noch<br />

immer veränderliche Teilstr<strong>in</strong>gs enthalten, etwa Werte von Datenelementen, die nicht erkannt<br />

wurden. Diese stellen Inhalte dar und können nicht zur Strukturierung verwendet werden.<br />

Daher müssen sie ebenfalls entfernt werden. Sie s<strong>in</strong>d aber nicht ohne weiteres identifizierbar,<br />

können also nicht wie die erkannten Werte e<strong>in</strong>fach ersetzt werden. Daher muß e<strong>in</strong> anderer<br />

Weg gefunden werden. Die Beobachtung zeigt, daß Gesamtstr<strong>in</strong>gs oft durch wiederkehrende<br />

Zeichen(folgen) zwischen den Werten der enthaltenen Datenelemente strukturiert s<strong>in</strong>d. Diese<br />

wiederkehrenden Zeichenfolgen können zur Identifikation der bisher nicht erkannten<br />

Datenelemente genutzt werden. Zudem haben Werte von Datenelementen die Eigenschaft, als<br />

Träger von Informationen für den Benutzer zu großen Anteilen aus Buchstaben und Ziffern zu<br />

bestehen, woh<strong>in</strong>gegen die strukturierenden Zeichenfolgen e<strong>in</strong>en hohen Anteil von<br />

Interpunktionszeichen aufweisen. E<strong>in</strong>e Möglichkeit besteht nun dar<strong>in</strong>, alle Teilstr<strong>in</strong>gs aller<br />

noch nicht als Wert e<strong>in</strong>es Datenelementes identifizierten Teilstr<strong>in</strong>gs zu bilden und<br />

anschließend ihre Häufigkeit <strong>in</strong>nerhalb des Gesamtstr<strong>in</strong>gs zu bestimmen. Teilstr<strong>in</strong>gs, die Teil<br />

anderer Teilstr<strong>in</strong>gs s<strong>in</strong>d und dieselbe Häufigkeit wie diese besitzen, können ausgeschlossen<br />

werden. In obrigen Beispiel würden nach dieser Elim<strong>in</strong>ierung folgende Teilstr<strong>in</strong>gs übrig<br />

bleiben:<br />

Teilstr<strong>in</strong>g Häufigkeit<br />

/ 1<br />

. - 4. ed.. - 1<br />

. - XXI, 969 S.; (engl.) 1<br />

, 2<br />

. - 3<br />

Nun kann noch die oben genannte Eigenschaft der Datenelemente zur Elim<strong>in</strong>ierung weiterer<br />

Teilstr<strong>in</strong>gs genutzt werden, daß sie e<strong>in</strong>en hohen Anteil von Buchstaben und Ziffern<br />

aufweisen. Entfernt werden alle Teilstr<strong>in</strong>gs, bei denen dieser Anteil m<strong>in</strong>destens die Hälfte<br />

ausmacht. Da wiederkehrenden Zeichenfolgen gesucht werden, können zudem alle Teilstr<strong>in</strong>gs<br />

mit der Häufigkeit 1 elim<strong>in</strong>iert werden. Auch e<strong>in</strong>zelne Zeichen s<strong>in</strong>d nicht von Interesse und<br />

werden daher entfernt, wenn sie mit hoher Wahrsche<strong>in</strong>lichkeit auch <strong>in</strong>nerhalb der Werte von<br />

Datenelementen auftreten können. Das Beispiel hat danach folgende Form:<br />

Teilstr<strong>in</strong>g Häufigkeit<br />

. - 3<br />

Nun kann der Gesamtstr<strong>in</strong>g noch e<strong>in</strong>mal bearbeitet werden, wobei alle Teilstr<strong>in</strong>gs, die mit<br />

e<strong>in</strong>er der gefundenen strukturierenden Zeichenfolgen beg<strong>in</strong>nen und enden und dazwischen zu<br />

m<strong>in</strong>destens der Hälfte aus Buchstaben und Ziffern bestehen, <strong>in</strong>sofern substituiert, als daß der<br />

Teil zwischen den strukturierenden Zeichenfolgen als unbekanntes Datenelement e<strong>in</strong>gestuft<br />

wird. Beg<strong>in</strong>nt der Teilstr<strong>in</strong>g am Ende des Gesamtstr<strong>in</strong>gs mit e<strong>in</strong>er strukturierenden<br />

66


Zeichenfolge und besteht danach zu m<strong>in</strong>destens der Hälfte aus Buchstaben und Ziffern, so<br />

wird der zweitere Teil ebenfalls als unbekanntes Datenelement e<strong>in</strong>gestuft. Endet der<br />

Teilstr<strong>in</strong>g am Anfang des Gesamtstr<strong>in</strong>gs mit e<strong>in</strong>er strukturierenden Zeichenfolge und besteht<br />

davor zu m<strong>in</strong>destens der Hälfte aus Buchstaben und Ziffern, so wird auch hier der zweitere<br />

Teil als unbekanntes Datenelement e<strong>in</strong>gestuft. Das Beispiel hat nach diesen Schritten<br />

folgende Form:<br />

Gesamtstr<strong>in</strong>g nach Ersetzung dieser Werte:<br />

/ . - . - , . -<br />

<br />

Die nun noch zwischen den Datenelementen verbliebenen Zeichenfolgen werden bei der<br />

Erzeugung der Regulären Ausdrücke als Grenzstr<strong>in</strong>gs benutzt.<br />

5.7.3 Erzeugung und Optimierung der Ausdrücke<br />

Nun da die Abgrenzung der Datenelemente untere<strong>in</strong>ander geklärt ist, können reguläre<br />

Ausdrücke gemäß Abschnitt 2.9.2 zur Extraktion jeweils e<strong>in</strong>es Datenelementes erzeugt<br />

werden. Dabei stellt das zu extrahierende Datenelement den Zielstr<strong>in</strong>g dar, alle anderen<br />

stehen für Abfallstr<strong>in</strong>gs. Die Erzeugung des Rohausdrucks geschieht durch e<strong>in</strong>faches<br />

E<strong>in</strong>setzen der entsprechenden Zeichen (§, *, {?} + , {+} + ) für die Tags der Datenelemente:<br />

Gesamtstr<strong>in</strong>g mit Tags:<br />

/ . - . - , . -<br />

<br />

Rohausdruck für Titel:<br />

§ / *. - *. - *, ++++. - *<br />

Rohausdruck für Autor:<br />

* / §. - *. - *, ++++. - *<br />

Rohausdruck für Verlag:<br />

* / *. - *. - §, ++++. - *<br />

Rohausdruck für Ersche<strong>in</strong>ungsjahr:<br />

* / *. - *. - *, ????. - *<br />

Diese Roh-Ausdrücke können jedoch bei der Anwendung noch e<strong>in</strong>ige Fehler verursachen,<br />

zumal sie eventuell noch nicht der Spezifikation aus Abschnitt 2.9.2 entsprechen. Bei den<br />

Ausdrücken im Beispiel würde etwa die Extraktion des Ersche<strong>in</strong>ungsjahres scheitern, wenn<br />

der Verlagsname e<strong>in</strong> , enthält, da dann die ersten vier Zeichen nach diesem extrahiert<br />

würden. Daher müssen sie optimiert werden, wobei zum e<strong>in</strong>en die Position des Zielstr<strong>in</strong>gs<br />

e<strong>in</strong>e Rolle spielt, zum zweiten dessen Länge (fix oder variabel), zum dritten, ob dieser immer<br />

von e<strong>in</strong>er bestimmten Zeichenfolge begleitet wird (z.B. ISBN bei der ISBN-Nummer, € oder $<br />

beim Preis) und zum vierten die Beschaffenheit der Grenzstr<strong>in</strong>gs. Letztere wird wie folgt<br />

benannt:<br />

• E<strong>in</strong> Grenzstr<strong>in</strong>g ist unsicher, wenn er nur aus e<strong>in</strong>em Nicht-Leerzeichen besteht und<br />

dieses mit großer Wahrsche<strong>in</strong>lichkeit auch zur Interpunktion <strong>in</strong>nerhalb der Werte von<br />

Datenelementen vorkommen kann, z.B. ,.<br />

• E<strong>in</strong> Grenzstr<strong>in</strong>g ist sicher, wenn er aus mehr als e<strong>in</strong>em Nicht-Leerzeichen besteht,<br />

beispielsweise . -.<br />

• E<strong>in</strong> Grenzstr<strong>in</strong>g ist e<strong>in</strong>malig, wenn er sicher ist und im Gesamtstr<strong>in</strong>g nur e<strong>in</strong>mal<br />

vorkommt.<br />

• E<strong>in</strong> Grenzstr<strong>in</strong>g ist bekannt, wenn es sich dabei um e<strong>in</strong>e Zeichenfolge handelt, die<br />

immer <strong>in</strong> Verb<strong>in</strong>dung mit e<strong>in</strong>em bestimmten Datenelement auftritt, z.B. ISBN bei der<br />

ISBN-Nummer, € oder $ beim Preis.<br />

Mit diesen Begriffen lassen sich folgende Regeln zur Optimierung der Rohausdrücke<br />

aufstellen. Sie ergeben sich aus dem Algorithmus, der die Ausdrücke auf Str<strong>in</strong>gs anwendet.<br />

67


• Regel 1: Endet der Gesamtstr<strong>in</strong>g mit e<strong>in</strong>em Zielstr<strong>in</strong>g fester Länge, kann der<br />

komplette Ausdruck vorhergehende durch * ersetzt werden.<br />

• Regel 2: Beg<strong>in</strong>nt der Gesamtstr<strong>in</strong>g mit e<strong>in</strong>em Zielstr<strong>in</strong>g fester Länge, kann der<br />

komplette nachfolgende Ausdruck durch * ersetzt werden.<br />

• Regel 3: Geht e<strong>in</strong>em Zielstr<strong>in</strong>g fester Länge e<strong>in</strong> e<strong>in</strong>maliger oder bekannter<br />

Grenzstr<strong>in</strong>g voran, kann der komplette vorangehende und nachfolgende Ausdruck<br />

durch * ersetzt werden.<br />

• Regel 4: Folgt auf e<strong>in</strong>en Zielstr<strong>in</strong>g fester Länge e<strong>in</strong> e<strong>in</strong>maliger oder bekannter<br />

Grenzstr<strong>in</strong>g, kann der komplette vorangehende und nachfolgende Ausdruck durch *<br />

ersetzt werden.<br />

• Regel 5: Geht e<strong>in</strong>em Zielstr<strong>in</strong>g fester Länge e<strong>in</strong> sicherer Grenzstr<strong>in</strong>g voran, kann der<br />

Rest des Ausdrucks durch * ersetzt werden.<br />

• Regel 6: Folgt auf e<strong>in</strong>en Zielstr<strong>in</strong>g fester Länge e<strong>in</strong> sicherer Grenzstr<strong>in</strong>g, kann e<strong>in</strong><br />

dem Zielstr<strong>in</strong>g vorangehender unsicherer Grenzstr<strong>in</strong>g durch * ersetzt werden.<br />

• Regel 7: Geht e<strong>in</strong>em Zielstr<strong>in</strong>g e<strong>in</strong> e<strong>in</strong>maliger oder bekannter Grenzstr<strong>in</strong>g voran, kann<br />

der komplette vorhergehende Ausdruck durch * ersetzt werden.<br />

• Regel 8: Folgt auf e<strong>in</strong>en Zielstr<strong>in</strong>g e<strong>in</strong> sicherer oder bekannter Grenzstr<strong>in</strong>g, kann der<br />

komplette nachfolgende Ausdruck durch * ersetzt werden.<br />

• Regel 8.1: Folgt auf e<strong>in</strong>en Zielstr<strong>in</strong>g e<strong>in</strong> Grenzstr<strong>in</strong>g und dann e<strong>in</strong> Abfallstr<strong>in</strong>g<br />

variabler Länge, kann der komplette nachfolgende Ausdruck durch * ersetzt werden.<br />

• Regel 9: Geht e<strong>in</strong>em Zielstr<strong>in</strong>g e<strong>in</strong> unsicherer Grenzstr<strong>in</strong>g voran und dann e<strong>in</strong><br />

Abfallstr<strong>in</strong>g fester Länge, kann der unsichere Grenzstr<strong>in</strong>g dem Abfallstr<strong>in</strong>g fester<br />

Länge zugeschlagen werden, sofern der Ausdruck mit dem Abfallstr<strong>in</strong>g fester Länge<br />

beg<strong>in</strong>nt oder dem Abfallstr<strong>in</strong>g fester Länge e<strong>in</strong> sicherer Grenzstr<strong>in</strong>g vorangeht.<br />

• Regel 10: Folgt auf den Zielstr<strong>in</strong>g e<strong>in</strong> unsicherer Grenzstr<strong>in</strong>g und dann e<strong>in</strong><br />

Abfallstr<strong>in</strong>g fester Länge, kann der unsichere Grenzstr<strong>in</strong>g dem Abfallstr<strong>in</strong>g fester<br />

Länge zugeschlagen werden, sofern der Ausdruck mit dem Abfallstr<strong>in</strong>g fester Länge<br />

endet oder auf den Abfallstr<strong>in</strong>g fester Länge e<strong>in</strong> sicherer Grenzstr<strong>in</strong>g folgt.<br />

• Regel 11: ** kann durch * ersetzt werden.<br />

• Regel 12: *+...+* kann durch ** ersetzt werden, dann über Regel 11 durch *.<br />

Die Anwendung dieser Regeln soll am Beispiel der weiter oben erzeugten Roh-Ausdrücke<br />

verdeutlicht werden.<br />

Ausdruck für Titel:<br />

§ / *. - *. - *, ++++. - * /Regel 8.1<br />

§ / *<br />

Ausdruck für Autor:<br />

* / §. - *. - *, ++++. - * /Regel 8<br />

* / §. - *<br />

Ausdruck für Verlag:<br />

* / *. - *. - §, ++++. - * /Regel 10<br />

* / *. - *. - §++++++. - *<br />

Ausdruck für Ersche<strong>in</strong>ungsjahr:<br />

* / *. - *. - *, ????. - * /Regel 6<br />

* / *. - *. - **????. - * /Regel 11<br />

* / *. - *. - *????. - *<br />

Um diese Ausdrücke können die Pfade der Datenelemente nun ergänzt werden, falls mehrere<br />

Datenelemente durch denselben Pfad adressiert werden. Dadurch kann dann dennoch jedes<br />

Datenelement e<strong>in</strong>zeln extrahiert werden.<br />

68


5.8 Resultierende Anforderungen an <strong>Generierung</strong>s-Basisdaten<br />

Der <strong>in</strong> den letzten Abschnitten entwickelte <strong>Generierung</strong>s-Prozeß ist <strong>in</strong> hohem Maße von<br />

Basis-Daten abhängig, z.B. von den Heuristiken zur Erkennung der Optionen <strong>in</strong> e<strong>in</strong>em<br />

Auswahlfeld, den Beispiel-Suchwerte zur <strong>Generierung</strong> der Pfade oder dem Wissen um immer<br />

mit bestimmten Datenelementen auftretende Zeichenketten. In diesem Abschnitte werden die<br />

notwendigen Daten zusammengefaßt, um e<strong>in</strong>e <strong>Generierung</strong>s-Basisdatei erzeugen zu können.<br />

Generell lassen sich die Basisdaten <strong>in</strong> drei Gruppen unterteilen:<br />

• Die Heuristik-Daten für die Analyse von Suchformularen<br />

• Die Heuristik-Daten zur <strong>Generierung</strong> Regulärer Ausdrücke<br />

• Die Beispiel-Daten für die <strong>Generierung</strong> der Pfade <strong>in</strong> den Ergebnis-Dokumenten von<br />

Suchanfragen mit e<strong>in</strong>em und mit mehreren Treffern<br />

Jede dieser Gruppen wird im folgenden e<strong>in</strong>zeln behandelt. Des weiteren s<strong>in</strong>d aber auch noch<br />

e<strong>in</strong>ige Daten notwendig, die ke<strong>in</strong>er von ihnen zuzuordnen s<strong>in</strong>d, da sie zum e<strong>in</strong>en e<strong>in</strong>zeln<br />

dastehen, zum anderen <strong>in</strong> mehreren Bereichen benötigt werden:<br />

• Der UniCats-i-<strong>in</strong>terne Name für Freitext-Felder muß speziell angegeben werden, da er<br />

ke<strong>in</strong>em Beispiel-Wert e<strong>in</strong>es Datenelementes zugeordnet werden kann und damit nicht<br />

über dessen Namen für die Bezeichnung von Suchfeldern zur Verfügung steht.<br />

• Die für E<strong>in</strong>gebettete Treffer <strong>in</strong> Frage kommenden Datenelemente s<strong>in</strong>d bei der Analyse<br />

von Suchformularen notwendig, können aber nicht direkt den Heuristik-Daten<br />

zugeordnet werden.<br />

• Die Selektivität der e<strong>in</strong>zelnen Datenelemente wird bei der Erzeugung der Beispiel-<br />

Anfragen zur <strong>Generierung</strong> der Pfade benötigt, kann aber auch nicht direkt den<br />

Beispiel-Daten zugeordnet werden.<br />

• Der Beispiel-Suchwert für Suchanfragen, die ke<strong>in</strong>en Treffer liefern sollen, wird zum<br />

Erzeugen des Ke<strong>in</strong>-Treffer-Dokumentes benötigt. Er muß e<strong>in</strong>en Wert haben, zu dem<br />

mit an Sicherheit grenzender Wahrsche<strong>in</strong>lichkeit <strong>in</strong> ke<strong>in</strong>em noch so umfangreichen<br />

Produkt-Katalog e<strong>in</strong> Artikel vorhanden ist. Dies sollte daher ke<strong>in</strong> auch noch so<br />

ungebräuchliches Wort se<strong>in</strong>, sondern e<strong>in</strong>e nicht zu kurze, ke<strong>in</strong>en S<strong>in</strong>n ergebende<br />

Abfolge von Buchstaben und Ziffern.<br />

• Zudem ist von Interesse, auf welches Datenelement obriger Suchwert als Kriterium<br />

angewandt werden soll, um ke<strong>in</strong>en Konflikt mit E<strong>in</strong>gabe-Überprüfungen und<br />

Längenbeschränkungen von Suchfeldern zu riskieren.<br />

5.8.1 Heuristik-Daten zu Formular-Analyse<br />

Bei der Analyse von Suchformularen werden Heuristik-Daten zur Erkennung der Optionen <strong>in</strong><br />

Auswahlfeldern benötigt. Diese müssen die UniCats-i-<strong>in</strong>ternen Bezeichnungen der<br />

Datenelemente und logischen Verknüpfungsarten den <strong>in</strong> Suchformularen für diese<br />

verwendeten Namen zuordnen. Dabei können pro <strong>in</strong>ternem Begriff durchaus mehrere<br />

mögliche Namen angegeben werden. Es ist zudem s<strong>in</strong>nvoll, mehrere Sprachen zu<br />

berücksichtigen.<br />

5.8.2 Heuristik-Daten zur <strong>Generierung</strong> regulärer Ausdrücke<br />

Bei der <strong>Generierung</strong> der regulären Ausdrücke zur Extraktion der Werte e<strong>in</strong>zelner<br />

Datenelemente aus e<strong>in</strong>em Gesamtstr<strong>in</strong>g wird Zusatzwissen über Eigenschaften der e<strong>in</strong>zelnen<br />

Datenelemente benötigt. Zuerst ist von Interesse, welche Datenelemente immer dieselbe<br />

Länge haben. Zweitens ist die Kenntnis von Zeichenfolgen wichtig, die immer als Begleiter<br />

bestimmter Datenelemente auftreten. Drittens muß bekannt se<strong>in</strong>, welche<br />

Interpunktionszeichen mit großer Wahrsche<strong>in</strong>lichkeit auch <strong>in</strong>nerhalb der Werte von<br />

Datenelementen anzutreffen s<strong>in</strong>d, um die Sicherheit der Grenzstr<strong>in</strong>gs e<strong>in</strong>schätzen zu können.<br />

69


5.8.3 Beispiel-Daten für die Pfad-<strong>Generierung</strong><br />

Zur <strong>Generierung</strong> der Pfade zur Extraktion der Werte von Datenelementen aus Ergebnis-<br />

Dokumenten von Suchanfragen mit e<strong>in</strong>em und solchen mit mehreren Treffern werden Sätze<br />

von Beispiel-Daten benötigt. In jedem Satz s<strong>in</strong>d die Werte der Datenelemente angegeben, die<br />

e<strong>in</strong> bestimmtes Buch beschreiben. Dabei können pro Datenelement mehrere konkrete Werte<br />

vorhanden se<strong>in</strong>, die mögliche Darstellungsformen e<strong>in</strong> und derselben Information darstellen.<br />

Das Beispiel zeigt e<strong>in</strong>en solchen Satz:<br />

creator = Flanagan<br />

creator = Flanagan, D.<br />

creator = Flanagan, David<br />

creator = D. Flanagan<br />

creator = David Flanagan<br />

title = Java <strong>in</strong> a nutshell<br />

title = Java <strong>in</strong> a nutshell : a desktop quick reference<br />

title =<br />

Java <strong>in</strong> a nutshell : a desktop quick reference ; [covers Java 1.4]<br />

date = 2002<br />

identifier = 0-596-00283-1<br />

publisher = O'Reilly<br />

publisher = Cambridge ; Köln : O'Reilly<br />

publisher = Beij<strong>in</strong>g : O'Reilly<br />

Bei der Angabe von mehreren möglichen Werten für e<strong>in</strong> Datenelement ist die Reihenfolge<br />

wichtig, da immer nur der jeweils erste für Test-Anfragen bei der Klassifizierung von<br />

Suchfeldern verwendet wird, um e<strong>in</strong>e Schieflage bezüglich der Anzahl zu vermeiden. Der<br />

erste Wert je Datenelement ist zudem der, der beim Erzeugen der Suchanfrage für die<br />

<strong>Generierung</strong> der Pfade zur Extraktion der Datenelemente aus dem Ergebnis-Dokument e<strong>in</strong>er<br />

Suche mit e<strong>in</strong>em Treffer benutzt wird.<br />

Die Beispiel-Daten für die <strong>Generierung</strong> der Pfade zur Extraktion der Datenelemente aus dem<br />

Ergebnis-Dokument e<strong>in</strong>er Suche mit mehreren Treffern bestehen aus Gruppen solcher Sätze.<br />

Dabei ist jeder Gruppe e<strong>in</strong> Beispiel-Suchbegriff zugeordnet. Die <strong>in</strong> der Gruppe enthaltenen<br />

Sätze be<strong>in</strong>halten die Werte der Datenelemente zur Beschreibung solcher Bücher, die bei e<strong>in</strong>er<br />

Suche nach dem Beispiel-Suchwert mit großer Wahrsche<strong>in</strong>lichkeit als Treffer auftreten.<br />

Zudem s<strong>in</strong>d die Datenelemente angegeben, auf die der Beispiel-Suchwert am besten als<br />

Suchkriterium angewandt wird, um die gewünschten Treffer zu erhalten.<br />

5.9 Zusammenarbeit der Generator-Agenten<br />

Um die volle Mächtigkeit der Struktur e<strong>in</strong>es Agentensystems nutzen zu können, benötigen die<br />

e<strong>in</strong>zelnen GAs untere<strong>in</strong>ander e<strong>in</strong> gewisses „Sozialverhalten“. Da die vollautomatische<br />

<strong>Generierung</strong> e<strong>in</strong>er Quellenbeschreibung nach dem <strong>in</strong> diesem Kapitel entworfenen Verfahren<br />

zudem e<strong>in</strong>en sehr zeitaufwendigen Prozeß darstellt, sollte e<strong>in</strong>e mehrfache gleichzeitige<br />

Durchführung für denselben Anbieter vermieden werden. In diesem Abschnitte werden<br />

Möglichkeiten erörtert, wie dies zu erreichen ist.<br />

5.9.1 Möglichkeiten zur Zusammenarbeit<br />

Pr<strong>in</strong>zipiell s<strong>in</strong>d fünf Konstellationen denkbar, <strong>in</strong> denen die <strong>Generierung</strong> e<strong>in</strong>er<br />

Quellenbeschreibung nicht durch den GA selbst durchgeführt werden muß, der die Anfrage<br />

erhalten hat, bzw. <strong>in</strong> denen e<strong>in</strong> solches Verhalten nicht optimal wäre:<br />

• Der GA hat für den fraglichen Anbieter bereits e<strong>in</strong>e aktuelle Quellenbeschreibung<br />

generiert. Dann kann diese sofort zurückgegeben werden.<br />

70


• Der GA ist bereits dabei, für den fraglichen Anbieter e<strong>in</strong>e aktuelle<br />

Quellenbeschreibung zu generieren. Dann kann diese auch an den zweiten<br />

anfragenden AA geliefert werden, sobald die <strong>Generierung</strong> abgeschlossen ist.<br />

• E<strong>in</strong> anderer GA hat für den fraglichen Anbieter bereits e<strong>in</strong>e aktuelle<br />

Quellenbeschreibung generiert. Diese könnte an den anfragenden AA zurückgegeben<br />

werden, falls sie dem angefragten GA bekannt wäre.<br />

• E<strong>in</strong> anderer GA ist bereits dabei, für den fraglichen Anbieter e<strong>in</strong>e aktuelle<br />

Quellenbeschreibung zu generieren. Diese könnte nach ihrer Fertigstellung an den<br />

anfragenden AA zurückgegeben werden, falls sie dem angefragten GA bekannt wäre.<br />

• Es liegt ke<strong>in</strong>e aktuelle Quellenbeschreibung für den fraglichen Anbieter vor, der<br />

angefragte GA ist aber deutlich stärker ausgelastet als e<strong>in</strong> anderer GA. In diesem Fall<br />

wäre es günstiger für das Gesamtsystem, wenn der weniger ausgelastete GA die<br />

<strong>Generierung</strong> durchführt.<br />

Die ersten beiden Fälle können im GA lokal behandelt werden. Bei E<strong>in</strong>gang e<strong>in</strong>er Anfrage<br />

von e<strong>in</strong>em AA muß lediglich geprüft werden, ob bereits e<strong>in</strong>e aktuelle Quellenbeschreibung<br />

vorliegt oder sich <strong>in</strong> <strong>Generierung</strong> bef<strong>in</strong>det. Dazu muß der GA lediglich die generierten<br />

Quellenbeschreibungen speichern, um sie quasi als Archiv zur Verfügung zu haben.<br />

Die zweiten beiden Fälle laufen ähnlich ab, allerd<strong>in</strong>gs nicht lokal im GA. Vielmehr wird der<br />

GA bei E<strong>in</strong>gang e<strong>in</strong>er Anfrage von e<strong>in</strong>em AA bei allen anderen ihm bekannten GAs<br />

nachfragen, ob sie e<strong>in</strong>e aktuelle Quellenbeschreibung für den fraglichen Anbieter <strong>in</strong> ihrem<br />

Archiv haben oder sich e<strong>in</strong>e solche gerade <strong>in</strong> <strong>Generierung</strong> bef<strong>in</strong>det.<br />

Der letzte Fall ist dagegen etwas komplexer, da hier der Aufwand der <strong>Generierung</strong> <strong>in</strong> jedem<br />

Fall betrieben werden muß und die Anfrage somit nicht e<strong>in</strong>fach weitergereicht werden kann.<br />

Zunächst ist zu klären, ob e<strong>in</strong>er der bekannten GAs wenig genug ausgelastet ist, um bereit zur<br />

Übernahme der Anfrage zu se<strong>in</strong>. Anschließend ist aber auch sicherzustellen, daß nicht<br />

mehrere wenig ausgelastete GAs gleichzeitig dieselbe Anfrage übernehmen, da dies<br />

wiederum e<strong>in</strong>e mehrfache gleichzeitige Bearbeitung desselben Anbieters zur Folge hätte.<br />

Dieser Übergabe / Übernahme-Vorgang wird im folgenden Abschnitt behandelt.<br />

Abbildung 5.5: Übergabe / Übernahme e<strong>in</strong>er Anfrage – Ablauf<br />

5.9.2 Übergabe / Übernahme e<strong>in</strong>er Anfrage<br />

Um e<strong>in</strong>e dynamische Lastverteilung unter den GAs zu erreichen, muß e<strong>in</strong>e Möglichkeit<br />

geschaffen werden, die Bearbeitung von Anfragen, also die <strong>Generierung</strong> von<br />

Quellenbeschreibungen, von e<strong>in</strong>em GA zu e<strong>in</strong>em anderen zu übergeben. Dabei muß<br />

sichergestellt werden, daß nicht mehrere GAs gleichzeitig e<strong>in</strong>e Anfrage übernehmen und mit<br />

der <strong>Generierung</strong> beg<strong>in</strong>nen. Hierzu empfiehlt sich das Pr<strong>in</strong>zip des doppelten Handschlages,<br />

also e<strong>in</strong>e Abfolge von Anfrage, Antwort und Bestätigung.<br />

71


Übertragen auf das Problem der dynamischen Lastverteilung unter den GAs bedeutet dies,<br />

daß der angefragte GA zunächst bei allen ihm bekannten GAs anfragt, ob diese bereit s<strong>in</strong>d,<br />

die <strong>Generierung</strong> e<strong>in</strong>er Quellenbeschreibung zu übernehmen. Diese prüfen dann, ob sie<br />

aufgrund ihrer aktuellen eigenen Auslastung zu e<strong>in</strong>er Übernahme bereit s<strong>in</strong>d und senden dem<br />

anfragenden GA e<strong>in</strong>e Zu- oder Absage, wobei die Zusage die aktuelle Auslastung des GA<br />

enthält. Der angefragte GA wählt dann unter den GAs, die e<strong>in</strong>e Übernahme zugesagt haben,<br />

den am wenigsten ausgelasteten aus und sendet diesem e<strong>in</strong>e positive Bestätigung, daß er mit<br />

der <strong>Generierung</strong> der Quellenbeschreibung beg<strong>in</strong>nen kann. Alle anderen zur Übernahme<br />

bereiten GAs erhalten e<strong>in</strong>e negative Bestätigung, und sie brauchen ke<strong>in</strong>e <strong>Generierung</strong><br />

durchzuführen. Abbildung 5.5 verdeutlicht den Vorgang.<br />

5.10 Anforderungen an den GeneratorAgenten<br />

Die <strong>in</strong> den letzten Abschnitten entworfenen Verfahren zur vollautomatischen <strong>Generierung</strong><br />

e<strong>in</strong>er Quellenbeschreibung auf Basis von Beispiel-Daten nach dem Pr<strong>in</strong>zip der Generation by<br />

Example alle<strong>in</strong> durch die Angabe e<strong>in</strong>er E<strong>in</strong>stiegs-URL müssen nun <strong>in</strong> den GA <strong>in</strong>tegriert<br />

werden. H<strong>in</strong>zu kommt die Fähigkeit der dynamischen Lastverteilung der GAs untere<strong>in</strong>ander.<br />

Daraus ergeben sich e<strong>in</strong>e Reihe von Anforderungen:<br />

• Der GA muß fähig se<strong>in</strong>, die zur <strong>Generierung</strong> der Quellenbeschreibung benötigten<br />

Beispiel- und Heuristik-Daten zur Verfügung zu stellen, sie also beispielsweise aus<br />

e<strong>in</strong>er Datei e<strong>in</strong>zulesen.<br />

• Das Verfahren zur dynamischen Lastverteilung muß im GA umgesetzt werden.<br />

Insbesondere bedeutet dies, daß er die Fähigkeit zur E<strong>in</strong>schätzung se<strong>in</strong>er aktuellen<br />

Auslastung besitzen muß, um sich für oder gegen e<strong>in</strong>e Übergabe / Übernahme<br />

entscheiden zu können.<br />

• Der GA muß fähig se<strong>in</strong>, das Verfahren zur <strong>Generierung</strong> e<strong>in</strong>er Quellenbeschreibung<br />

auf e<strong>in</strong>e gegebene E<strong>in</strong>stiegs-URL anwenden zu können. Falls dieses fehlschlägt, sollte<br />

er zudem e<strong>in</strong>en Adm<strong>in</strong>istrator benachrichtigen können, so daß dieser die <strong>Generierung</strong><br />

mithilfe des Generator-Werkzeuges durchführen kann.<br />

• Zur Durchführung der <strong>Generierung</strong> muß der GA auf Internet-Seiten zugreifen,<br />

<strong>in</strong>sbesondere also HTTP-Anfragen über GET oder POST ausführen können.<br />

• Zudem muß er fertige Quellenbeschreibungen nicht nur an den anfragenden AA<br />

zurückliefern, sondern auch <strong>in</strong> e<strong>in</strong>em Archiv speichern, sie also z.B. <strong>in</strong> Dateien<br />

ablegen können.<br />

• Zuletzt ist wichtig, daß der GA auch während der Durchführung von aufwendigen<br />

Schritten der <strong>Generierung</strong> noch <strong>in</strong> der Lage ist, Nachrichten anderer Agenten zu<br />

empfangen und zu beantworten.<br />

72


6. Implementierung<br />

Im letzten Kapitel wurden die Verfahren entworfen, mit deren Hilfe das Hauptziel dieser<br />

Arbeit, die vollautomatische <strong>Generierung</strong> e<strong>in</strong>er Quellenbeschreibung, erreicht werden kann.<br />

Dieses Kapitel geht auf die Realisierung und Implementierung der dazu notwendigen<br />

Algorithmen sowie der zu deren Unterstützung notwendigen Datenstrukturen und Hilfspakete<br />

e<strong>in</strong>.<br />

6.1 Allgeme<strong>in</strong>e Überlegungen<br />

Bevor damit begonnen werden kann, die e<strong>in</strong>zelnen Algorithmen und Datenstrukturen zu<br />

implementieren, ist zunächst die allgeme<strong>in</strong>e Architektur des zu realisierenden GA und des<br />

diesen unterstützenden Generator-Werkzeuges zu klären. Dabei s<strong>in</strong>d mehrere Punkte zu<br />

beachten:<br />

• Die Verfahren zu vollautomatischen <strong>Generierung</strong> e<strong>in</strong>er Quellenbeschreibung sollen<br />

sowohl dem GA zur komplette autonomen Ausführung des <strong>Generierung</strong>s-Prozesses<br />

als auch dem Generator-Werkzeug zur vollautomatischen Ausführung von Teilen<br />

desselben zur Verfügung stehen. Daher sollten die Algorithmen nicht im GA selbst,<br />

sondern <strong>in</strong> e<strong>in</strong>er eigenen Komponente implementiert werden, die benötigten<br />

Datenstrukturen sollten e<strong>in</strong> eigenes Paket bilden.<br />

• Die <strong>Generierung</strong>s-Algorithmen s<strong>in</strong>d teilweise sehr zeitaufwendig. Daher empfiehlt es<br />

sich nicht, diese vom GA selbst durchführen zu lassen, da <strong>in</strong> diesem Fall zum<strong>in</strong>dest<br />

für die Zeit der Ausführung e<strong>in</strong>es <strong>Generierung</strong>sschrittes nicht <strong>in</strong> der Lage wäre,<br />

Anfragen entgegenzunehmen und sonstige Kommunikationsprozesse durchzuführen.<br />

Sie sollten vielmehr <strong>in</strong> e<strong>in</strong>em mit dem GA verbundenen eigenen Prozeß ablaufen.<br />

• Die Algorithmen und Datenstrukturen zur Unterstützung der erweiterten<br />

hierarchischen Pfadausdrücke (siehe Abschnitt 2.9.3) und regulären Ausdrücke (siehe<br />

Abschnitt 2.9.2) sowie zum Vergleich von HTML-Dokumenten (siehe Abschnitt 2.8)<br />

stellen die Basis der Algorithmen zur <strong>Generierung</strong> der Quellenbeschreibung dar. Ihre<br />

Implementierung kann allerd<strong>in</strong>gs nur schwerlich auf der Basis e<strong>in</strong>es bestehenden<br />

Baum-Paketes wie JDOM erfolgen. Andererseits schränkt e<strong>in</strong>e Implementierung<br />

<strong>in</strong>nerhalb der Generator-Komponenten die Wiederverwendbarkeit extrem e<strong>in</strong>. Daher<br />

sollten diese Algorithmen und die dafür notwendigen Datenstrukturen <strong>in</strong> e<strong>in</strong>em<br />

eigenen Paket realisiert werden. Dies schließt auch den Parser mit e<strong>in</strong>, der die<br />

Baumstruktur aus e<strong>in</strong>em <strong>in</strong> Str<strong>in</strong>g-Darstellung vorliegenden HTML oder XML-<br />

Dokument aufbaut.<br />

Diese Überlegungen legen die <strong>in</strong> Abbildung 6.1 dargestellte Architektur nahe.<br />

Abbildung 6.1: Grob-Architektur des GA<br />

73


6.2 Das Paket generatorAgent<br />

Das Paket generatorAgent enthält die Implementierungen des GA, die Generator- und die<br />

IO-Bibliothek sowie die Work-Objekte zur Repräsentation laufender Anfragen im GA. Die<br />

e<strong>in</strong>zelnen Klassen werden <strong>in</strong> den folgenden Abschnitten behandelt.<br />

6.2.1 Die Klasse GeneratorAgent<br />

Die Klasse GeneratorAgent erbt von der allgeme<strong>in</strong>en UniCats-i-Agentenklasse<br />

de.unicats.agents.Agent und implementiert den GA selbst. Sie be<strong>in</strong>haltet Methoden zur<br />

Beantwortung e<strong>in</strong>gehender Nachrichten, zur Bearbeitung von Anfragen sowie für die<br />

dynamische Lastverteilung der GAs untere<strong>in</strong>ander. Dar<strong>in</strong> ist auch das Bestreben<br />

e<strong>in</strong>geschlossen, möglichst viele andere GAs zu kennen, um mit ihnen zusammenarbeiten zu<br />

können.<br />

Die <strong>in</strong> Bearbeitung bef<strong>in</strong>dlichen Anfragen werden von den auf externe Bearbeitung wartenden<br />

oder dar<strong>in</strong> bef<strong>in</strong>dlichen separat verwaltet, um letztere nicht <strong>in</strong> die Berechnung der aktuellen<br />

Auslastung des GA e<strong>in</strong>fließen zu lassen. Die <strong>Generierung</strong> dieser Quellenbeschreibungen<br />

wurde von anderem GA übernommen, oder e<strong>in</strong> Adm<strong>in</strong>istrator wurde über e<strong>in</strong> Fehlschlagen<br />

der vollautomatischen <strong>Generierung</strong> e<strong>in</strong>er Quellenbeschreibung benachrichtigt.<br />

6.2.2 Die Klasse RequestHandler<br />

Die Klasse RequestHandler übernimmt das Management der eigentlichen <strong>Generierung</strong> von<br />

Quellenbeschreibungen und steuert die Ausführung der <strong>Generierung</strong>s-Algorithmen. Damit<br />

stellt sie den dem GA zugeordneten Generator dar.<br />

6.2.3 Die Klasse ContextGenerator<br />

Die Klasse ContextGenerator enthält die Algorithmen zur vollautomatischen <strong>Generierung</strong><br />

e<strong>in</strong>er Quellenbeschreibung aus e<strong>in</strong>er gegebenen E<strong>in</strong>stiegs-URL auf Basis von Beispiel- und<br />

Heuristik-Daten. Diese s<strong>in</strong>d static implementiert, so das ContextGenerator nicht <strong>in</strong>stanziiert<br />

werden muß.<br />

6.2.4 Die Klasse IoTool<br />

Die Klasse IoTool stellt die Methoden zur externen Kommunikation zur Verfügung. Dies<br />

be<strong>in</strong>haltet das Lesen und Schreiben von Dateien, das Laden von HTML-Dokumenten aus dem<br />

Internet <strong>in</strong>klusive der Behandlung von Page-Forwards und HTTP-Header-basierten Sessions,<br />

das Abschicken ausgefüllter Suchformulare über die HTTP-Methoden GET und POST und<br />

das Versenden von eMails.<br />

6.2.5 Die Klasse PAContextRequest<br />

Die Klasse PAContextRequest repräsentiert <strong>in</strong> der Warteschlange des GA die Anfrage e<strong>in</strong>es<br />

AA. Sie enthält bis auf den Konstruktor ke<strong>in</strong>e Methoden, sondern ausschließlich Daten. Diese<br />

umfassen die E<strong>in</strong>stiegs-URL, die zur <strong>Generierung</strong> notwendigen Beispiel- und Heuristik-Daten<br />

sowie Zwischen- und Endergebnisse des <strong>Generierung</strong>s-Prozesses.<br />

6.2.6 Die Klasse GAContextRequest<br />

Die Klasse GAContextRequest repräsentiert <strong>in</strong> der Warteschlange des GA die Anfrage e<strong>in</strong>es<br />

anderen GA nach e<strong>in</strong>er archivierten Quellenbeschreibung oder Kommunikationsschritte bei<br />

der Übergabe / Übernahme von Anfragen zwischen GAs. Sie enthält neben dem Konstruktor<br />

ebenfalls ke<strong>in</strong>e Methoden, sondern lediglich Daten, die der Koord<strong>in</strong>ation der des Übergabe /<br />

Übernahme-Prozesses und dem Loadbalanc<strong>in</strong>g zwischen den GAs dienen.<br />

74


6.2.7 Die Klasse GaWebServiceInterface<br />

Die Klasse GAWebServiceInterface stellt dem <strong>Generierung</strong>s-Werkzeug die Möglichkeit<br />

zum Zugriff auf die zur automatischen <strong>Generierung</strong> notwendigen Beispiel- und Heuristik-<br />

Daten sowie auf Internet-Seiten zur Verfügung, sofern dieses aus e<strong>in</strong>er Benachrichtigung über<br />

die fehlgeschlagene vollautomatische <strong>Generierung</strong> e<strong>in</strong>er Quellenbeschreibung als Applet<br />

<strong>in</strong>nerhalb e<strong>in</strong>es HTML-Dokumentes gestartet wurde.<br />

6.3 Das Paket generatorAgent.extractionTools<br />

Das Paket generatorAgent.extractionTools stellt die Implementierung e<strong>in</strong>es Extraktors<br />

zur Verfügung, der e<strong>in</strong>en durch e<strong>in</strong>e Quellenbeschreibung konfigurierbaren <strong>Wandler</strong><br />

realisiert. Dieser enthält sowohl den Anfrage-Generator, der auch separat verwendet werden<br />

kann, als auch e<strong>in</strong>e Multithread-basierte Komponente zum Aufruf der Ergebnis-Dokumente<br />

und der von diesen aus über Hyperl<strong>in</strong>ks erreichbaren HTML-Dokumente und zur Extraktion<br />

der Datenelemente aus den geladenen Dokumenten anhand der Quellenbeschreibung.<br />

6.3.1 Die Klasse DataExtractor<br />

Die Klasse DataExtractor dient der Ausführung e<strong>in</strong>er Suchanfrage und der Extraktion von<br />

Daten aus dem Ergebnis-Dokument e<strong>in</strong>er Suche und der Koord<strong>in</strong>ation der Daten-Extraktion<br />

aus den von diesem aus über Hyperl<strong>in</strong>ks erreichbaren HTML-Dokumenten. Die Methoden zur<br />

Benachrichtigung des umgebenden Objektes über den Status und den Abschluß der<br />

Bearbeitung e<strong>in</strong>er Suchanfrage sollten durch Vererbung überschrieben werden. Zu ihrer<br />

Instanziierung ist e<strong>in</strong>e vollständige Quellenbeschreibung notwendig.<br />

6.3.2 Die Klasse DataExtractionThread<br />

Die Klasse DataExtractionThread übernimmt für e<strong>in</strong> DataExtractor-Objekt die<br />

Extraktion der Daten aus dem Ergebnis-Dokument e<strong>in</strong>er bestimmten Suchanfrage sowie die<br />

Koord<strong>in</strong>ation der Daten-Extraktion aus den von diesem aus über Hyperl<strong>in</strong>ks erreichbaren<br />

HTML-Dokumenten. Der Thread term<strong>in</strong>iert, wenn die Anfrage abgearbeitet ist.<br />

6.3.3 Die Klasse LayerDataExtractor<br />

Die Klasse LayerDataExtractor dient der Extraktion der Daten aus e<strong>in</strong>em vom Ergebnis-<br />

Dokument e<strong>in</strong>er Suchanfrage über Hyperl<strong>in</strong>ks erreichbaren HTML-Dokument. Zu ihrer<br />

Instanziierung ist die Beschreibung e<strong>in</strong>er Informationsschicht aus der Quellenbeschreibung<br />

notwendig.<br />

6.3.4 Die Klasse LayerDataExtractionThread<br />

Die Klasse LayerDataExtractionThread übernimmt für e<strong>in</strong> LayerDataExtractor-Objekt<br />

die Extraction der Daten aus e<strong>in</strong>em über Hyperl<strong>in</strong>ks vom Ergebnis-Dokument e<strong>in</strong>er<br />

Suchanfrage aus erreichten HTML-Dokument. Der Thread term<strong>in</strong>iert, wenn alle <strong>in</strong> der<br />

Quellenbeschreibung beschriebenen Daten extrahiert s<strong>in</strong>d oder der Timeout für das Laden des<br />

HTML-Dokumentes abgelaufen ist.<br />

6.3.5 Die Klasse QueryPlan<br />

Die Klasse QueryPlan erbt von LayerDataExtractorVector und dient der Koord<strong>in</strong>ation der<br />

Daten-Extraktion aus den vom Ergebnis-Dokument e<strong>in</strong>er Suchanfrage aus über Hyperl<strong>in</strong>ks<br />

erreichbaren HTML-Dokumenten. Ihre Instanzen werden benutzt um sicherzustellen, daß<br />

möglichst wenige Informationsschichten angesprochen werden, um die <strong>in</strong> der Suchanfrage<br />

verlangten Datenelemente zu den e<strong>in</strong>zelnen Ergebnissen zu extrahieren.<br />

75


6.3.6 Die Klasse ProviderQueryResult<br />

Die Klasse ProviderQueryResult repräsentiert im Extraktor die e<strong>in</strong>zelnen Suchanfragen.<br />

E<strong>in</strong>e Instanz dieser Klasse enthält zum e<strong>in</strong>en die Anfrage und die verlangten Datenelemente,<br />

die für jedes Ergebnis extrahiert werden sollen, zum anderen werden die Ergebnisse dar<strong>in</strong><br />

gespeichert. Insbesondere dient sie damit der Kommunikation zwischen den e<strong>in</strong>zelnen<br />

Extraktions-Threads.<br />

6.3.7 Die Klasse SearchField<br />

Die Klasse SearchField repräsentiert im Anfrage-Generator e<strong>in</strong> e<strong>in</strong>zelnes Suchfeld<br />

zusammen mit der ihm zugeordneten Element- und, falls vorhanden, Verknüpfungs-Auswahl.<br />

Zur Instanziierung dieser Klasse ist der e<strong>in</strong> Suchfeld beschreibende Teil e<strong>in</strong>er<br />

Quellenbeschreibung notwendig. E<strong>in</strong>e Instanz setzt e<strong>in</strong>en ihr zugewiesenen Teil e<strong>in</strong>er Anfrage<br />

auf das entsprechende Suchfeld um, wobei die Werte der Element- und, falls vorhanden,<br />

Verknüpfungs-Auswahl gesetzte werden.<br />

6.3.8 Die Klasse SearchQueryGenerator<br />

Die Klasse SearchQueryGenerator implementiert den Anfrage-Generator, der e<strong>in</strong>e Anfrage<br />

vom UniCats-i-<strong>in</strong>ternen Format auf e<strong>in</strong> bestimmtes Suchformular übersetzt und das als<br />

Antwort erhaltene HTML-Dokument als Str<strong>in</strong>g zurückliefert. Zur Instanziierung dieser Klasse<br />

ist e<strong>in</strong>e Quellenbeschreibung notwendig, die m<strong>in</strong>destens die Beschreibung des Suchformulars<br />

enthält.<br />

6.4 Das Paket generatorAgent.tree<br />

Das Paket generatorAgent.tree enthält die Implementierung der Baumalgorithmen-<br />

Bibliothek, den Parser und die zur Repräsentation der Bäume notwendigen Klassen. Es bildet<br />

damit die Basis für sämtliche Algorithmen des <strong>Generierung</strong>sprozesses.<br />

6.4.1 Die Klasse AbstractParser<br />

Die Klasse AbstractParser enthält die Implementierung e<strong>in</strong>es allgeme<strong>in</strong>en SGML-Parsers.<br />

Die Methoden zur Überprüfung der S<strong>in</strong>gularität e<strong>in</strong>es Tags und der Def<strong>in</strong>ition, ob e<strong>in</strong> Tag<br />

K<strong>in</strong>d e<strong>in</strong>es anderen se<strong>in</strong> kann, s<strong>in</strong>d abstrakt implementiert. Die Klasse enthält die Fähigkeit,<br />

Ende-Tags umzusortieren, falls diese <strong>in</strong> der falschen Reihenfolge auftreten.<br />

6.4.2 Die Klasse FastParser<br />

Die Klasse FastParser erbt von AbstractParser und implementiert die beiden abstrakten<br />

Methoden derart, daß ke<strong>in</strong> Tag s<strong>in</strong>gulär ist und jedes Tag K<strong>in</strong>d jedes anderen Tags se<strong>in</strong> kann.<br />

Durch das Fehlen jeglicher Überprüfung erreicht der Parser e<strong>in</strong>e sehr hohe Geschw<strong>in</strong>digkeit.<br />

6.4.3 Die Klasse Parser<br />

Die Klasse Parser erbt ebenfalls von AbstractParser. Sie implementiert die beiden<br />

abstrakten Methoden derart, daß die <strong>in</strong> HTML standardmäßig s<strong>in</strong>gulären Tags als s<strong>in</strong>gulär<br />

erkannt werden und jedes Tag K<strong>in</strong>d jedes anderen Tags se<strong>in</strong> kann, außer von sich selbst bzw.<br />

e<strong>in</strong>em Tag gleichen Namens.<br />

6.4.4 Die Klasse SecureParser<br />

Auch die Klasse SecureParser erbt von AbstractParser. Sie implementiert die beiden<br />

abstrakten Methoden derart, daß durch e<strong>in</strong>e Sprachbeschreibung (LanguageDescription)<br />

def<strong>in</strong>iert werden kann, welche Tags s<strong>in</strong>gulär s<strong>in</strong>d und welche Tags K<strong>in</strong>d welcher Tags se<strong>in</strong><br />

76


können. Ist ke<strong>in</strong>e LanguageDescription angegeben, werden die Verfahren der Klasse<br />

Parser angewendet.<br />

6.4.5 Die Klasse Str<strong>in</strong>gStack<br />

Die Klasse Str<strong>in</strong>gStack stellt dem AbstractParser e<strong>in</strong>en auf Str<strong>in</strong>gs spezialisierten Keller zur<br />

Verfügung. Insbesondere nimmt sie die Typ-Umwandlungen <strong>in</strong>nerhalb vor, weshalb diese im<br />

AbstractParser selbst nicht mehr beachtet werden müssen.<br />

6.4.6 Die Schnittstelle LanguageDescription<br />

Die Schnittstelle LanguageDescription def<strong>in</strong>iert Methoden zum Holen der s<strong>in</strong>gulären Tags<br />

und der möglichen Vater-Tags zu e<strong>in</strong>em gegebenen Tag. Sie stellt den abstrakten Fall der<br />

Def<strong>in</strong>ition e<strong>in</strong>er SGML-konformen Sprache für den SecureParser dar.<br />

6.4.7 Die Klasse Html<br />

Die Klasse Html implementiert die Schnittstelle LanguageDescription mit e<strong>in</strong>er auf HTMLabgestimmten<br />

Sprachdef<strong>in</strong>ition. Sie enthält e<strong>in</strong>e Liste der <strong>in</strong> HTML als s<strong>in</strong>gulär def<strong>in</strong>ierten<br />

sowie der dort oft s<strong>in</strong>gulär verwendeten Tags. Die Überprüfung, ob e<strong>in</strong> bestimmtes Tag K<strong>in</strong>d<br />

e<strong>in</strong>es anderen se<strong>in</strong> kann, erfolgt aufgrund e<strong>in</strong>er Positiv-Liste. Damit ist e<strong>in</strong>e Instanz von<br />

SecureParser, die mit e<strong>in</strong>er Instanz dieser Implementierung der LanguageDescripion-<br />

Schnittstelle gespeist wurde, fähig, fehlerbehaftete HTML-Dokumente <strong>in</strong> e<strong>in</strong>e Baumstruktur<br />

zu parsen, die zu e<strong>in</strong>er XHTML-konformen Variante des Dokumentes äquivalent ist.<br />

6.4.8 Die Klasse SourceFile<br />

Die Klasse SourceFile implementiert ebenfalls die Schnittstelle LanguageDescription. Sie<br />

def<strong>in</strong>iert allerd<strong>in</strong>gs nur solche Tags als s<strong>in</strong>gulär, die im S<strong>in</strong>ne von XML als solche markiert<br />

s<strong>in</strong>d. Jedes Tag kann K<strong>in</strong>d jedes anderen Tags se<strong>in</strong>.<br />

6.4.9 Die Klasse ParseTreeNode<br />

Die Instanzen der Klasse ParseTreeNode repräsentieren die Knoten <strong>in</strong> von den Parsern aus<br />

Str<strong>in</strong>gs gewonnenen HTML- oder XML-Bäumen. Die Klasse stellt Methoden zur Abfrage des<br />

Knoten-Typs (repräsentiertes Tag), des Knoten-Wertes (außer bei PcData-Knoten e<strong>in</strong><br />

Leerstr<strong>in</strong>g) und der Werte von Parametern (z.B. der <strong>in</strong> href angegebenen Adresse) zur<br />

Verfügung. K<strong>in</strong>d-Knoten können h<strong>in</strong>zugefügt und typspezifisch oder -unspezifisch abgerufen<br />

werden. Das Setzen von Parametern ist ebenfalls möglich. Zusätzlich ist e<strong>in</strong> Knoten <strong>in</strong> der<br />

Lage, den Teilbaum unter sich zu durchsuchen und Hierarchische Pfadausdrücke nach 2.9 auf<br />

ihn auszuführen.<br />

E<strong>in</strong>e weitere Fähigkeit der Knoten besteht dar<strong>in</strong>, sich selbst und den Teilbaum unter ihnen als<br />

XML-Str<strong>in</strong>g (e<strong>in</strong>e Zeichenkette ohne Zeilenumbrüche), als XML-Struktur (mit Tabulatoren<br />

e<strong>in</strong>gerückte umgebrochene Struktur von Tags und Werten) und als HTML-Code (e<strong>in</strong>gerückte<br />

umgebrochene Struktur von Tags mit Parametern und Werten) auszugeben.<br />

Mit dieser Fähigkeit e<strong>in</strong>er von ihr erzeugten Baumstruktur wird e<strong>in</strong>e mit e<strong>in</strong>er Instanz von<br />

HTML gespeiste Instanz von SecureParser zu e<strong>in</strong>em Konverter von fehlerbehafteten HTML-<br />

Dokumenten <strong>in</strong> XHTML-konforme Dokumente.<br />

6.4.10 Die Klasse ParseTreeCrawler<br />

Die Klasse ParseTreeCrawler enthält Baum-Algorithmen, die auf von e<strong>in</strong>er der Instanzen<br />

der Unterklassen von AbstarctParser erzeugte Baumstrukturen angewendet werden können.<br />

Diese be<strong>in</strong>halten Suchalgorithmen über die Typen (repräsentierte Tags) und Werte der<br />

Knoten, Algorithmen zur Ausführung von hierarchischen Pfadausdrücken und regulären<br />

Ausdrücken, die Ausgabe ganzer Bäume <strong>in</strong> der Reihenfolge von Tiefen und Breitensuche<br />

77


sowie die <strong>in</strong> Abschnitt 2.8 entworfenen Algorithmen zum syntaktischen und strukturellen<br />

Vergleich von HTML-Dokumenten.<br />

6.4.11 Die Klasse HtmlParser<br />

Die Klasse HtmlParser stellt als static implementierte Methoden zur Umwandlung von<br />

Str<strong>in</strong>gs <strong>in</strong> Baumstrukturen zur Verfügung. Sie bietet damit die Möglichkeit, die direkte<br />

Instanziierung e<strong>in</strong>er Unterklasse von AbstractParser zu vermeiden, wobei allerd<strong>in</strong>gs die <strong>in</strong><br />

den Methoden ausgeführten Instanziierungen derselben auf HTML spezialisiert s<strong>in</strong>d.<br />

Zusätzlich können die Protokoll-E<strong>in</strong>träge e<strong>in</strong>es parse-Vorganges <strong>in</strong> das Protokoll e<strong>in</strong>er<br />

Anfrage (PAContextRequest) übernommen werden.<br />

6.4.12 Die Klasse SourceFileParser<br />

Die Klasse HtmlParser stellt als static implementierte Methoden zur Umwandlung von<br />

Str<strong>in</strong>gs <strong>in</strong> Baumstrukturen zur Verfügung. Sie bietet damit die Möglichkeit, die direkte<br />

Instanziierung e<strong>in</strong>er Unterklasse von AbstractParser zu vermeiden, wobei allerd<strong>in</strong>gs die <strong>in</strong><br />

den Methoden ausgeführten Instanziierungen derselben auf XML spezialisiert s<strong>in</strong>d. Zusätzlich<br />

können die Protokoll-E<strong>in</strong>träge e<strong>in</strong>es parse-Vorganges <strong>in</strong> das Protokoll e<strong>in</strong>er Anfrage<br />

(PAContextRequest) übernommen werden.<br />

6.5 Das Paket generatorAgent.util<br />

Das Paket ganeratorAgent.util be<strong>in</strong>haltet die von den Algorithmen zur vollautomatischen<br />

<strong>Generierung</strong> e<strong>in</strong>er Quellenbeschreibung sowie die von anderen Komponenten benötigten<br />

Klassen zur Repräsentation komplexer und spezialisierter Datenstrukturen. Bis auf die<br />

Konstruktoren stellt ke<strong>in</strong>e Klasse Methoden zur Verfügung; sie s<strong>in</strong>d lediglich als Conta<strong>in</strong>er<br />

für Daten vorgesehen.<br />

Die Klassen generatorAgent.util.*Vector stellen auf e<strong>in</strong>en bestimmten Datentyp<br />

spezialisierte Sonderfälle von java.util.Vector dar, die die Typ-Umwandlungen <strong>in</strong>tern<br />

vornehmen und diese somit <strong>in</strong> den sie verwendenden Komponenten e<strong>in</strong>sparen.<br />

6.5.1 Die Klasse GenerateDataConta<strong>in</strong>er<br />

Die Instanzen der Klasse GenerateDataConta<strong>in</strong>er be<strong>in</strong>halten e<strong>in</strong>en bei der<br />

vollautomatischen <strong>Generierung</strong> e<strong>in</strong>er Quellenbeschreibung verwendeten Satz<br />

zusammengehöriger Beispiel-Daten oder auch e<strong>in</strong>e Gruppe von dort verwendeten Sätzen von<br />

Beispiel-Daten.<br />

6.5.2 Die Klasse SearchFormConta<strong>in</strong>er<br />

Die Klasse SearchFormConta<strong>in</strong>er wird verwendet, um bei der Suche und Analyse von<br />

Suchformularen diese zu repräsentieren und die im Zuge ihrer Bewertung gewonnenen Daten<br />

zu speichern.<br />

6.5.3 Die Klasse SearchFieldConta<strong>in</strong>er<br />

Die Klasse SerachFieldConta<strong>in</strong>er dient bei der Analyse von Suchformularen der Haltung<br />

und Auswertung von Daten, die zur Klassifizierung e<strong>in</strong>es e<strong>in</strong>zelnen Suchfeldes benötigt<br />

werden.<br />

6.5.4 Die Klasse OptionFieldConta<strong>in</strong>er<br />

Die Klasse OptionFieldConta<strong>in</strong>er wird bei der Analyse von Auswahl-Feldern zur Haltung<br />

und Auswertung von über diese gewonnenen Daten verwendet.<br />

78


6.5.5 Die Klasse QueryPartConta<strong>in</strong>er<br />

Die Instanzen der Klasse QueryPartConta<strong>in</strong>er dienen dem Anfrage-Generator dazu, die zu<br />

Suchfeldern zugewiesenen e<strong>in</strong>zelnen Kriterien e<strong>in</strong>er UniCtas-i-<strong>in</strong>ternen Anfrage darzustellen.<br />

Sie be<strong>in</strong>halten dabei sowohl das als Kriterium verwendete Datenelement mitsamt dem<br />

Suchwert als auch, falls verfügbar, die logische Verknüpfung zum über das nachfolgende<br />

Suchfeld e<strong>in</strong>gegebene Kriterium.<br />

6.5.6 Die Klasse LayerConta<strong>in</strong>er<br />

Die Klasse LayerConta<strong>in</strong>er wird im Rahmen des <strong>Generierung</strong>s-Prozesses dazu verwendet,<br />

e<strong>in</strong>e Informationsschicht zu repräsentieren. Dies be<strong>in</strong>haltet sowohl die Baumdarstellung des<br />

zugrunde liegenden HTML-Dokumentes als auch die identifizierten Datenelemente und die<br />

zugehörigen Pfadausdrücke.<br />

6.5.7 Die Klasse LayerCascadeConta<strong>in</strong>er<br />

Die Klasse LayerCascadeConta<strong>in</strong>er repräsentiert <strong>in</strong>nerhalb des <strong>Generierung</strong>s-Prozesses e<strong>in</strong>e<br />

Kaskade von Informationsschichten.<br />

6.5.8 Die Klasse RegExGenerateConta<strong>in</strong>er<br />

Die Instanzen der Klasse RegExGenerateConta<strong>in</strong>er nehmen im Zuge der <strong>Generierung</strong> der<br />

Pfadausdrücke die zu Erzeugung der Regulären Ausdrücke notwendigen Daten auf und<br />

dienen dabei ebenfalls der Rückgabe der Ergebnisse.<br />

6.5.9 Die Klasse ResultPart<br />

Die Instanzen der Klasse ResultPart repräsentieren während der Bearbeitung e<strong>in</strong>er<br />

Suchanfrage die e<strong>in</strong>zelnen Ergebnisse.<br />

6.5.10 Die Klasse ProtocolVector<br />

Die Klasse ProtocolVector stellt e<strong>in</strong> Protokoll mit beliebig vielen E<strong>in</strong>trägen zur Verfügung,<br />

das zur Dokumentation des <strong>Generierung</strong>sprozesses verwendet werden kann. E<strong>in</strong>e Instanz<br />

dieser Klasse ist dabei <strong>in</strong> der Lage, anhand der Wichtigkeit e<strong>in</strong>es E<strong>in</strong>trages zu entscheiden, ob<br />

dieser gespeichert wird oder nicht. E<strong>in</strong>träge anderer Instanzen (z.B. derer von verwendeten<br />

Komponenten) können übernommen werden. Zur Reduktion des Bedarfs an Speicher können<br />

bei Erreichen e<strong>in</strong>er bestimmten (def<strong>in</strong>ierbaren) Anzahl von E<strong>in</strong>trägen ältere <strong>in</strong> e<strong>in</strong>e Datei<br />

ausgelagert werden.<br />

6.6 Das Paket generatorAgent.ws<br />

Die Klassen des Paketes generatorAgent.ws werden von java2wsdl und wsdl2java<br />

automatisch erzeugt. Sie bilden die Basis, die dem Generator-Werkzeug, sofern es über den <strong>in</strong><br />

e<strong>in</strong>er eMail an e<strong>in</strong>en Adm<strong>in</strong>istrator enthaltenen Hyperl<strong>in</strong>k als Applet gestartet wurde, über<br />

WebServices zum e<strong>in</strong>en den Zugriff auf die zur <strong>Generierung</strong> notwendigen Beispiel- und<br />

Heuristik-Daten ermöglicht, zum anderen den durch den Betrieb als Applet beschränkten<br />

Zugriff auf die Internet-Seite des fraglichen Anbieters.<br />

79


7. Werkzeuge<br />

Im Rahmen dieser Arbeit wurde nicht nur der GA entworfen und implementiert, sondern auch<br />

e<strong>in</strong>e Generator-Werkzeug zur semi-automatischen <strong>Generierung</strong> e<strong>in</strong>er Quellenbeschreibung<br />

geschaffen, das bei Fehlschlagen des vollautomatischen Prozesses angewendet werden kann.<br />

Zudem ersche<strong>in</strong>t aufgrund der Komplexität der für die vollautomatische <strong>Generierung</strong><br />

notwendigen Beispiel- und Heuristik-Daten e<strong>in</strong> Editor für diese s<strong>in</strong>nvoll. Beide Werkzeuge<br />

werden <strong>in</strong> diesem Kapitel vorgestellt.<br />

7.1 Das Generator-Werkzeug<br />

Das Generator-Werkzeug dient zur semi-automatischen <strong>Generierung</strong> von<br />

Quellenbeschreibungen durch e<strong>in</strong>en Benutzer. Er kann dabei die e<strong>in</strong>zelnen Schritte auch<br />

vollautomatisch durchführen lassen, sofern er Beispiel- und Heuristik-Daten geladen hat. In<br />

diesem Fall muß er lediglich die angezeigten Zwischenergebnisse überprüfen und<br />

gegebenenfalls korrigieren.<br />

Das Generator-Werkzeug kann sowohl als eigenständige Anwendung betrieben werden als<br />

auch als Applet <strong>in</strong>nerhalb e<strong>in</strong>es HTML-Dokumentes. Letztere Möglichkeit kommt zum<br />

E<strong>in</strong>satz, wenn die vollautomatische <strong>Generierung</strong> e<strong>in</strong>er Quellenbeschreibung durch den GA<br />

aus irgende<strong>in</strong>em Grund fehlgeschlagen ist. In diesem Fall wird e<strong>in</strong> Adm<strong>in</strong>istrator per eMail<br />

über das Scheitern des GA benachrichtigt, wobei diese e<strong>in</strong>en Hyperl<strong>in</strong>k zu e<strong>in</strong>em vom GA<br />

dynamisch erstellten HTML-Dokument enthält, das das <strong>Generierung</strong>s-Werkzeug enthält. Der<br />

Adm<strong>in</strong>istrator muß dann lediglich den Hyperl<strong>in</strong>k öffnen und kann die <strong>Generierung</strong> direkt im<br />

Browser vornahmen. Aufgrund der restriktiven Sicherheitsbestimmungen für Applets müssen<br />

die HTML-Dokumente während der <strong>Generierung</strong> über den GA geholt werden, und auch die<br />

Beispiel- und Heuristik-Daten müssen von dort geladen werden. Letztlich muß die fertige<br />

Quellenbeschreibung an den GA zurückgegeben werden, damit dieser sie archivieren und<br />

dem anfragenden AA zur Verfügung stellen kann. Alle diese Kommunikationsaufgaben<br />

werden über vom GA angebotene WebServices realisiert, die das Applet aufrufen kann.<br />

Bei der Gestaltung der Benutzeroberfläche des Generator-Werkzeuges wurden die<br />

Verbesserungsvorschläge berücksichtigt, die im Rahmen des Evaluierungsexperimentes für<br />

se<strong>in</strong>en Vorgänger [Schneider 2001] gemacht wurden. Dabei wurden die als positiv bewerteten<br />

Aspekte aufgegriffen und verfe<strong>in</strong>ert, die als negativ oder fehlend bewerteten weitestgehend<br />

entfernt. So wurde die Darstellung von HTML-Dokumenten <strong>in</strong> Browser-, Baum- und<br />

zusätzlich Text-Ansicht mit relevanten Bauste<strong>in</strong>en beibehalten, die von manchen<br />

Testbenutzern als verwirrend empfundene Anzeige der bisher generierten<br />

Quellenbeschreibung ist dagegen nur noch über e<strong>in</strong>en Menupunkt erreichbar statt permanent<br />

sichtbar zu se<strong>in</strong>, und die <strong>Generierung</strong> wird Schritt für Schritt im Stil e<strong>in</strong>es Wizzards<br />

durchgeführt. Dabei können mehrere Anbieter parallel bearbeitet werden.<br />

7.1.1 Das Paket generatorAgent.applet<br />

Das Paket generatorAgent.applet be<strong>in</strong>haltet die vom Generator-Werkzeug benötigten<br />

Klassen. Diese umfassen sowohl die zur Darstellung der Benutzeroberfläche benötigten<br />

Komponenten wie auch die zur Kommunikation mit e<strong>in</strong>em GA (im Betrieb als Applet) und<br />

zum Laden von Basisdaten und Speichern fertiger Quellenbeschreibungen (im Betrieb als<br />

Anwendung). H<strong>in</strong>zu kommt die Integration der <strong>in</strong> der Klasse ContextGenerator<br />

implementierten <strong>Generierung</strong>s-Automatismen. Verwendet werden daneben weitere Klassen<br />

aus dem Paket generatorAgent sowie solche aus den Paketen generatorAgent.util und<br />

generatorAgent.tree.<br />

81


7.1.1.1 Die Klasse GeneratorApplet<br />

Die Klasse GeneratorApplet bildet die Basis für das <strong>Generierung</strong>s-Werkzeug. Sie stellt<br />

Grundfunktionen wie die Menu- und Statusleiste zur Verfügung und zeigt den aktuell<br />

bearbeiteten <strong>Generierung</strong>s-Prozeß an. Diese Klasse erbt von JApplet, wodurch der Betrieb<br />

des Generator-Werkzeuges als Applet ermöglicht wird, sieht aber auch den Betrieb als<br />

eigenständige Anwendung vor.<br />

7.1.1.2 Die Klasse ContextGeneratorWizzard<br />

Die Klasse ContextGeneratorWizzard bildet den Konta<strong>in</strong>er für die <strong>Generierung</strong> e<strong>in</strong>er<br />

Quellenbeschreibung. Sie steuert den Ablauf des <strong>Generierung</strong>s-Prozesses und führt den<br />

Benutzer Schritt für Schritt von der Auswahl und Analyse e<strong>in</strong>es Suchformulars zur<br />

<strong>Generierung</strong> der Pfade zur Extraktion der Werte der Datenelemente h<strong>in</strong> zu e<strong>in</strong>er fertigen<br />

Quellenbeschreibung. Dabei kann der Benutzer bei jedem Schritt der <strong>Generierung</strong><br />

entscheiden, ob er diesen von den zur Verfügung stehenden Automatismen ausführen lassen<br />

will, oder ob er ihn selbst durchführen möchte. Bei der Wahl letzterer Option stehen ihm<br />

weitere Automatismen zur Verfügung, die Teile der <strong>Generierung</strong> vornehmen.<br />

7.1.1.3 Die Klasse StartPageF<strong>in</strong>der<br />

Die Klasse StartPageF<strong>in</strong>der stellt e<strong>in</strong>e Ansicht dar, die dem F<strong>in</strong>den e<strong>in</strong>es E<strong>in</strong>stiegs-HTML-<br />

Dokumentes zur <strong>Generierung</strong> e<strong>in</strong>er Quellenbeschreibung dient. Über den Knopf<br />

GenerateContext kann der Benutzer den <strong>Generierung</strong>s-Prozeß <strong>in</strong>itialisieren, ausgehend vom<br />

aktuellen HTML-Dokument.<br />

7.1.1.4 Die Klasse ManuallyOrAutomaticallyChooser<br />

Die Klasse ManuallyOrAutomaticallyChooser ist als abstract implementiert, kann also<br />

selbst nicht <strong>in</strong>stanziiert werden. Sie bildet die Basis für die Ansichten, <strong>in</strong> denen der Benutzer<br />

entscheiden kann, ob und <strong>in</strong>wiefern er den nächsten Schritte der <strong>Generierung</strong> selbst ausführen<br />

oder ihn den Automatismen des <strong>Generierung</strong>s-Werkzeuges überlassen möchte. Zusätzlich<br />

werden die Ergebnisse des letzten Schrittes angezeigt, und es besteht die Möglichkeit, diese<br />

zu verwerfen und den Schritt nochmals auszuführen.<br />

Zu beachten ist hierbei, daß die Automatismen nur dann zur Verfügung stehen, wenn die<br />

dafür notwendigen Beispiel- und Heuristik-Daten geladen wurden. Ist dies noch nicht<br />

geschehen, so ist der Knopf zur automatischen Ausführung des nächsten <strong>Generierung</strong>s-<br />

Schrittes deaktiviert, dafür ist der Knopf zum Laden der Beispiel- und Heuristik-Daten aktiv.<br />

7.1.1.5 Die Klasse F<strong>in</strong>dFormMoaChooser<br />

Die Klasse F<strong>in</strong>dFormMoaChooser erbt von ManuallyOrAutomaticallyChooser. Sie zeigt<br />

die gewählte Startseite an und bietet dem Benutzer die Wahl, ob er sich selbst auf die Suche<br />

nach e<strong>in</strong>em Suchformular machen möchte, oder ob die Automatismen der <strong>Generierung</strong> e<strong>in</strong><br />

Suchformular f<strong>in</strong>den und auswählen sollen.<br />

7.1.1.6 Die Klasse ClassifyFormMoaChooser<br />

Die Klasse ClassifyFormMoaChooser erbt von ManuallyOrAutomaticallyChooser. Sie<br />

zeigt nach der Auswahl e<strong>in</strong>es Suchformulars dieses an und bietet dem Benutzer die Wahl, ob<br />

er die Klassifizierung der Suchfelder und, falls vorhanden, der Auswahlfelder und er <strong>in</strong> ihnen<br />

enthaltenen Optionen manuell durchführen will, oder ob er sie den Automatismen des<br />

Generators überlassen möchte. Zudem bietet sie die Option, die Auswahl rückgängig zu<br />

machen und sich erneut auf die Suche nach e<strong>in</strong>em Suchformular zu begeben. Des weiteren<br />

kann die Vorbelegung der Felder des Formulars verändert werden.<br />

82


7.1.1.7 Die Klasse S<strong>in</strong>gleResultPathsMoaChooser<br />

Die Klasse ListResultMoaChooser erbt von ManuallyOrAutomaticallyChooser. Sie zeigt<br />

die nach der Auswahl und Analyse des Suchformulars verfügbaren Suchmöglichkeiten an und<br />

bietet dem Benutzer die Wahl, ob er die <strong>Generierung</strong> der Pfade zur Extraktion der Werte von<br />

Datenelementen aus Ergebnis-Dokumenten von Suchanfragen mit e<strong>in</strong>em Treffer und den von<br />

dort aus über Hyperl<strong>in</strong>ks erreichbaren HTML-Dokumenten den Automatismen des Generator-<br />

Werkzeuges überlassen möchte, oder ob er sie selbst durchführen will. Des weiteren kann der<br />

Benutzer bei letzterer Option wählen, ob er die Daten für die Suchanfrage selbst e<strong>in</strong>geben<br />

möchte, oder ob sie aus e<strong>in</strong>em der auch von den Automatismen benutzten <strong>Generierung</strong>s-<br />

Beispielen erzeugt werden sollen. Bei e<strong>in</strong>er aus Beispieldaten erzeugten Anfrage kann die<br />

<strong>Generierung</strong> der Pfade auf Wunsch automatisch erfolgen. Zudem bietet sie die Möglichkeit,<br />

die im letzten Schritt durchgeführte Analyse des gewählten Suchformulars zu verwerfen und<br />

sie erneut durchzuführen.<br />

7.1.1.8 Die Klasse ListResultPathsMoaChooser<br />

Die Klasse ListResultMoaChooser erbt von ManuallyOrAutomaticallyChooser. Sie zeigt<br />

nach der <strong>Generierung</strong> der Pfade zur Extraktion der Werte von Datenelementen aus Ergebnis-<br />

Dokumenten von Suchanfragen mit e<strong>in</strong>em Treffer und den von dort aus über Hyperl<strong>in</strong>ks<br />

erreichbaren HTML-Dokumenten diese Pfade an und bietet dem Benutzer die Wahl, ob er die<br />

<strong>Generierung</strong> der Pfade zur Extraktion der Werte von Datenelementen aus Ergebnis-<br />

Dokumenten von Suchanfragen mit mehreren Treffern und den von dort aus über Hyperl<strong>in</strong>ks<br />

erreichbaren HTML-Dokumenten den Automatismen des Generator-Werkzeuges überlassen<br />

möchte, oder ob er sie selbst durchführen will. Des weiteren kann der Benutzer bei letzterer<br />

Option wählen, ob er die Daten für die Suchanfrage selbst e<strong>in</strong>geben möchte, oder ob sie aus<br />

e<strong>in</strong>em der auch von den Automatismen benutzten <strong>Generierung</strong>s-Beispielen erzeugt werden<br />

sollen. Bei e<strong>in</strong>er aus Beispieldaten erzeugten Anfrage kann die <strong>Generierung</strong> der Pfade auf<br />

Wunsch automatisch erfolgen. Zudem bietet sie die Möglichkeit, die im letzten Schritt<br />

generierten Pfade manuell zu ändern oder sie zu verwerfen und ihre <strong>Generierung</strong> erneut<br />

durchzuführen.<br />

7.1.1.9 Die Klasse ContextF<strong>in</strong>ished<br />

Die Klasse ContextF<strong>in</strong>ished erbt von ManuallyOrAutomaticallyChooser. Sie bietet dem<br />

Benutzer die Möglichkeit, die generierte Quellenbeschreibung zu speichern oder sie zu<br />

verwerfen. Zudem stellt sie die Option zur Verfügung, die <strong>Generierung</strong> der Pfade zur<br />

Extraktion von Werten von Datenelementen aus dem Ergebnis-Dokument e<strong>in</strong>er Suche mit<br />

mehreren Treffern und den vom dort auf über Hyperl<strong>in</strong>ks erreichbaren HTML-Dokumenten<br />

zu verwerfen und erneut durchzuführen oder diese Pfade manuell zu verändern.<br />

7.1.1.10 Die Klasse ContextPreview<br />

Die Klasse ContextPreview dient zur Anzeige der bisher generierten Teile der<br />

Quellenbeschreibung. In dieser Vorschau hat der Benutzer nach e<strong>in</strong>er Sicherheitsabfrage die<br />

Möglichkeit, die Quellenbeschreibung direkt <strong>in</strong> ihrem Code zu verändern.<br />

7.1.1.11 Die Klasse SearchFormF<strong>in</strong>der<br />

Die Klasse SearchFormF<strong>in</strong>der dient der Darstellung von HTML-Dokumenten während der<br />

Suche nach e<strong>in</strong>em Suchformular. Sie bietet die Möglichkeit zur Extraktion e<strong>in</strong>es oder aller <strong>in</strong><br />

e<strong>in</strong>em HTML-Dokument enthaltenen Formulare und zeigt alle im Laufe des Suchvorganges<br />

extrahierten <strong>in</strong> e<strong>in</strong>er Liste an.<br />

83


7.1.1.12 Die Klasse SearchFormDisplay<br />

Die Klasse SearchFormDisplay dient der Anzeige e<strong>in</strong>es Suchformulars <strong>in</strong>nerhalb des<br />

Auswahl- und Klassifizierungs-Vorganges. Dies be<strong>in</strong>haltet sowohl die Darstellung des<br />

Formulars <strong>in</strong> e<strong>in</strong>er Browser-Ansicht als auch die anderer wichtiger das Formular betreffender<br />

Daten wie den Pfad se<strong>in</strong>es Wurzelknotens im HTML-Dokument und dessen URL oder se<strong>in</strong>e<br />

<strong>in</strong> ihrer standardmäßigen E<strong>in</strong>stellung festgehaltenen Felder.<br />

7.1.1.13 Die Klasse SearchFormLister<br />

Die Klasse SearchFormLister erbt von SearchFormDispaly. Sie dient während der Suche<br />

nach e<strong>in</strong>em Suchformular der Darstellung e<strong>in</strong>es bestimmten Formulare <strong>in</strong> der Liste der<br />

extrahierten und bietet die Möglichkeit zur Auswahl des angezeigten Suchformulars.<br />

7.1.1.14 Die Klasse FixFieldsEditor<br />

Die Klasse FixFieldsEditor bietet dem Benutzer die Möglichkeit, die Standard-Belegung<br />

der Felder des ausgewählten Suchformulars zu verändern.<br />

7.1.1.15 Die Klasse FieldDisplayL<strong>in</strong>e<br />

Die Instanzen der Klasse FieldDisplayL<strong>in</strong>e repräsentieren <strong>in</strong>nerhalb e<strong>in</strong>er Instanz von<br />

FixFieldsEditor e<strong>in</strong> e<strong>in</strong>zelnes E<strong>in</strong>gabefeld des dort dargestellten Formulars.<br />

7.1.1.16 Die Klasse SearchFieldClassifier<br />

Die Klasse OptionFieldClassifier erbt von SerachFormDisplay. Sie zeigt das gewählte<br />

Suchformular an und dient der Klassifizierung der <strong>in</strong> diesem enthaltenen Suchfelder nach dem<br />

von ihnen als Kriterium angewendeten Datenelement.<br />

7.1.1.17 Die Klasse SearchFieldClassifierL<strong>in</strong>e<br />

Die Klasse SearchFieldClassifierL<strong>in</strong>e dient der Klassifizierung e<strong>in</strong>es Suchfeldes nach<br />

dem Datenelement, auf das der e<strong>in</strong>gegebene Suchwert als Kriterium angewendet wird.<br />

7.1.1.18 Die Klasse OptionFieldClassifier<br />

Die Klasse OptionFieldClassifier erbt von SearchFormDisplay. Sie zeigt das gewählte<br />

Suchformular an und dient der Zuordnung der <strong>in</strong> diesem enthaltenen Auswahlfelder zu den<br />

Suchfeldern als Element- oder Verknüpfungs-Auswahl sowie der Klassifizierung der jeweils<br />

enthaltenen Optionen. Dabei hat der Benutzer auch die Möglichkeit, e<strong>in</strong> Auswahlfeld als<br />

Allgeme<strong>in</strong>e Auswahl e<strong>in</strong>zustufen.<br />

7.1.1.19 Die Klasse OptionFieldClassifierPanel<br />

Die Klasse OptionFieldClassifierPanel dient der Zuordnung e<strong>in</strong>es e<strong>in</strong>zelnen<br />

Auswahlfeldes zu e<strong>in</strong>em Suchfeld sowie der Klassifizierung der <strong>in</strong> ihm enthaltenen Optionen.<br />

7.1.1.20 Die Klasse OptionClassifierL<strong>in</strong>e<br />

Die Klasse OptionClassifierL<strong>in</strong>e dient der Klassifizierung e<strong>in</strong>er e<strong>in</strong>zelnen <strong>in</strong> e<strong>in</strong>em<br />

Auswahlfeld angezeigten Option nach dem von ihr repräsentierten Datenelement oder der von<br />

ihr repräsentierten logischen Verknüpfung zweier Suchkriterien. Dabei hat der Benutzer<br />

sowohl die Möglichkeit, e<strong>in</strong> Datenelement oder e<strong>in</strong>e logische Verknüpfung aus e<strong>in</strong>em<br />

Auswahlfeld zu wählen, als auch die, selbst e<strong>in</strong>es oder e<strong>in</strong>e e<strong>in</strong>zugeben.<br />

84


7.1.1.21 Die Klasse SearchPanel<br />

Die Klasse SearchPanel dient zur Darstellung e<strong>in</strong>es Suchformulars für die während der<br />

<strong>Generierung</strong> e<strong>in</strong>zugebenden Suchanfragen. Es be<strong>in</strong>haltet Suchfelder sowie Element- und<br />

Verknüpfungs-Auswahlen des gewählten Formulars.<br />

7.1.1.22 Die Schnittstelle SearchPanelHost<br />

Die Schnittstelle SearchPanelHost garantiert e<strong>in</strong>er enthaltenen Instanz von SearchPanel,<br />

daß die Komponente zur Reaktion auf das Abschicken e<strong>in</strong>er Suchanfrage fähig ist.<br />

7.1.1.23 Die Klasse SearchPanelL<strong>in</strong>e<br />

Die Instanzen der Klasse SearchPanelL<strong>in</strong>e repräsentieren <strong>in</strong>nerhalb e<strong>in</strong>er Instanz von<br />

SearchPanel e<strong>in</strong> Suchfeld mit zugeordneter Element- und, falls vorhanden, Verknüpfungs-<br />

Auswahl.<br />

7.1.1.24 Die Klasse SearchPanelSimpleL<strong>in</strong>e<br />

Die Instanzen der Klasse SearchPanelL<strong>in</strong>e repräsentieren <strong>in</strong>nerhalb e<strong>in</strong>er Instanz von<br />

SearchPanel e<strong>in</strong> Suchfeld ohne zugeordnete Element- und Verknüpfungs-Auswahl. Sie<br />

kommen zum E<strong>in</strong>satz, wenn letztere beide nicht verfügbar s<strong>in</strong>d.<br />

7.1.1.25 Die Klasse SearchAutomationPanel<br />

Die Klasse SearchAutomationPanel stellt bei geladenen <strong>Generierung</strong>s-Basisdaten die<br />

Auswahl zwischen der manuellen E<strong>in</strong>gabe der Suchdaten und der Erzeugung der Anfrage aus<br />

den Daten e<strong>in</strong>es <strong>Generierung</strong>s-Beispiels zur Verfügung. Ist letztere Option gewählt, so kann<br />

zum e<strong>in</strong>em das verwendete Beispiel ausgewählt, zum anderen die automatische <strong>Generierung</strong><br />

von Pfaden <strong>in</strong> den e<strong>in</strong>zelnen Informationsschichten aktiviert werden.<br />

7.1.1.26 Die Klasse ResultPathsGenerator<br />

Die Klasse ResultPathsGenerator ist als abstract implementiert, kann also nicht selbst<br />

<strong>in</strong>stanziiert werden. Sie bildet die Basis der Ansichten für die <strong>Generierung</strong> der Pfade zur<br />

Extraktion der Werte von Datenelementen aus den Ergebnis-Dokumenten von Suchanfragen<br />

und den von dort aus über Hyperl<strong>in</strong>ks erreichbaren HTML-Dokumenten.<br />

7.1.1.27 Die Klasse S<strong>in</strong>gleResultPathsGenerator<br />

Die Klasse S<strong>in</strong>gleResultPathsGenerator erbt von ResultPathsGenerator und dient<br />

speziell der <strong>Generierung</strong> der Pfade zur Extraktion der Werte von Datenelementen aus<br />

Ergebnis-Dokumenten von Suchanfragen mit e<strong>in</strong>em Treffer und den von dort aus über<br />

Hyperl<strong>in</strong>ks erreichbaren HTML-Dokumenten.<br />

7.1.1.28 Die Klasse ListResultPathsGenerator<br />

Die Klasse ListResultPathsGenerator erbt von ResultPathsGenerator und dient speziell<br />

der <strong>Generierung</strong> der Pfade zur Extraktion der Werte von Datenelementen aus Ergebnis-<br />

Dokumenten von Suchanfragen mit mehreren Treffern und den von dort aus über Hyperl<strong>in</strong>ks<br />

erreichbaren HTML-Dokumenten.<br />

7.1.1.29 Die Klasse DataPathsEditor<br />

Die Klasse DataPathsEditor bietet dem Benutzer die Möglichkeit, erzeugte Pfade zur<br />

Extraktion der Werte von Datenelementen aus dem Ergebnis-Dokument e<strong>in</strong>er Suchanfrage<br />

und den von dort aus über Hyperl<strong>in</strong>ks erreichbaren HTML-Dokumenten manuell zu<br />

verändern.<br />

85


7.1.1.30 Die Klasse LayerPathDisplay<br />

Die Instanzen der Klasse LayerPathDisplay stellen <strong>in</strong>nerhalb e<strong>in</strong>er Instanz von<br />

DataPathsEditor die Daten jeweils e<strong>in</strong>er e<strong>in</strong>zelnen Informationsschicht dar und bieten die<br />

Möglichkeit, diese manuell zu ändern.<br />

7.1.1.31 Die Klasse PathDisplayL<strong>in</strong>e<br />

E<strong>in</strong>e Instanz der Klasse PathDiaplayL<strong>in</strong>e repräsentiert <strong>in</strong>nerhalb e<strong>in</strong>er Instanz von<br />

LayerPathDiaplay den Pfad zur Extraktion der Werte e<strong>in</strong>es bestimmten Datenelementes aus<br />

der jeweiligen Informationsschicht. Dieser kann manuell geändert und getestet werden.<br />

7.1.1.32 Die Schnittstelle DataPathsEditorHost<br />

Die Schnittstelle DataPathsEditorHost garantiert e<strong>in</strong>er Instanz von DataPathsEditor, daß<br />

die diese enthaltende Komponente zum Speichern von manuell veränderten Pfaden zur<br />

Extraktion der Werte von Datenelementen aus dem Ergebnis-Dokument e<strong>in</strong>er Suchanfrage<br />

und den von dort aus über Hyperl<strong>in</strong>ks erreichbaren HTML-Dokumenten fähig ist.<br />

7.1.1.33 Die Klasse LayerDisplay<br />

Die Klasse LayerPathDisplay dient bei der manuellen Änderung von Pfaden zur Extraktion<br />

der Werte von Datenelementen aus dem Ergebnis-Dokument e<strong>in</strong>er Suchanfrage und den von<br />

dort aus über Hyperl<strong>in</strong>ks erreichbaren HTML-Dokumenten <strong>in</strong> e<strong>in</strong>er Instanz von<br />

DataPathsEditor der Darstellung e<strong>in</strong>zelner Informationsschichten <strong>in</strong> der aus gängigen<br />

Browsern gewohnten Ansicht sowie der Ansicht als Baum. Zudem kann der Quelltext des<br />

HTML-Dokumentes angezeigt werden.<br />

7.1.1.34 Die Klasse ContextChecker<br />

Die Klasse ContextChecker dient der Überprüfung e<strong>in</strong>er Erzeugten Quellenbeschreibung.<br />

Sie Stellt e<strong>in</strong>e Möglichkeit zur E<strong>in</strong>gabe e<strong>in</strong>er Suchanfrage, zur Auswahl der gewünschten<br />

Datenelemente und Beschränkung der Suche auf e<strong>in</strong>e Maximalzahl von Ergebnissen zur<br />

Verfügung. Nach der Bearbeitung der Anfrage werden die Ergebnisse <strong>in</strong> tabellarischer Form<br />

angezeigt.<br />

7.1.1.35 Die Klasse CheckerDataExtractor<br />

Die Klasse CheckerDataExtraktor erbt von DataExtractor und überschreibt die Methoden<br />

zur Benachrichtigung des umgebenden Objektes über den Status und den Abschluß der<br />

Bearbeitung e<strong>in</strong>er Suchanfrage <strong>in</strong> der Art, daß die umgebende Instanz von ContextChecker<br />

benachrichtigt wird.<br />

7.1.1.36 Die Klasse DummyTableModel<br />

Die Klasse DummyTableModel dient <strong>in</strong> den Instanzen von ContextChecker der Vorbelegung<br />

der Ergebnis-Tabelle mit e<strong>in</strong>em Inhalt, der se<strong>in</strong>e Funktion erklärt. Dieser wird bis zum<br />

Ausführen der ersten Suchanfrage angezeigt.<br />

7.1.1.37 Die Klasse ResultTableModel<br />

Die Klasse ResultTableModel implementiert die Schnittstelle TableModel und ermöglicht<br />

damit die Darstellung der <strong>in</strong> e<strong>in</strong>er Instanz von ProviderQueryResult enthaltenen<br />

Ergebnisdaten <strong>in</strong> e<strong>in</strong>er JTable-Komponente.<br />

86


7.1.1.38 Die Klasse LayerPanel<br />

Die Klasse LayerPanel dient der Darstellung e<strong>in</strong>zelner Informationsschichten bei der<br />

<strong>Generierung</strong> der Pfade zur Extraktion von Datenelementen aus Ergebnis-Dokumenten von<br />

Suchanfragen und den von dort aus über Hyperl<strong>in</strong>ks erreichbaren HTML-Dokumenten. Sie<br />

be<strong>in</strong>haltet die Anzeige des jeweiligen HTML-Dokumentes <strong>in</strong> e<strong>in</strong>er Instanz von<br />

LayerBrowsePanel und die Möglichkeiten zur Extraktion von Datenelementen und zur<br />

<strong>Generierung</strong> von Pfaden sowie e<strong>in</strong>e Liste der bisher generierten Pfade.<br />

7.1.1.39 Die Klasse LayerBrowsePanel<br />

Die Klasse LayerBrowsePanel erbt von TreeBrowsePanel. Sie verändert letztere Klasse <strong>in</strong><br />

ihrer Reaktion auf die Aktivierung e<strong>in</strong>es Hyperl<strong>in</strong>ks <strong>in</strong> e<strong>in</strong>er der Ansichten. Die neue Seite<br />

wird dadurch nicht mehr <strong>in</strong> derselben Maske geöffnet, sondern <strong>in</strong> e<strong>in</strong>er neuen.<br />

7.1.1.40 Die Klasse ListLayerPanel<br />

Die Klasse ListLayerPanel erbt von LayerPanel. Sie dient speziell zur Darstellung des<br />

Ergebnis-Dokumentes e<strong>in</strong>er Suchanfrage mit mehreren Treffern und erweitert LayerPanel um<br />

e<strong>in</strong>e zusätzlich angezeigte Instanz von ListDataPanel zur E<strong>in</strong>gabe der speziell <strong>in</strong> dieser<br />

Informationsschicht benötigten Daten.<br />

7.1.1.41 Die Klasse ListDataPanel<br />

Die Klasse ListDataPanel dient der Extraktion und Darstellung der speziell für das<br />

Ergebnis-Dokument e<strong>in</strong>er Suche mit mehreren Treffern notwendigen Daten. Sie bietet<br />

Möglichkeiten zur E<strong>in</strong>gabe von Treffer-Anzahl, Treffer-Abstand und Treffer-Anfang sowie<br />

dem Pfad des Hyperl<strong>in</strong>ks zur nächsten Teil-Liste mit weiteren Treffern der Suchanfrage.<br />

7.1.1.42 Die Klasse DataPathListL<strong>in</strong>e<br />

Die Instanzen der Klasse DataPathListL<strong>in</strong>e repräsentieren <strong>in</strong> der Pfadliste e<strong>in</strong>er Instanz von<br />

LayerPanel e<strong>in</strong>en e<strong>in</strong>zelnen Pfad e<strong>in</strong>es identifizierten Datenelementes und stellen dieses<br />

samt dem aktuellen Wert und dem Pfad selbst dar. Zudem hat der Benutzer die Möglichkeit,<br />

den Pfad zu löschen.<br />

7.1.1.43 Die Klasse RegExGeneratorPanel<br />

Die Klasse RegExGeneratorPanel stellt die Ansicht dar, <strong>in</strong> der das Generator-Werkzeug den<br />

Benutzer zur E<strong>in</strong>gabe von regulären Ausdrücken für alle diejenigen Datenelemente auffordert,<br />

die ihren Pfad mit e<strong>in</strong>em anderen Datenelement geme<strong>in</strong>sam haben.<br />

7.1.1.44 Die Klasse RegExGeneratorL<strong>in</strong>e<br />

Die Klasse RegExGeneratorL<strong>in</strong>e stellt die E<strong>in</strong>gabeaufforderung für e<strong>in</strong>en regulären<br />

Ausdruck zur Extraktion e<strong>in</strong>es bestimmten Datenelementes aus e<strong>in</strong>em Gesamtstr<strong>in</strong>g dar.<br />

Dabei hat der Benutzer die Möglichkeit, den e<strong>in</strong>gegebenen Ausdruck zu testen, um<br />

sicherzustellen, daß se<strong>in</strong>e Anwendung den gewünschten Teil des jeweiligen Gesamtstr<strong>in</strong>gs<br />

extrahiert.<br />

7.1.1.45 Die Klasse TreeBrowsePanel<br />

Die Klasse TreeBrowsePanel stellt e<strong>in</strong>en Browser dar, der das jeweils aktuelle HTML-<br />

Dokument, bei dem es sich auch um e<strong>in</strong>e Frame-Seite handeln kann, sowohl <strong>in</strong> der aus<br />

anderen Browsern gewohnten Ansicht anzeigt als auch <strong>in</strong> e<strong>in</strong>er Baum-Ansicht und e<strong>in</strong>er Text-<br />

Ansicht, die die im jeweiligen Schritt relevanten Inhalte darstellt. Zur Navigation können –<br />

wie aus anderen Browsern gewohnt – Vorwärts- und Rückwärts-Funktionen sowie Hyperl<strong>in</strong>ks<br />

und die direkte E<strong>in</strong>gabe von URLs verwendet werden. Jede Instanz von TreeBrowsePanel<br />

87


kann bei ihrer Erzeugung durch e<strong>in</strong>e Instanz von javax.sw<strong>in</strong>g.JPanel oder e<strong>in</strong>er<br />

Unterklasse davon erweitert werden, die zusätzliche Funktionen enthält.<br />

7.1.1.46 Die Klasse DummyTreeModel<br />

Die Klasse DummyTreeModel dient <strong>in</strong> den Instanzen von TreeBrowsePanel der Vorbelegung<br />

der Baum-Ansicht mit e<strong>in</strong>em Inhalt, der dessen Funktion erklärt. Dieser wird bis zum Öffnen<br />

des ersten HTML-Dokumentes angezeigt.<br />

7.1.1.47 Die Klasse ParseTreeModel<br />

Die Klasse ParseTreeModel implementiert die Schnittstelle TreeModel und ermöglicht damit<br />

die Darstellung e<strong>in</strong>es durch e<strong>in</strong>en der Parser aus den Paket generatorAgent.tree erzeugten<br />

Baumes <strong>in</strong> e<strong>in</strong>er JTree-Komponente.<br />

7.1.1.48 Die Klasse SetProxyW<strong>in</strong>dow<br />

Die Klasse SetProxyW<strong>in</strong>dow stellt e<strong>in</strong>e Maske zur E<strong>in</strong>gabe e<strong>in</strong>es ProxyServers und des Ports<br />

zur Verfügung, auf dem er angesprochen werden muß.<br />

7.1.2 Das Werkzeug<br />

Anhand der <strong>Generierung</strong> e<strong>in</strong>er Quellenbeschreibung soll <strong>in</strong> diesem Abschnitt die<br />

Funktionsweise des Generator-Werkzeuges erläutert werden. Diese erfolgt Schritt für Schritt<br />

im Stil e<strong>in</strong>es Wizzards, so daß der Benutzer immer nur diejenigen Informationen und<br />

E<strong>in</strong>gabemöglichkeiten zur Verfügung hat, die im jeweiligen Schritt benötigt werden. Durch<br />

e<strong>in</strong>en Zurück-Knopf kann jeder Schritt verworfen und erneut ausgeführt werden.<br />

Der aktuelle Stand der Quellenbeschreibung ist zu jedem Zeitpunkt der <strong>Generierung</strong> über den<br />

Menüpunkt W<strong>in</strong>dow � ContextPreview abrufbar. Zudem können ohne weiteres mehrere<br />

Quellenbeschreibungen parallel generiert werden. Dies erfolgt unabhängig vone<strong>in</strong>ander, d.h.<br />

die e<strong>in</strong>zelnen <strong>Generierung</strong>sabläufe bee<strong>in</strong>flussen e<strong>in</strong>ander nicht.<br />

Während bei der <strong>Generierung</strong> e<strong>in</strong>er Quellenbeschreibung im GeneratorAgenten die URL der<br />

Startseite durch die Anfrage des AnbieterAgenten vorgegeben ist, hat der Benutzer im<br />

Generator-Werkzeug die Möglichkeit, diese selbst zu bestimmen. Dazu dient die <strong>in</strong><br />

Abbildung 7.1 dargestellte Ansicht. Wird das Werkzeug auf die Benachrichtigung e<strong>in</strong>es<br />

GeneratorAgenten h<strong>in</strong> geöffnet, also nur zur Lösung e<strong>in</strong>es <strong>in</strong> dessen vollautomatischem<br />

<strong>Generierung</strong>sablauf aufgetretenen Problems, so ist die Startseite wiederum durch die zu<br />

bearbeitende Anfrage vorgegeben, so daß diese Ansicht nicht benötigt wird.<br />

Ihr unterer Teil (die Browser-Ansicht) funktioniert wie e<strong>in</strong> gewohnter Browser. Im Adreß-<br />

Feld kann e<strong>in</strong>e URL e<strong>in</strong>gegeben und das von ihr adressierte HTML-Dokument durch e<strong>in</strong>en<br />

Klick auf Open URL geladen werden. Ebenso kann über die im angezeigten HTML-<br />

Dokument enthaltenen Hyperl<strong>in</strong>ks navigiert werden. Die Knöpfe Back und Forward<br />

erlauben das Vor- und Zurückspr<strong>in</strong>gen zwischen den bereits früher geladenen HTML-<br />

Dokumenten. Durch e<strong>in</strong>en Klick auf Show Code wird die Browser-Ansicht dazu veranlaßt,<br />

statt dem aktuellen HTML-Dokument dessen Quelltext anzuzeigen, e<strong>in</strong> erneuter Klick auf<br />

diesen Knopf (er trägt nun die Aufschrift Show HTML) schaltet zur Seitenansicht zurück.<br />

Die beiden oberen Teile bieten dem Benutzer zusätzlich Informationen über das aktuell<br />

angezeigte HTML-Dokument. Die Ansicht im l<strong>in</strong>ken oberen Teil (die Baum-Ansicht) zeigt<br />

den zu der korrekten Version des aktuellen Dokumentes äquivalenten HTML-Baum an. Wird<br />

hier e<strong>in</strong> e<strong>in</strong>en Hyperl<strong>in</strong>k repräsentierender Knoten oder e<strong>in</strong>er se<strong>in</strong>er K<strong>in</strong>dknoten markiert, so<br />

kann der Hyperl<strong>in</strong>k durch den Knopf Open L<strong>in</strong>k From Tree verfolgt werden. Die Ansicht im<br />

rechten oberen Teil (die Text-Ansicht) präsentiert dem Benutzer die im jeweiligen Schritt der<br />

<strong>Generierung</strong> relevanten Inhalte des aktuell angezeigten HTML-Dokumentes. Während der<br />

Suche nach der Startseite s<strong>in</strong>d dies die enthaltenen Hyperl<strong>in</strong>ks, die auch über diese Ansicht<br />

verfolgt werden können.<br />

88


Abbildung 7.1: Ansicht zur Suche der Startseite<br />

Abbildung 7.2: Auswahl des Modus für die Suche e<strong>in</strong>es Formulars<br />

89


Ist e<strong>in</strong>e Seite gefunden, von der der Benutzer den <strong>Generierung</strong>sprozeß beg<strong>in</strong>nen möchte, so<br />

kann er diesen durch e<strong>in</strong>en Klick auf den Knopf Create Context For Actual URL starten.<br />

Hierdurch gelangt man <strong>in</strong> die <strong>in</strong> Abbildung 7.2 dargestellte Ansicht. Diese zeigt die gewählte<br />

Startseite noch e<strong>in</strong>mal an, wobei hier ke<strong>in</strong>e <strong>in</strong>teraktiven Funktionen zur Verfügung stehen.<br />

Der Benutzer kann nun wählen, ob er selbst über die Startseite und die dar<strong>in</strong> enthaltenen<br />

Hyperl<strong>in</strong>ks navigieren und das zu verwendende Suchformular bestimmen möchte (Knopf<br />

Manually), oder ob das Werkzeug diesen Schritt automatisch durchführen soll (Knopf<br />

Automatically). Letztere Option ist nur nach dem Laden e<strong>in</strong>er Basisdaten-Datei wählbar.<br />

Dies geschieht durch den Knopf Load Source File und den durch diesen geöffneten Dialog<br />

(siehe Abbildung 7.3).<br />

Abbildung 7.3: Dialog zum Laden der Basisdaten-Datei<br />

Wählt der Benutzer die Option Manually, so gelangt er <strong>in</strong> die <strong>in</strong> Abbildung 7.4 dargestellte<br />

Ansicht. Ihr l<strong>in</strong>ker Teil entspricht von der Funktion her der Ansicht zur Auswahl der<br />

Startseite, wobei die direkte E<strong>in</strong>gabe e<strong>in</strong>er URL allerd<strong>in</strong>gs nicht möglich ist. Da das das<br />

verwendete Suchformular enthaltende HTML-Dokument über Hyperl<strong>in</strong>ks von der Startseite<br />

aus erreichbar se<strong>in</strong> muß, kann nur über diese navigiert werden. Die Text-Ansicht zeigt die<br />

jeweils im aktuell angezeigten Dokument enthaltenen Formulare an.<br />

Über den Knopf Extract Forms können alle im aktuell angezeigten HTML-Dokument<br />

enthaltenen Formulare extrahiert werden. Expand Forms expandiert <strong>in</strong> der Baum-Ansicht<br />

alle diese Formulare, von wo aus sie e<strong>in</strong>zeln durch Markierung des das FORM-Tag<br />

repräsentierenden Knotens oder e<strong>in</strong>er se<strong>in</strong>er direkten oder <strong>in</strong>direkten K<strong>in</strong>dknoten über den<br />

Knopf Extract Selected Form extrahiert werden können.<br />

Der rechte Teil der Ansicht zeigt alle bisher aus den besuchten HTML-Dokumenten<br />

extrahierten Formulare und bietet dem Benutzer so e<strong>in</strong>en Überblick. Über Discart Form kann<br />

e<strong>in</strong> Formular verworfen und so aus der Übersicht entfernt werden. Der Knopf Choose Form<br />

wählt das jeweilige Formular aus, und der Benutzer gelangt <strong>in</strong> die <strong>in</strong> Abbildung 7.5<br />

dargestellte Ansicht.<br />

Wurde die Option Automatically gewählt, so führt das Werkzeug die Suche und Auswahl des<br />

Suchformulars selbständig durch. Der Benutzer gelangt direkt zu der <strong>in</strong> Abbildung 7.5<br />

dargestellten Ansicht, wo ihm das Ergebnis des Schrittes angezeigt wird.<br />

Hier wird das gewählte Formular noch e<strong>in</strong>mal angezeigt, und der Benutzer kann wählen, ob er<br />

es manuell analysieren möchte (Knopf Manually), oder ob das Generator-Werkzeug diesen<br />

Schritt automatisch ausführen soll (Knopf Automatically). Letztere Option steht wiederum<br />

nur dann zur Verfügung, wenn e<strong>in</strong>e Basisdaten-Datei geladen wurde, was auch hier über den<br />

Knopf Load Source File geschehen kann. Über Choose Aga<strong>in</strong> läßt sich die Auswahl des<br />

Suchformulars rückgängig machen, und der Benutzer gelangt wieder <strong>in</strong> die <strong>in</strong> Abbildung 7.2<br />

dargestellte Ansicht.<br />

90


Abbildung 7.4: Ansicht zur Auswahl e<strong>in</strong>es Suchformulars<br />

Abbildung 7.5: Auswahl des Modus für die Analyse des Suchformulars<br />

91


Zudem kann die standardmäßig Vorbelegung der e<strong>in</strong>zelnen Felder des Formulars verändert<br />

werden. Dies ist über das <strong>in</strong> Abbildung 7.6 dargestellte Fenster möglich. Dieses wird über den<br />

Knopf Edit Form erreicht. Se<strong>in</strong> l<strong>in</strong>ker Teil zeigt das Formular <strong>in</strong> der aus e<strong>in</strong>em Browser<br />

gewohnten Form an. Im rechten Teil s<strong>in</strong>d die <strong>in</strong> ihm enthaltenen Checkboxen, Radio-Knöpfe<br />

und Auswahlfelder dargestellt. Sie können bedient werden, und e<strong>in</strong>e gemachte Änderung läßt<br />

sich durch den Knopf Actualize Form <strong>in</strong> das Formular übertragen. Der Knopf Update Form<br />

überträgt sämtliche Änderungen <strong>in</strong> das Formular. Die Rückkehr <strong>in</strong> die Hauptansicht erfolgt<br />

über die Knöpf Close oder Save Changes, wobei ersterer die gemachten Änderungen verwirft<br />

und letzterer sie speichert.<br />

Abbildung 7.6: Fenster zur Veränderung der Vorbelegung des Suchformulars<br />

Abbildung 7.7: Ansicht zur Klassifizierung der Suchfelder <strong>in</strong> Standarde<strong>in</strong>stellung<br />

92


Wählt der Benutzer die manuelle Analyse des Suchformulars, so kann er jedem der dar<strong>in</strong><br />

enthaltenen Text-Felder zunächst das von diesen <strong>in</strong> der Standarde<strong>in</strong>stellung als Kriterium<br />

angewandte Datenelement zuweisen. Dies geschieht <strong>in</strong> der <strong>in</strong> Abbildung 7.7 dargestellten<br />

Ansicht. Deren oberer Teil zeigt wiederum das Formular an, die Zuweisung der<br />

Datenelemente erfolgt über die E<strong>in</strong>gabefelder im unteren. Hier kann der Benutzer das<br />

Datenelement entweder aus e<strong>in</strong>er Auswahl wählen oder es selbst e<strong>in</strong>geben und über den<br />

Knopf Add zur Auswahl h<strong>in</strong>zufügen, wobei es dann automatisch ausgewählt ist. Ist die<br />

Zuweisung der Datenelemente zu den Suchfeldern abgeschlossen, so gelangt der Benutzer<br />

über den Knopf Classification F<strong>in</strong>ished zum nächsten Teilschritt.<br />

Enthält das Formular Auswahl-Felder, so besteht dieser <strong>in</strong> deren Zuweisung zu den<br />

Suchfeldern, ihrer Klassifizierung als Element- oder Verknüpfungs-Auswahl und der<br />

Klassifizierung der jeweils enthaltenen Optionen. Dies geschieht <strong>in</strong> der <strong>in</strong> Abbildung 7.8<br />

dargestellten Ansicht. Der obere Teil zeigt wiederum das Formular an. Im unteren ist für jedes<br />

Auswahl-Feld e<strong>in</strong> Register vorhanden, das mit dessen Name betitelt ist.<br />

Jedes Register zeigt <strong>in</strong> se<strong>in</strong>em oberen Teil das jeweilige Auswahl-Feld an. Hier kann<br />

festgelegt werden, ob es sich um e<strong>in</strong>e Element- oder e<strong>in</strong> Verknüpfungs-Auswahl handelt, oder<br />

um ke<strong>in</strong>es von beidem. Hier kann auch angegeben werden, das Verhalten welcher Suchfeldes<br />

das Auswahl-Feld bee<strong>in</strong>flußt, wobei die e<strong>in</strong>zelnen Suchfelder sowie die zusätzlichen<br />

Optionen Alle und Ke<strong>in</strong>es zur Verfügung stehen. Im unteren Teil s<strong>in</strong>d die <strong>in</strong> dem Auswahl-<br />

Feld enthaltenen Optionen dargestellt, denen der Benutzer e<strong>in</strong>e Bedeutung zuweisen kann.<br />

Diese kann entweder aus e<strong>in</strong>er Auswahl gewählt, oder aber von ihm selbst e<strong>in</strong>geben und über<br />

den Knopf Add zur Auswahl h<strong>in</strong>zufügen werden, wobei sie dann automatisch ausgewählt ist.<br />

Ist e<strong>in</strong>e Basisdaten-Datei geladen, so werden die Bedeutungen der Suchfelder, die<br />

Klassifizierung der Auswahl-Felder, ihre Zuordnung zu den Suchfeldern und die Bedeutung<br />

der <strong>in</strong> ihnen enthaltenen Optionen vorbelegt, sofern die automatische Erkennung erfolgreich<br />

ist. Als unknown e<strong>in</strong>gestufte Suchfelder und Optionen werden am Ende der Klassifizierung<br />

entfernt, da sie ohne Kenntnis ihrer Bedeutung ohne weiteren Nutzen s<strong>in</strong>d.<br />

Abbildung 7.8: Ansicht zur Klassifizierung der Auswahlfelder und ihrer Optionen<br />

93


Abbildung 7.9: Auswahl des Modus für die <strong>Generierung</strong> der Pfade für Suchen mit e<strong>in</strong>em Treffer<br />

Über den Knopf Classification F<strong>in</strong>ished gelangt der Benutzer <strong>in</strong> die <strong>in</strong> Abbildung 7.9<br />

dargestellte Ansicht. Die Entscheidung für die automatische Analyse des Suchformulars führt<br />

ihn direkt dorth<strong>in</strong>.<br />

Abbildung 7.10: Ansicht zu E<strong>in</strong>gabe oder Auswahl der Suchkriterien<br />

94


Diese Ansicht zeigt im oberen Teil das Suchformular, so wie es für die Anwendung zur<br />

Verfügung steht. Der Benutzer kann wählen, ob er die <strong>Generierung</strong> der Pfade zur Extraktion<br />

der Werte von Datenelementen aus dem Ergebnis-Dokument e<strong>in</strong>er Suche mit e<strong>in</strong>em Treffer<br />

und den von dort aus über Hyperl<strong>in</strong>ks erreichbaren HTML-Dokumenten manuell ausführen<br />

möchte (Knopf Manually), oder ob das Generator-Werkzeug diesen Schritt automatisch<br />

durchführen soll (Knopf Automatically). Auch hier steht letztere Option nur dann zur<br />

Verfügung, wenn e<strong>in</strong>e Basisdaten-Datei geladen ist, was auch hier über den Knopf Load<br />

Source File möglich ist. Ist der Benutzer mit dem Ergebnis der Analyse des Suchformulars<br />

nicht zufrieden, so kann er diese erneut durchführen, <strong>in</strong>dem er über den Knopf Change<br />

Search Data zu der <strong>in</strong> Abbildung 7.5 dargestellten Ansicht zurückspr<strong>in</strong>gt.<br />

Wählt der Benutzer die Option manuell, so kann er <strong>in</strong> der <strong>in</strong> Abbildung 7.10 dargestellten<br />

Ansicht die Suchanfrage entweder selbst <strong>in</strong> das Suchformular e<strong>in</strong>geben, oder er kann sich,<br />

sofern e<strong>in</strong>e Basisdaten-Datei geladen ist, für die Verwendung e<strong>in</strong>es <strong>Generierung</strong>s-Beispieles<br />

entscheiden. Die aus dem gewählten Beispiel generierte Suchanfrage wird ihm im Formular<br />

angezeigt. In diesem Fall kann er zudem die automatische Suche nach den Werten von<br />

Datenelementen <strong>in</strong> den e<strong>in</strong>zelnen Informationsschichten aktivieren. Die Suche wird über den<br />

Knopf Perform Search durchgeführt, und der Benutzer gelangt <strong>in</strong> die <strong>in</strong> Abbildung 7.11<br />

dargestellte Ansicht.<br />

Diese Ansicht enthält für jede Informationsschicht e<strong>in</strong> Register. Im oberen Teil e<strong>in</strong>es solchen<br />

wird das HTML-Dokument der jeweiligen Schicht <strong>in</strong> Browser-, Baum- und Text-Ansicht<br />

dargestellt. Der untere enthält die zur <strong>Generierung</strong> von Pfaden benötigten Knöpfe und<br />

E<strong>in</strong>gabefelder sowie e<strong>in</strong>e Liste der bisher erzeugten Pfade.<br />

Die Aktivierung e<strong>in</strong>es Hyperl<strong>in</strong>ks <strong>in</strong> der Browser-Ansicht öffnet e<strong>in</strong>e neue<br />

Informationsschicht mit dem durch diesen adressierten HTML-Dokument. Dies läßt sich auch<br />

durch die Markierung e<strong>in</strong>es e<strong>in</strong>en Hyperl<strong>in</strong>k repräsentierenden Knotens <strong>in</strong> der Baum-Ansicht<br />

und den Klick auf den Knopf Create Layer erreichen. Jeder Informationsschicht bis auf die<br />

des Ergebnis-Dokumentes kann über den Knopf Discart Layer verworfen werden.<br />

Abbildung 7.11: Ansicht zur <strong>Generierung</strong> von Informationsschichten und Pfaden<br />

95


Die <strong>Generierung</strong> der Pfade erfolgt durch die Markierung e<strong>in</strong>es Textstückes <strong>in</strong> der Browser-<br />

oder Text-Ansicht, dessen Extraktion durch den Knopf Extract Data, die Auswahl oder<br />

E<strong>in</strong>gabe des Datenelementes, zu dem der extrahierte Wert gehört, und den anschließenden<br />

Klick auf den Knopf Create Path, durch den der Pfad erzeugt wird, der den extrahierten Wert<br />

im HTML-Dokument der Informationsschicht adressiert. Ist der Wert mehrfach im Dokument<br />

enthalten, so werden mehrere Pfade erzeugt. Die bisher generierten Pfade werden <strong>in</strong> der Liste<br />

oberhalb der Knöpfe und E<strong>in</strong>gabefelder zu ihrer Erzeugung angezeigt und können jeweils<br />

über den Knopf Discart Path verworfen werden.<br />

Über den Knopf Ref<strong>in</strong>e Your Search kann der Benutzer zur E<strong>in</strong>gabe der Suchanfrage<br />

zurückspr<strong>in</strong>gen (Ansicht <strong>in</strong> Abbildung 7.10). Der Schritt wird durch e<strong>in</strong>en Klick auf<br />

Generation F<strong>in</strong>ished abgeschlossen. Anschließend prüft das Generator-Werkzeug, ob <strong>in</strong><br />

e<strong>in</strong>er der Informationsschichten e<strong>in</strong> Pfad existiert, der mehrerer Werte unterschiedlicher<br />

Datenelemente adressiert. Falls nicht, gelangt der Benutzer <strong>in</strong> die <strong>in</strong> Abbildung 7.13<br />

dargestellte Ansicht. Falls aber m<strong>in</strong>destens e<strong>in</strong> solcher Pfad gefunden wird, so wird der<br />

Benutzer <strong>in</strong> der <strong>in</strong> Abbildung 7.12 dargestellten Ansicht ausgefordert, diese Pfade um<br />

reguläre Ausdrücke zu ergänzen, die die Extraktion der Werte der e<strong>in</strong>zelnen Datenelemente<br />

aus den durch die fraglichen Pfade adressierten Gesamtstr<strong>in</strong>gs erlauben.<br />

Der Benutzer kann den jeweils e<strong>in</strong>gegebenen Regulären Ausdruck über den Knopf Test<br />

RegEx testweise auf den Gesamtstr<strong>in</strong>g ausführen und anhand des Ergebnisses feststellen, ob<br />

er das gewünschte Ergebnis liefert, also ob der gewünschte Wert extrahiert wird. Ist e<strong>in</strong>e<br />

Basisdaten-Datei geladen, so werden die E<strong>in</strong>gabefelder mit automatisch generierten<br />

Regulären Ausdrücken vorbelegt. Über den Knopf F<strong>in</strong>ished kann der Benutzer diesen<br />

Teilschritt beenden und gelangt <strong>in</strong> die <strong>in</strong> Abbildung 7.13 dargestellte Ansicht. Wählt er die<br />

automatische <strong>Generierung</strong> der Pfade, gelangt er direkt dorth<strong>in</strong>.<br />

Abbildung 7.12: Ansicht zur Ergänzung der Pfade um Reguläre Ausdrücke<br />

Hier werden die <strong>in</strong> den e<strong>in</strong>zelnen Informationsschichten durch die generierten Pfade<br />

extrahierbaren Datenelemente sowie die Pfade selbst angezeigt. Der Benutzer kann wählen,<br />

ob er die <strong>Generierung</strong> der Pfade zur Extraktion der Werte von Datenelementen aus dem<br />

Ergebnis-Dokument e<strong>in</strong>er Suche mit mehreren Treffern und den von dort aus über Hyperl<strong>in</strong>ks<br />

96


erreichbaren HTML-Dokumenten manuell ausführen möchte (Knopf Manually), oder ob das<br />

Generator-Werkzeug diesen Schritt automatisch durchführen soll (Knopf Automatically).<br />

Auch hier steht letztere Option nur dann zur Verfügung, wenn e<strong>in</strong>e Basisdaten-Datei geladen<br />

ist, was auch hier über den Knopf Load Source File möglich ist.<br />

Abbildung 7.13: Auswahl des Modus für die <strong>Generierung</strong> der Pfade für Suchen mit mehreren<br />

Treffern<br />

Durch den Knopf Change On Result können die generierten Informationsschichten und<br />

Pfade <strong>in</strong>sgesamt verworfen werden, und der Benutzer gelangt zurück zu der <strong>in</strong> Abbildung 7.9<br />

dargestellten Ansicht zur Auswahl des Suchmodus.<br />

Über den Knopf Edit Paths gelangt der Benutzer <strong>in</strong> das <strong>in</strong> Abbildung 7.14 dargestellte<br />

Fenster, wo er die Pfade manuell ändern und anpassen kann.<br />

Abbildung 7.14: Fenster zur manuellen Änderung der Pfade<br />

E<strong>in</strong> angepaßter Pfad kann über den Knopf Test Path testweise angewendet werden, wobei der<br />

Benutzer anhand des extrahierten Wertes se<strong>in</strong>e korrekte Funktion prüfen kann. Dessen<br />

Anzeige erfolgt <strong>in</strong> e<strong>in</strong>em PopUp der <strong>in</strong> Abbildung 7.15 Form. Ist der extrahierte Wert nicht<br />

mehr korrekt, so kann der Pfad über Reset Path auf den Ausgangswert zurückgesetzt werden.<br />

97


Abbildung 7.15: Anzeige des durch e<strong>in</strong>en Pfad extrahierten Textstückes<br />

Abbildung 7.16: Fenster zur Anzeige e<strong>in</strong>er Informationsschicht<br />

Durch e<strong>in</strong>en Klick auf Display Layer kann sich der Benutzer das HTML-Dokument der<br />

jeweiligen Informationsschicht <strong>in</strong> dem <strong>in</strong> Abbildung 7.16 dargestellten Fenster <strong>in</strong> Browser-<br />

und Baum-Ansicht anzeigen lassen. Die Text-Ansicht entfällt hier, da das Fenster lediglich<br />

der Anzeige dient und daher ke<strong>in</strong>e für Interaktionen relevanten Inhalte besitzt.<br />

Die Anpassung der Pfade läßt sich durch die Knöpfe Close oder Save Changes beenden.<br />

Beide schießen das Fenster, ersterer führt zur Verwerfung der Änderungen, zweiterer<br />

speichert sie.<br />

Abbildung 7.17: Ansicht zu E<strong>in</strong>gabe oder Auswahl der Suchkriterien<br />

98


Wählt der Benutzer Manually, so kann er <strong>in</strong> der <strong>in</strong> Abbildung 7.17 dargestellten Ansicht die<br />

Suchanfrage entweder selbst <strong>in</strong> das Suchformular e<strong>in</strong>geben, oder er kann sich, sofern e<strong>in</strong>e<br />

Basisdaten-Datei geladen ist, für die Verwendung e<strong>in</strong>es <strong>Generierung</strong>s-Beispieles entscheiden.<br />

Die aus dem gewählten Beispiel generierte Suchanfrage wird ihm im Formular angezeigt. In<br />

diesem Fall kann er zudem die automatische Suche nach den Werten von Datenelementen <strong>in</strong><br />

den e<strong>in</strong>zelnen Informationsschichten aktivieren. Die Suche wird über den Knopf Perform<br />

Search durchgeführt, und der Benutzer gelangt <strong>in</strong> die <strong>in</strong> Abbildung 7.18 dargestellte Ansicht.<br />

Diese Ansicht enthält für jede Informationsschicht e<strong>in</strong> Register. Im oberen Teil e<strong>in</strong>es solchen<br />

wird das HTML-Dokument der jeweiligen Schicht <strong>in</strong> Browser-, Baum- und Text-Ansicht<br />

dargestellt. Der untere enthält die zur <strong>Generierung</strong> von Pfaden benötigten Knöpfe und<br />

E<strong>in</strong>gabefelder sowie e<strong>in</strong>e Liste der bisher erzeugten Pfade.<br />

Die Aktivierung e<strong>in</strong>es Hyperl<strong>in</strong>ks <strong>in</strong> der Browser-Ansicht öffnet e<strong>in</strong>e neue<br />

Informationsschicht mit dem durch diesen adressierten HTML-Dokument. Dies läßt sich auch<br />

durch die Markierung e<strong>in</strong>es e<strong>in</strong>en Hyperl<strong>in</strong>k repräsentierenden Knotens <strong>in</strong> der Baum-Ansicht<br />

und den Klick auf den Knopf Create Layer erreichen. Jeder Informationsschicht bis auf die<br />

des Ergebnis-Dokumentes kann über den Knopf Discart Layer verworfen werden.<br />

Die <strong>Generierung</strong> der Pfade erfolgt durch die Markierung e<strong>in</strong>es Textstückes <strong>in</strong> der Browser-<br />

oder Text-Ansicht, dessen Extraktion durch den Knopf Extract Data, die Auswahl oder<br />

E<strong>in</strong>gabe des Datenelementes, zu dem der extrahierte Wert gehört, und den anschließenden<br />

Klick auf den Knopf Create Path, durch den der Pfad erzeugt wird, der den extrahierten Wert<br />

im HTML-Dokument der Informationsschicht adressiert. Ist der Wert mehrfach im Dokument<br />

enthalten, so werden mehrere Pfade erzeugt. Die bisher generierten Pfade werden <strong>in</strong> der Liste<br />

oberhalb der Knöpfe und E<strong>in</strong>gabefelder zu ihrer Erzeugung angezeigt und können jeweils<br />

über den Knopf Discart Path verworfen werden.<br />

Das Register der Informationsschicht des Ergebnis-Dokumentes enthält zusätzlich Felder zur<br />

E<strong>in</strong>gabe der Anzahl der <strong>in</strong> e<strong>in</strong>em Teil der Ergebnisliste angezeigten Treffer sowie ihren<br />

Beg<strong>in</strong>n und Abstand im zu diesem äquivalenten Baum. Zusätzlich kann der Pfad zum den<br />

Hyperl<strong>in</strong>k zum nächsten Teil der Ergebnisliste repräsentierenden Knoten angegeben werden.<br />

Dies ist durch die Markierung e<strong>in</strong>es e<strong>in</strong>en Hyperl<strong>in</strong>k repräsentierenden Knotens <strong>in</strong> der Baum-<br />

Ansicht und den anschließenden Klick auf Take Marked Node As L<strong>in</strong>k To Next List<br />

möglich, oder durch die Verfolgung e<strong>in</strong>es Hyperl<strong>in</strong>ks <strong>in</strong> der Browser-Ansicht und e<strong>in</strong>en Klick<br />

auf Is Next List im Register der sich daraufh<strong>in</strong> öffnenden Informationsschicht.<br />

F<strong>in</strong>det der Benutzer e<strong>in</strong>e Informationsschicht mit Detail-Informationen zu e<strong>in</strong>em der Treffer<br />

der Suche, die dem Ergebnis-Dokument der Suche mit e<strong>in</strong>em Treffer gleicht, so kann er die<br />

erneute <strong>Generierung</strong> der Pfade umgehen, <strong>in</strong>dem er über den Knopf Reuse Layers die dort<br />

erzeugten Pfade wiederverwendet.<br />

Über den Knopf Ref<strong>in</strong>e Your Search kann der Benutzer zur E<strong>in</strong>gabe der Suchanfrage<br />

zurückspr<strong>in</strong>gen (Ansicht <strong>in</strong> Abbildung 7.17). Der Schritt wird durch e<strong>in</strong>en Klick auf<br />

Generation F<strong>in</strong>ished abgeschlossen. Anschließend prüft das Generator-Werkzeug, ob <strong>in</strong><br />

e<strong>in</strong>er der Informationsschichten e<strong>in</strong> Pfad existiert, der mehrere Werte unterschiedlicher<br />

Datenelemente adressiert. Falls nicht, gelangt der Benutzer <strong>in</strong> die <strong>in</strong> Abbildung 7.13<br />

dargestellte Ansicht. Falls aber m<strong>in</strong>destens e<strong>in</strong> solcher Pfad gefunden wird, so wird der<br />

Benutzer <strong>in</strong> der <strong>in</strong> Abbildung 7.12 dargestellten Ansicht ausgefordert, diese Pfade um<br />

Reguläre Ausdrücke zu ergänzen, die die Extraktion der Werte der e<strong>in</strong>zelnen Datenelemente<br />

aus den durch die fraglichen Pfade adressierten Gesamtstr<strong>in</strong>gs erlauben.<br />

Der Benutzer kann den jeweils e<strong>in</strong>gegebenen Regulären Ausdruck über den Knopf Test<br />

RegEx testweise auf den Gesamtstr<strong>in</strong>g ausführen und anhand des Ergebnisses feststellen, ob<br />

er das gewünschte Ergebnis liefert, also ob der gewünschte Wert extrahiert wird. Die Anzeige<br />

des extrahierten Teilstr<strong>in</strong>gs erfolgt <strong>in</strong> e<strong>in</strong>em PopUp der <strong>in</strong> Abbildung 7.20 dargestellten Form.<br />

Ist e<strong>in</strong>e Basisdaten-Datei geladen, so werden die E<strong>in</strong>gabefelder mit automatisch generierten<br />

Regulären Ausdrücken vorbelegt. Über den Knopf F<strong>in</strong>ished kann der Benutzer diesen<br />

99


Teilschritt beenden und gelangt <strong>in</strong> die <strong>in</strong> Abbildung 7.21 dargestellte Ansicht. Wählt er die<br />

automatische <strong>Generierung</strong> der Pfade, gelangt er direkt dorth<strong>in</strong>.<br />

Abbildung 7.18: Ansicht zur <strong>Generierung</strong> von Informationsschichten und Pfaden<br />

Abbildung 7.19: Ansicht zur Ergänzung der Pfade um Reguläre Ausdrücke<br />

Die <strong>in</strong> Abbildung 7.21 dargestellte Ansicht zeigt dem Benutzer die im letzten Schritt<br />

generierten Informationsschichten und die aus diesen durch die erzeugten Pfade<br />

extrahierbaren Datenelemente sowie die Pfade selbst an.<br />

Durch den Knopf Change List Result können die generierten Informationsschichten und<br />

Pfade <strong>in</strong>sgesamt verworfen werden, und der Benutzer gelangt zurück zu der <strong>in</strong> Abbildung<br />

7.13 dargestellten Ansicht zur Auswahl des <strong>Generierung</strong>s-Modus.<br />

100


Abbildung 7.20: Anzeige des durch e<strong>in</strong>e Regulären Ausdruck aus e<strong>in</strong>em Gesamtstr<strong>in</strong>g<br />

extrahierten Teilstr<strong>in</strong>gs<br />

Über den Knopf Edit Paths gelangt der Benutzer <strong>in</strong> das <strong>in</strong> Abbildung 7.22 dargestellte<br />

Fenster, wo er die Pfade manuell ändern und anpassen kann. E<strong>in</strong> angepaßter Pfad kann über<br />

den Knopf Test Path testweise angewendet werden, wobei der Benutzer anhand des<br />

extrahierten Wertes se<strong>in</strong>e korrekte Funktion prüfen kann. Ist der extrahierte Wert nicht mehr<br />

korrekt, so kann der Pfad über Reset Path auf den Ausgangswert zurückgesetzt werden.<br />

Abbildung 7.21: Ansicht am Ende des <strong>Generierung</strong>sablaufes<br />

Durch e<strong>in</strong>en Klick auf Display Layer kann sich der Benutzer das HTML-Dokument der<br />

jeweiligen Informationsschicht <strong>in</strong> e<strong>in</strong>em weiteren Fenster <strong>in</strong> Browser- und Baum-Ansicht<br />

anzeigen lassen. Die Text-Ansicht entfällt hier, da das Fenster lediglich der Anzeige dient und<br />

daher ke<strong>in</strong>e für Interaktionen relevanten Inhalte besitzt.<br />

101


Die Anpassung der Pfade läßt sich durch die Knöpfe Close oder Save Changes beenden.<br />

Beide schießen das Fenster, ersterer führt zur Verwerfung der Änderungen, zweiterer<br />

speichert sie.<br />

Abbildung 7.22: Fenster zur manuellen Änderung der Pfade<br />

Der Knopf Edit Context öffnet nach e<strong>in</strong>er Sicherheitsabfrage e<strong>in</strong> Fenster, <strong>in</strong> dem die<br />

generierte Quellenbeschreibung direkt manuell verändert werden kann. Dies ist <strong>in</strong> Abbildung<br />

7.23 dargestellt.<br />

Abbildung 7.23: Fenster zur manuellen Änderung der Quellenbeschreibung<br />

102


Über den Knopf Save Context gelangt der Benutzer <strong>in</strong> den <strong>in</strong> Abbildung 7.24 dargestellten<br />

Dialog zum Speichern der generierten Quellenbeschreibung, über Close Context kann er sie<br />

<strong>in</strong>sgesamt verwerfen.<br />

Abbildung 7.24: Dialog zum Speichern e<strong>in</strong>er generierten Quellenbeschreibung<br />

Über den Knopf Test Context kann der Benutzer das <strong>in</strong> Abbildung 7.25 dargestellte Fenster<br />

zum Test der soeben erstellten Quellenbeschreibung öffnen. Die im oberen Bereich<br />

e<strong>in</strong>gegebenen Suchanfragen werden ausgewertet und die Ergebnisse im unteren Bereich <strong>in</strong><br />

tabellarischer Form präsentiert.<br />

Abbildung 7.25: Fenster zum Teste<strong>in</strong>satz der erzeugten Quellenbeschreibung<br />

103


7.2 Das Basisdaten-Werkzeug<br />

Das Basisdaten-Werkzeug stellt e<strong>in</strong>en Editor für die Beispiel- und Heuristik-Daten dar, die für<br />

die vollautomatische <strong>Generierung</strong> von Quellenbeschreibungen benötigt werden. Insbesondere<br />

wird durch den E<strong>in</strong>satz e<strong>in</strong>es Editors sichergestellt, daß diese Daten korrekt formatiert und<br />

damit für den Generator lesbar s<strong>in</strong>d. Gleichzeitig muß der Benutzer sich ke<strong>in</strong>erlei Gedanken<br />

mehr um diese Formatierung machen. In diesem Abschnitt wird zunächst die Architektur des<br />

Editors und anschließend se<strong>in</strong>e Funktion vorgestellt.<br />

7.2.1 Das Paket generatorAgent.dataEditor<br />

Das Paket generatorAgent.dataEditor be<strong>in</strong>haltet die vom Editor benötigten Klassen.<br />

Diese umfassen sowohl die Komponenten zum E<strong>in</strong>lesen und Speichern von Basisdaten-<br />

Dateien als auch die zur Darstellung, E<strong>in</strong>gabe und Änderung der Daten. Verwendet werden<br />

Klassen aus den Paketen generatorAgent, generatorAgent.util und<br />

generatorAgent.tree.<br />

7.2.1.1 Die Klasse GenerateDataEditor<br />

Die Klasse GenerateDataEditor bildet die Basis des Editors. Sie enthält die Funktionen zum<br />

Laden und Speichern von Basisdaten-Dateien und hält die Daten der gerade geöffneten.<br />

7.2.1.2 Die Klasse EditorMa<strong>in</strong><br />

Die Klasse EditorMa<strong>in</strong> stellt den Rahmen der Benutzeroberfläche des Editors dar. Sie stellt<br />

Menus und weitere Grundfunktionen wie e<strong>in</strong>e Statusleiste zur Verfügung.<br />

7.2.1.3 Die Klasse SrExampleEditor<br />

Die Klasse SrExampleEditor stellt e<strong>in</strong>e Maske für die E<strong>in</strong>gabe und Änderung e<strong>in</strong>es Satzes<br />

von Beispiel-Werten für die <strong>Generierung</strong> der Pfade im Ergebnis-Dokument von Suchanfragen<br />

mit e<strong>in</strong>em Treffer zur Verfügung.<br />

7.2.1.4 Die Klasse LrExampleEditor<br />

Die Klasse LrExampleEditor stellt e<strong>in</strong>e Maske für die E<strong>in</strong>gabe und Änderung e<strong>in</strong>es<br />

Beispiel-Suchwertes sowie e<strong>in</strong>er Gruppe von Sätzen von Beispiel-Werten (wahrsche<strong>in</strong>liche<br />

Treffer) für die <strong>Generierung</strong> der Pfade im Ergebnis-Dokument von Suchanfragen mit<br />

mehreren Treffern zur Verfügung.<br />

7.2.1.5 Die Klasse ElementListEditPanel<br />

Die Klasse ElementListEditPanel stellt e<strong>in</strong>e Maske zur Verwaltung e<strong>in</strong>er Gruppe von<br />

Werten zur Verfügung.<br />

7.2.1.6 Die Klasse ElementValueEditPanel<br />

Die Klasse ElementValueEditPanel stellt e<strong>in</strong>e Maske zur Verwaltung e<strong>in</strong>er Gruppe von<br />

Datenelementen mit jeweils mehreren zugeordneten Werten zur Verfügung.<br />

7.2.1.7 Die Klasse ElementValueList<br />

Die Klasse ElementValueList realisiert e<strong>in</strong>e Liste von Werten. Diese können <strong>in</strong>nerhalb der<br />

Liste verändert und gelöscht werden. Zudem ist die Reihenfolge der Werte änderbar, <strong>in</strong>dem<br />

e<strong>in</strong>zelne nach oben oder unten verschoben werden können.<br />

7.2.1.8 Die Klasse ElementValueListL<strong>in</strong>e<br />

Die Instanzen der Klasse ElementValueListL<strong>in</strong>e bilden die e<strong>in</strong>zelnen Zeilen der Liste <strong>in</strong><br />

e<strong>in</strong>er Instanz von ElementValueList.<br />

104


7.2.1.9 Die Klasse StandardMetaDataL<strong>in</strong>e<br />

Die Klasse StandardMetaDataL<strong>in</strong>e stellt e<strong>in</strong>e Komponente zur abgesicherten Änderung<br />

e<strong>in</strong>es Wertes dar. Die Absicherung erfolgt über die Möglichkeit, e<strong>in</strong>e fehlerhafte Änderung<br />

rückgängig zu machen.<br />

7.2.1.10 Die Schnittstelle StatusBarHost<br />

Die Schnittstelle StatusBarHost garantiert e<strong>in</strong>er Komponente den Zugriff auf die Statusleiste.<br />

7.2.2 Das Werkzeug<br />

Das Basisdaten-Werkzeug dient der E<strong>in</strong>gabe und Änderung der für die Automatismen der<br />

<strong>Generierung</strong> notwendigen Beispiel- und Heuristik-Daten (siehe Anhang B). In diesem<br />

Abschnitt werden die e<strong>in</strong>zelnen Ansichten des Werkzeuges sowie die Bedeutung der dar<strong>in</strong><br />

änderbaren Daten erklärt.<br />

Abbildung 7.26: Ansicht zur E<strong>in</strong>gabe und Änderung e<strong>in</strong>es <strong>Generierung</strong>s-Beispieles für Suchen<br />

mit e<strong>in</strong>em Treffer<br />

Die <strong>in</strong> Abbildung 7.26 dargestellte Ansicht dient der E<strong>in</strong>gabe und Änderung von Beispielen<br />

zur <strong>Generierung</strong> der Pfade zur Extraktion der Werte von Datenelementen aus dem Ergebnis-<br />

Dokument e<strong>in</strong>er Suche mit e<strong>in</strong>em Treffer und den von dort aus über Hyperl<strong>in</strong>ks erreichbaren<br />

HTML-Dokumenten. Jedes Beispiel wird <strong>in</strong> e<strong>in</strong>em Register angezeigt und kann über Delete<br />

Example gelöscht werden. Der Knopf Add New Example fügt e<strong>in</strong> neues leeres Register zur<br />

E<strong>in</strong>gabe e<strong>in</strong>es neuen Beispiels h<strong>in</strong>zu, Delete All Examples löscht alle Beispiele.<br />

Abbildung 7.27: PopUp zur Änderung bestehender Werte<br />

105


Die E<strong>in</strong>gabe e<strong>in</strong>es neuen Datenelementes erfolgt über das Feld New Data Element. Über das<br />

Feld New Element Value können zu dem gerade ausgewählten Datenelement Werte<br />

h<strong>in</strong>zugefügt werden. In der Liste darunter werden die vorhandenen Werte angezeigt und<br />

können gelöscht und verändert werden. Die Änderung erfolgt über e<strong>in</strong> PopUp der <strong>in</strong><br />

Abbildung 7.27 dargestellten Form. Zusätzlich kann die Reihenfolge der Werte geändert<br />

werden. Dies ist notwendig, da immer der erste Wert bei der <strong>Generierung</strong> von Suchanfragen<br />

benutzt wird. Das Vorhandense<strong>in</strong> mehrerer Werte wird dadurch erforderlich, daß ihre<br />

Darstellung auf der Internetseite e<strong>in</strong>es untersuchten Anbieters <strong>in</strong> mehreren Formen erfolgen<br />

kann (beispielsweise kann der Name als Vorname Nachname oder Nachname, Vorname<br />

angezeigt werden).<br />

Abbildung 7.28: Ansicht zur E<strong>in</strong>gabe und Änderung e<strong>in</strong>es <strong>Generierung</strong>s-Beispieles für Suchen<br />

mit mehreren Treffern<br />

Die <strong>in</strong> Abbildung 7.28 dargestellte Ansicht dient der E<strong>in</strong>gabe und Änderung von Beispielen<br />

zur <strong>Generierung</strong> der Pfade zur Extraktion der Werte von Datenelementen aus dem Ergebnis-<br />

Dokument e<strong>in</strong>er Suche mit mehreren Treffern und den von dort aus über Hyperl<strong>in</strong>ks<br />

erreichbaren HTML-Dokumenten. Jedes Beispiel wird <strong>in</strong> e<strong>in</strong>em Register angezeigt und kann<br />

über Delete Example gelöscht werden. Der Knopf Add New Example fügt e<strong>in</strong> neues leeres<br />

Register zur E<strong>in</strong>gabe e<strong>in</strong>es neuen Beispiels h<strong>in</strong>zu, Delete All Examples löscht alle Beispiele.<br />

Diese Beispiele bestehen aus mehreren Teil-Beispielen, die je e<strong>in</strong>en wahrsche<strong>in</strong>lichen Treffer<br />

e<strong>in</strong>er Suche nach dem unter Generate Search Value angegebenen Suchbegriff darstellen. Die<br />

Register zur Anzeige und Bearbeitung der e<strong>in</strong>zelnen Teil-Beispiele gleichen denen für<br />

E<strong>in</strong>gabe und Änderung von Beispielen zur <strong>Generierung</strong> der Pfade zur Extraktion der Werte<br />

von Datenelementen aus dem Ergebnis-Dokument e<strong>in</strong>er Suche mit e<strong>in</strong>em Treffer und den von<br />

dort aus über Hyperl<strong>in</strong>ks erreichbaren HTML-Dokumenten: Die E<strong>in</strong>gabe e<strong>in</strong>es neuen<br />

Datenelementes erfolgt über das Feld New Data Element. Über das Feld New Element Value<br />

können zu dem gerade ausgewählten Datenelement Werte h<strong>in</strong>zugefügt werden. In der Liste<br />

darunter werden die vorhandenen Werte angezeigt und können gelöscht und verändert<br />

werden.<br />

106


Abbildung 7.29: Ansicht zur E<strong>in</strong>gabe der für dieses <strong>Generierung</strong>s-Beispiel zu verwendenden<br />

Suchfelder<br />

Zusätzlich muß bei Beispielen zur <strong>Generierung</strong> der Pfade zur Extraktion der Werte von<br />

Datenelementen aus dem Ergebnis-Dokument e<strong>in</strong>er Suche mit mehreren Treffern und den von<br />

dort aus über Hyperl<strong>in</strong>ks erreichbaren HTML-Dokumenten festgelegt werden, auf welche<br />

Datenelemente der Beispiel-Suchbegriff als Kriterium angewendet werden kann. Dies erfolgt<br />

<strong>in</strong> dem eigenen Register Search Fields. Die E<strong>in</strong>gabe e<strong>in</strong>es neuen Datenelementes erfolgt über<br />

das Feld New Search Field. In der Liste darunter werden die vorhandenen Datenelemente<br />

angezeigt und können gelöscht und verändert werden. Die Änderung erfolgt über e<strong>in</strong> PopUp.<br />

Zusätzlich kann die Reihenfolge der Datenelemente geändert werden.<br />

Abbildung 7.30: Ansicht zur Änderung bestimmter Basiswerte<br />

Der Bereich zur E<strong>in</strong>gabe und Änderung der Metadaten ist <strong>in</strong> Abbildung 7.29 dargestellt und<br />

hat mehrere Teile:<br />

Unter Basic Data können E<strong>in</strong>zelwerte wie der Suchbegriff für Ke<strong>in</strong>-Ergebnis-Suchen und der<br />

Name von Freitext-Felder, der als Name e<strong>in</strong>es Datenelementes <strong>in</strong> e<strong>in</strong>em <strong>Generierung</strong>s-<br />

107


Beispiel nicht auftritt, e<strong>in</strong>gegeben und geändert werde. H<strong>in</strong>zu kommen die Nested Elements,<br />

wo Datenelemente angegeben werden können, deren Werte mit großer Wahrsche<strong>in</strong>lichkeit <strong>in</strong><br />

den Werten anderer Datenelemente enthalten se<strong>in</strong> können, und Element Selectivity zur<br />

E<strong>in</strong>gabe der Selektivität der e<strong>in</strong>zelnen Datenelemente sowie No Result Fields, wo festgelegt<br />

wird, auf welche Datenelemente der angegeben Wert bei der Ke<strong>in</strong>-Ergebnis-Suche als<br />

Kriterium angewendet werden soll (siehe Abbildung 7.30).<br />

Abbildung 7.31: Ansicht zur E<strong>in</strong>gabe der für die Ke<strong>in</strong>-Ergebnis-Suche zu verwendenden<br />

Suchfelder<br />

Unter Form Heuristics werden die Heuristikdaten zur Erkennung der Optionen <strong>in</strong> Auswahl-<br />

Feldern von Suchformularen angezeigt und können geändert werden. Sie s<strong>in</strong>d unterteilt <strong>in</strong> die<br />

für Element- (Register Option Field Heuristics, siehe Abbildung 7.32) und die für<br />

Verknüpfungs-Auswahlen (Register Boolean Field Heuristics). Es können für jede Bedeutung<br />

mehrere mögliche Werte der Option angegeben werden, etwa mehrere Sprachen.<br />

Abbildung 7.32: Ansicht zur E<strong>in</strong>gabe von Heuristikwerten zur Erkennung der Bedeutung<br />

e<strong>in</strong>zelner Optionen <strong>in</strong> Auswahlfeldern<br />

108


Unter RegEx Heuristics schließlich erfolgt die E<strong>in</strong>gabe und Änderung der Heuristikdaten für<br />

die <strong>Generierung</strong> Regulärer Ausdrücke. Diese gliedern sich <strong>in</strong> e<strong>in</strong>e Liste der Datenelemente,<br />

deren Werte e<strong>in</strong>e def<strong>in</strong>ierte Länge haben (Register Fix Length Data Elements), z.B. die ISBN-<br />

Nummer, e<strong>in</strong>e Liste von mit großer Wahrsche<strong>in</strong>lichkeit <strong>in</strong>nerhalb der Werte von<br />

Datenelementen auftretenden Interpunktionszeichen und B<strong>in</strong>dewörtern (Register Data Value<br />

Interpunction, siehe Abbildung 7.33) sowie Listen von Datenelementen, die immer von<br />

bestimmten Zeichenfolgen angeführt oder abgeschlossen werden, und diesen Zeichenfolgen<br />

selbst (Register Left Bordered Data Elements und Right Bordered Data Elements).<br />

Abbildung 7.33: Ansicht zur E<strong>in</strong>gabe von Zeichen und B<strong>in</strong>dewörtern, die mit hoher<br />

Wahrsche<strong>in</strong>lichkeit <strong>in</strong>nerhalb der Werte von Datenelementen auftreten<br />

Über das Menu File lassen sich Beispieldaten-Dateien zum Ändern laden und anschließend<br />

wieder speichern sowie neue eröffnen.<br />

109


110


8. Evaluierung<br />

Durch se<strong>in</strong>e Fähigkeit zur Arbeit mit heutzutage im Internet weit verbreiteten Techniken wie<br />

Frames, Page-Forwards und Sessions kann der im Rahmen dieser Arbeit implementierte<br />

<strong>Wandler</strong>-Generator zur Analyse der Internetseiten vieler Onl<strong>in</strong>e-Anbieter von Literatur<br />

genutzt werden.<br />

Die Grenzen der Automatik zeigen sich vor allem beim Auff<strong>in</strong>den e<strong>in</strong>es geeigneten<br />

Suchformulars, da e<strong>in</strong>e Breitensuche über Hyperl<strong>in</strong>ks – ausgehend von der Startseite – schnell<br />

zu e<strong>in</strong>er schwer überschaubar großen Anzahl von HTML-Dokumenten und Formularen führt.<br />

Gerade bei kommerziellen Anbietern kommen hierbei durch die <strong>in</strong> der Regel große Anzahl<br />

von Hyperl<strong>in</strong>ks pro HTML-Dokument (amazon.de: > 50) selbst bei Elim<strong>in</strong>ierung doppelt<br />

gefundener URLs Probleme auf.<br />

E<strong>in</strong> weiteres Manko an Flexibilität gegenüber der durch das Werkzeug gestützten<br />

<strong>Generierung</strong> stellt die Modifikation des gewählten Suchformulars dar. Während die<br />

Automatik als allgeme<strong>in</strong>e Auswahl klassifizierte Auswahlfelder immer <strong>in</strong> der vorgegebenen<br />

Standarde<strong>in</strong>stellung beläßt, kann bei Verwendung des Werkzeuges die Funktion des<br />

Formulars durch Änderung der vom Anfrage-Generator nicht genutzten E<strong>in</strong>gabefelder<br />

(allgeme<strong>in</strong>e Auswahlen, Checkboxen etc) stark bee<strong>in</strong>flußt werden. So lassen sich über das<br />

erweiterte Suchformular der Universitätsbibliothek Karlsruhe beispielsweise durch<br />

Veränderung der Katalog-Auswahl über e<strong>in</strong> Duzend verschiedene Anbieter von Literatur<br />

anb<strong>in</strong>den. Diese Möglichkeit bleibt der Automatik verschlossen, da die Optionen allgeme<strong>in</strong>er<br />

Auswahlen bei weitem zu vielfältig s<strong>in</strong>d, um durch Heuristiken ergründbar zu se<strong>in</strong>.<br />

Auf der anderen Seite stellt die Automatik <strong>in</strong>nerhalb des <strong>Generierung</strong>s-Werkzeuges e<strong>in</strong>e<br />

große Erleichterung für den Benutzer dar. Gerade bei der Klassifizierung von<br />

Auswahlfeldern, ihrer Zuordnung zu den Suchfeldern und der Klassifizierung der <strong>in</strong> ihnen<br />

enthaltenen Optionen erweist sie sich als sehr hilfreich und zuverlässig.<br />

Bei der <strong>Generierung</strong> der Pfade und regulären Ausdrücke zur Extraktion der Daten erfüllt die<br />

Automatik ebenso zuverlässig ihren Dienst. Allerd<strong>in</strong>gs ist sie gerade <strong>in</strong> diesen beiden<br />

Schritten der <strong>Generierung</strong> <strong>in</strong> hohem Maß von der Qualität der verfügbaren Basisdaten<br />

abhängig. Ist ke<strong>in</strong>es der bekannten Suchbeispiele im Katalog des gerade untersuchten<br />

Anbieters vorhanden, so kann die <strong>Generierung</strong> der Pfade nicht erfolgen, da ke<strong>in</strong> Ergebnis-<br />

Dokument mit enthaltenen bekannten Werten verfügbar ist.<br />

E<strong>in</strong>e e<strong>in</strong>gehende Evaluierung wurde durch die Anb<strong>in</strong>dung zahlreicher Anbieter an das<br />

UniCats-i-System durchgeführt, die Ergebnisse s<strong>in</strong>d <strong>in</strong> [Ste<strong>in</strong>hart 2004] nachzulesen.<br />

111


112


9. Zusammenfassung und Ausblick<br />

In diesem abschließenden Kapitel werden die Ergebnisse dieser Arbeit noch e<strong>in</strong>mal<br />

zusammengefaßt. Anschließend wird e<strong>in</strong> Ausblick auf Möglichkeiten zum weiteren E<strong>in</strong>satz<br />

der implementierten Komponenten und zu ihrer Erweiterung gegeben.<br />

9.1 Zusammenfassung<br />

Das Hauptziel dieser Arbeit war es, e<strong>in</strong>en <strong>Wandler</strong>-Generator zu realisieren, der <strong>in</strong> der Lage<br />

ist, auf e<strong>in</strong>fache Art und Weise Quellenbeschreibungen zu generieren und umzusetzen, um<br />

somit digitale Informationsquellen <strong>in</strong> das UniCats-i-System e<strong>in</strong>zub<strong>in</strong>den.<br />

Dabei sollte zum e<strong>in</strong>en e<strong>in</strong>e vollautomatische <strong>Generierung</strong> realisiert werden, die, durchgeführt<br />

von e<strong>in</strong>em Generatoragenten, das System bei Veränderungen an den Quellen von<br />

adm<strong>in</strong>istrativen E<strong>in</strong>griffen unabhängig macht. Zum anderen sollte e<strong>in</strong> Werkzeug geschaffen<br />

werden, das e<strong>in</strong>e <strong>Generierung</strong> von Quellenbeschreibungen durch e<strong>in</strong>en Benutzer ermöglicht,<br />

wobei dieser <strong>in</strong> e<strong>in</strong>em möglichst hohen Grad von automatischen Verfahren unterstützt wird<br />

und im Idealfall nur e<strong>in</strong>e Kontrollfunktion ausübt. Dies konnte durch die Umsetzung und<br />

Automatisierung des Ansatzes Generation by Example erreicht werden, bei dem der Benutzer<br />

lediglich e<strong>in</strong>e ihm vertraute Beispielrecherche auf der Informationsquelle durchführt bzw.<br />

e<strong>in</strong>e solche von der Automatik auf Basis von Beispieldaten durchführen läßt. Der <strong>Wandler</strong>-<br />

Generator erzeugt aus den dabei gewonnenen Informationen die vollständige<br />

Quellenbeschreibung. Zusätzlich wurde e<strong>in</strong>e <strong>Wandler</strong>-Komponente realisiert, die die<br />

Quellenbeschreibungen zur Extraktion von Informationen aus der jeweils beschriebenen<br />

Informationsquelle nutzt und perfekt auf den <strong>Wandler</strong>-Generator abgestimmt ist.<br />

Die zweite wichtige Aufgabe war die Entwicklung regulärer Ausdrücke, die e<strong>in</strong>e genaue<br />

Heraustrennung e<strong>in</strong>zelner Informationen aus e<strong>in</strong>em Gesamtstr<strong>in</strong>g ermöglicht, um e<strong>in</strong>zelne<br />

Datenelemente punktgenau aus der Informationsquelle extrahieren zu können. Zu diesem<br />

Zweck wurde e<strong>in</strong>e reguläre Sprache entwickelt, deren Ausdrücke <strong>in</strong> die pfadbasierten<br />

Extraktions<strong>in</strong>formationen der Quellenbeschreibung <strong>in</strong>tegriert s<strong>in</strong>d. Der Generator für diese<br />

Ausdrücke ist <strong>in</strong> die Automatismen des <strong>Wandler</strong>-Generators e<strong>in</strong>geschlossen. Die <strong>Wandler</strong>-<br />

Komponente enthält e<strong>in</strong>en Interpreter, der die Ausdrücke zur Extraktion von Datenelementen<br />

aus Gesamtstr<strong>in</strong>gs e<strong>in</strong>setzt.<br />

Weiterh<strong>in</strong> sollte der <strong>Wandler</strong>generator so realisiert werden, daß zur Bedienung des Generators<br />

wenig oder ke<strong>in</strong> Expertenwissen vorausgesetzt werden muß. Dies konnte durch möglichst<br />

e<strong>in</strong>fache Sichten auf die komplexen Zusammenhänge des <strong>Wandler</strong>umfelds erreicht werden,<br />

wobei sich an manchen Stellen der Blick auf etwas komplexere Daten nicht vermeiden ließ.<br />

Die Bedienung sollte zudem möglichst übersichtlich gestaltet werden, um so e<strong>in</strong>e lange<br />

E<strong>in</strong>arbeitungszeit für den Benutzer zu vermeiden. Dieses Ziel konnte durch die Umsetzung<br />

des <strong>Wandler</strong>-Generators <strong>in</strong> Form e<strong>in</strong>es Wizzards erreicht werden, der den Benutzer Schritt für<br />

Schritt durch den <strong>Generierung</strong>sprozesses leitet und jeweils nur die im jeweiligen Schritt<br />

gerade relevanten Informationen und Ansichten anzeigt.<br />

Die <strong>Wandler</strong>-Komponente wird durch e<strong>in</strong>e Quellenbeschreibung konfiguriert und somit <strong>in</strong> die<br />

Lage versetzt, Suchanfragen an den beschriebenen Anbieter zu stellen und die Ergebnisse zu<br />

Extrahieren. Hierbei konnte durch den E<strong>in</strong>satz von Parallelität e<strong>in</strong>e hohe Geschw<strong>in</strong>digkeit<br />

erreicht werden.<br />

Da <strong>Wandler</strong>-Generator und <strong>Wandler</strong>-Komponente plattformunabhängig betrieben werden<br />

sollen, wurden sie vollständig <strong>in</strong> der Programmiersprache JAVA entwickelt; die<br />

Quellenbeschreibung basiert auf XML. Somit die Plattformunabhängigkeit sichergestellt.<br />

113


9.2 Ausblick<br />

Der hier vorgestellte <strong>Wandler</strong>-Generator erlaubt – <strong>in</strong> Verb<strong>in</strong>dung mit der <strong>Wandler</strong>-<br />

Komponente – <strong>in</strong> erster L<strong>in</strong>ie das E<strong>in</strong>b<strong>in</strong>den von <strong>digitalen</strong> Informationsquellen zur<br />

Literatursuche <strong>in</strong> das UniCats-i-System. Es ist jedoch aufgrund der sehr allgeme<strong>in</strong>en<br />

Beschaffenheit des Systems durchaus möglich, andere E<strong>in</strong>satzfelder zu erschließen. Für e<strong>in</strong><br />

reibungsloses Funktionieren der Automatismen wären lediglich andere Basisdaten notwendig,<br />

angepaßt auf das jeweilige Umfeld.<br />

Weitere Gebiete s<strong>in</strong>d durchaus denkbar, jedoch unterliegt der UniCats-i-<strong>Wandler</strong> momentan<br />

noch der E<strong>in</strong>schränkung, daß e<strong>in</strong> Suchformular stets der E<strong>in</strong>stieg <strong>in</strong> die Informationsquelle<br />

darstellen muß. Befreit man den <strong>Wandler</strong> von dieser E<strong>in</strong>schränkung, erschließen sich weitere<br />

E<strong>in</strong>satzfelder. Daher sollte <strong>in</strong> zukünftigen Entwicklungen sowohl der UniCats-i-<strong>Wandler</strong> als<br />

auch der hier entwickelte <strong>Wandler</strong>-Generator erweitert und noch flexibler gemacht werden.<br />

Beispielsweise könnten auf diese Weise Börsen- und Wetterdaten <strong>in</strong> regelmäßigen Intervallen<br />

abgefragt und über Zwischenschritte dem Benutzer e<strong>in</strong>er Anwendung angeboten werden, so<br />

daß dieser über jeweils aktuelle Informationen verfügt, ohne selbst im Internet nach Ihnen<br />

suchen zu müssen.<br />

Des weiteren sollten <strong>Wandler</strong>-Generator und -Komponenten neben der bereits<br />

implementierten Beherrschung von Frames und Sessions zur Arbeit mit weiteren Internet-<br />

Technologien befähigt werden, die <strong>in</strong> der Zukunft auf den Seiten vieler Anbieter von Onl<strong>in</strong>e-<br />

Informationen Verwendung f<strong>in</strong>den werden. Hier wären vor allem JavaScript, JSP uns ASP zu<br />

nennen, aber auch Applets und Flash können e<strong>in</strong>e Rolle spielen.<br />

Auf der Seite der e<strong>in</strong>gesetzten Basis-Techniken wäre e<strong>in</strong>e Ergänzung der regulären<br />

Ausdrücke um optionale Teile wünschenswert, da sich gezeigt hat, daß die Informationen<br />

auch <strong>in</strong>nerhalb der Internet-Seite e<strong>in</strong>es Anbieters nicht immer komplett gleich strukturiert s<strong>in</strong>d<br />

und bisweilen Datenelemente fehlen. Die automatische <strong>Generierung</strong> kann allgeme<strong>in</strong> noch<br />

deutlich <strong>in</strong> ihrer Stabilität gesteigert werden, <strong>in</strong>dem während des Vorgangs mehrere Ergebnis-<br />

Dokumente untersucht und die Analyse-Resultate zu e<strong>in</strong>er Quellenbeschreibung<br />

zusammengeführt werden, deren Pfad- und reguläre Ausdrücke optionale Teile enthalten und<br />

so mehrere ähnliche, aber leicht unterschiedliche Repräsentationen der gesuchten<br />

Informationen abdecken.<br />

Bei der automatischen <strong>Generierung</strong> besteht e<strong>in</strong>e der wichtigsten Voraussetzungen dar<strong>in</strong>, daß<br />

die verwendeten Beispiel-Daten im Katalog des jeweiligen Anbieters vorhanden s<strong>in</strong>d. Hier<br />

ließe sich zum<strong>in</strong>dest für die Anpassung des <strong>Wandler</strong>s an Veränderungen an der Internetseite<br />

des Anbieters <strong>in</strong> der Form vorsorgen, als daß der <strong>Wandler</strong> bei erfolgreichen Anfragen e<strong>in</strong>en<br />

Teil der Suchergebnisse speichert, um sie bei e<strong>in</strong>er späteren automatischen Anpassung als<br />

Beispiel-Daten nutzen zu können.<br />

114


Anhang<br />

A Def<strong>in</strong>ition der Quellenbeschreibung<br />

Zur <strong>in</strong>dividuellen Konfiguration des <strong>Wandler</strong>s auf die jeweiligen Anbieter werden<br />

Quellenbeschreibungen genutzt. Diese haben folgende Struktur:<br />

<br />

<br />

MetaData<br />

<br />

<br />

SearchData<br />

<br />

<br />

SearchCosts<br />

<br />

<br />

S<strong>in</strong>gleResultData<br />

<br />

<br />

ListResultData<br />

<br />

<br />

Der Bereich MetaData enthält allgeme<strong>in</strong>e Informationen:<br />

<br />

Name<br />

TimeStamp<br />

Costs<br />

Separator<br />

Data<br />

<br />

• Name ist der Name der beschriebenen Informationsquelle, gewöhnlich die URL der<br />

Startseite.<br />

• TimeStamp gibt den Zeitpunkt an, an dem die <strong>Generierung</strong> der Quellenbeschreibung<br />

abgeschlossen wurde.<br />

• Costs enthält die Information, ob e<strong>in</strong>e Suche <strong>in</strong> dieser Informationsquelle<br />

kostenpflichtig ist. Falls ja, so s<strong>in</strong>d die genauen Kosten dem Bereich SearchCosts zu<br />

entnehmen.<br />

• Separator stellt das Trennzeichen für Datenlisten dar.<br />

• Data enthält e<strong>in</strong>e Liste der <strong>in</strong>sgesamt <strong>in</strong> dieser Informationsquelle verfügbaren<br />

Datenelemente, mit denen die Ergebnisse e<strong>in</strong>er Suche beschrieben werden.<br />

Im Bereich SearchCosts werden bei Quellen, <strong>in</strong> denen die Suche nach Informationen<br />

kostenpflichtig ist, die Kosten der Suche je Informationsschicht angegeben. Bei allen übrigen<br />

Informationsquellen ist dieser Bereich leer:<br />

<br />

Price<br />

...<br />

<br />

• Price stellt den Preis für den e<strong>in</strong>maligen Aufruf der Informationsschicht LayerName<br />

dar. Dieser E<strong>in</strong>trag ist für jede Informationsschicht e<strong>in</strong>mal vorhanden.<br />

115


Der Bereich SearchData be<strong>in</strong>haltet die für die Suche bei dem beschriebenen Anbieter<br />

notwendigen Informationen:<br />

<br />

SearchURL<br />

FixFields<br />

Hidden<br />

FormURL<br />

FormPath<br />

AvailableFields<br />

FieldName<br />

...<br />

MultiName<br />

Option<br />

<br />

OptionData<br />

<br />

<br />

• SearchURL gibt die URL an, an die die Formulardaten geschickt werden. Da dies nur<br />

bei GET-Formularen korrekt funktioniert, wird diese Angabe nicht mehr benutzt.<br />

• FixFields enthält die Belegung der Formularfelder, die bei e<strong>in</strong>er Suche über die<br />

Standarde<strong>in</strong>stellungen durch den Anfrage-Generator nicht verändert werden<br />

(Auswahlen, Checkboxen, Radiobuttons).<br />

• Hidden liefert die Information, ob das verwendete Suchformular versteckte E<strong>in</strong>gaben<br />

enthält.<br />

• FormURL gibt die URL des HTML-Dokumentes an, <strong>in</strong> dem das verwendete<br />

Suchformular enthalten ist.<br />

• FormPath enthält den Pfad des -Knotens <strong>in</strong> der Baumdarstellung dieses<br />

HTML-Dokumentes.<br />

• AvailableFields gibt die <strong>in</strong> den Standarde<strong>in</strong>stellungen des Formulars als<br />

Suchkriterien nutzbaren Datenelemente an.<br />

• FieldName gibt den Namen des Formularfelder, dem der Wert des Datenelementes<br />

DataElement zugewiesen werden muß. Dieser E<strong>in</strong>trag ist für jedes Datenelement <strong>in</strong><br />

AvailableFields e<strong>in</strong>mal vorhanden.<br />

• MultiName ist die system<strong>in</strong>terne Bezeichnung für Freitext-Felder.<br />

• Option gibt an, ob im verwendeten Formular e<strong>in</strong>e erweiterte Suche unter<br />

E<strong>in</strong>beziehung von Element- und Verknüpfungs-Auswahlen verfügbar ist. Falls ja, so<br />

s<strong>in</strong>d die dafür notwendigen Daten <strong>in</strong> OptionData abgelegt. Falls nicht, ist dieser<br />

Bereich leer.<br />

• OptionData enthält die Informationen für e<strong>in</strong>e erweiterte Suche unter E<strong>in</strong>beziehung<br />

von Element- und Verknüpfungs-Auswahlen (siehe nächster Absatz).<br />

Der Teilbereich OptionSearchData von SearchData enthält die Informationen für e<strong>in</strong>e<br />

erweiterte Suche unter E<strong>in</strong>beziehung von Element- und Verknüpfungs-Auswahlen:<br />

FixFields<br />

L<strong>in</strong>kAv<br />

StandardL<strong>in</strong>kAv<br />

StandardL<strong>in</strong>k<br />

L<strong>in</strong>kFields<br />

Fields<br />

<br />

FieldData<br />

<br />

116


• FixFields enthält die Belegung der Formularfelder, die bei e<strong>in</strong>er erweiterten Suche<br />

durch den Anfrage-Generator nicht verändert werden (allgeme<strong>in</strong>e Auswahlen,<br />

Checkboxen, Radiobuttons).<br />

• L<strong>in</strong>kAv gibt an, ob Verknüpfungs-Auswahlen verfügbar s<strong>in</strong>d<br />

• StandardL<strong>in</strong>kAv gibt an, ob die Standarde<strong>in</strong>stellung aller Verknüpfungs-Auswahlen<br />

im Formular übere<strong>in</strong>stimmt.<br />

• StandardL<strong>in</strong>k enthält die Standarde<strong>in</strong>stellung aller Verknüpfungs-Auswahlen im<br />

Formular, falls diese übere<strong>in</strong>stimmt.<br />

• L<strong>in</strong>kFields gibt die Belegung der Verknüpfungsfelder des Formulars <strong>in</strong><br />

Standarde<strong>in</strong>stellung an.<br />

• Fields enthält e<strong>in</strong>e Liste der verfügbaren Suchfelder<br />

• FieldData enthält die Informationen zur Belegung der zum Suchfeld FieldName<br />

gehörigen Element- und, falls vorhanden, Verknüpfungs-Auswahl für die erweiterte<br />

Suche (siehe nächster Absatz). Dieser E<strong>in</strong>trag ist für jedes Feld aus Fields e<strong>in</strong>mal<br />

vorhanden.<br />

Der Teilbereich "FieldName"Options von OptionSearchData enthält die Informationen für<br />

die Belegung der zu den Suchfeld FieldName gehörigen Element- und, falls vorhanden,<br />

Verknüpfungs-Auswahl:<br />

Field<br />

AvOptions<br />

OptValue


Der Bereich S<strong>in</strong>gleResultData enthält die Informationen zur Extraktion der Ergebnisdaten<br />

aus dem Ergebnis-Dokument e<strong>in</strong>er Suchanfrage mit e<strong>in</strong>em Treffer und den von dort aus über<br />

Hyperl<strong>in</strong>ks erreichbaren HTML-Dokumenten:<br />

ListAvData<br />

<br />

ListBasePath<br />

ListDataPath<br />

<br />

Layers<br />

AvData<br />

<br />

Parent<br />

AddressPath<br />

BasePath<br />

DataPath<br />

<br />

• ListAvData enthält e<strong>in</strong>e Liste der aus dem Ergebnis-Dokument e<strong>in</strong>er Suchanfrage mit<br />

e<strong>in</strong>em Treffer extrahierbaren Datenelemente.<br />

• ListBasePath stellt den Pfad zum Wurzelknoten ListResultHead des Teilbaumes des<br />

zum Ergebnis-Dokument äquivalenten HTML-Baumes dar, <strong>in</strong> dem alle extrahierbaren<br />

Datenelemente liegen.<br />

• ListDataPath enthält den Pfad von ListResultHead zum Datenelement ListElement.<br />

Dieser E<strong>in</strong>trag ist für jedes <strong>in</strong> ListAvData aufgeführte Datenelement e<strong>in</strong>mal<br />

vorhanden.<br />

• Layers enthält die Anzahl L der verfügbaren Informationsschichten, die vom<br />

Ergebnis-Dokument über Hyperl<strong>in</strong>ks erreichbar s<strong>in</strong>d. Diese s<strong>in</strong>d mit Layer1 bis<br />

LayerL benannt.<br />

• AvData enthält e<strong>in</strong>e Liste der aus der Informationsschicht LayerName extrahierbaren<br />

Datenelemente.<br />

• Parent gibt den Namen der Informationsschicht an, die den Hyperl<strong>in</strong>k zu dieser<br />

enthält.<br />

• AddressPath gibt den Pfad vom ResultHead <strong>in</strong> der Informationsschicht Parent zum<br />

Hyperl<strong>in</strong>k zu dieser Informationsschicht an.<br />

• ResultBasePath stellt den Pfad zum Wurzelknoten ResultHead des Teilbaumes des<br />

zum HTML-Dokument der Informationsschicht äquivalenten HTML-Baumes dar, <strong>in</strong><br />

dem alle extrahierbaren Datenelemente liegen.<br />

• DataPath gibt den Pfad von ResultHead zum Datenelement Element. Dieser E<strong>in</strong>trag<br />

ist für jedes <strong>in</strong> AvData aufgeführte Datenelement e<strong>in</strong>mal vorhanden.<br />

Der Bereich ListResultData enthält die Informationen zur Extraktion der Ergebnisdaten aus<br />

dem Ergebnis-Dokument e<strong>in</strong>er Suchanfrage mit mehreren Treffern und den von dort aus über<br />

Hyperl<strong>in</strong>ks erreichbaren HTML-Dokumenten:<br />

ListAvData<br />

<br />

ListBasePath<br />

RSI<br />

RS<br />

NOR<br />

NextList<br />

ListDataPath<br />

<br />

Layers<br />

118


AvData<br />

<br />

Parent<br />

AddressPath<br />

BasePath<br />

DataPath<br />

<br />

• ListAvData enthält e<strong>in</strong>e Liste der aus dem Ergebnis-Dokument e<strong>in</strong>er Suchanfrage mit<br />

mehreren Treffern extrahierbaren Datenelemente.<br />

• ListBasePath stellt den Pfad zum Wurzelknoten ListResultHead des Teilbaumes des<br />

zum Ergebnis-Dokument äquivalenten HTML-Baumes dar, unter dem die Liste der<br />

Ergebnisse aufgefächert ist, sowie den Typ se<strong>in</strong>er K<strong>in</strong>dknoten, unter denen die<br />

Teilbäume mit den e<strong>in</strong>zelnen Ergebnissen liegen.<br />

• RSI gibt den typspezifischen Index des K<strong>in</strong>dknotens von ListResultHead an, unter<br />

dem das erste Ergebnis lieg<br />

• RS ist der Abstand der typspezifischen Indizes der K<strong>in</strong>dknoten von ListResultHead, <strong>in</strong><br />

denen die Ergebnisse liegen.<br />

• NOR gibt die Anzahl der Ergebnisse an, die <strong>in</strong> e<strong>in</strong>er Teilliste enthalten s<strong>in</strong>d.<br />

• NextList gibt den Pfad zum Knoten mit dem Hyperl<strong>in</strong>k an, der zum HTML-<br />

Dokument mit der jeweils nächsten Teilliste von Ergebnissen führt, falls die<br />

Suchanfrage mehr als NOR Treffer geliefert hat.<br />

• ListDataPath enthält den Pfad des zu e<strong>in</strong>em e<strong>in</strong>zelnen Ergebnis gehörigen<br />

K<strong>in</strong>dknotens von ListResultHead zum Datenelement ListElement des jeweiligen<br />

Ergebnisses. Dieser E<strong>in</strong>trag ist für jedes <strong>in</strong> ListAvData aufgeführte Datenelement<br />

e<strong>in</strong>mal vorhanden.<br />

• Layers enthält die Anzahl L der verfügbaren Informationsschichten, die vom<br />

Ergebnis-Dokument über Hyperl<strong>in</strong>ks erreichbar s<strong>in</strong>d. Diese s<strong>in</strong>d mit Layer1 bis<br />

LayerL benannt.<br />

• AvData enthält e<strong>in</strong>e Liste der aus der Informationsschicht LayerName extrahierbaren<br />

Datenelemente.<br />

• Parent gibt den Namen der Informationsschicht an, die den Hyperl<strong>in</strong>k zu dieser<br />

enthält.<br />

• AddressPath gibt den Pfad vom ResultHead <strong>in</strong> der Informationsschicht Parent zum<br />

Hyperl<strong>in</strong>k zu dieser Informationsschicht an.<br />

• ResultBasePath stellt den Pfad zum Wurzelknoten ResultHead des Teilbaumes des<br />

zum HTML-Dokument der Informationsschicht äquivalenten HTML-Baumes dar, <strong>in</strong><br />

dem alle extrahierbaren Datenelemente liegen.<br />

• DataPath gibt den Pfad von ResultHead zum Datenelement Element. Dieser E<strong>in</strong>trag<br />

ist für jedes <strong>in</strong> AvData aufgeführte Datenelement e<strong>in</strong>mal vorhanden.<br />

119


B Def<strong>in</strong>ition der Basisdaten für die <strong>Generierung</strong><br />

Die für die vollautomatische <strong>Generierung</strong> von Quellenbeschreibungen notwendigen<br />

Basisdaten werden ebenfalls <strong>in</strong> e<strong>in</strong>er Datei gespeichert. Diese hat folgende Struktur:<br />

<br />

MultiName<br />

Separator<br />

Marker<br />

NoResValue<br />

Nested<br />

Selectivity<br />

NoResFields<br />

<br />

FormHeuristics<br />

<br />

<br />

RegExHeuristics<br />

<br />

<br />

S<strong>in</strong>gleResultGenData<br />

<br />

<br />

ListResultGenData<br />

<br />

<br />

• MultiName gibt den Namen für e<strong>in</strong> Freitext-Suchfeld an.<br />

• Separator stellt das Trennzeichen für Datenlisten dar.<br />

• Marker bezeichnet das Markierungszeichen für Alternativ-Werte von Datenelementen.<br />

Es wird zur Wahrung der E<strong>in</strong>deutigkeit benutzt, wenn mehr als e<strong>in</strong> Beispielwert für<br />

e<strong>in</strong> Datenelement <strong>in</strong>nerhalb e<strong>in</strong>es Beispiels vorhanden ist.<br />

• NoResValue gibt den Suchwert für die Ke<strong>in</strong>-Ergebnis-Seite an.<br />

• NoResFields stellt e<strong>in</strong>e Liste von Datenelementen dar, auf die NoResValue als<br />

Suchkriterium angewendet werden soll, geordnet nach absteigender Priorität.<br />

• Nested enthält e<strong>in</strong>e Liste der Datenelemente, für die e<strong>in</strong>gebettete Treffer<br />

wahrsche<strong>in</strong>lich s<strong>in</strong>d, geordnet nach aufsteigender Wahrsche<strong>in</strong>lichkeit für e<strong>in</strong>en<br />

solchen.<br />

• Selectivity enthält e<strong>in</strong>e Liste verwendeter Datenelemente, geordnet nach<br />

aufsteigender Selektivität.<br />

Der Bereich FormHeuristics enthält die zur Analyse von Suchformularen notwendigen<br />

Heuristikdaten:<br />

<br />

<br />

AvFieldHeu<br />

DEValues<br />

<br />

<br />

AvBoolHeu<br />

LOValues<br />

<br />

<br />

• AvFieldHeu enthält e<strong>in</strong>e Liste der Datenelemente, für deren Erkennung <strong>in</strong> Element-<br />

Auswahlen Heuristikdaten vorhanden s<strong>in</strong>d.<br />

120


• DEValue gibt e<strong>in</strong>e Liste möglicher Optionen e<strong>in</strong>er Element-Auswahl an, die für das<br />

Datenelement DataElement stehen können. Dieser E<strong>in</strong>trag ist für jedes <strong>in</strong> AvFieldHeu<br />

aufgeführte Datenelement e<strong>in</strong>mal vorhanden.<br />

• AvBoolHeu enthält e<strong>in</strong>e Liste der logischen Verknüpfungen, für deren Erkennung <strong>in</strong><br />

Verknüpfungs-Auswahlen Heuristikdaten vorhanden s<strong>in</strong>d.<br />

• LOValue gibt e<strong>in</strong>e Liste möglicher Optionen e<strong>in</strong>er Verknüpfungs-Auswahl an, die für<br />

die logische Verknüpfung L<strong>in</strong>kOption stehen können. Dieser E<strong>in</strong>trag ist für jede <strong>in</strong><br />

AvBoolHeu aufgeführte logische Verknüpfung e<strong>in</strong>mal vorhanden.<br />

Der Bereich RegExHeuristics enthält die zur automatischen <strong>Generierung</strong> regulärer<br />

Ausdrücke erforderlichen Heuristikdaten:<br />

<br />

FixLength<br />

LeftBord<br />

LeftBordStr<strong>in</strong>g<br />

RightBord<br />

RightBordStr<strong>in</strong>g<br />

Interpunct<br />

<br />

• FixLength enthält e<strong>in</strong>e Liste von Datenelementen, deren Werte e<strong>in</strong>e feste Länge<br />

haben.<br />

• LeftBord stellt e<strong>in</strong>e Liste der Datenelemente dar, die oft von e<strong>in</strong>er bestimmten<br />

Zeichenfolge angeführt werden.<br />

• LeftBordStr<strong>in</strong>g ist die zugehörige Liste dieser führenden Zeichenfolgen.<br />

• RightBord enthält e<strong>in</strong>e Liste von Datenelementen, auf die oft e<strong>in</strong>e bestimmte<br />

Zeichenfolge folgt.<br />

• RightBordStr<strong>in</strong>g ist die Liste dieser Zeichenfolgen.<br />

• Interpunct ist e<strong>in</strong>e Verkettung von mit hoher Wahrsche<strong>in</strong>lichkeit <strong>in</strong>nerhalb der<br />

Werte von Datenelementen auftretenden Interpunktionszeichen sowie e<strong>in</strong>igen<br />

B<strong>in</strong>deworten, die dieselbe Eigenschaft aufweisen.<br />

Der Bereich S<strong>in</strong>gelResultGenerateData enthält die Beispieldaten zur <strong>Generierung</strong> der<br />

Pfade zur Extraktion von Datenelementen aus dem Ergebnis-Dokument e<strong>in</strong>er Suchanfrage mit<br />

e<strong>in</strong>em Treffer und dem von diesem aus über Hyperl<strong>in</strong>ks erreichbaren HTML-Dokumenten:<br />

<br />

ExNum<br />

<br />

SearchValue<br />

AvGenData<br />

GDEValue<br />

<br />

<br />

• ExNum gibt die Anzahl N der verfügbaren Sätze von Beispieldaten an. Für jede Zahl<br />

von 1 bis N ist e<strong>in</strong> GenerateExampe"Number"-Block vorhanden.<br />

• SearchValue gibt den Suchwert für die Suchanfrage an, die den Treffer liefert, der<br />

durch die vorhandenen Beispieldaten beschrieben ist. Dieser Wert wird nicht mehr<br />

benutzt, da die Suchanfrage direkt aus den Beispielwerten generiert wird.<br />

• AvGenData enthält e<strong>in</strong>e Liste der Datenelemente, für die Beispielwerte verfügbar s<strong>in</strong>d.<br />

• GDEValue gibt den Beispielwert für das Datenelement DataElement an. Dieser<br />

E<strong>in</strong>trag ist für jedes <strong>in</strong> AvGenData aufgeführte Datenelement e<strong>in</strong>mal vorhanden.<br />

121


Der Bereich ListResultGenerateData enthält die Beispieldaten zur <strong>Generierung</strong> der Pfade<br />

zur Extraktion von Datenelementen aus dem Ergebnis-Dokument e<strong>in</strong>er Suchanfrage mit<br />

mehreren Treffern und dem von diesem aus über Hyperl<strong>in</strong>ks erreichbaren HTML-<br />

Dokumenten:<br />

<br />

ExNum<br />

<br />

SearchValue<br />

SearchFields<br />

ExPartNum<br />

<br />

PartAvGenData<br />

GDEValue<br />

<br />

<br />

• ExNum gibt die Anzahl N der verfügbaren Sätze von Beispieldaten an. Für jede Zahl<br />

von 1 bis N ist e<strong>in</strong> GenerateExampe"Number"-Block vorhanden.<br />

• SearchValue gibt den Suchwert für die Suchanfrage an, die mit großer<br />

Wahrsche<strong>in</strong>lichkeit unter anderen die Treffer liefert, die durch die vorhandenen<br />

Beispieldaten beschrieben s<strong>in</strong>d.<br />

• SearchFields enthält e<strong>in</strong>e Liste der Datenelemente, auf die SearchValue als<br />

Suchkriterium angewendet werden kann, sortiert nach absteigender Priorität.<br />

• ExPartNum gibt die Anzahl T der <strong>in</strong> e<strong>in</strong>em Beispiel vorhandenen Beispielteile an. Für<br />

jede Zahl von 1 bis T ist e<strong>in</strong> ExamplePart"PartNumber"-Block vorhanden.<br />

• PartAvGenData enthält e<strong>in</strong>e Liste der Datenelemente, für die Beispielwerte im<br />

jeweiligen Beispielteil verfügbar s<strong>in</strong>d.<br />

• GDEValue gibt den Beispielwert für das Datenelement DataElement an. Dieser<br />

E<strong>in</strong>trag ist für jedes <strong>in</strong> PartAvGenData aufgeführte Datenelement e<strong>in</strong>mal vorhanden.<br />

122


Literaturverzeichnis<br />

[Azavant 2000] Fabien Azavant: Build<strong>in</strong>g Intelligent Web Applications Us<strong>in</strong>g<br />

Lightweight Wrappers, Data and Knowledge Eng<strong>in</strong>eer<strong>in</strong>g 3 (36), 2000<br />

[Bak 1999] Attila Bak: Erstellung e<strong>in</strong>er Wrappers zum Parsen von HTML-Seiten,<br />

Diplomarbeit Universität Karlsruhe, IPD und Technische Universität<br />

Budapest, Elementi Villamossagtan Tanszék, 1999<br />

[Baumgartner 2001] Robert Baumgartner: Visual Web Information Extraction with Lixto,<br />

27th Conference on VLDB, Rom, 2001<br />

[Bodor 1999] András Bodor: Konzeption und Implementierung e<strong>in</strong>es<br />

Wrappergenerators für das UniCats-Project, Diplomarbeit Universität<br />

Karlsruhe, IPD und Technische Universität Budapest, Elementi<br />

Villamossagtan Tanszék, Mai 1999<br />

[Christoffel 2003] Michael Christoffel, Guido Wojke, Max Gensthaler: How Many Small<br />

Libraries Can be a Large Library <strong>in</strong>: Proceed<strong>in</strong>gs of the 5th Russian<br />

Conference on Digital Libraries, St. Petersburg, 2003<br />

[Cohen 1999] William W. Cohen: Learn<strong>in</strong>g Page-Independent Heuristics for<br />

Extract<strong>in</strong>g Data from Web Pages <strong>in</strong> Computer Networks, Proceed<strong>in</strong>g of<br />

the eighth <strong>in</strong>ternational conference on World Wide Web, Toronto, 1999<br />

[Crescenzi 2001] Valter Crescenzi: Towards Automatic Data Extraction From Large Web<br />

Sites, 27th Conference on VLDB, Rom, 2001<br />

[D<strong>in</strong>kloh 2003] Mart<strong>in</strong> D<strong>in</strong>kloh: E<strong>in</strong> werkzeugunterstütztes konversationsbasiertes<br />

Bauste<strong>in</strong>konzept für Multiagentensysteme, Diplomarbeit Uni Karlsruhe,<br />

IPD, 2003<br />

[Flanagan 1998] David Flanagan: JavaScript: The Def<strong>in</strong>itive Guide, O'Reilly and<br />

Associatios, 3rd edition, 1998<br />

[Goldfarb 1991] Charles G. Goldfarb: HyTime: A Standard for Structured Hypermedia<br />

Exchange, IEEE Computer 1991<br />

[Grieser 2000] Gunter Grieser: A Unify<strong>in</strong>g Approach to HTML Wrapper<br />

Representation and Learn<strong>in</strong>g, Proceed<strong>in</strong>gs of the Third International<br />

Conference on Discovery Science, Kyoto, Japan, 2000<br />

[Kuhl<strong>in</strong>s 2004] Internet-Seite Wrapper Development Tools:<br />

http://www.wifo.uni-mannheim.de/~kuhl<strong>in</strong>s/wrappertools/<br />

[LIXTO] Homepage der Lixto Software GmbH: http://www.lixto.com/<br />

[Rieger 1995] Wolfgang Rieger: SGML für die Praxis, Ansatz und E<strong>in</strong>satz von<br />

ISO8879, Spr<strong>in</strong>ger, 1995<br />

[Sahuguet 1998] Arnaud Sahuguet, Fabien Azavant: W4F: a WysiWyg Web Wrapper<br />

Factory, University of Pennsylvania (unpublished), 1998<br />

[Sahuguet 2000] Arnaud Sahuguet, Fabien Azavant: World Wide Web Wrapper Factory<br />

(W4F) Manual, 2000<br />

[Schneider 2001] Jürgen Schneider: <strong>Wandler</strong> <strong>in</strong> <strong>digitalen</strong> <strong>Bibliotheken</strong>: Semiautomatische<br />

<strong>Generierung</strong> und Evaluationsstrategien, Diplomarbeit<br />

Universität Karlsruhe, IPD, 2001<br />

[Snell 2002] James Snell, Doug Tidwell, Pavel Kilchenko, Webservice-<br />

Programmierung mit SOAP, O’Reilly Verlag, 2002<br />

[Ste<strong>in</strong>hart 2004] Michael Ste<strong>in</strong>hart: Anb<strong>in</strong>dung unterschiedlicher Anbieter an das<br />

UniCats-i-System, Diplomarbeit Universität Karlsruhe, IPD, 2004<br />

[TFD] The Free Dictionary: http://comput<strong>in</strong>g-dictionary.thefreedictionary.com<br />

[W3C] World Wide Web Consortium Homepage: http://www.w3.org<br />

[W4F] W4F Homepage: http://db.cis.upenn.edu/W4F/<br />

123


[Walsh 2002] Aaron E. Walsh, UDDI, SOAP, and WSDL: The Web Services<br />

Specification Reference Book, Prentice Hall, 2002<br />

[Wooldridge 2000] Michael Wooldridge, Nicholas R. Jenn<strong>in</strong>gs und David K<strong>in</strong>ny. The Gaia<br />

Methodology for Agent-Oriented Analysis and Design. Autonomous<br />

Agents and Multi-Agent Systems, 3(3):285-312, 2000<br />

[Wooldridge 2002] Michael Wooldridge, An Introduction to Multiagent Systems, John<br />

Wiley & Sons, 2002.<br />

[XWRAP] XWRAP Homepage: http://www.cse.ogi.edu/sysl/projects/XWRAP/<br />

124


Danksagungen<br />

Ich danke me<strong>in</strong>em Betreuer Dipl.-Inform. Michael Christoffel und dem gesamten UniCats-i-<br />

Team für die engagierte fachkundige Unterstützung <strong>in</strong> Problemen und Fragen aller Art, die<br />

sich im Umfeld der Entwicklung und Implementierung ergeben haben.<br />

Ich danke Herrn Prof. Dr. Nikolaus Deussen für se<strong>in</strong>e Hilfe beim Entwurf des Generators für<br />

die regulären Ausdrücke.<br />

Ich danke Frau Dipl.-Üb. Nora Over für ihre Hilfe bei der Realisierung der Mehrsprachigkeit<br />

der Heuristik-Daten.<br />

Ich danke me<strong>in</strong>en Eltern, die mir durch ihre jahrelange Unterstützung me<strong>in</strong> Studium erst<br />

ermöglicht haben.<br />

125

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!