Wandler in digitalen Bibliotheken: Vollautomatische Generierung
Wandler in digitalen Bibliotheken: Vollautomatische Generierung
Wandler in digitalen Bibliotheken: Vollautomatische Generierung
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