Semi-automatische Generierung von REST

Transcription

Semi-automatische Generierung von REST
Gottfried Wilhelm
Leibniz Universität Hannover
Fakultät für Elektrotechnik und Informatik
Institut für Praktische Informatik
Fachgebiet Software Engineering
Semi-automatische Generierung von
REST-Services aus Webseiten
Masterarbeit
im Studiengang Informatik
von
Alexander Fomin
Prüfer: Prof. Dr. Kurt Schneider
Zweitprüfer: Prof. Dr. Matthew Smith
Betreuer: M. Sc. Leif Singer
Hannover, 14. April 2010
Danksagung
An dieser Stelle möchte ich mich bei all denen bedanken, die mich bei der Entstehung
dieser Arbeit unterstützt haben.
Ein besonderer Dank geht an Herrn M. Sc. Leif Singer für eine hervorragende Betreuung
während dieser Arbeit.
Zusammenfassung
Viele Webseiten enthalten wertvolle Informationen, stellen jedoch keine maschinenlesbaren Schnittstellen zur Verfügung. Meist müssen die Daten über Formulare angefragt und
ggf. auf mehreren Webseiten einer Website gesammelt werden. Oft besteht aber Bedarf,
Informationen ohne mühsame Aufbereitung durch Benutzer in strukturierter Form zu
erhalten, um sie in anderen Anwendungen verwenden zu können.
Eine Abhilfe schaffen sogenannte Web-Scraper – Programme zur Datenextraktion aus
Webseiten. Diese müssen jedoch programmiert werden, was zusätzliche Zeit und technische Kenntnisse erfordert. Es gibt Werkzeuge auf dem Markt, die es auch Benutzern ohne
Programmierkenntnisse ermöglichen, Daten aus Webseiten zu extrahieren. Sie beschränken sich jedoch entweder auf eine oder mehrere Webseiten, die gleichstrukturierte Informationen – beispielsweise über viele Webseiten aufgeteilte Suchergebnisse einer Anfrage
– enthalten. Allerdings befinden sich Informationen über ein Objekt (z. B. eine Publikation) häufig auf mehreren Webseiten (Zusammenfassung, Informationen über Autoren,
verwandte Publikationen etc.). Außerdem gibt es Objekte (z. B. Autoren und Publikationen) auf einer Webseite, die miteinander in Beziehung stehen. Momentan verfügbare
Werkzeuge können derartige Informationen und deren Beziehungen nicht extrahieren.
Die vorliegende Arbeit adressiert diese Probleme. Hier werden ein Konzept und ein
Werkzeug namens DisRESTractor vorgestellt. Mit dessen Hilfe kann ein Benutzer ohne technische Kenntnisse einen Web-Scraper erzeugen, indem er die für ihn relevanten
Daten im Dialog mit dem System visuell definiert. Dabei werden die Informationen
als Ressourcen extrahiert, die über mehrere Webseiten verteilt sein und in Beziehung
miteinander stehen können. Der erzeugte Web-Scraper ist dabei nach Prinzipien des
Architekturstils REST aufgebaut.
Inhaltsverzeichnis
1. Einleitung
1.1. Motivation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2. Aufgabenstellung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.3. Gliederung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2. Grundlagen
2.1. Struktur von Webseiten . . . . . . . . . .
2.2. Web-Services . . . . . . . . . . . . . . . .
2.3. Mashups . . . . . . . . . . . . . . . . . . .
2.4. REST . . . . . . . . . . . . . . . . . . . .
2.4.1. Grundprinzipien . . . . . . . . . .
2.4.2. Ressourcen . . . . . . . . . . . . .
2.4.3. Unterschiedliche Repräsentationen
2.4.4. Verknüpfungen/Hypermedia . . . .
2.4.5. Standardmethoden . . . . . . . . .
2.4.6. Zustandslosigkeit . . . . . . . . . .
2.4.7. Service-Dokumentation . . . . . .
2.5. Web-Scraping . . . . . . . . . . . . . . . .
1
1
2
2
.
.
.
.
.
.
.
.
.
.
.
.
4
4
7
8
10
10
11
12
14
14
16
16
17
3. Abgrenzung zu anderen Arbeiten
3.1. Wissenschaftliche Arbeiten . . . . . . . . . . . . . . . . . . . . . . . . . .
3.2. Kommerzielle Produkte . . . . . . . . . . . . . . . . . . . . . . . . . . .
20
20
21
4. Das Konzept von DisRESTractor
4.1. Anwendungsszenario . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.1.1. Beschreibung des Szenarios und Motivation . . . . . . . . . . . .
4.1.2. Aufruf und Benutzeroberfläche von DisRESTractor . . . . . . . .
4.1.3. Auswahl relevanter Informationen und Hinzufügen einer Ressource
4.1.4. Erfassung von Beziehungen zwischen Ressourcen . . . . . . . . .
4.1.5. Navigation auf der Website . . . . . . . . . . . . . . . . . . . . .
4.1.6. Hinzufügen eines mehrwertigen Attributes . . . . . . . . . . . . .
4.1.7. Erzeugen eines Service . . . . . . . . . . . . . . . . . . . . . . . .
4.2. Beschreibung des Konzeptes . . . . . . . . . . . . . . . . . . . . . . . . .
4.2.1. Metamodell für extrahierte Daten . . . . . . . . . . . . . . . . . .
4.2.2. Ablauf der Datenextraktion mit DisRESTractor . . . . . . . . . .
4.2.3. Generierter Service . . . . . . . . . . . . . . . . . . . . . . . . . .
26
26
26
27
28
30
31
32
32
34
34
36
41
5. Evaluation des Konzeptes
5.1. Planung und Durchführung von Interviews . . . . . . . . . . . . . . . . .
44
44
v
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Inhaltsverzeichnis
5.2. Auswertung von Ergebnissen . . . . . . . . . . . . . . . . . . . . . . . .
6. Entwurf und Implementierung
6.1. Technische Plattform . . . . . . . . . . . . . . . . . . . . .
6.2. Architektur von DisRESTractor . . . . . . . . . . . . . . .
6.3. Same origin policy . . . . . . . . . . . . . . . . . . . . . .
6.4. Dialog mit DisRESTractor zur Definition von Ressourcen
6.5. Generierung und Installation des Service . . . . . . . . . .
6.6. Architektur des Service . . . . . . . . . . . . . . . . . . . .
45
.
.
.
.
.
.
47
47
48
49
50
54
54
7. Zusammenfassung und Ausblick
7.1. Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.2. Ausblick . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
57
57
59
A. Anhang
A.1. Ant-Skript zur Generierung und Installation des Service . . . . . . . . .
A.2. WADL-Dokumentation zum generierten Service . . . . . . . . . . . . . .
61
61
62
Abkürzungsverzeichnis
63
Literaturverzeichnis
67
vi
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
1. Einleitung
1.1. Motivation
Viele Webseiten und -anwendungen enthalten dynamische Inhalte mit wertvollen Informationen, stellen jedoch keine maschinenlesbaren Services, sondern nur Anfrageformulare und Suchmasken zur Verfügung, die zur Bedienung durch menschliche Benutzer gedacht sind. In Unternehmen besteht aber Bedarf, relevante Informationen aus
Web-Shops, Börsen-, Nachrichten- und anderen Webportalen abzufragen und diese ohne Suche und Aufbereitung durch Mitarbeiter in strukturierter Form automatisiert zu
erhalten. Dafür soll die Extraktion der Daten in einem Web-Service gekapselt werden.
Anwendungsgebiete sind beispielsweise die Lieferantenbewertung und das Preismonitoring. Eine semi-automatische Erstellung eines solchen Service könnte wie folgt aussehen.
Ein Benutzer geht auf die Webseite eines Online-Shops und sucht nach einem oder mehreren Produkten. Durch eine Markierung der Suchergebnisse teilt er dem Programm
mit, welche Teile der Seite für ihn interessant sind. Durch geschicktes Nachfragen findet das Programm heraus, welche Informationen (im Folgenden Ressourcen genannt)
der potentielle Service verwalten soll. So könnte die Markierung einer Tabellenzeile –
eines Suchergebnisses – auf die ganze Ergebnismenge hinweisen. Mit Hilfe des erstellten
Service kann der Benutzer nächstes Mal aktuelle Preise erhalten, ohne die Webseite des
Online-Shops aufrufen, die Suchanfrage in die Maske eingeben und weitere Webseiten
für jedes Ergebnis besuchen zu müssen.
Es gibt bereits Werkzeuge, die es den Benutzern ohne Programmierkenntnisse ermöglichen, gewünschte Daten aus einer Webseite in viele Ausgabeformate wie XML1 , RSS2
oder HTML3 zu übertragen. Diese Werkzeuge beschränken sich jedoch entweder auf eine
oder mehrere Webseiten, die gleichstrukturierte Informationen – beispielsweise per Paginierungsmechanismus 4 aufgeteilte Suchergebnisse – enthalten. Die Informationen über
eine Ressource sind aber oft über die ganze Website5 verteilt. So zeigen beispielsweise Suchergebnisse meistens nur eine kurze Zusammenfassung einer Ressource an, deren
detailliertere Beschreibung sich auf anderen Webseiten befinden kann. Andererseits können mehrere relevante Ressourcen vorhanden sein, die miteinander in Beziehung stehen.
Derartige Ressourcen und ihre Beziehungen lassen sich aber mit der zurzeit verfügbaren
Software nicht extrahieren.
1
XML steht für Extensible Markup Language.
RSS steht für Really Simple Syndication (Version 2.0).
3
HTML steht für Hypertext Markup Language.
4
Paginierung ist die Aufteilung von umfangreichen Inhalten auf mehrere gleichstrukturierte (nummerierte) Webseiten.
5
Unter einer Website wird hier die Menge aller Webseiten verstanden, die dieselbe Domain (z. B.
example.org) haben.
2
1
1. Einleitung
Für die technische Realisierung der Informationsextraktion stehen verschiedene Möglichkeiten zur Verfügung. Der Extraktionsprozess kann in einer eigenständigen Anwendung
durchgeführt oder in einem Web-Service gekapselt werden. Es gibt wiederum mehrere Möglichkeiten, Web-Services zu entwickeln. In dieser Arbeit wird der Ansatz der
REST-konformen Web-Services verfolgt. Representational State Transfer (REST) ist ein
Softwarearchitekturstil für verteilte Informationssysteme und zeichnet sich durch seine
Einfachheit und die Verwendung von reifen Standards wie HTTP und URI6 aus, die bereits
seit Jahren verfügbar sind.
1.2. Aufgabenstellung
Im Rahmen dieser Arbeit soll ein Konzept entwickelt werden, das einen Benutzer ohne Programmierkenntnisse befähigt, einen REST-konformen Web-Service im Dialog mit
dem System visuell zu erstellen. Dieser Web-Service soll die Extraktion der über mehrere Webseiten verteilten Daten und ggf. deren Beziehungen ermöglichen. Das Konzept
soll in Form einer Webanwendung prototypisch implementiert werden. Dabei sollen die
Daten zuerst auf ein abstraktes Modell abgebildet werden, damit die Zielplattform –
z. B. JAX-RS7 – leicht geändert werden kann. Dies entspricht einer Trennung der semiautomatisch erhobenen Anforderungen an den Service von seiner konkreten Implementierung. Die implementierte Anwendung wird im Folgenden mit DisRESTractor8 bezeichnet.
1.3. Gliederung
Kapitel 1 beinhaltet die Problemstellung und Zielsetzung dieser Arbeit.
In Kapitel 2 werden grundlegende Begriffe definiert. Weiterhin wird die Struktur von
Webseiten beschrieben. Ebenso wird der Architekturstil REST präsentiert. REST- und
SOAP-basierte Web-Services werden verglichen.
Kapitel 3 gibt einen Überblick über verwandte wissenschaftliche Arbeiten und stellt die
auf dem Markt verfügbare Software zur Extraktion von Daten vor.
In Kapitel 4 wird das in dieser Arbeit entwickelte Konzept von DisRESTractor präsentiert. Zuerst wird es anhand eines Anwendungsszenarios exemplarisch vorgestellt.
Danach werden ein Modell für extrahierte Daten und das entsprechende Metamodell erläutert. Dann wird der Dialog mit dem Benutzer in DisRESTractor erklärt. Schließlich
werden generierte Services beschrieben.
Vor der Implementierung wurden Interviews mit potentiellen Benutzern von DisRESTractor durchgeführt, um die Eignung und Bedienbarkeit des Konzeptes für Benutzer
6
URI steht für Uniform Resource Identifier.
JAX-RS ist eine Spezifikation von Java-Programmierschnittstellen für die Entwicklung von WebServices entsprechend dem Architekturstil REST.
8
DisRESTractor steht für Distributed Resources Extractor.
7
2
1. Einleitung
ohne Programmierkenntnisse anhand von Mockups 9 in Form von statischen Webseiten
zu testen und erhaltene Verbesserungsvorschläge in die Implementierung einzubeziehen.
In Kapitel 5 werden diese Interviews zur Evaluation des Konzeptes vorgestellt.
Kapitel 6 beinhaltet den Entwurf und die Implementierung der Webanwendung DisRESTractor, die das in Kapitel 4 beschriebene Konzept prototypisch umsetzt, also die
Daten in ein Modell abbildet und schließlich einen fertigen Web-Service generiert. Dabei
wird zuerst die technische Plattform für die Entwicklung von DisRESTractor und die
Generierung von Services beschrieben. Dann wird die Architektur von DisRESTractor
vorgestellt. Nach der Beschreibung des Ablaufs bei der Arbeit mit DisRESTractor wird
die Architektur von generierten Services präsentiert.
Kapitel 7 fasst die vorliegende Arbeit zusammen und gibt einen Ausblick über die Möglichkeiten, das Konzept und die Implementierung einzusetzen und weiterzuentwickeln.
9
Ein Mockup ist ein Prototyp der Benutzeroberfläche einer zu entwickelnden Software ohne weitere
Funktionalität.
3
2. Grundlagen
Das Internet stellt große Mengen von Informationen zur Verfügung, die (meist unstrukturiert) durch HTML-Seiten repräsentiert werden. Dabei ist der Zugriff von Menschen über
Webbrowser gedacht. Web-Services sollen den verteilten Anwendungen die Kommunikation ohne Browser ermöglichen, um gewünschte Daten automatisiert zu bekommen oder
bestimmte Aktionen auf entfernten Rechnern durchzuführen. Wenn Webseitenbetreiber
keine Web-Services anbieten, wird versucht, relevante Informationen durch sogenanntes
Web-Scraping zu extrahieren.
Dieses Kapitel vermittelt Grundlagen für das Verständnis von Web-Scraping und stellt
den Architekturstil REST vor. Am Ende wird Web-Scraping definiert, und oft verwendete
Extraktionstechniken werden beschrieben.
2.1. Struktur von Webseiten
Webseiten sind HTML-Dokumente im World Wide Web (WWW), die in einem Webbrowser
unter Angabe eines URL (s. Abschnitt 2.4.2) abrufbar sind. Hypertext Markup Language
(kurz HTML) ist eine Auszeichnungssprache zur Beschreibung der Struktur von Webseiten. HTML ist in [RHJ99] spezifiziert und wird von W3C 1 weiterentwickelt.
In Listing 2.2 ist die allgemeine Struktur eines HTML-Dokumentes dargestellt.
1
2
3
4
5
6
7
8
9
10
11
<!DOCTYPE HTML PUBLIC "−//W3C//DTD␣HTML␣4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Titel der Webseite</title>
<!−− Evtl. weitere Kopfinformationen −−>
</head>
<body>
Inhalt der Webseite
</body>
</html>
Listing 2.1: Struktur eines HTML-Dokumentes
Mit Hilfe von sogenannten Tags wie title, body etc. werden einzelne Teile einer Webseite beschrieben. Die erste Zeile im Listing definiert einen Dokumenttyp, der die Syntaxregeln für dieses Dokument festlegt.
1
Das World Wide Web Consortium (W3C) ist das Gremium zur Standardisierung der Technologien
für das World Wide Web.
4
2. Grundlagen
Wie man im Listing sieht, haben Webseiten eine baumartige Struktur (s. Abbildung
2.1). Um auf alle Elemente dieser Struktur zugreifen zu können, wurde von W3C das
Document Object Model (kurz DOM) spezifiziert. Das ist eine Schnittstelle, die eine Navigation im Baum und Manipulationen mit Knoten ermöglicht. DOM wird insbesondere
dafür verwendet, um eine Webseite während der Anzeige im Browser mit Hilfe einer
Skript-Sprache wie JavaScript dynamisch zu verändern.
html
head
title
body
...
...
...
Abbildung 2.1.: Baumstruktur eines HTML-Dokumentes
Für die Formatierung von Webseiten werden Cascading Style Sheets (CSS) verwendet.
Mit CSS kann man festlegen, wie der Inhalt innerhalb eines Tags dargestellt werden soll.
CSS können unter anderem in einer separaten Datei abgelegt und in HTML eingebunden
werden. Dies dient einer besseren Trennung des Inhalts von der optischen Gestaltung.
Aufgrund einer großen Verbreitung von XML wurde eine weitere Auszeichnungssprache XHTML spezifiziert, die sich von HTML derart unterscheidet, dass der Quellcode von
Webseiten Syntaxregeln von XML erfüllt. Dies ist für die vorliegende Arbeit von großer
Bedeutung, da es zahlreiche Techniken und Werkzeuge gibt, die es ermöglichen, XMLDokumente zu verarbeiten.
Heutzutage werden viele Webseiten nicht mehr von Menschen in HTML manuell verfasst,
sondern automatisch generiert. Dabei werden Teile des Dokumentes durch den Quellcode
einer Programmiersprache ersetzt, der die Inhalte beispielsweise aus einer Datenbank
lädt und als HTML ausgibt. Auf diese Weise sind z. B. die meisten Online-Shops aufgebaut,
deren Produktlisten dynamisch geladen werden. Dadurch ändern sich die Inhalte von
Webseiten, die Struktur bleibt jedoch immer gleich. Dies ist eine wichtige Voraussetzung
für eine erfolgreiche Informationsextraktion.
Immer häufiger wird Asynchronous JavaScript and XML (kurz AJAX) für asynchrone
Datenübertragung zwischen einem Webbrowser und einem Server eingesetzt. Per AJAX
kann ein Client eine Anfrage an den Server senden und anhand der erhaltenen Daten
bestimmte Teile der Webseite ändern, ohne die Webseite komplett neu zu laden. Das
verringert die Wartezeiten des Clients und ermöglicht es, Benutzerinteraktionen dynamischer zu gestalten.
5
2. Grundlagen
AJAX wird beispielsweise in der Suchmaschine von Google 2 (s. Abbildung 2.2) verwendet.
Bei der Eingabe der ersten Zeichen eines Suchbegriffes in das entsprechende Eingabefeld
erscheint eine Liste mit möglichen Suchbegriffen. Diese Liste wird beim Eingeben oder
Entfernen jedes Zeichens angepasst. Auf der technischen Ebene wird bei jeder Änderung
im Eingabefeld eine Anfrage mit dem eingegebenen Teilwort an den Server gesendet.
Daraufhin sendet der Server eine Liste mit Vorschlägen an den Client zurück, und der
Client bindet sie per JavaScript in die Webseite ein.
Abbildung 2.2.: AJAX am Beispiel von Google
AJAX-Anfragen werden per JavaScript abgesetzt. Momentan gibt es viele JavaScriptFrameworks wie jQuery 3 oder Dojo Toolkit 4 , die die Arbeit mit AJAX erleichtern.
Wenn Informationen auf der Webseite per AJAX nachgeladen werden, bleibt der URL5 der
Webseite gleich. Dies hat zur Folge, dass diese Informationen nicht wieder erscheinen,
wenn dieselbe Webseite über ein Lesezeichen oder den Zurück-Button im Webbrowser
aufgerufen wird.
Eine nützliche Möglichkeit, die momentan fast alle Webbrowser zur Verfügung stellen,
ist die Ausführung von JavaScript in der aktuellen Webseite über eine besondere Art
von Lesezeichen – so genannte Bookmarklets. Das folgende Bookmarklet ändert z. B. die
Hintergrundfarbe der aktuell geöffneten Webseite:
javascript:document.body.style.backgroundColor="green"
Im Rahmen dieser Arbeit werden Bookmarklets für das Starten von DisRESTractor
verwendet. Dies wird in Kapiteln 4 und 6 beschrieben.
2
http://www.google.de/
http://jquery.com/
4
http://dojotoolkit.org/
5
Ein Uniform Resource Locator (URL) gibt an, wo eine Webseite im Netz zu finden ist und über welches
Datenübertragungsprotokoll sie angefordert werden kann.
3
6
2. Grundlagen
2.2. Web-Services
Die Extraktion von Daten wird im Rahmen der vorliegenden Arbeit in einem RESTbasierten Web-Service gekapselt. Bevor der Architekturstil REST vorgestellt wird, werden
Web-Services zuerst allgemein definiert. Dann wird ein sehr verbreiteter Ansatz bei der
Entwicklung von Web-Services kurz beschrieben, und sein Unterschied zu REST wird
erklärt.
Definition 2.1 (Service nach [Lüb08]) Ein Dienst (Service) ist eine im Netzwerk
verfügbare, lose gekoppelte Softwarekomponente, welche wohldefinierte Schnittstellen implementiert und mit standardisierten Protokollen aufgerufen werden kann.
Da die Entwicklung von Web-Services durch service-orientierte Architekturen (SOA)
stark geprägt wurde, werden sie meist mit den folgenden Standards in Verbindung gebracht:
• WSDL (Web Services Description Language) zur Beschreibung der Schnittstellen –
also der Methoden, die ein Web-Service zur Verfügung stellt sowie deren Parameter.
• SOAP (ursprünglich Simple Object Access Protocol) oder XML-RPC (Remote Procedure Call) zur Kommunikation.
• UDDI (Universal Description, Discovery and Integration) als Verzeichnisdienst zur
Registrierung von Web-Services.
Alle drei Standards basieren auf XML – einer Sprache, die plattform- und technologieunabhängig ist. Das ist sehr wichtig, da Interoperabilität das Grundprinzip bei der
Entwicklung von Web-Services ist.
Das W3C bietet mehrere Definitionen von Web-Services an. Eine davon ist:
Definition 2.2 (Web-Service nach [HB04]) A Web service is a software system designed to support interoperable machine-to-machine interaction over a network. It has an
interface described in a machine-processable format (specifically WSDL). Other systems
interact with the Web service in a manner prescribed by its description using SOAPmessages, typically conveyed using HTTP with an XML serialization in conjunction
with other Web-related standards.
Das geplante Haupteinsatzgebiet von Web-Services liegt im Bereich von Geschäftsprozessen. Dabei werden zwei Ziele verfolgt. Einerseits kann man häufig verwendete Geschäftsfunktionen (z. B. Währungsumrechnungen) in neuen Web-Services kapseln, um
diese in verschiedenen Anwendungen wiederverwenden zu können. Andererseits können
Geschäftsfunktionen aus vorhandenen Web-Services (z. B. mit Hilfe von BPEL6 ) in einem
größeren Geschäftsprozess zusammengestellt werden.
6
BPEL (Business Process Execution Language) ist eine Modellierungssprache für Geschäftsprozesse.
7
2. Grundlagen
Auf den Ansatz der Generierung von prozess-orientierten Web-Services auf Basis von
SOAP, WSDL und UDDI wird in dieser Arbeit nicht näher eingegangen. Weiterführende Informationen zur Generierung von Web-Services im SOAP-Stil liefert [LHVL05]. Die vorliegende Arbeit beschäftigt sich mit Web-Services auf Basis von REST, da REST leichtgewichtig und ressourcen-orientiert ist und somit zum Konzept dieser Arbeit besser passt.
Der Architekturstil REST wird in Abschnitt 2.4 vorgestellt und detailliert beschrieben.
2.3. Mashups
Im Rahmen von Web 2.0 stellen immer mehr Internet-Portale keine Web-Services auf
Basis von SOAP und WSDL zur Verfügung, sondern bieten sogenannte Web-APIs (auch
Web-Service-APIs genannt) an, die häufig REST-basiert sind. Eine API (Application
Programming Interface) ist eine Programmierschnittstelle, die von einem Softwaresystem anderen Programmen zur Anbindung an das System zur Verfügung gestellt wird.
Über Web-APIs wird eine maschinelle Verwendung von Ressourcen und Funktionen eines Webportals ermöglicht. In der Dokumentation von Web-APIs wird die Struktur
von HTTP-Anfrage-Nachrichten sowie von zugehörigen Antwort-Nachrichten definiert,
die nicht zwingend im XML-Format übertragen werden, sondern z. B. JavaScript Object
Notation (s. Abschnitt 2.4.3) verwenden können.
Die folgenden bekannten Webseitenbetreiber bieten offene Schnittstellen für ihre Ressourcen und Dienste an:
Google 7 stellt für seine Websuche nach Webseiten, Bildern, Büchern, Nachrichten etc.
die Google AJAX Search API 8 zur Verfügung. Außerdem erlaubt Google die
Verwendung seiner digitalen Karten über die Google Maps API 9 .
Yahoo 10 ermöglicht wie Google die Verwendung seiner Dienste wie Suche nach Webseiten, Personen und Telefonnummern etc.
Amazon erlaubt über seine Amazon Web services 11 die Suche nach Produkten und
bietet unter anderem Speicher- und Bezahlungsdienste an.
Flickr 12 ermöglicht die Suche nach und Verwaltung von Bildern über die API auf
seinem Fotoportal.
Web-APIs werden in einer neuen Art von webbasierten Anwendungen – sogenannten
Mashups eingesetzt.
Definition 2.3 (Mashup) Als Mashups werden Webanwendungen bezeichnet, die auf
der Kombination von bestehenden Inhalten aus verschiedenen Quellen basieren.
Als Beispiel für einen Mashup dient die in Abbildung 2.3 dargestellte Webseite Houston Crime Maps 13 . Dieser Mashup stellt in einer Karte dar, an welchen Orten der
8
http://code.google.com/apis/ajaxsearch/
http://www.google.com/apis/maps/
11
http://aws.amazon.com
13
http://houstoncrimemaps.com
9
8
2. Grundlagen
US-amerikanischen Stadt Houston vor kurzer Zeit Verbrechen begangen wurden. Dafür
verwendet er das Kartenmaterial von Google – Google Maps API – und die Meldungen
der Polizei Houstons14 . Die Webseite http://www.programmableweb.com/ gibt einen
großen Überblick über die im Netz verfügbaren Web-APIs und Mashups. Derzeit werden dort 1886 APIs und 4743 Mashups15 gelistet.
Abbildung 2.3.: Die Webseite von Houston Crime Maps
Mashups müssen nicht zwangsläufig direkt in einem Webbrowser laufen. Google Earth 16
stellt einen Mashup als eine eigenständige Anwendung dar, in der digitale Karten mit
externen Quellen – z. B. geokodierten Fotos oder Wikipedia17 -Einträgen – kombiniert
werden.
Obwohl viele Mashups in Unterhaltungsportalen eingesetzt werden, gewinnen sie auch
in Unternehmen immer mehr an Bedeutung. So machen sich Immobilienanbieter digitale
Karten zu Nutze, um ihre Objekte anzuzeigen. Produktkataloge verschiedener Anbieter
werden kombiniert, um beste Angebote zu finden.
Für die Erstellung von Mashups gibt es zurzeit zahlreiche Werkzeuge – sogenannte
Mashup-Editoren, die auch für Benutzer ohne Programmierkenntnisse zugeschnitten
14
http://www.houstontx.gov/police/cs/stats2.htm
Stand: 14.04.2010
16
http://earth.google.com/intl/de/
17
http://de.wikipedia.org/
15
9
2. Grundlagen
sind. Yahoo! Pipes 18 ermöglicht es, Inhalte aus verschiedenen Quellen über die grafische
Benutzeroberfläche zu kombinieren, diverse Filter anzuwenden und ein Ausgabeformat
zu bestimmen.
Mashups kommen oft in sogenannten situationsbezogenen Anwendungen (engl. situational Applications) zum Einsatz, die dafür erstellt werden, um ein dringendes, spezielles
Geschäftsproblem zu lösen. Sie werden häufig von kleinen Benutzergruppen und für eine
kurze Zeit verwendet, z. B. für die Überwachung von Angeboten eines bestimmten Produktes. Der Erstellungsprozess solcher Anwendungen wird oftmals von den Benutzern
selbst durchgeführt und ist im Vergleich zum klassischen Softwareentwicklungsprozess
viel schneller.
Eine gute Übersicht von Mashup-Technologien in Unternehmen gibt [Ger08]. Detailliertere Informationen liefern [CCHZ08], [Hoc08] und [TSK08].
2.4. REST
In Abschnitt 2.2 wurden Web-Services im SOAP-Stil vorgestellt, der Prozesse in den
Mittelpunkt stellt. In diesem Abschnitt wird ein anderer Ansatz bei der Entwicklung
von Web-Services beschrieben, nämlich Representational State Transfer (REST).
REST ist ein Architekturstil, der zum ersten Mal im Jahr 2000 in der Dissertation von Roy
Thomas Fielding ([Fie00]) vorgestellt wurde. HTTP19 funktioniert nach REST-Prinzipien
und das WWW auch. Das zentrale Konzept von REST sind Ressourcen, die durch URIs
eindeutig identifizierbar sind und eine oder mehrere Repräsentationen haben.
2.4.1. Grundprinzipien
Die Grundprinzipien von REST sind:
• Ressourcen mit eindeutiger Identifikation (Adressierbarkeit),
• Verknüpfungen/Hypermedia,
• Standardmethoden,
• Unterschiedliche Repräsentationen,
• Zustandslose Kommunikation.
Die folgenden Abschnitte gehen auf die einzelnen Prinzipien detailliert ein.
18
19
http://pipes.yahoo.com/
HTTP (Hypertext Transfer Protocol ) ist ein Protokoll zur Übertragung von Daten – insbesondere von
Webseiten im World Wide Web – über ein Netzwerk und wird in [FGM+ 99] spezifiziert.
10
2. Grundlagen
2.4.2. Ressourcen
Das W3C definiert das WWW folgendermaßen:
Definition 2.4 (World Wide Web nach [JW04]) The World Wide Web (WWW,
or simply Web) is an information space in which the items of interest, referred to as
resources, are identified by global identifiers called Uniform Resource Identifiers (URI).
Im Mittelpunkt stehen also adressierbare Ressourcen. Beispiele für Ressourcen sind
HTML-Dokumente, Bilder, Videos, temporäre Dienste wie z. B. die Wettervorhersage etc.
Eine Ressource muss aber nicht immer individuell sein und kann auch eine Menge von
Elementen – z. B. eine Liste von Produkten – repräsentieren.
Das ursprüngliche Ziel des WWW war es, Informationen (Ressourcen) auf eine einfache Art
auszutauschen und Verbindungen dazwischen zu erstellen. Dafür müssen die Ressourcen
adressierbar sein. Das wird durch URI s erreicht - ein einheitliches Konzept für die
Vergabe von eindeutigen Schlüsseln. URIs bilden einen globalen Namensraum und stellen
sicher, dass Ressourcen weltweit eindeutig identifiziert werden können. Das Beispiel für
einen URI, der die Eingangsseite einer Website adressiert, ist:
http://example.org/index.html
URIs bringen auch zusätzliche Vorteile mit sich. So können Ressourcen auf Webseiten
verlinkt, als Lesezeichen per E-Mail verschickt oder im Cache eines Webbrowsers gespeichert werden.
Obwohl es keine zwingende Forderung von REST und W3C gibt, ist es sinnvoll URIs
beschreibend zu benennen, so dass eine Ressource und ihr URI intuitiv zusammenpassen.
Hier sind einige Beispiele für sinnvoll benannte URIs:
• http://example.org/products/123: ein Produkt mit der ID 123
• http://example.org/software/xyz/releases/1.2.3.zip: die Version 1.2.3 eines Softwaresystems xyz
• ftp://example.org/aDirectory/aFile.pdf: die im Verzeichnis aDirectory abgelegte Datei aFile.pdf
• http://example.org/products: die Menge aller Produkte
• http://example.org/software/xyz/releases/: die Menge aller Versionen
• ftp://example.org/aDirectory: die Menge aller Dateien im Verzeichnis aDirectory
Jede Ressource muss also mindestens einen URI besitzen. Es ist aber erlaubt, mehrere
URIs – so genannte URI aliases – einer Ressource zuzuweisen.
Ein URI ist entweder ein URL (Uniform Resource Locator) oder ein URN (Uniform Resource Name). Ein URL lokalisiert eine Ressource über den Domainnamen (z. B: example.org)
und gibt über das Netzwerkprotokoll (z. B. HTTP oder FTP) an, wie auf die Ressource zugegriffen werden kann. Ein URL kann sich ändern, wenn die Ressource auf einen anderen
11
2. Grundlagen
Server verschoben wird. Im Gegensatz dazu ist ein URN unabhängig vom Server und Protokoll und soll die Ressource auch dann identifizieren, wenn sie nicht auf einem Server
erreichbar ist. Der folgende URN identifiziert die Spezifikation von HTTP ([FGM+ 99]):
urn:ietf:rfc:2616
Ein entsprechender URL derselben Ressource lautet20 :
http://www.ietf.org/rfc/rfc2616.txt
2.4.3. Unterschiedliche Repräsentationen
Repräsentationen sind Darstellungen einer Ressource in einem definierten Format. Eine
Ressource kann mehrere Repräsentationen haben. Für eine Ressource „Person“ könnten
untern anderen eine einfache textuelle Repräsentation, eine HTML-Darstellung und ein
Bild im JPEG-Format existieren.
In HTTP ist bei der Kommunikation zwischen einem Server und einem Client die sogenannte Content Negotiation, also eine Aushandlung von Inhaltsformaten, vorgesehen,
bei der ein bestimmtes Format angefordert werden kann. Dieses Format wird im AcceptFeld der HTTP-Anfrage angegeben. Eine typische HTTP-Anfrage sieht wie folgt aus:
GET /wiki/Http HTTP/1.1
Host: en.wikipedia.org
User-Agent: Mozilla/5.0 ... Firefox/3.5.5 ...
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
...
In dieser Anfrage fordert der Webbrowser Mozilla Firefox die Ressource /wiki/Http
(einen Wikipedia-Artikel über HTTP) vom Server en.wikipedia.org. Im Accept-Feld
teilt der Webbrowser dem Server über den Parameter q=0.9 mit, dass er die Formate
HTML, XHTML und XML bevorzugt. Andere Formate (*/*) werden auch akzeptiert. Der
Parameter q gibt also an, welche Formate bevorzugt werden. Werte von q liegen zwischen
0 (inakzeptabel) und 1 (am meisten bevorzugt).
Wenn mehrere Formate mit der gleichen Gewichtung (wie in diesem Beispiel) angegeben
werden, bestimmt die Reihenfolge die Priorität einzelner Formate. Der Browser erwartet
also vom Server im Idealfall ein HTML-Dokument (text/html).
Als Antwort wird folgende Nachricht geliefert:
HTTP/1.0 200 OK
Date: Sat, 21 Nov 2009 10:42:36 GMT
Content-Type: text/html; charset=utf-8
...
20
Stand: 14.04.2010
12
2. Grundlagen
Der sogenannte Statuscode 200 OK gibt an, dass die Anfrage erfolgreich bearbeitet wurde. Im Feld Content-Type steht, dass eine HTML-Repräsentation der Ressource geliefert
wurde. Die Zeichenkodierung der Nachricht ist dabei UTF-821 .
Bei der Entwicklung steht oft die Frage, welche Repräsentationen für eine Ressource
angeboten werden. Je allgemeingültiger das Format ist, desto mehr potenzielle Clients
können es verstehen.
Folgende Repräsentationen kommen am häufigsten zum Einsatz:
• XML ist neben (X)HTML am meisten verbreitet, da es eine einfache Definition eines
eigenen Formates ermöglicht.
• (X)HTML hat den Vorteil, dass es von jedem Webbrowser verstanden wird und
diverse Möglichkeit bietet, die Daten zu formatieren. Nachteilig kann aber die
Vermischung von Form und Inhalt angesehen werden. Wegen vieler Tags für die
Formatierung kann HTML die Dokumentgröße erhöhen. Außerdem sagt HTML nichts
über die Semantik der z. B. in div- oder span-Tags, also in allgemeinen Containern
untergebrachten Daten.
• Das CSV-Format (Comma Separated Values) wird häufig eingesetzt, da es sehr
einfach zu benutzen ist und sich gut eignet, tabellarische Daten zu präsentieren.
Es lässt sich in vielen Tabellenkalkulationsprogrammen bearbeiten.
• JSON (JavaScript Object Notation) stammt aus dem JavaScript-Umfeld, wird aber
zurzeit in fast jeder Programmiersprache unterstützt. JSON eignet sich aufgrund
einer kompakten Syntax sehr gut für die Übertragung von Datenstrukturen. Der
Datenvolumen ist dabei geringer als bei XML. Außerdem kann JSON direkt in JavaScript verarbeitet werden, wobei XML geparst werden muss. Deswegen ist JSON
insbesondere im Zusammenhang mit AJAX-Aufrufen22 verbreitet. Im Vergleich zu
XML gibt es in JSON aber keine Möglichkeit, Namensräume zu definieren und ein
Dokument anhand seines Schemas zu validieren.
• RSS und Atom sind XML-Formate für eine einfache und strukturierte Veröffentlichung von Änderungen auf Webseiten. In diesen Formaten werden Nachrichten
präsentiert, die unter anderem ein Veröffentlichungsdatum und eine Kurzbeschreibung enthalten.
• Binäre Formate: Druckformate wie PDF oder PostScript, Bildformate wie JPEG,
GIF oder PNG, Archivformate wie TAR, JAR oder ZIP sowie Audio und Video.
• Microformate dienen zur Speicherung von Kalendereinträgen (hCalendar oder
iCalendar), Adressdaten (hCard) oder Produktbeschreibungen (hProduct).
• Text ohne definierte Sturktur (text/plain) wird manchmal zusätzlich zu anderen
oben genannten Formaten für den Fall angeboten, dass der Client andere Formate
nicht bearbeiten kann.
21
UTF-8 steht für 8-bit Unicode Transformation Format. und ist die am weitesten verbreitete Kodierung
für Unicode-Zeichen.
22
AJAX (Asynchronous JavaScript and XML) ist ein Konzept der asynchronen Datenübertragung
zwischen einem Browser und dem Server.
13
2. Grundlagen
2.4.4. Verknüpfungen/Hypermedia
Hypermedia beruht auf dem Konzept von Verknüpfungen (Links). Diese sind vor allem
aus HTML bekannt und ermöglichen dem Benutzer, im Web zu navigieren oder eingebundene Daten wie PDF-Dokumente zu öffnen. Sie sind aber auch maschinell bearbeitbar.
So folgen Suchmaschinen-Roboter den Links, um weitere Inhalte zu finden.
Es folgt ein Beispiel, wie Links in XML eingebunden werden können:
1
2
3
4
5
6
<order href="http://example.org/customers/1234"<>
<amount>10</amount>
<product ref="http://example.com/products/4554"/>
<customer ref="http://example.org/customers/1234"/>
<link rel="cancel" href="./cancellations"/>
</order>
Listing 2.2: Verknüpfungen in XML
Eine Applikation kann also den Links in product- und customer-Tags folgen, um weitere Informationen zu bekommen. Der Vorteil des Hypermedia-Ansatzes ist es, dass Verknüpfungen anwendungsübergreifend (http://example.com und http://example.org)
sind.
Ein weiterer Vorteil der Verknüpfungen ist die Möglichkeit, den Applikationszustand
zu steuern. Durch Hinzufügen und Entfernen von Links kann der Server dem Client
mitteilen, welche Aktionen als nächstes ausführbar sind. Im obigen Beispiel kann der
Server seinen Zustand ändern, indem er den Tag link (s. Zeile 5) entfernt und somit
keine Stornierung mehr erlaubt. Andererseits kann der Client den Zustand des Servers
ändern, indem er diesem (noch verfügbaren) Link folgt und den Auftrag storniert.
2.4.5. Standardmethoden
In HTTP besitzt jede Ressource eine einheitliche Schnittstelle, indem sie folgende Standardmethoden implementiert:
GET liefert eine Repräsentation einer Ressource.
POST erstellt eine neue Ressource.
PUT verändert eine bestehe Ressource oder erstellt eine neue, falls diese noch
nicht existiert.
DELETE löscht eine Ressource.
HEAD liefert Metadaten einer Ressource.
OPTIONS prüft, welche der obigen fünf Methoden unterstützt werden.
GET ist die am häufigsten verwendete Methode. Das Aufrufen einer Webseite im Browser
oder das Folgen eines Links löst immer eine GET-Operation aus.
GET ist in der HTTP-Spezifikation als sicher („save“) definiert, d. h. bei einem mehrmaligen
Ausführen dieser Methode wird der Zustand des Servers nicht verändert, also als ob die
14
2. Grundlagen
Methode nie ausgeführt worden wäre. Das Gegenteil kann nur dann passieren, wenn die
Methode nicht zweckgemäß – also nicht für das Lesen von Daten – zur Verfügung gestellt
wird. Ein Beispiel dafür ist ein Link zum Löschen einer Ressource. SuchmaschinenRoboter können diesem Link folgen und so die Ressource unabsichtlich löschen. GET ist
also nur zum Abrufen von Ressourcen gedacht. Daher dürfen bei der Entwicklung von
Webanwendungen keine unsicheren Aktionen per GET ansprechbar sein.
Die Methode GET ist außerdem idempotent. Das bedeutet, dass ein mehrmaliges Aufrufen
die gleichen Seiteneffekte bewirkt wie ein einmaliges. Der Ressourcen-Zustand bleibt wie
nach dem ersten Aufrufen.
Aufgrund ihrer Verbreitung wurde die Operation GET optimiert und unterstützt ein
effizientes Caching. Das bedeutet, dass Daten bei einem mehrmaligen Aufrufen gar nicht
gesendet werden müssen, wenn sie seit der letzten Anfrage nicht verändert wurden. Dies
erlaubt das Feld If-Modified-Since des HTTP-Headers, das den Zeitpunkt der letzten
Anfrage enthält. Wenn die Daten nicht verändert wurden, gibt der Server lediglich eine
Nachricht HTTP/1.0 304 Not Modified zurück.
Die Methode POST wird auf zwei Weisen verwendet. Zum einen können damit neue Ressourcen angelegt werden. Zum anderen wird diese Methode benutzt, um eine Aktion
durchzuführen, für die keine der Standardmethoden passt. Dafür ist gerade POST geeignet, da diese Operation weder sicher noch idempotent ist und nicht im Cache gespeichert
wird. So erwartet der Client keine Garantien beim Ausführen dieser Methode.
PUT aktualisiert eine Ressource, falls diese vorhanden ist, oder erzeugt andernfalls eine
neue. Das ist eine idempotente Methode und erzeugt beim mehrfachen Ausführen keine
neuen Instanzen derselben Ressourcen.
Die Operation DELETE ist für das Löschen von Ressourcen vorgesehen. Sie ist idempotent, da eine mehrmals gesendete DELETE-Anfrage nur beim ersten Mal eine Ressource
entfernt. Diese Methode kann auch für logisches Löschen eingesetzt werden, wobei z. B.
eine Bestellung nicht aus der Datenbank entfernt, sondern als storniert markiert wird.
Die Operation HEAD ist eine abgekürzte Variante von GET. Sie liefert lediglich die Metadaten – also den Header einer Ressource – und nicht die komplette Repräsentation.
Dies kann nützlich sein um herauszufinden, ob eine Ressource noch existiert, wann sie
zuletzt geändert wurde oder wie groß sie ist. Laut der HTTP-Spezifikation muss die HEADMethode genau die gleichen Metadaten wie GET liefern. Wie GET ist HEAD sicher und
idempotent.
Die Methode OPTIONS liefert auch Metadaten über eine Ressource, enthält aber ein
zusätzliches Feld Allow. Dieses gibt an, welche Operationen eine Ressource unterstützt.
Der folgende Beispiel-Header bedeutet, dass die Ressource nur lesend ansprechbar ist.
Allow: GET, HEAD
Mit Hilfe der oben beschriebenen Standardmethoden und eines geeigneten Ressourcenmodells lässt sich eine Vielzahl von Anwendungsszenarien umsetzen.
15
2. Grundlagen
2.4.6. Zustandslosigkeit
Nach dem REST-Prinzip muss jede Anfrage völlig unabhängig von den anderen Anfragen
sein. Das heißt, dass ein Client alle relevanten Informationen in der Anfrage an einen
Server übertragen muss, damit diese verstanden werden kann, ohne den Kontext auf
dem Server zu speichern.
Einerseits hat das eine große Bedeutung für die Skalierbarkeit der Anwendung. Andererseits können verschiedene Server nacheinander folgende Anfragen eines Clients bearbeiten. So werden die Verfügbarkeit bei Ausfällen einzelner Server und die Performance
durch eine geschickte Aufteilung der Anfragen an die Server sichergestellt.
2.4.7. Service-Dokumentation
Damit durch einen Service angebotene Ressourcen von Benutzern und Entwicklern verwendet werden können, müssen die Schnittstellen dokumentiert werden. Dafür gibt es
zum einen für Menschen gedachte Beschreibungen im Klartext und zum anderen die
maschinenlesbaren Beschreibungssprachen WSDL und WADL (s. weiter unten).
In [Til09] wird die Möglichkeit betrachtet, keine explizite Dokumentation zur Verfügung
zu stellen. Das kann dadurch begründet werden, dass Ressourcen in HTTP selbstbeschreibend sind. Damit ist Folgendes gemeint. Angenommen, es wird für eine durch einen URI
definierte Ressource die Beschreibung ihrer Schnittstelle gesucht. Als Erstes kann der
Host-Anteil (z. B. http://example.org) der URI extrahiert und eine HTTP-HEAD-Anfrage
an diesen Server gesendet werden. In der Antwort-Nachricht bekommt man viele Metadaten – unter anderen auch den Medientyp, z. B. text/xml. Offiziell registrierte Medientypen werden schon in ihrer Spezifikation beschrieben. Bei XML-Dokumenten kann man
das Schema-Element auslesen und auf diese Weise das Format erhalten. Problematisch
wird es für XML-Dokumente ohne Schemaangaben und für proprietäre Medientypen.
Häufig wird eine API im Klartext – meistens in HTML – beschrieben. In [Til09] wird
empfohlen, die Dokumentation in die HTML-Repräsentation einer Ressource zu packen
und diese ähnlich mit der toString()-Methode in Java immer anzubieten.
Es gibt auch maschinenlesbare Sprachen für die Beschreibung von Schnittstellen. Das
sind WSDL und WADL.
Web Services Description Language (WSDL) ist eine Empfehlung von W3C (s. [BL07])
und wird vor allem für die Beschreibung von Web-Services im SOAP-Stil (s. Abschnitt 2.2)
eingesetzt. WSDL definiert eine Menge von verfügbaren Methoden und deren Parameter.
Diese Tatsache passt nicht zum REST-Konzept, in dem Standardoperationen (GET, PUT
etc.) festgelegt sind. Außerdem lässt WSDL nur XML als Nachrichtenformat zu. In REST
gibt es jedoch keine Einschränkungen bezüglich des Nachrichtenformats. Dennoch wird
in [Man08] gezeigt, dass die Beschreibung eines REST-basierten Service mittels WSDL
(auch wenn nur eingeschränkt) möglich ist.
Web Application Description Language (WADL) ([Had09]) wurde speziell für die Beschreibung von HTTP-basierten Anwendungen – also REST-konformen Web-Services – entwickelt. Das Beispiel einer codeWADL-Dokumentation findet man im Anhang in Abschnitt
A.2.
16
2. Grundlagen
Der Vorteil der maschinenlesbaren Beschreibungssprachen liegt darin, dass mit Hilfe
entsprechender Werkzeuge aus einer Schnittstellenbeschreibung ein Client automatisch
generiert werden kann.
Mehr zu REST gibt es in [Fie00], [RR07], [Til09].
2.5. Web-Scraping
Da nicht alle Webseitenbetreiber offene Schnittstellen für ihre Inhalte anbieten, müssen
Informationen extrahiert und in strukturierte Form gebracht werden.
Definition 2.5 (Web-Scraping, Web-Scraper) Der Prozess der Informationsextraktion aus Webseiten oder anderen Anwendungen wird als Web-Scraping oder ScreenScraping bezeichnet. Entsprechende Software-Werkzeuge werden Screen-Scraper oder
Wrapper genannt.
Im Allgemeinen führt jeder Screen-Scraper die folgenden drei Schritte bei der Informationsextraktion:
1. Herunterladen der Webseite(n) mit relevanten Daten.
2. Extraktion der Daten mit Hilfe einer Extraktionssprache.
3. Ausgabe in einem definierten Format.
Bei der Programmierung von Wrappern wurden früher reguläre Ausdrücke verwendet,
die bestimmte Teile einer Webseite lieferten. Reguläre Ausdrücke können die zu extrahierenden Daten präzise beschreiben, sind aber insbesondere bei einem großen Detailgrad
sehr lang und kaum lesbar. Der folgende reguläre Ausdruck soll alle E-Mail-Adressen
finden:
[a-z0-9!#$%&’*+/=?^_‘{|}~-]+(?:\.[a-z0-9!#$%&’*+/=?^_‘{|}~-]+)*
@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?
Da immer mehr Webseiten XHTML-konform23 sind, werden XML-Parser benutzt, die heutzutage fast für jede Programmiersprache verfügbar sind. Weiterhin gibt es Abfragesprachen für XML wie XPath und XQuery, um Teile eines XML-Dokumentes zu adressieren.
Wenn eine Webseite nicht XHTML- oder sogar nicht HTML-konform ist, können Werkzeuge wie HTMLTidy 24 eingesetzt werden, die Syntax-Fehler von Webseiten korrigieren
und valides (X)HTML liefern. Eine gute Übersicht über die Möglichkeiten, XQuery in der
Programmiersprache Java für die Informationsextraktion einzusetzen, gibt [Goe05].
Einige Web-Scraping-Werkzeuge verwenden eigene Extraktionssprachen. In Abschnitt
3.2 wird eine solche Sprache namens Elog vorgestellt, die im Werkzeug Lixto Visual
Developer 25 benutzt wird.
23
XHTML-Dokumente genügen den Syntaxregeln von XML.
http://tidy.sourceforge.net/
25
http://www.lixto.de/lixto_visual_developer/
24
17
2. Grundlagen
Einerseits bieten gängige Programmiersprachen wie Java, PHP und Perl entsprechende
Funktionalitäten und Bibliotheken an, um Web-Scraper möglichst einfach zu programmieren. Andererseits gibt es Software-Werkzeuge wie Dapper, die für Benutzer ohne
Programmierkenntnisse gedacht sind. Einige davon werden im nächsten Kapitel vorgestellt.
Web-Scraping hat einige Nachteile. Bei jeder Strukturänderung einer Webseite, aus der
Informationen extrahiert werden, muss der entsprechende Screen-Scraper entweder angepasst oder gar neu programmiert werden. Da Inhalte aus Webseiten meist ohne vertragliche Vereinbarung mit dem Daten-Anbieter genutzt werden, können Benutzer solche
Änderungen nicht vermeiden.
In vielen Fällen muss die Benutzung von Inhalten aus urheberrechtlichen Gründen vom
Daten-Anbieter genehmigt werden. Einige Webseitenbetreiber verbieten das automatische Auslesen von Daten auch explizit in den Nutzungsbedingungen. Im Punkt 5.4.3 der
allgemeinen Geschäftsbedingungen des Portals StudiVZ 26 steht untern anderem folgendes:
Untersagt ist insoweit auch der Einsatz von Computerprogrammen zum automatischen
Auslesen von Daten ...
Einige Webseitenbetreiber versuchen, sich mit technischen Mitteln gegen Screen-Scraper
zu wehren. Die erste Möglichkeit besteht darin, dem Benutzer eine Navigationsreihenfolge zu erzwingen, indem Sitzungsparameter im Webbrowser gesetzt und bei der Navigation kontrolliert werden. Damit ist ein direktes Laden einer bestimmten Webseite
nicht möglich. Diese Strategie verwendet beispielsweise eBay 27 .
Eine andere Möglichkeit, Screen-Scraping zu verhindern, ist die Verwendung von CAPTCHA28 – eines Tests, der sicherstellen soll, dass die Webseite von einem Menschen und
nicht von einer Anwendung geöffnet wird. Dabei muss der Benutzer eine Aufgabe lösen, bevor er zur gewünschten Webseite gelangt. Dies kann eine kleine Rechenaufgabe
oder die Erkennung eines Textes in einem verzerrten Bild (s. Abbildung 2.429 ) sein. Als
Gegenmittel werden hierbei Mustererkennungsprogramme verwendet.
Abbildung 2.4.: Ein verzerrtes Bild für CAPTCHA
Oft werden E-Mail-Adressen als eine Maßnahme gegen Spam verschleiert. Dabei stehen
sie nicht direkt im Quellcode einer Webseite, sondern werden per JavaScript geladen.
Solche E-Mail-Adressen können durch Screen-Scraper meist nicht extrahiert werden.
26
http://www.studivz.net
http://www.ebay.de/
28
CAPTCHA steht für Completely Automated Public Turing test to tell Computers and Humans Apart.
29
Dieses Bild stammt aus einem Screenshot der Webseite http://recaptcha.net
27
18
2. Grundlagen
Schließlich präsentieren viele Webseitenbetreiber ihre Inhalte (komplett oder teilweise)
in Flash. Adobe Flash 30 ist eine integrierte Entwicklungsumgebung zur Erstellung multimedialer, interaktiver Inhalte, der so genannten Flash-Filme. Flash bietet viele Möglichkeiten an, Webseiten ansprechend zu gestalten, ermöglicht den Zugriff auf Datenbanken
und Interaktivität ohne weiteres Laden der Webseite. Allerdings können Flash-Inhalte
nicht extrahiert werden.
Diese Aspekte werden in der vorliegenden Arbeit nicht behandelt. Es wird davon ausgegangen, dass sich die Struktur der Webseiten nicht ändert, alle extrahierten Daten
frei verwendet werden dürfen und keine der genannten Abwehrmaßnahmen gegen WebScraping getroffen wird.
30
http://www.adobe.com/de/products/flash/
19
3. Abgrenzung zu anderen Arbeiten
Web-Scraping ist kein neues Gebiet mehr. Daher sind viele Datenextraktion-Techniken
bekannt und entsprechende Tools verfügbar. In diesem Kapitel werden einige davon
vorgestellt. Dabei werden jeweils Unterschiede zur vorliegenden Arbeit erklärt.
3.1. Wissenschaftliche Arbeiten
In [Völ03] wurde ein Werkzeug namens d2c zur Extraktion von XML aus HTML-Seiten im
Rahmen einer Masterarbeit an der Universität Karlsruhe (TH) entwickelt. Mit seiner
Hilfe können Benutzer ohne Programmierkenntnisse Web-Scraper visuell erstellen.
d2c verwendet XSLT1 als Extraktionssprache. Es transformiert die vom Benutzer visuell
definierten Teile einer Webseite in ein XML-Dokument.
Abbildung 3.1 stellt den Ablauf einer Anfrage im Screen-Scraper dar. Die Anfrage wird
nicht direkt an den Server gestellt, sondern dem Modul surf übergeben. Dieses Modul
agiert als Proxy und lädt die Webseite vom Server.
In d2c wird berücksichtigt, dass viele Webseiten nicht HTML-valide sind. Das hat zur Folge, dass die Extraktion von Daten wegen Syntax-Fehlern im HTML-Code gestört werden
kann. Im Modul clean wird ein DOM-Baum (s. Abschnitt 2.1) aufgebaut und validiert.
Alle Syntax-Fehler werden dabei korrigiert.
Das Modul extract wandelt den DOM-Baum mit der gegebenen XSLT-Transformation
und sendet das Ergebnis der Extraktion als XML zurück an den Aufrufer.
Produktionssystem
Job-Name
1
XML
6
extract
clean
2 HTTP-Anfrage-Objekt
XML
5
XH
Webserver
surf
HTTP-Anfrage
PH
HTTP-Antwort
3
4
Abbildung 3.1.: Ablauf einer Anfrage im Screen-Scraper von d2c
1
XSLT steht für Extensible Stylesheet Language Transformation und ist eine Sprache zur Transformation
von XML-Dokumenten.
20
3. Abgrenzung zu anderen Arbeiten
d2c läuft komplett in einem Webbrowser und stellt keine Bedienelemente in der Webseite
zur Verfügung. Alle Aktionen wie Aufruf von d2c, Auswahl von Daten auf einer Webseite
sowie Erzeugen eines Screen-Scrapers erfolgt über Bookmarklets (s. Abschnitt 2.1).
d2c stellt keine Möglichkeit zur Verfügung, die Bedeutung von extrahierten Informationen zu definieren. Lediglich der generierte Web-Scraper lässt sich benennen. d2c erlaubt
es nicht, Informationen von mehreren Webseiten in einem Service zu kapseln.
In [YWH09] wird ein Werkzeug namens Grubber präsentiert. Wie d2c verwendet es
XML für die Ausgabe von extrahierten Daten. Es erlaubt, einzelne Teile der Webseite zu
beschriften und somit eine Bedeutung zuzuweisen. Ein Schwerpunkt dieses Werkzeuges
liegt unter anderem darauf, dass ein Benutzer nur ein Muster für die Definition der Daten
vorgibt, indem er einzelne Teile der Webseite – z. B. den Preis des ersten Produktes einer
Liste im Web-Shop – anklickt. Grubber versucht dabei, weitere Elemente – Preise aller
auf der Webseite verfügbaren Produkte – anhand der Struktur der Webseite zu finden
und dem Benutzer vorzuschlagen.
Das angeklickte Element wird anhand folgender Kriterien mit den vorgeschlagenen verglichen:
• HTML-spezifische Merkmale wie Tag-Name und Attribute im Tag.
• Layout-spezifische Merkmale wie Größe und Position auf der Webseite.
• Text-spezifische Merkmale wie die Länge des Textes, ggf. Typ und Bedeutung
anhand der Form (URL, E-Mail-Adresse, Preisangabe, Datum etc.) sowie Kleinund Großschreibung.
Außerdem wird bei Grubber die Ausgabe des künftigen Screen-Scrapers zur Laufzeit
angezeigt. Das erlaubt dem Benutzer, eine falsch getroffene Auswahl ähnlicher Elemente
vor dem Erzeugen des Screen-Scrapers zu korrigieren.
Wie d2c ist Grubber für die Datenextraktion nur aus einzelnen Webseiten geeignet.
Wenn Informationen auf der ganzen Website verteilt sind, kann deren Zusammenhang
nicht definiert werden.
3.2. Kommerzielle Produkte
Eines der bekanntesten kommerziellen Werkzeuge auf dem Markt ist Visual Developer
von Lixto2 . Dies ist eine integrierte Entwicklungsumgebung, die speziell auf die visuelle
Entwicklung von Web-Scrapern ausgerichtet ist. Es besitzt eigene Mustererkennungsalgorithmen und Qualitätssicherungsmechanismen sowie Heuristiken und Regeln zur
robusten Erkennung von Webobjekten. Es unterstützt offene Standards wie XML, HTML,
CSS und XPath. Abbildung 3.2 zeigt die grafische Benutzeroberfläche von Lixto Visual
Developer 3 .
2
3
http://www.lixto.com/lixto_visual_developer
Abbildungen 3.2 und 3.3 stammen aus [BGH09].
21
3. Abgrenzung zu anderen Arbeiten
Abbildung 3.2.: Grafische Benutzeroberfläche von Lixto Visual Developer
Visual Developer
Application
Logic
Web Applications
Runtime
Parameters
VD
Runtime
VD
Runtime
Wrapper
Creation
Mozilla
Eclipse IDE
Data Model
Wrapper
VD
Runtime
Application
Designer
Wrapper
Lixto Hydra (Thread
Pool of VD runtimes)
Lixto TS
Abbildung 3.3.: Die Architektur von Lixto Visual Developer
22
3. Abgrenzung zu anderen Arbeiten
Abbildung 3.3 zeigt die Architektur4 von Lixto Visual Developer. Es setzt auf dem
Eclipse IDE 5 Framework auf und integriert die Webbrowser-Engine von Mozilla 6 , um
Benutzerinteraktionen wie Klicks überwachen und den DOM-Baum (s. Abschnitt 2.1)
manipulieren zu können.
Als erstes erstellt ein Anwendungsentwickler ein neues oder importiert ein vorhandenes
Datenmodell in XML. Das Datenmodell beschreibt dabei die Struktur von Informationen,
die extrahiert werden müssen. Dann definiert er relevante Daten, indem er entsprechende Elemente auf der Webseite anklickt, Formulare ausfüllt etc. Der Entwickler klickt
dabei nur einzelne Elemente – z. B. eine Tabellenzeile – an, und das System erweitert
seine Auswahl automatisch, indem z. B. alle Zeilen in der Tabelle markiert werden. Das
System zeichnet alle Aktionen auf und zeigt ständig ein visuelles Feedback mit den bisher extrahierten Informationen an. Der Entwickler kann diverse Filter zum Aussortieren
irrelevanten Daten definieren.
Nach der Extraktion wird eine Menge von Wrappern erzeugt. Die extrahierten Daten
werden gegen das Datenmodell validiert. Die Wrapper und das Datenmodell werden
auf einen Server hochgeladen und etweder in einem Web-Service im SOAP-Stil gekapselt
oder zum Zugriff per Java RMI 7 zur Verfügung gestellt. Es ist möglich, den Wrappern Parameter (z. B. Formulardaten) zu übergeben. Lixto Visual Developer bietet viele
Ausgabeformate – unter anderen JSON, RSS, Atom (s. Abschnitt 2.4.3) – für extrahierte
Informationen an.
Lixto Visual Developer verwendet eine eigene deklarative Extraktionssprache namens
Elog, die auf regulären Ausdrücken und XPath basiert. Elog beschreibt HTML-Elemente
durch Prädikate. In Listing 3.1 wird ein Beispiel einer Anfrage in Elog gegeben:
1
2
3
4
5
6
record(X0, X1) :−
root(_, X0), subelem(X0,
(/html/body/div[3]/lixto:nearest(table)/tr ,
[( "class", "midCol", substring)]) , X1),
before(X1, ../ tr/td [2], [( "text",
"^Search.∗", regexp)]) , 0, 100, X2, X3).
Listing 3.1: Anfrage in Elog
Das Prädikat record wird erfüllt, wenn die Prädikate root, subelem und before erfüllt
werden. Das vordefinierte Prädikat root liefert eine Menge von Elementen X0. Im Prädikat subelem wird auf jedes X0 ein XPath-Ausdruck angewendet, und Ergebnisse werden
in X1 gespeichert. Das Prädikat before schränkt diese Menge mittels eines weiteren
XPath-Ausdrucks und eines regulären Ausdrucks ein.
Lixto Visual Developer ist eines der mächtigsten Werkzeuge auf dem Markt. Es kann
nicht nur Muster bei der Auswahl der Daten auf einer Webseite, sondern auch Muster
in der Navigation des Benutzers auf einer Website erkennen. Es kann also über mehrere
4
http://www.lixto.com/lixto_visual_developer_architecture/
http://www.eclipse.org/
6
http://www.mozilla.org/
7
RMI steht für Remote Method Invocation und erlaubt den Aufruf einer Methode eines entfernten
Java-Objektes.
5
23
3. Abgrenzung zu anderen Arbeiten
Webseiten verteilte Informationen extrahieren. Leider ist Lixto Visual Developer nur
für Entwickler mit Erfahrung in Eclipse und den verwendeten Technologien wie XML,
XPath etc. gedacht. Für Benutzer ohne technischen Hintergrund ist dieses Werkzeug
ungeeignet.
Eine detaillierte Beschreibung der Architektur und der Extraktionssprache dieses Werkzeugs ist in [BFG01], [BGH09] und [CB10] zu finden.
Einige Mashup-Editoren enthalten Mechanismen zur Datenextraktion. Das in Abschnitt 2.3 erwähnte Werkzeug Yahoo! Pipes bietet zwei Module (Fetch Page und Regex ) an, um Informationen aus Webseiten zu extrahieren. Sie setzen jedoch Kenntnisse
in HTML und regulären Ausdrücken aus, was sie für Benutzer ohne diese Kenntnisse
ungeeignet macht.
Ein Werkzeug für Benutzer ohne Programmierkenntnisse ist z. B. Dapper 8 (Data Mapper). Mit seiner Hilfe kann man Daten extrahieren und in verschiedenen Formaten wie
XML, RSS, JSON, iCalendar (s. Abschnitt 2.4.3) ausgeben lassen. Dapper ist eine webbasierte Anwendung. Um einen Service (einen sogenannten Dapp) zu erstellen, muss
der URL der gewünschten Webseite eingegeben werden. Danach öffnet sich ein virtueller
Webbrowser innerhalb der Dapper -Webseite, und alle weiteren Aktionen wie Klicks und
das Ausfüllen von Formularen werden aufgezeichnet. Wenn der Benutzer die Webseite
mit relevanten Daten gefunden hat, legt er sie in einen sogenannten Basket. Möchte er
Daten aus mehreren Seiten einer Website (ohne Beziehungen) in einem Service kapseln,
öffnet er einen neuen Tab im virtuellen Browser und navigiert zur gewünschten Webseite. Nach der Auswahl der Webseiten markiert er einzelne relevante Elemente (wie
Tabellenzellen, Bilder etc.). Daraufhin schlägt Dapper ähnliche Elemente (wie weitere
Tabellenzellen) vor. Wenn der Benutzer mit der vorgeschlagenen Menge zufrieden ist,
kann er sie benennen und in einem Feld speichern. Den gleichen Prozess kann er auch
mit anderen Elementen wiederholen, bis alle Daten erfasst wurden. Zum Schluss können
die Felder gruppiert werden.
Dapper hat jedoch einige Nachteile. Gruppiert werden dürfen nur diejenigen Felder, die
sich auf derselben Webseite befinden. D. h. es ist nicht möglich, Daten von verschiedenen
Webseiten in Beziehung zu setzen. Außerdem kann der Typ des Feldes nicht angegeben
werden.
Andere Dapper ähnliche Wrapper sind z. B. Mozenda 9 (s. Abbildung 3.5) und openkapow 10 .
Alle oben genannten Werkzeuge verfolgen eine Extraktion von Daten, unabhängig von
ihrem Typ und deren Beziehungen. Daten auf verschiedenen Webseiten werden nicht
als zugehörig zueinander erkannt. Im Rahmen dieser Master-Arbeit soll ein Konzept
entwickelt werden, wie Informationen als Ressourcen mit typisierten Attributen sowie
Beziehungen zwischen diesen Ressourcen extrahiert werden können. Dabei dürfen die
Ressourcen auf mehreren Webseiten verteilt vorliegen. Der erstellte Service soll nach
REST-Prinzipien (s. Abschnitt 2.4) aufgebaut werden.
8
http://www.dapper.net
http://www.mozenda.com
10
http://openkapow.com
9
24
3. Abgrenzung zu anderen Arbeiten
Abbildung 3.4.: Benutzeroberfläche von Dapper
Abbildung 3.5.: Benutzeroberfläche von Mozenda
25
4. Das Konzept von DisRESTractor
Im Rahmen dieser Arbeit soll ein Konzept für die Erstellung von Web-Services entwickelt
werden, die die Extraktion von über mehrere Webseiten einer Website verteilten Daten
(Ressourcen) und ggf. deren Beziehungen durchführen. Dabei werden Benutzer ohne
Programmierkenntnisse vorausgesetzt.
In diesem Kapitel wird dieses Konzept zuerst anhand eines Beispielszenarios exemplarisch vorgestellt. Anschließend folgt eine allgemeine Beschreibung des Konzeptes. Es
wird das Metamodell für ein Datenmodell definiert, in das extrahierte Daten abgebildet
werden. Dann wird der Ablauf einer Datenextraktion mit DisRESTractor erklärt. Zum
Schluss wird der generierte Service beschrieben.
4.1. Anwendungsszenario
Anmerkung: Um die Benutzerfreundlichkeit von DisRESTractor zu verbessern und die
Verständlichkeit des Konzeptes für Benutzer ohne Programmierkenntnisse zu erhöhen,
wurden die Begriffe Ressource und Attribut durch Objekt und Merkmal ersetzt. In diesem
Kapitel werden sie synonym verwendet.
Nach der Herleitung des in den nächsten Abschnitten folgenden Konzeptes wurde überlegt, wie die Abläufe in eine Webanwendung abzubilden sind. Das folgende Szenario
präsentiert das Konzept.
4.1.1. Beschreibung des Szenarios und Motivation
Ein Reiseveranstalter bietet Stadtführungen in Hannover an. Um seine Werbung regelmäßig zu aktualisieren, braucht er häufig neue Fotos von der Stadt. Da der Maschsee
eine wichtige Sehenswürdigkeit von Hannover ist, möchte der Reiseveranstalter nach Bildern vom Maschsee suchen. Dafür verwendet er das Webportal Flickr 1 , das eine große
Auswahl an Bildern hat. Informationen über ein Foto befinden sich aber auf mehreren Webseiten. So enthält die Webseite mit Suchergebnissen einer Anfrage lediglich eine
Kleinvorschau und den Benutzernamen des Besitzers zu jedem Bild. Um das Aufnahmedatum, zugeordnete Schlagwörter und Informationen über den Besitzer zu bekommen,
müssen noch drei Webseiten für jedes Bild besucht werden. Daher möchte der Reiseveranstalter diese Informationen mit Hilfe von DisRESTractor extrahieren2 und sich so
nicht nur die aufwändige Navigation, sondern auch die Suchanfrage ersparen.
1
Flickr ist ein Webportal von Yahoo!, das es Benutzern erlaubt, digitale Bilder auf der Webseite
anderen Nutzern zur Verfügung zu stellen.
2
Tatsächlich stellt Flickr offene Schnittstellen zur Verfügung. Es wird aber angenommen, dass es sie
nicht gäbe.
26
4. Das Konzept von DisRESTractor
Mit Hilfe eines Mashup-Editors für Benutzer ohne Programmierkenntnisse wie Yahoo!
Pipes (s. Abschnitt 3.2) könnte der Reiseveranstalter einen Mashup bauen, in dem der
generierte Service verwendet wird. So könnte er alle Bilder mit dem Schlagwort „Party“
aussortieren, da auf solchen Bilder meistens Personen zu sehen sind, was diese Bilder
aus rechtlichen Gründen für eine Werbung unbrauchbar macht. Danach könnte er alle
gebliebenen Bilder nach Datum sortieren und als RSS-Feed (s. Abschnitt 2.4.3) ausgeben
lassen. So könnte er neueste Bilder inklusive Kontaktinformationen über deren Besitzer
ohne Suche und Navigation auf der Website erhalten.
4.1.2. Aufruf und Benutzeroberfläche von DisRESTractor
Als erstes öffnet der Reiseveranstalter die Webseite von Flickr in seinem Webbrowser
und führt eine Suche nach dem Wort Maschsee durch. Da er nur nach lizenzfreien
Bildern suchen möchte, muss er eine weitere Webseite mit Suchoptionen besuchen. Von
der Webseite mit Suchergebnissen kann der Reiseveranstalter DisRESTractor über ein
Bookmarklet 3 starten.
Abbildung 4.1.: DisRESTractor nach dem Start
Abbildung 4.1 zeigt die graphische Benutzeroberfläche von DisRESTractor. Den größten Teil nimmt die ursprüngliche Flickr -Webseite ein, von der Informationen extrahiert
werden müssen. Darüber wird der URL dieser Flickr -Webseite angezeigt. So hat der Benutzer einen virtuellen Webbrowser in seinem momentan verwendeten Webbrowser. Auf
3
Bookmarklets sind eine Art Lesezeichen in Webbrowsern, die die Ausführung von JavaScript-Code in
der aktuell geöffneten Webseite erlauben.
27
4. Das Konzept von DisRESTractor
der linken Seite des Fensters (weiter als Ressourcen-Panel bezeichnet) werden später Informationen (Ressourcen und deren Attribute) angezeigt, die der Benutzer extrahieren
möchte. Ganz oben befindet sich eine interaktive Hilfe (weiter als Info-Leiste genannt),
die dem Benutzer kurz beschreibt, was er als nächstes tun kann. Durch das Anklicken
des Fragezeichen-Symbols oben rechts in der Info-Leiste erscheint eine detaillierte Dokumentation zu DisRESTractor.
4.1.3. Auswahl relevanter Informationen und Hinzufügen einer Ressource
Als erstes fordert DisRESTractor über die Info-Leiste den Benutzer auf, ein Element
(ein Bild oder ein Textstück) anzuklicken, um dieses als Attribut einer neuen Ressource
hinzuzufügen. Alle Links auf der Webseite werden dabei ausgeschaltet, so dass der Benutzer jedes Element anklicken kann, ohne auf eine andere Webseite zu gelangen. Auf
der ersten Webseite lassen sich zwei Arten von Ressourcen erkennen, und zwar Foto
und Fotograf. Als erstes klickt der Benutzer das erste Bild in der Ergebnismenge an.
Daraufhin bekommt dieses einen grünen Rand. Gleichzeitig schlägt DisRESTractor andere Bilder vor, die dem Angeklickten „ähnlich“ (s. nächsten Abschnitt) sind, indem sie
durch einen gelben Rand hervorgehoben werden. Diese Situation ist in Abbildung 4.2
zu sehen.
Abbildung 4.2.: DisRESTractor: Auswahl der ersten Ressource
In diesem Fall hat DisRESTractor einen richtigen Vorschlag gemacht. Allgemein können
aber falsch vorgeschlagene Elemente (mit dem gelben Rand) abgewählt und nicht vorgeschlagene (ohne Rand) durch Anklicken ausgewählt werden. In der Info-Leiste wird
die Anzahl momentan ausgewählter Elemente angezeigt und immer aktualisiert.
28
4. Das Konzept von DisRESTractor
Falls der Benutzer mit der Auswahl zufrieden ist, kann er eine Ressource erstellen. Dafür
drückt er die Schaltfläche Objekt aufnehmen, was das Öffnen des in Abbildung 4.3a dargestellten Dialoges auslöst. Hier muss der Benutzer die neue Ressource und das gerade
ausgewählte Attribut benennen und optional beschreiben. Er gibt Foto als Ressourcennamen und Vorschau als Attributnamen sowie jeweils eine kurze Beschreibung ein. Für
das Attribut muss zusätzlich der Typ angegeben werden, der vom System vorgeschlagen
wird. Mögliche Typen werden im nächsten Abschnitt beschrieben. Das aktuelle Attribut
hat den Typ Bild.
Abbildung 4.3.: DisRESTractor: Dialog Objekt aufnehmen
Nach der Bestätigung der Angaben durch die Schaltfläche speichern, wird die Ressource
hinzugefügt. Alle gerade ausgewählten Bilder (mit einem grünen oder gelben Rand) im
virtuellen Browser werden durch einen blauen Rand hervorgehoben und dürfen somit
nicht mehr ausgewählt werden, was von DisRESTractor kontrolliert wird. Informationen
über die Ressource erscheinen im Ressourcen-Panel (s. Abbildung 4.3b). Neben dem
Namen der Ressource befinden sich drei Symbole4 :
4
Die Icons sind auf dem Webportal http://www.gettyicons.com verfügbar und dürfen frei verwendet
werden.
29
4. Das Konzept von DisRESTractor
zeigt die vom Benutzer eingegebene Beschreibung einer Ressource als Tooltip
an; das Symbol wird ausgegraut, falls keine Beschreibung vorhanden ist.
ermöglicht das Umbenennen einer Ressource oder die Änderung deren Beschreibung.
ermöglicht das Löschen einer Ressource.
Neben jedem Attribut können auch bis zu fünf Symbole aus der folgenden Menge stehen:
zeigt die vom Benutzer eingegebene Beschreibung eines Attributs als Tooltip
an; das Symbol wird ausgegraut, falls keine Beschreibung vorhanden ist.
ermöglicht das Umbenennen eines Attributs oder die Änderung dessen Beschreibung.
ermöglicht das Löschen eines Attributs.
öffnet die Webseite mit dem Attribut im virtuellen Browser von DisRESTractor.
gibt an, dass das Attribut mehrmals für jede Ressource vorkommen kann.
gibt an, dass das Attribut eine Ressource ist; die oben beschriebenen Symbole
stehen dann neben der Ressource, auf die das Attribut verweist.
Jedes Symbol wird durch jeweils einen Tooltip beschrieben, wenn der Benutzer mit der
Maus darüber fährt.
Wenn mindestens eine Ressource existiert, kann der Benutzer schon den ganzen Prozess
abschließen und einen Service generieren lassen. Da es in diesem Fall nicht sinnvoll ist,
eine Ressource mit einem einzigen Attribut zu extrahieren, setzt der Benutzer seine
Arbeit fort.
4.1.4. Erfassung von Beziehungen zwischen Ressourcen
In der Info-Leiste wird der Benutzer gefragt, ob er weitere Attribute (auch einer neuen
Ressource) auf dieser Webseite hinzufügen oder die Webseite wechseln möchte. Da die
Ressource Fotograf für den Reiseveranstalter (z. B. aus rechtlichen Gründen) interessant
ist, klickt er den ersten Link zum Fotografen (Mathias M ) an. Wie beim Foto erweitert
DisRESTractor seine Auswahl automatisch. Jetzt hat der Benutzer drei Möglichkeiten:
1. Er kann den momentan markierten Benutzernamen des Fotografen als Text-Attribut von Foto hinzufügen, indem er die Schaltfläche Merkmal hinzufügen im
Bereich von Foto betätigt und als Attributtyp Text auswählt.
30
4. Das Konzept von DisRESTractor
2. Er kann den momentan markierten Benutzernamen als Attribut einer neuen Ressource Fotograf hinzufügen, die unabhängig von Foto ist, indem er die Schaltfläche
Objekt aufnehmen drückt.
3. Er kann den momentan markierten Benutzernamen als Attribut einer neuen Ressource Fotograf hinzufügen, die wiederum ein Attribut von Foto ist. Somit kann
er die beiden Ressourcen in Beziehung miteinander stellen.
Der Reiseveranstalter entscheidet sich für die dritte Variante, da der Fotograf weitere Attribute wie E-Mail-Adresse, Website etc. haben kann. Er betätigt den Button
Merkmal hinzufügen und wählt als erstes den Attributtyp Objekt aus, woraufhin sich
der Dialog – wie in Abbildung 4.4 gezeigt – ändert.
Abbildung 4.4.: DisRESTractor: Dialog Attribut als Ressource hinzufügen
Der Benutzer gibt Informationen über die Ressource Fotograf und deren erstes Attribut Benutzername ein und bestätigt die Eingaben durch die Schaltfläche speichern.
Die entsprechenden Elemente im virtuellen Browser werden durch einen blauen Rand
hervorgehoben. Im Ressourcen-Panel (s. Abbildung 4.5) wird Fotograf zum einen als
Attribut vom Foto, zum anderen als eine eigenständige Ressource hinzugefügt.
4.1.5. Navigation auf der Website
In der Info-Leiste wird der Benutzer wieder gefragt, ob er die Webseite wechseln möchte, was er durch den Button navigieren bestätigt. Daraufhin werden alle Links im
virtuellen Browser wieder aktiviert. Zusätzlich kann der Benutzer das Globus-Symbol
neben den Attributen als Link verwenden, um zur Webseite mit dem Attribut zu kommen. Da sich die beiden hinzugefügten Attribute auf der aktuellen Webseite befinden,
31
4. Das Konzept von DisRESTractor
Abbildung 4.5.: DisRESTractor: Zwei Ressourcen, die miteinander in Beziehung stehen
sind diese Links inaktiv und das Symbol ist ausgegraut. Der Benutzer klickt das erste
Bild an und gelangt auf die Webseite mit mehr Informationen darüber. Nach dem oben
beschriebenen Prinzip fügt er das Aufnahmedatum als Attribut vom Typ Datum hinzu.
4.1.6. Hinzufügen eines mehrwertigen Attributes
Als nächstes fügt er das Attribut Schlagwort hinzu. Wie in Abbildung 4.6 zu sehen
ist, gibt es zum Bild mehrere Schlagwörter. Dabei handelt es sich um ein mehrwertiges
Attribut. Daher steht im Ressourcen-Panel neben dem Attribut Schlagwort ein StapelSymbol.
4.1.7. Erzeugen eines Service
Als Letztes navigiert der Reiseveranstalter zur Profil-Webseite des Besitzers eines Fotos
(s. Abbildung 4.7), auf der weitere Informationen wie Beitrittsdatum, Heimatstadt etc.
verfügbar sind. Den Reiseveranstalter interessieren mehr die Kontaktdaten, daher fügt
er das Attribut Website hinzu.
Die gesammelten Informationen reichen ihm nun, und er betätigt die Schaltfläche Service erstellen. Daraufhin erscheint ein Dialog (s. Abbildung 4.8), in dem der Benutzer
den Namen (Maschsee-Bilder) und die Beschreibung des Service eingibt. Nach der
Bestätigung wird ein Service generiert und auf dem Server installiert. DisRESTractor
wird automatisch geschlossen, und der Benutzer wird auf die „Eingangsseite“ des Service
umgeleitet, auf der der generierte Service (auch technisch) beschrieben ist.
32
4. Das Konzept von DisRESTractor
Abbildung 4.6.: DisRESTractor: Mehrwertiges Attribut
Abbildung 4.7.: Profilseite des Besitzes eines Bildes bei Flickr
Ab jetzt kann der Reiseveranstalter Informationen über Bilder vom Maschsee über den
generierten Service abrufen. In einem Mashup-Editor kann er diese Informationen ggf.
filtern und mit anderen Quellen kombinieren.
33
4. Das Konzept von DisRESTractor
Abbildung 4.8.: DisRESTractor: Dialog Service erstellen
4.2. Beschreibung des Konzeptes
Im vorigen Abschnitt wurde das Konzept anhand eines Beispielszenarios vorgestellt.
Dabei wurde ein Web-Scraper für das Webportal Flickr mithilfe von DisRESTractor
erstellt, der Informationen über Bilder vom Maschsee in Hannover und deren Besitzer liefert. Im Folgenden wird dieser Prozess einschließlich aller Sonderfälle allgemein
beschrieben.
Da in dieser Arbeit der REST-Ansatz verfolgt wird, bei dem Ressourcen im Mittelpunkt
stehen, sollen mit DisRESTractor Informationen in Form von Ressourcen extrahiert werden. Um Ressourcen strukturiert verwalten zu können, wird ein Datenmodell erstellt, in
das extrahierte Daten abgebildet werden. Außerdem kann dadurch eine Unabhängigkeit
von der technischen Zielplattform des generierten Service erreicht werden.
4.2.1. Metamodell für extrahierte Daten
In einem Datenmodell werden alle Ressourcen eines Service abgebildet. Wie Ressourcen
im Rahmen dieser Arbeit definiert sind, zeigt das Metamodell in Abbildung 4.9.
Nach dem REST-Prinzip wird die Schnittstelle IReadOnlyResource definiert. Wie jede
Ressource im HTTP besitzt sie einen URI, der sie eindeutig identifiziert. Unter diesem URI
wird die Ressource im später generierten Service verfügbar sein. Da die meisten Webportale nur einen lesenden Zugriff auf ihre Daten erlauben, werden im Rahmen dieses
Konzeptes ebenfalls nur lesende Operationen mit Ressourcen behandelt. Das sind die
HTTP-Methoden GET, HEAD und OPTIONS. Ein Service liefert Informationen über mindestens eine Ressource.
Jede Ressource (Resource) implementiert die Schnittstelle IReadOnlyResource und hat
einen Namen und eine Beschreibung. Der Name jeder Ressource wird in der Ausgabe
von extrahierten Daten stehen. Die Beschreibung dient einem besseren Verständnis der
Daten, die eine Ressource repräsentiert. Dabei ist die Beschreibung optional, da der
Name schon aussagekräftig genug sein kann. Außerdem wird die Beschreibung von Ressourcen nicht in ihren Repräsentationen, sondern nur in der Dokumentation zum Service
enthalten sein.
34
4. Das Konzept von DisRESTractor
IReadOnlyResource
Service
+URI: String
+name: String
+description: String
+GET()
+HEAD()
+OPTIONS()
1
1..*
Resource
+name: String
+description: String
1
1
1..*
Attribute
*
1
Type
*
List
+name: String
+name: String
+value: Type
+URI: String
+XPath: String
+description: String
Abbildung 4.9.: Metamodell für extrahierte Daten
Um über mehrere Webseiten verteilte Informationen über eine Ressource strukturiert
definieren zu können, wird der Begriff Attribut (Attribute) eingeführt. Jede Ressource
setzt sich dabei aus einer nicht leeren Menge von Attributen zusammen. Jedes Attribut
enthält folgende Informationen:
Name beschreibt das Attribut und wird in den Repräsentationen von Ressourcen stets angegeben.
Beschreibung ist optional und gibt eine detaillierte Auskunft über das Attribut und
steht nur in der Dokumentation zum Service.
URI adressiert die ursprüngliche Webseite, auf der dieses Attribut vorkommt.
XPath-Audruck gibt eine exakte Position des Attributes auf der ursprünglichen Webseite.
Typ gibt den Datentyp des Attributs an.
Value enthält den extrahierten Wert des Attributes.
Der Datentyp von Attributen dient zum einen einer besseren Definition des Attributs
und kann zum anderen später in einem Maschup nützlich sein, um beispielsweise alle
Bilder nach dem Aufnahmedatum zu sortieren. Da für DisRESTractor Benutzer ohne
Informatik-Kenntnisse vorausgesetzt werden, ist es nicht möglich, sämtliche Datentypen
35
4. Das Konzept von DisRESTractor
von z. B. XML-Schema5 zur Verfügung zu stellen. Eine automatische Erkennung des Datentyps ist häufig auch nicht möglich. Daher wurden die Datentypen in DisRESTractor
auf die folgenden beschränkt:
Datentyp in DisRESTractor
Text
Zahl
Datum
Bild
Entsprechender Datentyp in XML-Schema
string
decimal
date
string (img-Tag des entsprechenden Bildes)
Tabelle 4.1.: Datentypen in DisRESTractor
Jedes Attribut kann auch eine Liste von Werten – wie das Attribut Schlagwort aus dem
Abschnitt 4.1 – liefern.
Ein Attribut kann auch eine Ressource sein. In DisRESTractor kann man das durch
den Datentyp Objekt angeben. Dadurch kann eine Beziehung zwischen zwei Ressourcen
hergestellt werden.
4.2.2. Ablauf der Datenextraktion mit DisRESTractor
Wie im Abschnitt 4.1 gezeigt wurde, definiert der Benutzer im Dialog mit DisRESTractor, welche Informationen extrahiert werden müssen. Das Aktivitätsdiagramm in
Abbildung 4.10 zeigt den allgemeinen Ablauf einer Datenextraktion mit DisRESTractor.
Als erstes muss der Benutzer eine Webseite mit den für ihn relevanten Informationen in
seinem Webbrowser öffnen. Der URL6 dieser Webseite wird als nächstes an DisRESTractor übergeben.
Nach dem Start von DisRESTractor dürfen keine Daten über Formulare angefordert
werden. Eine Übergabe von Formularparametern an den künftigen Service ist ebenfalls
nicht möglich. Der Benutzer muss vor dem Aufruf von DisRESTractor zur Ergebnisseite
gelangen. Aber selbst wenn er dies gemacht hat, ist eine Datenextraktion nicht immer
möglich. Problematisch ist es in dem Fall, wenn Formular-Daten per POST (s. Abschnitt
2.4.5) abgeschickt werden. Dabei unterscheidet sich der URL der Ergebnisseite nicht vom
URL der ursprünglichen Webseite mit dem noch nicht ausgefüllten Formular. Wenn dieser
URL an DisRESTractor übergeben wird, wird in seinem virtuellen Browser die Webseite
mit dem leeren Formular ohne Ergebnisse geöffnet. Dieses Problem kann aber nur durch
eine vollständige Aufzeichnung aller Benutzerinteraktionen (insbesondere des Absendens
des Formulares) inklusive Browser-Cookies 7 in DisRESTractor gelöst werden. Im Rahmen dieser Arbeit wird das nicht gemacht, weil das bereits in anderen Anwendungen –
z. B. in Lixto Visual Developer (s. Kapitel 3) – gelöst wurde. Der technische Aufwand
wäre daher nicht zu rechtfertigen. Außerdem erlaubt DisRESTractor nur das Lesen von
Daten, und alle lesenden Anfragen über Formulare sollten aber nach einer Empfehlung
von W3C ([Jac04]) die GET-Methode verwenden.
5
XML-Schema ist eine Empfehlung des W3C zum Definieren von Strukturen für XML-Dokumente.
Der Unterschied zwischen einem URL und einem URI wird in Abschnitt 2.4.2 erklärt.
7
Browser-Cookies oder HTTP-Cookies sind clientseitig gespeicherte Daten.
6
36
4. Das Konzept von DisRESTractor
Aufruf der Webseite
mit relevanten Inhalten
Aufruf von DisRESTractor
relevante Daten auf der
aktuellen Webseite vorhanden
Navigation auf der gesamten Website
ja
nein
Hinzufügen eines Attributs
auf der aktuellen Webseite
nein
alle relevanten Daten
sind gesammelt
ja
Service generieren
Abbildung 4.10.: Ablauf der Datenextraktion mit DisRESTractor
DisRESTractor kann von der Webseite mit gewünschten Daten über ein Bookmarklet
aufgerufen werden. Bookmarklets sind eine Art Lesezeichen in Webbrowsern, die die Ausführung von JavaScript-Code in der aktuell geöffneten Webseite erlauben. In diesem
Fall führt das Bookmarklet zwei Schritte durch:
1. Im URL der aktuellen Webseite werden alle nicht erlaubten Zeichen wie „?“ und
„&“ in eine geeignete Form umgewandelt.
2. Die aktuelle Webseite wird zum DisRESTractor umgeleitet, dem der bearbeitete
URL übergeben wird.
Die Benutzeroberfläche von DisRESTractor ist in Abbildung 4.11 dargestellt. In der
Lesezeichen-Symbolleiste des Webbrowsers (1) befindet sich das Bookmarklet mit dem
Titel Start DisRESTractor, das das Starten von DisRESTractor ausgelöst hat. Visuell
besteht DisRESTractor aus den folgenden Bereichen:
Info-Leiste (2) befindet sich ganz oben und weist den Benutzer permanent
an. Ganz rechts in der Leiste steht ein Fragezeichen-Symbol,
über das eine detaillierte Dokumentation zum DisRESTractor angefordert werden kann.
37
4. Das Konzept von DisRESTractor
Adress-Leiste (3) zeigt den URL der aktuellen Webseite an. Die Eingabe eines
anderen URL ist im Gegenteil zum herkömmlichen Webbrowser nicht möglich.
Virtueller Browser (4) stellt Webseiten dar, aus denen der Benutzer Informationen
extrahieren will.
Ressourcen-Panel (5) enthält Informationen über die bereits hinzugefügten Ressourcen. Nach dem Start von DisRESTractor enthält dieser
Bereich nur zwei Schaltflächen: Objekt aufnehmen zum Hinzufügen einer Ressource und Service erstellen zum Generieren eines Web-Scrapers.
Ressourcen-Bereiche (6, 7) enthalten Informationen über Attribute und jeweils einen Button zum Hinzufügen eines weiteren Attributs.
Abbildung 4.11.: Benutzeroberfläche von DisRESTractor
Die Idee der Trennung des Browser-Fensters in mehrere Teile – Info-Leiste, RessourcenPanel und virtuellen Browser in DisRESTractor – wurde aus anderen Werkzeugen wie
Dapper (s. Abschnitt 3) übernommen. Sie bringt den Vorteil, dass der Benutzer bei der
Arbeit mit DisRESTractor einerseits den Überblick über bereits hinzugefügte Ressourcen behält und andererseits ständig über weitere mögliche Aktionen informiert wird.
Allerdings nimmt bei Dapper (s. Abbildung 3.4 auf Seite 25) eine detaillierte Hilfe einen
großen Teil des Fensters ein. Dieser relativ große Bereich wird in DisRESTractor für
die Darstellung von Ressourcen (Ressourcen-Panel) verwendet, weil sie insbesondere bei
langen Ressourcen- oder Attributnamen viel Platz in der Benutzeroberfläche benötigen.
38
4. Das Konzept von DisRESTractor
Eine ausführliche Hilfe kann über das Fragezeichen-Symbol in der Info-Leiste angefordert
werden. Dabei wird davon ausgegangen, dass der Benutzer nur beim Erstellen von ersten
Services eine detaillierte Hilfe braucht. Nachdem er sich mit DisRESTractor vertraut
gemacht hat, sollten ihm Hinweise in der Info-Leiste ausreichen.
Viele Werkzeuge wie Dapper oder Grubber (s. Abschnitt 3.1) bieten noch ein visuelles
Feedback an, in dem bereits extrahierte Daten angezeigt werden. Darauf wird in DisRESTractor verzichtet, da Ressourcen in dieser Arbeit über mehrere Webseiten verteilt
sein dürfen, was zur Folge hat, dass die Extraktion zu lange dauert und somit zur
Laufzeit nicht möglich ist. Im dem Beispielszenario aus dem Abschnitt 4.1 müssten z. B.
51 Webseiten besucht werden, um alle Werte (jeweils einen für jedes Bild) des Attributes
Aufnahmedatum zu erhalten. Anhand mehrerer Zeitmessungen wurde festgestellt, dass
die Extraktion des Attributes Aufnahmedatum im Schnitt 4 Sekunden8 dauert. Diese
Zeit setzt sich aus der Ladezeit der Webseite mit Bildinformationen, auf der sich das
Attribut befindet und der Zeit der Extraktion mittels XPath. Die Ladezeit der Webseite
mit Suchergebnissen, auf der die Navigation beginnt, wurde nicht berücksichtigt. Wenn
ein visuelles Feedback für dieses Attribut in DisRESTractor verfügbar wäre, müssten
alle Werte knapp dreieinhalb Minuten (51 * 4 = 204 Sekunden) geladen werden. So
lange Wartezeiten würden die ganze Anwendung unbrauchbar machen.
Bei der Arbeit mit DisRESTractor steht dem Benutzer immer wieder eine der folgenden
zwei Aktionen zur Verfügung:
1. Wenn die aktuelle Webseite relevante Daten enthält, kann der Benutzer ein neues
Attribut einer bestehenden oder neuen Ressource hinzufügen. Dabei werden alle
Links im virtuellen Browser sowie neben den Attributen deaktiviert. Eine Navigation ist also nicht möglich und kann über die Schaltfläche navigieren in der
Info-Leiste freigegeben werden.
2. Der Benutzer kann innerhalb der gesamten Website navigieren. Alle Links sind
aktiv. Wie bereits oben erwähnt, dürfen dabei keine Formulare verwendet werden.
Zusätzlich zu Hyperlinks auf der aktuellen Webseite kann der Benutzer über Links
neben jedem Attribut im Ressourcen-Panel navigieren, die zur Webseite führen,
auf der sich dieses Attribut befindet. So kann der Benutzer auf eine schon besuchte
Webseite zurückkehren, um die Navigation von dort aus fortzuführen.
Der Benutzer kann Daten definieren, indem er einzelne entsprechende Elemente wie
Bilder, Tabellenzellen, Links oder Textstücke anklickt. Das erste angeklickte Element
dient dabei als Muster, nach dem DisRESTractor „ähnliche“ Elemente markiert. Markierte Bilder bekommen einen farblichen Rand, und sonstige markierte Elemente werden
durch einen farblichen Hintergrund hervorgehoben. Das angeklickte Element wird grün
und die vorgeschlagenen werden gelb markiert. Die automatische Auswahl wird anhand
der Position im HTML-Dokument und von CSS-Klassen9 des angeklickten Elements getroffen. Als „ähnlich“ werden diejenigen Elemente betrachtet, die im DOM-Baum10 möglichst
auf einer Ebene stehen und möglichst gleiche CSS-Klassen haben. Für die Berechnung
der Ähnlichkeit wurde ein vorhandenes Werkzeug namens SelectorGadget 11 eingesetzt.
8
Die Tests wurden bei einer Übertragungsrate der Internetverbindung von 32 MBit/s durchgeführt.
CSS steht für Cascading Style Sheets und ermöglicht das Formatieren von HTML-Elementen.
10
DOM steht für Document Object Model und ist eine Spezifikation für den Zugriff auf HTML-Dokumente.
11
http://www.selectorgadget.com/
9
39
4. Das Konzept von DisRESTractor
Nicht immer können semantisch ähnliche Elemente anhand der Struktur bestimmt werden. Daher kann der Benutzer die Auswahl anpassen, indem ein vorgeschlagenes Element (mit der gelben Markierung) nochmals anklickt. Daraufhin wird dieses Element
rot markiert und alle ihm ähnlichen Elemente werden aus der Auswahl entfernt. In diesem Prozess vom Auswählen und Abwählen kann der Benutzer eine optimale Menge der
Elemente definieren, die im später generierten Service geliefert werden.
Für die angepasste Menge der Elemente wird ein XPath-Ausdruck berechnet, der die
genaue Position der Elemente auf der Webseite angibt. Im später generierten Service
werden also nicht unbedingt dieselben Elemente geliefert wie in der aktuellen Auswahl, sondern alle Elemente, die demselben Muster entsprechen. Somit können neue
Ressourcen-Instanzen – wie z. B. neue Bilder bei Flickr – in die Ergebnismenge des
Web-Scrapers einbezogen werden.
Es kann vorkommen, dass mehrere Instanzen derselben Ressource per Paginierungsmechanismus auf verschiedene Webseiten aufgeteilt werden. Im Rahmen dieses Konzeptes
wird das nicht behandelt, da dies bereits in anderen Werkzeugen gelöst wurde. Der
Schwerpunkt dieser Arbeit basiert auf Ressourcen, die über mehrere Webseiten mit verschiedener Struktur (also nicht wegen einer Paginierung) verteilt sind.
Wenn der Benutzer die Menge von Elementen festgelegt hat, kann er diese als Attribut
hinzufügen. Dabei sind folgende drei Fälle zu unterscheiden:
1. Der Benutzer fügt ein Attribut einer neuen Ressource hinzu. Dafür drückt er den
Button Objekt aufnehmen oben im Ressourcen-Panel. Daraufhin erscheint der in
Abbildung 4.12a dargestellte Dialog. Der Benutzer gibt den Namen und ggf. die
Beschreibung der Ressource und des Attributes ein und wählt einen Attributtyp
aus der Tabelle 4.1 auf Seite 36. Nach der Bestätigung wird im Ressourcen-Panel
ein neuer Bereich für die Ressource erstellt. Der Typ Objekt ist in diesem Fall
nicht erlaubt, weil Attribute auf der technischen Ebene über andere vorhandene
Attribute identifiziert werden. Wenn eine Ressource, die noch kein Attribut besitzt,
eine weitere Ressource als ihr erstes Attribut hinzufügt, kann dieses Attribut nicht
identifiziert werden. Eine ausführlichere Beschreibung liefert Abschnitt 6.4.
2. Er fügt ein Attribut einer vorhandenen Ressource hinzu. Dafür betätigt er die
Schaltfläche Merkmal hinzufügen aus dem Bereich der entsprechender Ressource
(s. Abbildung 4.11). Im Dialog aus der Abbildung 4.12b gibt der Benutzer den
Namen und ggf. die Beschreibung des Attributes und wählt einen Typ aus der
Tabelle 4.1 auf Seite 36. Nach der Bestätigung wird das Attribut im Bereich der
entsprechenden Ressource angezeigt.
3. Er fügt ein Attribut einer neuen Ressource hinzu, die wiederum ein Attribut einer
vorhandenen Ressource ist. Somit kann er die beiden Ressourcen in Beziehung
zueinander setzen. Dafür drückt er die Schaltfläche Merkmal hinzufügen aus dem
Bereich der vorhandenen Ressource (s. Abbildung 4.11). Im Dialog aus der Abbildung 4.12b wählt er den Attributtyp Objekt aus, woraufhin sich der Dialog wie in
Abbildung 4.12c ändert. Dort gibt er die Daten wie unter Punkt 1 ein und drückt
speichern. Im Bereich der vorhandenen Ressource erscheint ein neues Attribut
mit dem Titel der neuen Ressource. Zusätzlich wird ein weiterer Bereich für die
neue Ressource erstellt.
40
4. Das Konzept von DisRESTractor
Abbildung 4.12.: Aufnahme von Attributen in DisRESTractor
Neben jeder Ressource und jedem Attribut im Ressourcen-Panel sind Symbole abgebildet, die es erlauben:
• die vom Benutzer eingegebene Beschreibung anzuzeigen,
• eine Ressource oder ein Attribut umzubenennen oder zu löschen,
• zur Webseite mit dem Attribut zu navigieren.
Diese Symbole wurden im Abschnitt 4.1 auf Seite 30 bereits beschrieben.
Sobald eine Ressource vorhanden ist, kann der Benutzer jederzeit einen Service generieren lassen. Dafür betätigt er die Schaltfläche Service erstellen im Ressourcen-Panel.
Im erscheinenden Dialog benennt er den Service und gibt ggf. eine Beschreibung ein.
Anschließend wird der Service generiert und auf dem Server installiert, und der Benutzer
wird auf die Webseite mit der Beschreibung des Service umgeleitet. Dort findet er Informationen, wie der Service verwendet werden kann. Dies wird im nächsten Abschnitt
beschrieben.
4.2.3. Generierter Service
Über den Service können alle extrahierten Informationen angefordert werden. Dafür
wurde XML als Repräsentation von Ressourcen ausgewählt. Mit XML lassen sich beliebige
Ressourcen strukturiert darstellen. Im Rahmen dieses Konzeptes sieht eine BeispielRessource wie folgt aus:
41
4. Das Konzept von DisRESTractor
1
2
3
4
5
6
7
8
9
10
<?xml version="1.0" encoding="UTF−8"?>
<resource name="Ressource1">
<attribute name="Attribut1" type="image"
href="http://example.org/musterportal/xyz.html">
<img src="http://example.org/musterportal/images/xyz.jpg"
width="20" height="10" alt="tooltip"/>
</attribute>
<attribute name="Ressource2" type="resource"
href="http://example.org/Web−Scraper/service/Ressource2/5"/>
</resource>
Listing 4.1: XML-Repräsentation einer Ressource
Das resource-Element enthält den Titel der Ressource. Jedes Kindelement repräsentiert
ein Attribut, für das der Titel und der Typ angegeben werden. Als Inhalt enthalten
Attribute die aus der ursprünglichen Webseite extrahierten Daten. Falls der AttributInhalt auf der ursprünglichen Webseite verlinkt ist, wird der entsprechende Hyperlink
im href-Attribut des attribute-Elementes gespeichert (Zeile 4).
Falls ein Attribut auf eine andere Ressource verweist (Zeile 8), wird der Titel und der
URL der Ressource angegeben. Das type-Attribut resource weist darauf hin, dass es
sich um ein Ressourcen-Attribut handelt. Hier wird also dem REST-Prinzip Hypermedia
gefolgt.
Die Gestaltung von URLs einer Ressource erfolgt ebenfalls nach entsprechenden RESTPrinzipien. URLs haben das folgende Format:
http://Domainname/Service-Name/service/Ressourcen-Name/Ressourcen-Nummer
Verfügbare Ressourcen-Nummern kann man über die entsprechende Listen-Ressource
(s. weiter unten) bekommen.
Zusätzlich wird für jede Ressource die Liste aller Instanzen in XML-Repräsentation geliefert. Eine beispielhafte Listen-Ressource ist in Listing 4.2 zu sehen. Es wird eine Menge
von resource-Elementen angegeben, die jeweils einen URL und einen Titel der Ressource
enthalten. URLs zu Listen-Ressourcen sehen wie folgt aus:
http://Domainname/Service-Name/service/Ressourcen-Name
1
2
3
4
5
6
<?xml version="1.0" encoding="UTF−8"?>
<resources>
<resource href="http://example.org/Web−Scraper/service/Ressource1/1" name="
Ressource1"/>
...
<resource href="http://example.org/Web−Scraper/service/Ressource1/n" name="
Ressource1"/>
</resources>
Listing 4.2: XML-Repräsentation einer Listen-Ressource
42
4. Das Konzept von DisRESTractor
Wie in [Til09] empfohlen, wird für den generierten Service eine Dokumentation in Prosa
als HTML-Repräsentation geliefert. Diese besteht aus folgenden Teilen:
• Bezeichnung und Beschreibung des Service
• Auflistung von Ressourcen und deren Attributen
Für jede Ressource werden neben dem Titel und der Beschreibung (falls vorhanden) auch
der URL der entsprechenden Listen-Ressource sowie das URL-Schema von RessourcenInstanzen angegeben. Für jedes Attribut werden der Titel, die Beschreibung und der
Typ aufgelistet. Wie in Abschnitt 6.6 später gezeigt wird, wird für den Service auch
eine maschinenlesbare Dokumentation in WADL (s. Abschnitt 2.4.7) erzeugt.
In diesem Kapitel wurde das Konzept vorgestellt, das es Benutzern ohne Programmierkenntnisse erlaubt, über mehrere Webseiten verteile Informationen und ggf. deren
Beziehungen über die grafische Benutzeroberfläche von DisRESTractor in einem Service
zu kapseln. Im nächsten Kapitel folgt nun eine Evaluation, in der das Konzept auf seine
Eignung für Endbenutzer überprüft wird.
43
5. Evaluation des Konzeptes
Um das Konzept vor der Implementierung auf die Bedienbarkeit zu prüfen, wurden
Interviews mit fachfremden Personen durchgeführt. Dabei sollte geprüft werden, ob das
Konzept für Benutzer ohne Programmierkenntnisse verständlich ist. Nach den Interviews
kamen die Teilnehmer zum Schluss, dass das Konzept von DisRESTractor erfolgreich
eingesetzt werden könnte. Es wurden sogar weitere Anwendungsszenarios entworfen.
Während der Interviews kamen viele Verbesserungsvorschläge, die vorher nicht bedacht
wurden und nach der Evaluation ins Konzept aufgenommen wurden.
5.1. Planung und Durchführung von Interviews
Für die Interviews wurden Personen ausgesucht, die einerseits keine tiefgreifenden Informatikkenntnisse haben und andererseits das Internet in ihrem Arbeitsalltag nutzen und
somit in der Lage sind, die Idee von Mashups und Web-Scraping schnell zu verstehen.
Für jedes Interview wurden 45 Minuten eingeplant. Alle Interviews wurden isoliert mit
jeweils einer Person durchgeführt, damit die Anderen kein Vorwissen haben.
Als Interview-Teilnehmer waren folgende Personen eines mittelständischen Unternehmens eingeladen:
• PR- & Marketing-Referentin
• Projektingenieur im Bereich Logistik
• Projektingenieur im Bereich Produktionstechnik
• Projektingenieur im Bereich Informationssysteme
• Sekretärin
Der Ablauf von Interviews sah folgendermaßen aus:
Motivation Zunächst wurden Mashups und der Zweck von Web-Scrapern an Beispielen
erklärt. Es wurden Möglichkeiten der Einbindung von Informationen in digitale Karten wie bei Houston Crime Maps 1 (s. Abschnitt 2.3) anhand von
vorgefertigten Screenshots gezeigt. Es wurde berichtet, dass es auch MashupEditoren gibt, die für Benutzer ohne Programmierkenntnisse gedacht sind.
Web-Scraping wurde anhand von Beispielen der Extraktion von Informationen über Kunden, Produkte und Publikationen erläutert. Schließlich wurde
auch erklärt, dass per Web-Scraping extrahierte Daten mit anderen Quellen
in einem Mashup kombiniert, gefiltert und geordnet werden können.
1
http://houstoncrimemaps.com
44
5. Evaluation des Konzeptes
Konzept Nachdem der Benutzer die Idee von Web-Scraping verstanden hat, wurde
ihm das Konzept dieser Arbeit vorgestellt. Es wurde erklärt, dass es darum
geht, über mehrere Webseiten einer Website verteilte Informationen und ggf.
deren Beziehungen zu extrahieren. Dabei wurde das Modell mit Ressourcen
und Attributen umgangssprachlich erläutert.
Szenario Das in Abschnitt 4.1 beschriebe Szenario wurde vorgestellt und anhand
von Mockups 2 durchgegangen. Die Mockups wurden davor für den gesamten Prozess als statische HTML-Webseiten ohne weitere Funktionalität erstellt. Dabei sollte der Benutzer laut denken und Anmerkungen, Kritik und
Verbesserungsvorschläge bezüglich der Bedienelemente und Formulierungen
machen.
Abschluss Der Benutzer berichtete, welchen Gesamteindruck er bekommen hat und
welche Änderungen er sich wünscht. Es wurde gefragt, ob sich der Benutzer vorstellen kann, DisRESTractor in seinem Berufsalltag oder für private
Zwecke einzusetzen.
5.2. Auswertung von Ergebnissen
Alle Personen konnten den Prozess bei der Arbeit mit DisRESTractor verstehen und
fanden die Idee des Konzeptes sehr nützlich. Ein Interview-Teilnehmer hat berichtet,
dass er oft auf der Website http://www.vdi.de3 nach Veranstaltungen wie Tagungen,
Seminaren und Konferenzen sucht. Dabei werden auf der entsprechenden Webseite mit
Suchergebnissen jeweils nur der Titel, der Veranstalter, der Ort und das Datum angezeigt. Der Interview-Teilnehmer möchte sich auch die Teilnahmegebühren sowie das
komplette Programm von Veranstaltungen anschauen. Dafür muss aber für jede Veranstaltung eine weitere Webseite besucht werden. Für diese Situation fand er den Einsatz
von DisRESTractor möglich.
Wenn man diese Idee weiterentwickelt, wäre eine zusätzliche Extraktion der Veranstaltungsinformationen auch von der Website http://www.vdma.org4 und eine spätere
Kombinationen der beiden Quellen in einem Mashup denkbar.
Ähnliche Ideen kamen von anderen Interview-Teilnehmern, die oft nach wissenschaftlichen Publikationen auf verschiedenen Websites suchen.
Der wichtigste Wunsch von allen fünf Teilnehmern war, die Begriffe Ressource und
Attribut in Objekt und Merkmal umzubenennen. Ebenfalls wurde die Formulierung
„andere Instanzen dieser Ressource“ nicht verstanden und nun in „weitere Objekte/Merkmale der gleichen Kategorie“ umbenannt.
Nicht alle Teilnehmer haben das Verhältnis zwischen einer Ressource und einem Attribut in DisRESTractor sofort verstanden. Deswegen wurde ein Hilfe-Dialog mit einer
2
Ein Mockup ist ein Prototyp der Benutzerschnittstelle einer zu entwickelnden Software ohne weitere
Funktionalität.
3
Verein Deutscher Ingenieure e.V.
4
Verband Deutscher Maschinen- und Anlagenbau e.V.
45
5. Evaluation des Konzeptes
ausführlichen Erklärung und begleitenden Beispielen erstellt, der über das FragezeichenSymbol in der Info-Leiste jederzeit (auch gleich nach dem Start von DisRESTractor)
abrufbar ist. Dies soll insbesondere für diejenigen Benutzer hilfreich sein, die zum ersten
Mal mit DisRESTractor arbeiten.
Beim Auswählen von Daten auf einer Webseite haben sich die Teilnehmer eine Übersicht gewünscht, wie viele Elemente momentan markiert sind. Diese wird nun in der
Info-Leiste gegeben, falls die Auswahl nicht leer ist. Das vermeidet Situationen, in denen falsche Elemente markiert, aber in der aktuellen Ansicht nicht zu sehen sind, weil
die Webseite zu lang ist und zur Stelle mit falschen Elementen noch gescrollt werden
soll. Ohne diese Übersicht der markierten Elemente könnte man nicht relevante Informationen extrahieren.
Beim Hinzufügen von Ressourcen und Attributen haben die Probanden stets jeweils das
Feld Beschreibung ausgefüllt, obwohl sie das in einigen Fällen nicht für sinnvoll hielten,
da Ressourcen- und Attributennamen schon aussagekräftig genug waren. Deswegen wird
nun in Dialogen darauf hingewiesen, dass diese Felder optional sind.
Einige Formulierungen in der Info-Leiste wurden angepasst. Die Phrase „automatisch
getroffene Auswahl“ soll nun deutlich machen, dass sich das System richtig verhält,
indem weitere („ähnliche“) Elemente nach dem ersten Anklicken markiert werden. Die
Formulierung „zu einer anderen Seite dieser Site navigieren“ weist darauf hin, dass der
Benutzer z. B. von der Webseite mit Informationen über ein Foto zur Webseite mit
Besitzer-Informationen wechseln kann, aber auf dem Flickr -Portal bleiben soll.
Alle oben genannten Anmerkungen wurden berücksichtigt und umgesetzt. Im Beispielszenario aus Abschnitt 4.1 wurden diese Änderungen schon vorgenommen.
46
6. Entwurf und Implementierung
In diesem Kapitel wird es vorgestellt, wie das Konzept technisch umgesetzt wurde.
Zuerst wird die technische Plattform vorgestellt, die für die Implementierung von DisRESTractor verwendet wurde. Anschließend wird die Architektur von DisRESTractor
beschrieben. Dann wird der Ablauf der Arbeit mit DisRESTractor auf der technischen
Ebene vorgestellt. Schließlich wird der Aufbau des generierten Service gezeigt.
6.1. Technische Plattform
Nach der Aufgabenstellung muss DisRESTractor in Form einer Webanwendung implementiert werden. Dafür gibt es unter anderen zwei große Plattformen, und zwar Java
EE und .NET. Java EE steht für Java Platform, Enterprise Edition und ist eine Spezifikation der Softwarearchitektur für in Java programmierte (Web-)Anwendungen. .NET
ist ein Framework der Firma Microsoft und erlaubt mit seiner serverseitigen Technologie
ASP.NET die Entwicklung von Webanwendungen.
Die Beiden Plattformen sind sehr mächtig und haben verschiedene Vorteile und Nachteile. In dieser Arbeit wird Java EE v. 6 verwendet, weil es hersteller- und plattformunabhängig ist. .NET ist im vollen Umfang nur für Windows verfügbar und entsprechende
Werkzeuge werden nur von Microsoft bereitgestellt.
Java EE bietet viele Programmierschnittstellen an, insbesondere JAX-RS ([HS08]) für die
Entwicklung von REST-basierten Web-Services. Java EE-Applikationen erfordern einen
Applikationsserver als Laufzeitumgebung. Dafür gibt es viele Alternativen. In dieser
Arbeit wird der Open-Source-Server Apache Tomcat 1 v. 6.0.25 verwendet.
Zwei folgende Komponenten sind ein wichtiger Bestandteil der meisten Webanwendungen in Java EE:
Servlets sind Java-Klassen, deren Instanzen innerhalb eines Applikationsservers Anfragen von Clients entgegennehmen und beantworten.
JSP (Java Server Pages) sind HTML-Seiten, deren dynamische Teile durch den eingebetteten Java-Code erzeugt werden.
Eine gründliche Erklärung dieser Technologie gibt [Bri05].
Als Entwicklungsumgebung wird Eclipse IDE 2 eingesetzt. Sie unterstützt den Entwickler unter anderem beim Programmieren in Java und beim Erstellen von Webseiten und
erleichtert die Arbeit mit dem Applikationsserver, indem sie Webanwendungen automatisch auf dem Server installiert und bei jeder Änderung aktualisiert.
1
2
http://tomcat.apache.org/
http://www.eclipse.org/
47
6. Entwurf und Implementierung
Um die Benutzeroberfläche von DisRESTractor interaktiv zu gestalten sowie die Struktur von Webseiten im virtuellen Browser zu analysieren, wird JavaScript mit einem
Framework namens jQuery 3 eingesetzt. jQuery stellt sehr viele hilfreiche Funktionen
zur Verfügung, insbesondere:
• schnellere und leichtere Navigation im DOM-Baum von Webseiten
• Manipulation von Elementen im Dokument
• erweitertes System zur Ereignisbehandlung
• asynchrone HTTP-Anfragen per AJAX (s. Abschnitt 2.1)
• zahlreiche Plug-ins, unter anderem für die Erstellung von anspruchsvollen Benutzeroberflächen
Eine detaillierte Übersicht von Funktionen gibt [CS10]. In [Wel09] werden Plug-ins für
verschiedene Oberflächen-Komponenten wie Dialoge, Kalender, Tabs usw. beschrieben.
Für die Realisierung aller Dialoge in DisRESTractor zur Aufnahme, Änderung und Entfernung von Attributen und Ressourcen wurde der Plug-in jQuery UI Dialog 4 verwendet.
6.2. Architektur von DisRESTractor
Wie in Kapitel 4 bereits beschrieben wurde, muss ein Benutzer vor dem Start von
DisRESTractorzur Webseite mit gewünschten Inhalten gelangen. Nachdem er die entsprechende Webseite (ggf. mit Suchergebnissen) geöffnet hat, startet er DisRESTractor
über ein Bookmarklet (s. Abschnitt 2.1). Dieses führt den folgenden JavaScript-Code in
der aktuellen Webseite aus:
javascript:location.href=’http://example.org/DisRESTractor/?url=’
+escape(document.location.href)}
Es nimmt zuerst den URL der aktuellen Webseite (document.location.href), ersetzt
dessen Sonderzeichen (escape()) und leitet die aktuelle Webseite zu DisRESTractor
um, dem der grade modifizierte URL übergeben wird.
Die Ersetzung von Sonderzeichen ist unter anderem erforderlich, damit die URL-Parameter
der Webseite mit relevanten Daten richtig übertragen werden. Wenn der URL der Webseite z. B. http://example.com/musterportal/?param1=abc&param2=xyz lautet, würde DisRESTractor ohne escape-Funktion den url-Parameter als http://example.com/
musterportal/?param1=abc interpretieren, da das „&“-Zeichen zur Trennung von Parametern im URL eingesetzt wird. Somit würde im virtuellen Browser von DisRESTractoreine falsche Webseite geöffnet.
Abbildung 6.1 zeigt ganz grob die Architektur von DisRESTractor. Ein Benutzer definiert relevante Daten in DisRESTractor und lässt einen Web-Scraper generieren. Der
erzeugte Web-Scraper ist eine eigenständige Webanwendung, die unabhängig vom DisRESTractor läuft.
3
4
http://jquery.com/
http://docs.jquery.com/UI/Dialog
48
6. Entwurf und Implementierung
JSP
SelectorGadget
Datenmodell
DisRESTractor
Proxy
Ressource-Manager
C
l
i
e
n
t
S
e
r
v
e
r
Web-Scraper
Datenmodell
Abbildung 6.1.: Architektur von DisRESTractor
Auf der Client-Seite wird die grafische Benutzeroberfläche von DisRESTractor als JSP
in einem Webbrowser angezeigt. Ebenfalls auf der Client-Seite wird ein Datenmodell
erstellt, in das alle vom Benutzer hinzugefügten Ressourcen einfließen. Die Komponente SelectorGadget ermöglicht, die Auswahl des Benutzers automatisch zu erweitern
und für markierte Elemente einen XPath-Ausdruck zu ermitteln. Dies wird in weiteren
Abschnitten ausführlichen beschrieben.
Auf der Server-Seite hat DisRESTractor im Wesentlichen zwei Komponenten, die durch
Servlets realisiert werden:
Proxy lädt die Webseite mit gewünschten Inhalten (s. Abschnitt 6.3)
Ressource-Manager empfängt das im Client erstellte Datenmodell und generiert einen
Web-Scraper
Nachdem ein Service erstellt wurde, kann der Benutzer Informationen über ihn anfordern. Dabei enthält der Service das Datenmodell, das in DisRESTractor erzeugt wurde.
Gemäß diesem Datenmodell werden Informationen aus Webseiten extrahiert.
Im nächsten Abschnitt wird ein Problem beschrieben, das ganz am Anfang der Implementierung aufgetreten ist und die Verwendung eines Proxy erforderlich macht.
6.3. Same origin policy
Die Benutzeroberfläche von DisRESTractor wird durch eine JSP-Seite repräsentiert. Der
in Kapitel 4 beschriebene virtuelle Browser wird mit Hilfe eines Inlinefames innerhalb
der JSP-Seite realisiert. Ein Inlineframe ist ein HTML-Element, das es erlaubt, innerhalb
einer Webseite Inhalte einer anderen Webseite als selbstständiges HTML-Dokument einzubinden.
49
6. Entwurf und Implementierung
Alle Benutzeraktionen wie Klicks auf relevante Daten und Navigation werden im virtuellen Browser per JavaScript überwacht. Außerdem wird JavaScript für die Anpassung
der Oberfläche – z. B. für die Markierung der Elemente und (De-)Aktivierung von Links
im virtuellen Browser – eingesetzt.
Allerdings wird die Verwendung von JavaScript in im Zusammenhang mit Inlineframes durch die sogenannte Same Origin Policy – die Richtlinie der gleichen Herkunft –
untersagt. Diese Richtlinie wird in allen heutigen Webbrowsern angewendet und stellt
sicher, dass keine Kommunikation per JavaScript oder andere Script-Sprachen zwischen
Webseiten stattfindet, wenn diese nicht der gleichen Herkunft sind. Dies betrifft auch
die Kommunikation zwischen einer übergeordneten (DisRESTractor) und einer (im virtuellen Browser) eingebetteten Webseite.
Die Herkunft einer Webseite wird über die Kombination aus Protokoll (z. B. HTTP),
Domain (z. B. example.org) und Port (z. B. 8080) im URL definiert. So kann z. B. von
der Webseite http://example.org auf keine der folgenden Webseiten per JavaScript
zugegriffen werden:
• https://example.org
• http://example.com
• http://example.org:8080
Ein Zugriff von http://example.org/1.html auf http://example.org/2.html und
http://example.org/xyz/3.html ist aber durchaus möglich.
Diese Richtlinie verhindert, dass z. B. Login-Daten über fremde Skripte gestohlen werden. Diese Richtlinie steht aber vielen Entwicklern im Wege, insbesondere im Zusammenhang mit Mashups, in denen verschiedene Quellen kombiniert werden. In [DKBS+ 08]
wird ein Modell vorgestellt, dass die Kommunikation zwischen zwei Domains erlaubt,
die einander vertrauen. Das wird in DisRESTractor nicht erfüllt, da es keine Ansprüche
erheben kann, von irgendeinem Portal wie Flickr freigegeben zu werden. Außerdem lässt
dieses Modell keinen Zugriff auf die DOM-Struktur von Webseiten zu. In DisRESTractor
ist das aber eine der wichtigsten Voraussetzungen, da die Struktur der Webseiten sowie
die Navigation auf der Website überwacht und analysiert werden, um die Position von
relevanten Daten zu ermitteln.
Um die Same Origin Policy umzugehen, wurde in DisRESTractor ein Proxy-Servlet
erstellt, das die Original-Webseite lädt und diese an DisRESTractor weitergibt, so dass
im Webbrowser die beiden Webseiten – DisRESTractor und die im virtuellen Browser
eingebettete Webseite – die gleiche Herkunft haben.
6.4. Dialog mit DisRESTractor zur Definition von
Ressourcen
Das Sequenzdiagramm in Abbildung 6.2 zeigt den Ablauf der Arbeit in DisRESTractor
und verfeinert das Aktivitätsdiagramm aus dem Abschnitt 4.2.2 auf Seite 37.
50
6. Entwurf und Implementierung
Web-Browser
Benutzer
loop
[solange noch relevante Daten auf der gesamten Website vorhanden]
loop
[solange noch relevante Daten
auf der aktuellen Webseite vorhanden]
Element wählen()
ähnliche Elemente vorschlagen()
Attribut hinzufügen()
Datenmodell erweitern()
Benutzerobefläche aktualisieren()
opt
ProxyServlet
Link anklicken()
Webseite anfordern(URL)
relative URLs in absolute
umwandeln()
html
SelectorGadget in neue Webseite laden()
RessourcenManagementServlet
Service erzeugen()
Service erzeugen(Datenmodell)
URL des erzeugten Service
zur Service-Dokumentation umleiten()
Abbildung 6.2.: Sequenzdiagramm mit dem Ablauf in DisRESTractor
51
6. Entwurf und Implementierung
Solange es relevante Daten auf der gesamten Website gibt, wiederholt der Benutzer eine
der folgenden zwei Aktionen:
• Auswahl und Hinzufügen von Attributen (einer neuen oder vorhandenen Ressource), solange es Informationen auf der aktuellen Webseite gibt,
• Navigation zu einer anderen Webseite dieser Website.
Bei der Navigation werden alle Benutzeraktionen abgefangen. Wenn der Benutzer einen
Link im virtuellen Browser anklickt, wird ein normales Verhalten im Browser, also eine HTTP-Anfrage an den entsprechenden Server abgebrochen und an Proxy-Servlet
umgeleitet. Dieses lädt die angeforderte Webseite vom Server herunter und gibt den
Quellcode an den Webbrowser weiter. Dabei werden alle relative URLs in Links und
Pfaden zu Bildern in absolute umgewandelt.
Wie man im Diagramm sieht, wird die Selektion von Elementen, die Vorhersage ähnlicher
Elemente und die Aufnahme von Attributen im Webbrowser ohne Kommunikation mit
dem Server durchgeführt. Dieser Teil wird in JavaScript mit jQuery programmiert. Das
beschleunigt vor allem die Arbeit mit DisRESTractor, indem unnötige Wartezeiten auf
die Antwort des Servers vermieden werden.
Wenn der Benutzer ein Element anklickt, wird eine Menge ähnlicher Elemente vorgeschlagen und deren Position wird in einem XPath-Ausdruck erfasst. Das ist ein aufwändiger Prozess, daher wurde dafür nach einer vorhandenen Lösung gesucht. Ein Werkzeug,
das diese Funktionen übernimmt, heißt SelectorGadget 5 . Es wurde dafür entwickelt,
einen Selektor für eine Menge von Elementen anhand deren CSS-Klassen und Position
im DOM-Baum zu ermitteln. Dieser Selektor kann in einen XPath-Ausdruck umgewandelt
werden.
SelectorGadget wurde ursprünglich als ein eigenständiges Werkzeug programmiert, das
(wie DisRESTractor) über ein Bookmarklet gestartet werden kann. Für DisRESTractor
wurde es angepasst und wird jetzt in jede Webseite im virtuellen Browser automatisch
eingebunden.
Alle Informationen, die der Benutzer als Attribute hinzufügt, werden in ein Datenmodell gemäß dem Metamodell aus dem Abschnitt 4.2.1 abgebildet. Dieses Modell wird
zuerst auf der Client-Seite in JavaScript erstellt. Die Datenstruktur einer Ressource
bleibt gleich. Die entsprechende Datenstruktur eines Attributes enthält dabei folgende
Informationen:
• Name, Beschreibung, Typ, URL und XPath wie im Metamodell definiert.
• id ein eindeutiger Identifikator des Attributes.
• path enthält den Pfad zur Webseite, auf der sich das Attribut befindet.
• isMultiple gibt an, ob dieses Attribut für eine Ressourcen-Instanz mehrmals
vorkommt (wie das Attribut Schlüsselwort aus dem Beispielszenario).
• links die Menge aller Links (Attributwerte), die bei der Arbeit mit DisRESTractor gefunden wurden, wenn dieses Attribut überhaupt verlinkt ist.
• isRemoved gibt an, ob das Attribut vom Benutzer entfernt wurde.
5
http://www.selectorgadget.com/
52
6. Entwurf und Implementierung
Alle Bestandteile dieser Datenstruktur sind nötig, um die Navigation des Benutzers
später im Service rekonstruieren zu können. So ermöglichen es IDs, die Reihenfolge zu
speichern, in der einzelne Attribute hinzugefügt wurden. Das Feld path enthält den Pfad
zur Webseite mit dem Attribut, der möglichst über andere Attribute definiert wird. Der
Pfad enthält eine Menge von sogenannten Attribut-Links. Jeder Attribut-Link enthält
folgende Daten enthält:
pageOfAttribute: int id des Attributes, das auf der aktuellen Webseite vorhanden
ist, und -1, falls sich kein vorhandenes Attribut auf der Webseite befindet.
linkOfAttribute: int id des verlinkten Attributes, das angeklickt wurde, um zur
aktuellen Webseite zu gelangen, und -1 andernfalls.
url: string URL der aktuellen Webseite.
contentOfUrl: string Inhalt des Elementes, das diese Webseite verlinkt.
Der Pfad wird bei jedem Webseiten-Wechsel zu einer noch nicht besuchten Webseite um
einen Attribut-Link erweitert. Beim Hinzufügen eines Attributes wird der Pfad im pathFeld dieses Attributes gespeichert und die entsprechende Datenstruktur wird wieder
zurückgesetzt. Der Pfad zum nächsten Attribut beginnt also auf der Webseite des zuletzt
hinzugefügten Attributes.
So enthält das erste Attribut Foto aus dem Anwendungsszenario in Abschnitt 4.1 nur
den URL im Attribut-Link, da es noch keine anderen Attribute vorhanden sind und kein
Link existiert ist, der zur aktuellen Webseite führt.
Wenn man das zweite Attribut (Fotograf ) auf derselben Webseite einträgt, enthält das
entsprechende Attribut-Link die id des ersten Attributes im pageOfAttribute-Feld. So
kann man später im Service feststellen, dass die beiden Attribute auf derselben Webseite
sind, und die Webseite nicht doppelt geladen werden muss. Wenn man im allgemeinen
Fall über das Globus-Symbol neben Attributen im Ressourcen-Panel navigiert, wird das
Feld pageOfAttribute im Attribut-Link sofort gesetzt.
Wenn man das erste Attribut Foto (das erste Bild in der Ergebnismenge der Bilder)
nun anklickt, um zur Webseite zu gelangen, auf der sich das potenzielle Attribut Aufnahmedatum befindet, wird der Pfad um einen Attribut-Link erweitert, der die id des
ersten Attributes im linkOfAttribute enthält. Hätte man nur den URL dieser Webseite
gespeichert, wüsste man nicht mehr, wie man zum Aufnahmedatum des zweiten Bildes
kommt. Eine Alternative wäre, die URLs der beiden Attribute zu analysieren und Gesetzmäßigkeiten darin zu finden. Das ist aber nicht immer möglich. Deswegen wird die
Navigation des Benutzers später im Service über Klicks auf vorhandenen Attributen
verfolgt.
Wenn ein Link angeklickt wurde, der in keinem vorhandenen Attribut enthalten ist,
wird bei der Verfolgung im Service versucht, einen Link mit dem gleichen Inhalt zu
finden. Bei Flickr heißen die Links, die vom Foto aus über eine weitere Webseite zu
Informationen über den Benutzer führen, immer Profil. Wenn man den Text aller Links
auf der vorherigen Webseite analysiert, kommt man auf die gewünschte Webseite.
Es kann aber auch sein, dass mehrere Links auf einer Webseite gleich heißen, z. B.
Beschreibung einer Ware in der Ergebnisliste in einem Online-Shop. Dann müssen URLs
analysiert werden und anhand weiterer Kriterien wie Position auf der Webseite ermittelt
werden.
53
6. Entwurf und Implementierung
6.5. Generierung und Installation des Service
Wenn der Benutzer alle relevanten Informationen erfasst hat, kann er einen Web-Scraper
generieren lassen. Dabei werden als erstes die in JavaScript erstellten Datenstrukturen
vom Webbrowser an Ressource-Management-Servlet übermittelt. Auf der Server-Seite
werden die gleichen Datenstrukturen in Java erzeugt.
Der Vorteil daran, dass man zuerst das Datenmodell in JavaScript erstellt, besteht darin,
dass man gesammelte Informationen generell einem beliebigen Server übergeben kann,
der sie behandelt. Das könnte im Allgemeinen auch ein Server der .NET-Plattform sein.
Auf dem Server befindet sich innerhalb von DisRESTractor ein nicht kompiliertes Projekt des künftigen Service. Wenn DisRESTractor das fertige Datenmodell vom Webbrowser bekommen hat, initialisiert es das Datenmodell des Service mit den erhaltenen
Informationen, kompiliert dieses Projekt und installiert es auf demselben Server. Dieses eingebettete Projekt bleibt immer erhalten. Nur das Datenmodell wird vor jedem
Erzeugen eines Web-Scrapers neu geladen.
Eine Kompilierung und Installation des neuen Projektes DisRESTractorzur Laufzeit
macht das Werkzeug namens Apache Ant 6 möglich. Es ist zur Automatisierung beliebiger Abläufe bei der Software-Entwicklung (vor allem im Java-Umfeld) gedacht. Diese
Abläufe müssen in einer Skript-Datei im XML-Format definiert werden. Standardmäßig
heißt sie build.xml. Das entsprechende Skript für die Kompilierung und Installation
des Service aus dem DisRESTractor findet man im Anhang in Abschnitt A.1.
6.6. Architektur des Service
Der generierte Service ist eine Webanwendung, die nach REST-Prinzipien aufgebaut ist.
Abbildung 6.3 zeigt die Klassenstruktur des Service. Die Getter- und Setter- sowie Hilfsmethoden werden übersichtlichkeitshalber nicht angezeigt.
Das Paket structures enthält die Datenstrukturen, die auch auf der Client-Seite von
DisRESTractor erzeugt und mit Informationen gefüllt werden.
Das Paket scraping enthält folgende Klassen:
• ResourcesInitializer: der Quellcode dieser Klasse wird von DisRESTractor generiert. Die Klasse baut die Datenstrukturen auf, die in DisRESTractor erzeugt
wurden.
• Wrapper: extrahiert Informationen aus Webseiten gemäß dem Datenmodell, das
die Klasse ResourcesInitializer bereitstellt.
Die Klasse Wrapper hat drei wichtige Methoden:
• getResourceList bekommt einen Ressourcennamen als Parameter und liefert eine
Listenressource im XML-Format (wie in Listing 4.2 auf Seite 42).
6
http://ant.apache.org/
54
6. Entwurf und Implementierung
service
structures
AttributeLink
ResourcePresentation
+getResourceList(resourceName:String): String
+getResourceByNumber(resourceName:String,
number:int): String
+getServiceDescription(): String
-pageOfAttribute: int
-linkOfAttribute: int
-url: String
-linkContent: String
1..*
Attribute
scraping
Wrapper
-resources: Resource[]
+getResourceList(resourceName:String): String
+getResourceByNumber(resourceName:String,
number:int): String
+getServiceDescription(): String
ResourcesInitializer
-id: int
-name: String
-description: String
-type: String
-xpath: String
-multiple: boolean
-removed: boolean
-value: String
1..*
Resource
+serviceName: String
+serviceDescription: String
-resources: Resource[]
-id: int
-name: String
-description: String
-url: String
-attributeOf: int
+getResources(): Resource[]
Abbildung 6.3.: Klassenstruktur des generierten Service
• getResourceByNumber erhält einen Ressourcennamen sowie eine Nummer und gibt
die entsprechende Ressource im XML-Format (wie in Listing 4.1 auf Seite 42) zurück.
• getServiceDescription liefert eine Beschreibung des Service als HTML.
Um Webseiten mit relevanten Informationen herunterzuladen und Informationen daraus zu extrahieren, wird das Werkzeug namens HtmlUnit 7 verwendet. Dieses ist für die
Modellierung von HTML-Dokumenten gedacht. Es erlaubt, Webseiten herunterzuladen,
darin zu navigieren, Links anzuklicken etc. Insbesondere können XPath-Ausdrücke verwendet werden, um das Dokument anzufragen. HtmlUnit erleichtert es, die Navigation
des Benutzers gemäß dem erzeugten Datenmodell zu rekonstruieren.
Die Methode getResourceList sammelt lediglich das erste Attribut einer Ressource,
um die Anzahl der Instanzen zu ermitteln. Anhand dieser Anzahl wird eine ListenRessource als XML erzeugt, die Links zu den einzelnen Ressourcen enthält (s. Listing 4.2
auf Seite 42). Dieses XML-Dokument wird als String zurückgegeben.
In der Methode getResourceByNumber wird die Navigation des Benutzers verfolgt, um
alle Informationen zu extrahieren. Als Antwort liefert die Methode ein XML-Dokument
im String-Format.
Die Methode getServiceDescription lädt keine Webseiten herunter, sondern erzeugt
eine Dokumentation (in Prosa) zum Service gemäß einem vorhandenen Datenmodell.
7
http://htmlunit.sourceforge.net/
55
6. Entwurf und Implementierung
Diese liefert ein HTML-Dokument, zu dem der Benutzer nach dem Abschluss der Arbeit
mit DisRESTractor umgeleitet wird.
Das Paket service enthält eine einzige Klasse ResourcePresentation, die die HTTPAnfragen von Clients entgegennimmt und beantwortet. Dafür ruft sie die gleichnamigen
Methoden der Klasse Wrapper auf. Diese Klasse macht den Service REST-konform. Hier
werden Pfade im URL definiert und Ressourcen im einem bestimmten Format geliefert.
Das wird mittels des Frameworks Jersey8 realisiert. Die Methode getResourceByNumber ist im folgenden Listing zu sehen:
1
2
3
4
5
6
7
8
@GET
@Path("/{resourceName}/{number}")
@Produces("application/xml")
public String getResourceByNumber(
@PathParam("resourceName") String resourceName,
@PathParam("number") int number) {
return wrapper.getResourceByNumber(resourceName, number);
}
Listing 6.1: Die Methode getResourceByNumber()
Die Annotation GET gibt an, dass diese Methode auf GET-Anfragen reagiert, dessen URL
mit dem Muster /resourceName/number endet. Teile des URL werden zu Parametern
der Methode. Die Annotation @Produces(“application/xml“) definiert ein AusgabeFormat – in diesem Fall XML.
Eine weitere Funktionalität des Jersey-Frameworks ist eine automatische Erzeugung
von WADL-Dokumentation zum Service. Abgefragt kann diese über die HTTP-Methode
OPTIONS an den Service. Die WADL-Dokumentation zum im Anwendungsszenario in Abschnitt 4.1 erstellen Service kann im Anhang in Abschnitt A.2 gefunden werden.
8
https://jersey.dev.java.net/
56
7. Zusammenfassung und Ausblick
7.1. Zusammenfassung
Im Rahmen dieser Arbeit wurde ein Konzept entwickelt, das einen Benutzer ohne Programmierkenntnisse befähigt, Web-Services zur Datenextraktion aus Webseiten, auch
Web-Scraper genannt, im Dialog mit DisRESTractor – der Webanwendung, die dieses
Konzept implementiert – visuell zu erstellen. In Anlehnung an den Architekturstil REST,
nach dessen Prinzipien das World Wide Web aufgebaut ist, werden Informationen in
Form von Ressourcen extrahiert. Das durch diese Arbeit adressierte Hauptproblem ist
die Tatsache, dass Ressourcen über mehrere Webseiten innerhalb einer Website verteilt
sein und in Beziehung miteinander stehen können.
Am Anfang der Arbeit wurde gezeigt, welche Vorteile eine automatische Datenextraktion
bringt und warum eine visuelle Erstellung von Web-Scrapern wichtig ist. Anschließend
wurde die Aufgabe vorgestellt.
In Kapitel 2 wurde die Struktur von Webseiten beschrieben. Dabei wurden unter anderem das Document Object Model, CSS und AJAX erklärt, die für eine Datenextraktion
von enormer Bedeutung sind.
Anschließend wurden Mashups vorgestellt, bei deren Entwicklung immer häufiger RESTServices verwendet werden. Daraufhin wurde REST vorgestellt – ein Architekturstil für
verteilte Webanwendungen, der insbesondere für die Erstellung leichtgewichtiger ressourcen-orientierter Web-Services geeignet ist. Dabei wurden die wichtigsten REST-Prinzipien erklärt. Weiterhin wurde ein Vergleich der Ansätze bei der Entwicklung von RESTbasierten Services und Web-Services im SOAP-Stil durchgeführt.
Am Ende des Kapitels 2 wurde Web-Scraping definiert, und verschiedene Extraktionstechniken wurden vorgestellt.
Kapitel 3 hat einige wissenschaftliche Arbeiten auf dem Gebiet der Informationsextraktion vorgestellt. Anschließend wurden kommerzielle Produkte präsentiert. Unter anderen
wurde Lixto Visual Developer 1 – eines der mächtigsten Werkzeuge für die visuelle Erzeugung von Web-Scrapern – beschrieben. Es unterstützt offene Standards wie XML, HTML,
CSS und XPath, bietet eine ansprechende Entwicklungsumgebung, die auf dem Eclipse
IDE 2 Framework basiert und die Webbrowser-Engine von Mozilla 3 integriert. Es besitzt
eine eigene Extraktionssprache und ermöglicht eine Ausgabe von extrahierten Daten in
vielen Formaten. Allerdings erfordert Lixto Visual Developer entsprechende technische
Kenntnisse und ist somit nicht für Benutzer ohne Programmierkenntnisse geeignet.
1
http://www.lixto.de/lixto_visual_developer/
http://www.eclipse.org/
3
http://www.mozilla.org/
2
57
7. Zusammenfassung und Ausblick
Dann wurde ein anderes Werkzeug namens Dapper vorgestellt, das für Benutzer ohne
technischen Hintergrund gedacht ist, aber im Vergleich zu Lixto Visual Developer nicht
annähernd so mächtig ist.
In Kapitel 4 wurde das Konzept von DisRESTractor beschrieben. Zuerst wurde ein
Beispielszenario entworfen, in dem eine Person mit Hilfe von DisRESTractor einen WebScraper erstellt. Um die im Dialog mit DisRESTractor erhobenen Anforderungen an den
Web-Scraper von dessen Implementierung zu trennen, wird während der Arbeit mit DisRESTractor ein Datenmodell erstellt. Ein Metamodell für solche Datenmodelle wurde
ebenfalls in diesem Kapitel vorgestellt. Anschließend wurden der Ablauf bei der Arbeit
mit DisRESTractor sowie generierte Services beschrieben. Jeder erzeugte Service wird in
einer benutzerfreundlichen Form auf einer Webseite dokumentiert. Als Ausgabeformat
für extrahierte Daten wurde XML gewählt, da es ermöglicht, Informationen einfach zu
strukturieren.
Um das entwickelte Konzept vor der Implementierung auf seine Bedienbarkeit und Eignung für Benutzer ohne Programmierkenntnisse zu testen, wurde eine Evaluation in
Form von Interviews durchgeführt. Als Teilnehmer wurden Personen ausgewählt, die
zwar keine technischen Kenntnisse besitzen, aber das Internet in ihrem Arbeitsalltag
nutzen und somit in der Lage sind, Vorteile der Datenextraktion zu verstehen. Alle Teilnehmer fanden das Konzept verständlich und konnten sich vorstellen, DisRESTractor
einzusetzen. Es wurden sogar weitere Anwendungsszenarios entworfen. Während der Interviews wurden viele Verbesserungsvorschläge gemacht, die vorher nicht bedacht und
nach der Evaluation ins Konzept einbezogen wurden. Die Evaluation und ihre Ergebnisse
sind in Kapitel 5 beschrieben.
Kapitel 6 hat die Implementierung des entwickelten Konzeptes in Form einer Webanwendung vorgestellt. Als technische Plattform wurde Java Platform, Enterprise Edition
gewählt, da sie nicht nur betriebssystemunabhängig ist, sondern viele Programmierschnittstellen zur Verfügung stellt – unter anderem für die Bearbeitung von XML, die
Entwicklung von REST-basierten Services sowie das Kompilieren anderer Anwendungen
zur Laufzeit und deren Installation auf einem Web-Server.
Anschließend wurde die Architektur von DisRESTractor beschrieben. Dann wurde auf
ein Problem eingegangen, das am Anfang der Implementierung aufgetreten ist, und zwar
die Same Origin Policy – die Richtlinie der gleichen Herkunft. Diese Richtlinie verhindert eine Kommunikation zwischen zwei Webseiten, die von verschiedenen Domains
stammen. Somit können keine Interaktionen des Benutzers mit Webseiten, aus denen
Informationen extrahiert werden müssen, innerhalb von DisRESTractor überwacht werden. Weiterhin kann die Struktur dieser Webseiten nicht analysiert werden, was jedoch
für Web-Scraping unabdingbar ist. Als Lösung wurde ein Proxy programmiert, der die
vom Benutzer angeforderten Webseiten herunterlädt und an DisRESTractor in der Form
weitergibt, als ob diese von DisRESTractor selbst stammen.
Danach wurde der Dialog mit DisRESTractor technisch beschrieben, und die Generierung und Installation des Service auf dem Web-Server erklärt. Zum Schluss wurde die
Architektur des generierten Service präsentiert. Dank der Verwendung des Frameworks
Jersey war die Beschreibung des Service im maschinenlesbaren Format WADL möglich.
58
7. Zusammenfassung und Ausblick
7.2. Ausblick
Im Folgenden wird beschrieben, welche Vorteile DisRESTractor gegenüber anderen
Werkzeugen bring und wie es eingesetzt werden kann. Anschließend werden Probleme genannt, die im Rahmen dieser Arbeit nicht gelöst wurden. Zu diesen Problemen
werden Erweiterungsmöglichkeiten des Konzeptes diskutiert.
Das in dieser Arbeit entwickelte Konzept und seine Implementierung erweitern die in
Kapitel 3 beschriebenen Konzepte und die zurzeit auf dem Markt verfügbaren Werkzeuge wie Dapper, indem Informationen in Form von Ressourcen mit einer Semantik
aus mehreren Webseiten inklusive ihrer Beziehungen extrahiert werden können. Eine
derartige webseitenübergreifende Extraktion war bisher nur in Lixto Visual Developer
möglich und somit einem Benutzer ohne technische Kenntnisse nicht zugänglich. DisRESTractor eignet sich gut für Szenarien, die in Abschnitten 4.1 und 5.2 vorgestellt
wurden.
Leider kann nicht immer sichergestellt werden, dass der erzeugte Service richtige Informationen liefert, da die Position von Elementen einer Webseite nicht immer exakt
ermittelt werden kann. Das verwendete Werkzeug SelectorGadget erzeugt oft XPathAusdrücke, die überflüssige Informationen liefern, die der Benutzer explizit abgewählt
hat. Für solche Fälle wäre eine zusätzliche Beschreibung mit Verwendung von regulären
Ausdrücken denkbar. Da jedoch Benutzer ohne technische Kenntnisse vorausgesetzt werden, muss es untersucht werden, in welcher Form reguläre Ausdrücke für Endbenutzer
zugänglich gemacht werden könnten. Es kommt auch vor, dass manche XPath-Ausdrücke
zu spezifisch sind und Informationen anhand von CSS-IDs beschreiben, was oft zur Folge
hat, dass keine Informationen aus anderen Webseiten nach dem vom Benutzer vorgegebenen Muster extrahiert werden können.
Im Rahmen dieser Arbeit generierte Services liefern Daten aus Webseiten, ohne diese zu
filtern oder zu erweitern. Es kommt aber vor, dass einerseits extrahierte Informationen
auch nicht relevante Daten enthalten, und andererseits wäre eine Möglichkeit von Vorteil,
die Informationen durch eigene Inhalte zu ergänzen. Man könnte also den Web-Service
so erweitern, dass auch das Hinzufügen, Aktualisieren und Löschen von Daten möglich
wären. Inhalte der ursprünglichen Webseite dürfen bzw. können dabei oft nicht geändert
werden, daher könnte dies virtuell über einen Proxy erfolgen.
Das in dieser Arbeit erstellte Konzept sieht keine Möglichkeit vor, erzeugte Web-Scraper
zu ändern. Somit können diese unbrauchbar werden, wenn sich die Struktur der ursprünglichen Webseite(n) ändert. Dieser Punkt kann weiter untersucht werden, um erstellte Services gegenüber solchen Änderungen flexibel zu machen.
Das Konzept behandelt die Extraktion von Daten, die beim ersten Laden einer Webseite
zur Verfügung stehen. Es können aber weitere Informationen per AJAX4 nachgeladen
werden. So erscheinen bei Flickr 5 weitere Informationen über ein Foto, wenn man mit
der Maus über einen bestimmten Bildbereich fährt. Andere Werkzeuge wie Mozenda
können auch solche Informationen extrahieren.
4
5
AJAX steht für Asynchronous JavaScript and XML
http://www.flickr.com
59
7. Zusammenfassung und Ausblick
Bei der Implementierung des Konzeptes wurde die Paginierung nicht berücksichtigt.
Eine Parameterübergabe an die Suchformulare der Quell-Webseiten ist ebenfalls nicht
realisiert. Somit ist die Extraktion von Daten aus einer Webseite, die eine Anmeldung
erfordert, nicht möglich. Das wurde in anderen Werkzeugen bereits implementiert und
ist nicht der Teil dieser Arbeit.
Einerseits bietet DisRESTractor einem Benutzer ohne Programmierkenntnisse gute Möglichkeiten, Daten zu extrahieren. Andererseits ist damit eine präzise Definition von zu
extrahierenden Daten in vielen Fällen nicht möglich. Das Gebiet der semi-automatischen
Generierung von Web-Scrapern kann weiter untersucht werden, um eine volle Kontrolle
über die zu extrahierenden Informationen zu haben, ohne dabei technische Kenntnisse
zu besitzen.
60
A. Anhang
A.1. Ant-Skript zur Generierung und Installation des
Service
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?xml version="1.0" encoding="UTF−8"?>
<project name="serviceProject" default="war" basedir=".">
<property name="webInfDir" value="./WEB−INF" />
<property name="classesDir" value="./WEB−INF/classes" />
<property name="libDir" value="./WEB−INF/lib" />
<target name="clean" description="entfernt␣das␣classes−Verzeichnis␣und␣
vorhandene␣war−Dateien">
<delete includeEmptyDirs="true">
< fileset dir="${classesDir}" includes="∗∗/∗" />
< fileset dir=".">
<include name="∗.war" />
</ fileset >
</delete>
</target>
<target name="init" description="erstellt␣das␣classes−Verzeichnis">
<mkdir dir="${classesDir}" />
</target>
<target name="compile" depends="clean" description="kompiliert␣alle␣java−
Dateien">
<javac srcdir="src" destdir="${classesDir}" debug="true" deprecation="true">
<classpath>
<pathelement path="${java.class.path}" />
< fileset dir="${libDir}">
<include name="∗∗/∗.jar" />
</ fileset >
</classpath>
</javac>
</target>
<target name="war" depends="compile" description="erzeugt␣eine␣war−Datei">
<war destfile="${warFileName}.war" webxml="${webInfDir}/web.xml">
<lib dir="${libDir}">
<include name="∗∗/∗.jar" />
</lib>
<classes dir="${classesDir}" />
</war>
61
A. Anhang
34
35
36
37
38
</target>
<target name="install" depends="war" description="installiert␣den␣Service␣auf␣
dem␣Tomcat−Server">
<copy file="${warFileName}" todir="${tomcatAppDir}"/>
</target>
</project>
Listing A.1: Ant-Skript zur Generierung und Installation des Service
A.2. WADL-Dokumentation zum generierten Service
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?xml version="1.0" encoding="UTF−8" standalone="yes"?>
<application xmlns="http://research.sun.com/wadl/2006/10">
<doc xmlns:jersey="http://jersey.dev.java.net/" jersey:generatedBy="Jersey:␣1.1.5
␣01/20/2010␣03:55␣PM" />
<resources base="http://localhost:8080/Maschsee−Bilder/">
<resource path="service/">
<method name="GET" id="getServiceDescription">
<response>
<representation mediaType="text/html" />
</response>
</method>
<resource path="/{resourceName}">
<param xmlns:xs="http://www.w3.org/2001/XMLSchema" type="xs:string"
style ="template" name="resourceName" />
<method name="GET" id="getResourceList">
<response>
<representation mediaType="application/xml" />
</response>
</method>
</resource>
<resource path="/{resourceName}/{number}">
<param xmlns:xs="http://www.w3.org/2001/XMLSchema" type="xs:int"
style ="template" name="number" />
<param xmlns:xs="http://www.w3.org/2001/XMLSchema" type="xs:string"
style ="template" name="resourceName" />
<method name="GET" id="getResourceByNumber">
<response>
<representation mediaType="application/xml" />
</response>
</method>
</resource>
</resource>
</resources>
</application>
Listing A.2: WADL-Dokumentation zum generierten Service
62
Abkürzungsverzeichnis
AJAX
Asynchronous JavaScript and XML
API
Application Programming Interface
ASP
Active Server Pages
BPEL
Business Process Execution Language
CAPTCHA
Completely Automated Public Turing test to tell Computers and Humans Apart
CSS
Cascading Style Sheets
CSV
Comma Separated Values
DisRESTractor
Distributed Resources Extractor
DOM
Document Object Model
FTP
File Transfer Protocol
HTML
Hypertext Markup Language
HTTP
Hypertext Transfer Protocol
Java EE
Java Platform, Enterprise Edition
JAX-RS
Java API for RESTful Web Services
JSON
JavaScript Object Notation
JSP
JavaServer Pages
REST
Representational State Transfer
RSS
Really Simple Syndication in Version 2.0
SOA
Service-orientierte Architekturen
SOAP
Ursprünglich Simple Object Access Protocol
UDDI
Universal Description, Discovery and Integration
URI
Uniform Resource Identifier
63
A. Anhang
URL
Uniform Resource Locator
URN
Uniform Resource Name
UTF-8
8-bit Unicode Transformation Format
W3C
World Wide Web Consortium
WADL
Web Application Description Language
WSDL
Web Services Description Language
WWW
World Wide Web
XHTML
Extensible HyperText Markup Language
XML
Extensible Markup Language
XML-RPC
XML Remote Procedure Call
XPath
XML Path Language
XQuery
XML Query Language
XSLT
Extensible Stylesheet Language Transformation
64
Literaturverzeichnis
[BFG01]
Baumgartner, Robert ; Flesca, Sergio ; Gottlob, Georg: Visual Web
Information Extraction with Lixto. In: VLDB VLDB 2001, Proceedings of
27th International Conference on Very Large Data Bases, September 11-14,
2001, Roma, Italy, 2001, 119-128
[BGH09]
Baumgartner, Robert ; Gottlob, Georg ; Herzog, Marcus: Scalable
Web Data Extraction for Online Market Intelligence. In: PVLDB 2 (2009),
Nr. 2, 1512-1523. http://www.vldb.org/pvldb/2/vldb09-1075.pdf. –
Zuletzt abgerufen am 14.04.2010
[BL07]
Booth, David ; Liu, Canyang K.: Web Services Description Language (WSDL) Version 2.0 Part 0: Primer. World Wide Web Consortium,
Recommendation REC-wsdl20-primer-20070626. http://www.w3.org/TR/
2007/REC-wsdl20-primer-20070626. Version: June 2007. – Zuletzt abgerufen am 14.04.2010
[Bri05]
Bridgewater, David: Sun Certified Web Component Developer Study
Guide (Exams 310-081 & 310-082) (Oracle Press). 1. McGraw-Hill Osborne
Media, 2005. – ISBN 9780072258813
[CB10]
Ceri, Stefano ; Brambilla, Marco: Search Computing: Challenges and
Directions (Lecture Notes in Computer Science / Information Systems and
Applications, incl. Internet/Web, and HCI). 1st Edition. Springer, 2010. –
ISBN 9783642123092
[CCHZ08]
Carl, Denny ; Clausen, Jörn ; Hassler, Marco ; Zund, Anatol: Mashups
programmieren. 1. O’Reilly, 2008. – ISBN 9783897217584
[CS10]
Chaffer, Jonathan ; Swedberg, Karl: jQuery 1.4 Reference Guide. Packt
Publishing, 2010. – ISBN 9781849510042
[DKBS+ 08] De Keukelaere, Frederik ; Bhola, Sumeer ; Steiner, Michael ; Chari,
Suresh ; Yoshihama, Sachiko: SMash: secure component model for crossdomain mashups on unmodified browsers. In: WWW ’08: Proceeding of the
17th international conference on World Wide Web. New York, NY, USA :
ACM, 2008. – ISBN 978–1–60558–085–2, S. 535–544
[FGM+ 99] Fielding, R. ; Gettys, J. ; Mogul, J. ; Frystyk, H. ; Masinter, L.
; Leach, P. ; Berners-Lee, T.: RFC 2616: Hypertext transfer protocol –
HTTP/1.1. http://www.ietf.org/rfc/rfc2616.txt. Version: 6 1999. –
Zuletzt abgerufen am 14.04.2010
[Fie00]
Fielding, Roy T.: Architectural Styles and the Design of Network-based
Software Architectures, University of California, Irvine, Diss., 2000. http:
65
Literaturverzeichnis
//www.ics.uci.edu/~fielding/pubs/dissertation/top.htm. – Zuletzt
abgerufen am 14.04.2010
[Ger08]
Gerhardt, Chris: Enterprise Mashups. Ein Beitrag zum Seminar „Social
Software Engineering“. http://sse08.pbworks.com/f/gerhardt_sse08_
final.pdf. Version: 2008. – Zuletzt abgerufen am 14.04.2010
[Goe05]
Goetz, Brian: Java theory and practice: Screen-scraping with XQuery. http://www.ibm.com/developerworks/java/library/j-jtp03225.
html. Version: March 2005. – Zuletzt abgerufen am 14.04.2010
[Had09]
Hadley, Marc: Web Application Description Language. World Wide Web
Consortium. http://www.w3.org/Submission/wadl/. Version: 2009. – Zuletzt abgerufen am 14.04.2010
[HB04]
Haas, Hugo ; Brown, Allen: Web Services Glossary. World Wide Web
Consortium. http://www.w3.org/TR/ws-gloss/. Version: 2004. – Zuletzt
abgerufen am 14.04.2010
[Hoc08]
Hochreiter, Martin: Mashups und ihre praktischen Anwendungen. Hagenberg, Austria, Digitale Medien; FH Oberösterreich – Fakultät für Informatik, Kommunikation und Medien, Diplomarbeit, 2008
[HS08]
Hadley, Marc ; Sandoz, Paul: JAX-RS: Java API for RESTful
Web Services. http://jcp.org/aboutJava/communityprocess/final/
jsr311/index.html, 9 2008 Zuletzt abgerufen am 14.04.2010
[Jac04]
Jacobs, Ian: URIs, Addressability, and the use of HTTP GET and
POST. World Wide Web Consortium. http://www.w3.org/2001/tag/
doc/whenToUseGet.html. Version: 2004. – Zuletzt abgerufen am 14.04.2010
[JW04]
Jacobs, Ian ; Walsh, Norman:
Architecture of the World
Wide Web, Volume One.
World Wide Web Consortium, Recommendation REC-webarch-20041215. http://www.w3.org/TR/2004/
REC-webarch-20041215. Version: December 2004. – Zuletzt abgerufen am
14.04.2010
[Lüb08]
Lübke, Daniel: An Integrated Approach for Generation in SOA Projects.
Verlag Dr. Kovac, ISBN: 978-3-8300-3649-4, 2008
[LHVL05]
Lu, Yi-Hsuan ; Hong, Yoojin ; Varia, Jinesh ; Lee, Dongwon: Pollock: Automatic Generation of Virtual Web Services from Web Sites. http:
//pike.psu.edu/publications/sac05.pdf. Version: 2005. – Zuletzt abgerufen am 14.04.2010
[Man08]
Mandel, Lawrence:
Describe REST Web services with WSDL
2.0. http://www.ibm.com/developerworks/db2/library/techarticle/
dm-0606martin/index.html. Version: May 2008. – Zuletzt abgerufen am
14.04.2010
[RHJ99]
Raggett, Dave ; Hors, Arnaud L. ; Jacobs, Ian:
HTML 4.01
Specification. W3C Recommendation. http://www.w3.org/TR/html4.
Version: December 1999. – Zuletzt abgerufen am 14.04.2010
66
Literaturverzeichnis
[RR07]
Richardson, Leonard ; Ruby, Sam: RESTful Web Services. illustrated
edition. O’Reilly Media, Inc., 2007. – ISBN 9780596529260
[Til09]
Tilkov, Stefan: REST und HTTP: Einsatz der Architektur des Web für
Integrationsszenarien. 1., Aufl. dpunkt Verlag, 2009. – ISBN 9783898645836
[TSK08]
Tuchinda, Rattapoom ; Szekely, Pedro ; Knoblock, Craig A.: Building
Mashups by example. In: IUI ’08: Proceedings of the 13th international
conference on Intelligent user interfaces. New York, NY, USA : ACM,
2008. – ISBN 978–1–59593–987–6, 139–148
[Völ03]
Völkel, Max: Extraktion von XML aus HTML-Seiten. Das WYSIWYGWerkzeug d2c, Universität Karlsruhe (TH), Masterarbeit, 2003. http://
xam.de/2003/05-wal/Extraktion%20von%20XML%20aus%20HTML-Seiten%
20-%20Das%20WYSIWYG-Werkzeug%20d2c%20-%20Ausarbeitung.pdf.
–
Zuletzt abgerufen am 14.04.2010
[Wel09]
Wellman, Dan: jQuery UI 1.7: The User Interface Library for jQuery.
Packt Publishing, 2009. – ISBN 9781847199720
[YWH09]
Yang, Shaohua ; Wang, Guiling ; Han, Yanbo: Grubber: Allowing EndUsers to Develop XML-Based Wrappers for Web Data Sources. In: APWeb/WAIM ’09: Proceedings of the Joint International Conferences on Advances in Data and Web Management. Berlin, Heidelberg : Springer-Verlag,
2009. – ISBN 978–3–642–00671–5, S. 647–652
67
Abbildungsverzeichnis
2.1.
2.2.
2.3.
2.4.
Baumstruktur eines HTML-Dokumentes .
AJAX am Beispiel von Google . . . . . .
Die Webseite von Houston Crime Maps
Ein verzerrtes Bild für CAPTCHA . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
5
6
9
18
3.1.
3.2.
3.3.
3.4.
3.5.
Ablauf einer Anfrage im Screen-Scraper von d2c . . . .
Grafische Benutzeroberfläche von Lixto Visual Developer
Die Architektur von Lixto Visual Developer . . . . . . .
Benutzeroberfläche von Dapper . . . . . . . . . . . . . .
Benutzeroberfläche von Mozenda . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
20
22
22
25
25
. . . .
. . . .
. . . .
. . . .
stehen
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
27
28
29
31
32
33
33
34
35
37
38
41
6.1. Architektur von DisRESTractor . . . . . . . . . . . . . . . . . . . . . . . . .
6.2. Sequenzdiagramm mit dem Ablauf in DisRESTractor . . . . . . . . . . . . .
6.3. Klassenstruktur des generierten Service . . . . . . . . . . . . . . . . . . . .
49
51
55
4.1. DisRESTractor nach dem Start . . . . . . . . . . . . . . . . . .
4.2. DisRESTractor: Auswahl der ersten Ressource . . . . . . . . .
4.3. DisRESTractor: Dialog Objekt aufnehmen . . . . . . . . . . .
4.4. DisRESTractor: Dialog Attribut als Ressource hinzufügen
4.5. DisRESTractor: Zwei Ressourcen, die miteinander in Beziehung
4.6. DisRESTractor: Mehrwertiges Attribut . . . . . . . . . . . . . .
4.7. Profilseite des Besitzes eines Bildes bei Flickr . . . . . . . . . .
4.8. DisRESTractor: Dialog Service erstellen . . . . . . . . . . .
4.9. Metamodell für extrahierte Daten . . . . . . . . . . . . . . . . .
4.10. Ablauf der Datenextraktion mit DisRESTractor . . . . . . . . .
4.11. Benutzeroberfläche von DisRESTractor . . . . . . . . . . . . .
4.12. Aufnahme von Attributen in DisRESTractor . . . . . . . . . .
68
Erklärung der Selbstständigkeit
Hiermit versichere ich, dass ich die vorliegende Masterarbeit selbständig und ohne fremde Hilfe verfasst und keine anderen als die in der Arbeit angegebenen Quellen und
Hilfsmittel verwendet habe. Die Arbeit hat in gleicher oder ähnlicher Form noch keinem
anderen Prüfungsamt vorgelegen.
Hannover, den 14. April 2010
Alexander Fomin