Inhaltsverzeichnis - sebis

Transcription

Inhaltsverzeichnis - sebis
Inhaltsverzeichnis
1 Einleitung und Motivation
1.1
1.2
Aufgabenstellung . . . . . . . . . . . . . . . . . . . . . . . . .
Gliederung . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2 Verwandte Systeme
2.1
2.2
2.3
2.4
Social Bookmarking mit del.icio.us . . . . . . . . . . .
Das Social Network von facebook.de . . . . . . . . . .
Automatische Bewertung von Blogs bei technorati.com
Abgrenzung zum Kompetenznetz . . . . . . . . . . . .
3 Anforderungen
3.1
3.2
Funktionale Anforderungen . . . . . . . . . .
3.1.1 Überblick . . . . . . . . . . . . . . . .
3.1.2 Paket: Benutzerverwaltung . . . . . .
3.1.3 Paket: Bewertung und Kategorisierung
3.1.4 Paket: Suche . . . . . . . . . . . . . .
Nichtfunktionale Anforderungen . . . . . . . .
4.1
4.2
4.3
4.4
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Datenmodell . . . . . . . . . . . . . . . . . . . . . . . . .
4.1.1 Entitäten . . . . . . . . . . . . . . . . . . . . . .
4.1.2 Beziehungen zwischen Entitäten . . . . . . . . .
Objektorientierter Entwurf . . . . . . . . . . . . . . . . .
4.2.1 Konzeptioneller Entwurf . . . . . . . . . . . . . .
4.2.2 Implementierungsnaher Entwurf . . . . . . . . .
Bewertungsinferenz . . . . . . . . . . . . . . . . . . . . .
4.3.1 Grundannahmen zur Bewertungsinferenz . . . . .
4.3.2 Ein einfacher Kalkül zur Bewertungsinferenz . . .
4.3.3 Diskussion der Bewertungsinferenz . . . . . . . .
Beziehungen zwischen Kompetenzfeldern . . . . . . . . .
4.4.1 Repräsentation von Kompetenzfelder durch Tags
4.4.2 Beziehungen zwischen Tags . . . . . . . . . . . .
4.4.3 Berechnung der Ähnlichkeit zwischen Tags . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
1
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
4 Lösungsentwurf
.
.
.
.
.
.
.
.
.
.
3
4
4
6
6
7
9
10
12
12
13
14
15
18
19
21
21
22
23
25
25
28
33
33
35
41
43
43
44
44
4.4.4
4.4.5
Automatische Erstellung hierarchischer Beziehungen .
Diskussion und weiterführende Konzepte . . . . . . . .
5 Implementierung
5.1
5.2
5.3
Entwurf und Implementierung des Inferenzalgorithmus . . . .
5.1.1 Verwendete Datenstrukturen . . . . . . . . . . . . . .
5.1.2 Implementierung in Java . . . . . . . . . . . . . . . . .
Implementierung der automatischen Beziehungsgenerierung zwischen Tags . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.2.1 Verwendete Datenstrukturen . . . . . . . . . . . . . .
5.2.2 Implementierung in Java . . . . . . . . . . . . . . . . .
Implementierung der Benutzerschnittstelle als Webanwendung
6 Zusammenfassung und Ausblick
6.1
Ausblick . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2
46
49
51
51
52
53
57
57
59
61
67
68
Kapitel 1
Einleitung und Motivation
Das Internet, bzw. genauer das World Web Web, hat sich vom urspünglichen Netzwerk zum Austausch von Forschungsergebnissen zwischen einer
handvoll wissenschaftlicher Einrichtungen und Universitäten (BL89) zu der
gröÿten, öentlich zugänglichen Informationsquelle entwickelt. Die Anzahl
der Benutzer, und mit ihnen die Anzahl der publizierten Inhalte, ist seitdem
stark gewachsen und umfasst laut aktuellen Schätzungen über 27 Milliarden
Webseiten1 .
Einher mit diesem Wachstum des Internets rückt die Frage nach der Qualität der angebotenen Inhalte zunehmends in den Vordergrund. So gibt es
zu den meisten nachgefragten Themen im Internet ein weites Spektrum an
qualitativ unterschiedlichen Informationen, wobei deren Qualität für NichtFachkundige oft nur schwer einschätzbar ist.
Einen vielversprechenden Ansatz in diesem Zusammenhang stellen reputationsbasierte Lösungen zur Bewertung von Inhalten dar. Reputation stellt
nach (Ar08) die Auÿenbewertung des eigenen Verhaltens dar und besteht aus
zwei grundlegenden Teilen. Zum einen die Bewertung durch andere Teilnehmer und zum anderen die Bestätigung dieser Aussagen durch eine anerkannte
Autorität. Für eine stabile Reputationsplattform wird danach neben einem
glaubhaften Bewertungssystem, welches Vertrauen schaen und Missbrauch
vorbeugen soll, eine glaubwürdige Autorität benötigt, die diese Bewertungsaussagen stützt.
Der Aufbau einer reputationsbasierten Kooperationsplattform zur Bewertung und Bewertungsermittlerung der Qualität von Dokumenten im Web
kann somit einen Beitrag dazu leisten, Informationen im Internet besser ein1
Aktuelle Schätzungen basierend auf den von groÿen Suchmaschinen erfassten Webseiten, online abrufbar unter http://www.worldwidewebsize.com
3
schätzen zu können, ohne selber ein tiefgehendes Verständnis der nachgefragen Thematik vorauszusetzen.
1.1
Aufgabenstellung
Grundlegendes Ziel dieser Arbeit ist die Konzeption und prototypische Realisierung eines Kompetenznetz-Systems, das Nutzern helfen soll, vertrauenswürdige Aussagen über Inhalte im Web zu erhalten. Dazu soll das System
neben den Aussagen von Personen zu Inhalten auf einem Kompetenzfeld
und den Aussagen von Personen zu Kompetenzen anderer Personen auch
die Beziehungen (z.B. Teilkompetenz) der Kompetenzfelder untereinander
berücksichtigen.
Aus diesen Elementaraussagen sollen dann durch Anwendung eines Inferenzmechanismus weitere Aussagen generiert werden, um somit z.B. eine Bewertung zu einem Webinhalt aus der Aussage einer dem Nutzer bekannten
Person zum Inhalt sowie der Kompetenzaussage des Nutzers dieser Person
gegenüber, abzuleiten.
Im Rahmen dieser Arbeit sollen dabei die Anforderungen an ein solches
Kompetenznetz-System erhoben und ein solches System prototypisch realisiert werden. Dabei sind besonders die Funktionen bereits bestehender Systeme mit verwandten Aufgaben zu berücksichtigen und auf Relevanz für das
Kompetenznetz-System zu überprüfen. Im anschlieÿenden Software-Entwurf
sind diese Funktionen in objektorientierter Weise umzusetzen. Eine abschlieÿende prototypische Realisierung der Kernbestandteile des Systems zeigt die
Umsetzbarkeit in der Praxis auf.
1.2
Gliederung
Die vorliegende Arbeit gliedert sich wie folgt. In Kapitel 2 beschreiben wir
verwandte Systeme, die für diese Arbeit relevant sind. Dabei gehen wir auf
Gemeinsamkeiten zu Systeme aus den Bereichen Social Bookmarking, Social
Networks sowie Online-Bewertung ein, zeigen aber auch auf, inwiefern sie
sich davon unterscheiden.
Kapitel 3 zeigt die Anforderungen an ein Kompetenznetz-System auf, wobei
zunächst die funktionalen Anforderungen mithilfe von Anwendungsfalldiagrammen beschrieben werden. Anschlieÿend denieren wir die nichtfunktionalen Anforderungen an die Kooperationsplattform.
4
Kapitel 4 beinhaltet den eigentlichen Lösungsentwurf des Systems und beschreibt ausgewählte Lösungsbausteine detaillierter. Dabei wird zunächst ein
Datenmodell entwickelt, das in einen objektorientierten Entwurf überführt
und anschlieÿend um Implementierungsdetails erweitert wird. Des weiteren
wird der in dieser Arbeit verwendete Inferenzmechanismus vorgestellt und
in einem Kalkül formalisiert. Abschlieÿend wird auf die Bedeutung von Tags
zur Repräsentation von Kompetenzfeldern eingegangen, und erläutert, wie
mögliche Beziehungen zwischen Tags ermittelt werden können.
Details zur Implementierung von Kernbestandteilen des Systems werden in
Kapitel 5 beschrieben. Dabei wird neben dem Inferenzmechanismus und der
automatischen Generierung von Ähnlichkeitsbeziehungen zwischen Kompetenzfeldern die Realisierung der Benutzerschnittstelle beschrieben.
Kapitel 6 fasst die Erkenntnisse dieser Arbeit zusammen. Darüber hinaus
werden Aspekte aufgezeigt, die nicht adressiert werden konnten, und Perspektiven für die weitere Erforschung sowie die Weiterentwicklung des Systems gegeben.
5
Kapitel 2
Verwandte Systeme
Gegenwärtig existiert bereits eine Vielzahl von Web 2.0 Anwendungen in
den Bereichen Social Networks, Social Bookmarking sowie automatisierter
Bewertungs- und Empfehlungssystemen von Weblogs. Die Anwendungen in
diesen Bereichen stellen ähnliche Funktionen bereit wie die Kooperationsplattform, welche im Rahmen vorliegender Arbeit entwickelt werden soll.
Demnach lässt sich eine konzeptionelle Abgrenzung treen, die in diesem
Kapitel diskutiert werden soll. Dabei erfolgt im Vorfeld eine Vorstellung bestehender Web 2.0-Konzepte jeweils anhand eines ausgewählten Vertreters.
Hierbei wird auch auf deren Realisierungsaspekte eingegangen, sofern dies
für die Arbeit relevant ist.
Zuerst stellen wir die Plattform del.icio.us vor, die ein erweitertes, kooperatives Konzept zur Verwaltung von Lesezeichen, welches als Social Bookmarking
bezeichnet wird, implementiert. Danach wird das Social Network facebook.de
vorgestellt. Das letzte vorgestellte System stellt hierbei technorati.com dar,
eine Webanwendung, die automatisch Weblogs erfasst und bewertet.
Der letzte Abschnitt dieses Kapitels diskutiert abschlieÿend die Gemeinsamkeiten der bestehenden Systeme zum Zielsystem der Arbeit und stellt die
bedeutsamen Unterschiede heraus.
2.1
Social Bookmarking mit del.icio.us
Die Webanwendung del.icio.us, welche in Abbildung 2.1 dargestellt ist, realisisert die Idee des Social Bookmarking (Ha05), welche die konventionelle
Lesezeichenverwaltung, wie sie beispielsweise in gängigen Webbrowsern implementiert ist, erweitert. Dabei werden die vom Benutzer erstellten Lesezei6
Abbildung 2.1: Die Social Bookmarking Software del.icio.us
chen nicht lokal auf dem eigenen Rechner sondern online auf der Plattform
gespeichert und verwaltet. Den Lesezeichen werden zusätzlich vom Benutzer
erstellte Stichwörter, sogenannte Tags, zugeordnet. Dies dient der Klassikation von Lesezeichen und erleichtert deren Suche.
Dies allein wäre auch mit einer konventionellen Lesezeichenverwaltung möglich. Einen weiteren wesentlichen Aspekt des Social Bookmarking bildet die
zentrale Speicherung der Lesezeichen und Tags, wodurch es möglich wird diese zwischen verschiedenen Benutzern zu teilen. So ist es bei del.icio.us möglich, gezielt nach Tags zu suchen, woraufhin die Lesezeichen aller Benutzer
angezeigt werden. Im Gegensatz zu Suchmaschinen können somit nicht nur
Informationen gefunden werden, die zu einem oder mehreren Tags passen,
sondern diese werden oft auch nach bestimmten Kriterien, wie im Beispiel
von del.icio.us die Anzahl der Benutzer die eine Seite als Lesezeichen haben,
sortiert. Darauf aufbauend lässt sich eine Rangliste mit nach Beliebtheit (im
Sinne der Anzahl der Benutzer die diese Seite als Lesezeichen hinzugefügt
haben) sortierter Lesezeichen erstellen.
2.2
Das Social Network von facebook.de
Stellvertretend für den Bereich der Social Networks (We96) wird hier facebook.de (vgl. Abbildung 2.2), der deutsche Ableger von facebook.com, unter7
Abbildung 2.2: Der Startbildschirm für angemeldete Benutzer bei facebook.de
sucht. Neben facebook existieren noch viele weitere Plattformen wie
XING.com, regional fokussierte Plattform wie lokalisten.de oder auf eine
besondere Benutzergruppe zugschnittene Plattformen wie studivz.de, wobei
allen derartigen Systemen die selbe Grundidee zueigen ist, welche nachfolgend erklärt wird.
Bei Social Networks im Allgemeinen geht es darum, andere Personen zu suchen und nden, um mit diesen in Kontakt zu treten oder bleiben. Dazu
muss man in der Regel zuerst ein eigenens Benutzerprol anlegen. Dann
fügt der Benutzer (bereits vorhandene) soziale Kontakte (bei facebook.de
Freundschaften genannt) zu seinem Prol hinzu, so dass die sozialen Kontakte ebenfalls im Prol abgebildet werden und somit ein Netzwerk entsteht.
Dies ermöglicht eine einfache Suche in den sozialen Netzwerke von Bekannten und Freunden und das Kennenlernen sowie der Nachrichtenaustausch mit
anderen Benutzern. Das Aunden von Personen wird bei facebook.de über
deren Benutzernamen, realen Namen oder die bei facebook.de registrierte
E-Mailadresse ermöglicht.
Bei facebook.de werden dem Benutzer zahlreiche Möglichkeiten gegeben, sein
Prol möglichst fein auszuarbeiten. So können neben dem Angaben zu seiner
Person einschlieÿlich Vorlieben, Hobbies, momentane Aktivität, etc. auch
Bilder und sogar Videos in einem persönlichen, virtuellen Album hochgeladen
8
und darauf andere Personen aus dem Netzwerk markiert werden. Nutzern
wird bei Aufruf eines Prols angezeigt, über welche Personen man diese
kennt. Daneben können Gruppen erstellt werden, denen mehrere Personen
beitreten können, entweder durch Anfrage beim Ersteller der Gruppe oder
durch Einladung.
Social Networks unterliegen dabei dem von (Mi67) betrachteten Kleine-WeltPhänomen. Untersuchungen zufolge ist jeder Mensch auf der Welt mit jedem
anderen über eine überraschend kurze Kette von Bekanntschaftsbeziehungen
verbunden, wobei in den Experimenten von Milgram eine durchschnittliche
Pfadlänge von aufgerundet sechs ermittelt wurde. Auch wenn sich aufgrund
der Natur von Social Networks dieses Phänomen nicht uneingeschränkt anwenden lässt, da in einem Softwaresystem nicht alle Bekanntschaftsbeziehungen abgebildet sind, bewirkt die Darstellung des kurzen Bekanntschaftspfades zu jedem registrierten Mitglied ein Gemeinschaftsgefühl und fördert den
Community-Gedanken.
Social Networks wie facebook.de haben sich in letzter Zeit massiv verbreitet, wobei im Grunde die Möglichkeiten, die diese bieten, bereits vorhanden
waren, allerdings nie in einer derart integrativen Art wie in Form der oben
genannten Plattformen, zu denen auch facebook.de zählt.
2.3
Automatische Bewertung von Blogs bei technorati.com
Technorati.com ist eine bekannte Webanwendung, die eine Suchmaschine mit
Bewertungsmechanismus für Weblogs zur Verfügung stellt. Weblogs, oder
kurz Blogs, sind virtuelle Tagebücher, die öentlich zugänglich gemacht werden. Von den Autoren, Blogger genannt, werden die Einträge verfasst, die sie
für wichtig erachten. Dabei ist es bei Blogs üblich, dass sich die Inhalte häug
ändern, und dass zu den Einträgen zumeist eine Kommentarfunktion angeboten wird. Dabei wird häug in den Blogeinträgen selbst, aber auch in den
dazu erstellten Kommentaren, in Form von Links auf andere Blogs verwiesen. Die Spannweite von Blogs ist enorm. Es gibt kleine Blogs, die eigentlich
nur für einen kleineren Kreis von Leuten geschrieben wurden, als auch groÿe
und einuÿreiche Blogs, z.B. von Politikern, welche die Unmittelbarkeit zur
Bevölkerung nutzen wollen.
Technorati.com dient dabei als Plattform zur Anzeige von Einträgen aus
einer Vielzahl von Blogs, wobei mittels einer Suchfunktion interessante Einträge schneller gefunden werden können. Dies geschieht unter Nutzung einer
Bewertungsfunktion für die Einträge, um die interessantesten davon auf der
9
Abbildung 2.3: Ein Blogeintrag bei technorati.com
ersten Seite bzw. schneller erreichbar anzuzeigen. Da aufgrund der hohen
Anzahl der berücksichtigten Blogs eine manuelle Bewertung, z.B. durch eine
Redaktion, nicht praktikabel ist, wird diese Bewertung automatisch erzeugt.
Dabei wird von technorati.com die Anzahl der Blogs, die auf das zu bewertende Blog verweisen, ermittelt, wobei dies dann als Metrik für die Beliebtheit eines Blogs gewertet wird. Dies wird bei technorati.com als Authority
bezeichnet. Abbildung 2.3 zeigt die Plattform mit Blogeinträgen und dem
dazugehörigen Authority -Wert.
2.4
Abgrenzung zum Kompetenznetz
All die in diesem Kapitel vorgestellten Systeme sind in gewissem Maÿe mit
dem in der Arbeit zu entwickelnden Kompetenznetzsystem verwandt:
• Das hier zu entwickelnde System soll Benutzeraussagen über andere
Benutzer zulassen, also handelt es sich um eine Erweiterung eines in
Abschnitt 2.2 am Beispiel von facebook.de beschriebenen Social Networks.
• Ebenfalls sollen Informationen im World Wide Web bewertet werden, wozu eine Verwaltung dieser Dokumente ähnlich der Plattform
del.icio.us (vgl. Abschnitt 2.1) mithilfe von Lesezeichen für die Kooperationsplattform benötigt wird.
10
• Darüber hinaus soll auch eine Bewertung für nicht selbst bewertete
Dokumente erzeugt werden. Im optimalen Fall passiert dies wie bei
technorati.com (vgl. Abschnitt 2.3) vom System automatisch, d.h. ohne
Zutun des Benutzers.
Trotz all dieser Gemeinsamkeiten ist das Ziel dieser Arbeit kein Nachbau
bereits existierender Systeme. Vielmehr sollen die Funktionen dieser drei
Teile miteinander verbunden und dadruch ein Mehrwert für die Benutzer
geschaen werden.
So beinhaltet die Kooperationsplattform zwar im Kern ein Social Network,
allerdings wird dieses durch eine Lesezeichenverwaltung ähnlich der von
del.icio.us sowie die Bewertungsfunktionalität, sowohl für Benutzer als auch
Dokumente, erweitert. Zusätzlich wird erst durch die Verbindung dieser Mechanismen ermöglicht, vertrauenswürdige Aussagen über Dokumente zu erlangen, die man selbst nie bewertet hat, was über die einfache Bewertungsbildung bei technorati.com hinausgeht.
11
Kapitel 3
Anforderungen
In diesem Kapitel werden die Anforderungen zum Aufbau eines reputationsbasierten Kompentenznetzwerks erhoben. Dabei wird nach (So04) zwischen
funktionalen sowie nichtfunktionalen Anforderungen unterschieden.
Zunächst werden die funktionalen Anforderungen behandelt. Dabei werden
die Notationselemente, die nachfolgend zur Anwendung kommen, erläutert.
Anschlieÿend wird ein Überblick über das zu realisierende System gegeben,
und danach die funktionalen Anforderungen der einzelnen Teile anhand von
Diagrammen und Beschreibungen im Detail erläutert.
Abschlieÿend werden die nichtfunktionalen Anforderungen an die Kooperationsplattform beschrieben. Diese nehmen direkten Einuÿ auf weitere Entwurfsentscheidungen der Software, worauf in Kapitel 4.2 nochmals eingegangen wird.
3.1
Funktionale Anforderungen
Zur Beschreibung der funktionalen Anforderungen werden Anwendungsfalldiagramme (engl. use-case diagrams ) verwendet, welche Abstraktionen von
konkreten Anwendungsszenarien darstellen und sich im Software-Engineering
für die Anforderungsanalyse als besonders geeignet erwiesen haben. Die graphische Notation von Anwendungsfalldiagrammen entspricht dabei dem weitverbreiteten UML2 Standard (OM07).
Dabei wird der Standard, wie bei (BD03) verwendet, um den Stereotyp initiate erweitert. Dieser Stereotyp kann Beziehungen zwischen Akteuren und
Anwendungsfällen annotierten. Dabei drückt er aus, dass ein Akteur einen
12
gewissen Anwendungsfall von sich aus initiert, d.h. er gibt den entscheidenden Impuls (z.B. durch einen Mausklick), der den Anwendungsfall startet.
Dies ist bei Anwendungsfällen, die nicht mit diesem Stereotyp annotiert sind,
nicht unmittelbar der Fall. So könnte beispielsweise ein Anwendungsfall vom
System selbst gestartet werden und erst dann den Akteur miteinbeziehen.
Ergänzend zur graphischen Notation mittels UML werden die Anwendungsfälle in natürlicher Sprache beschrieben und in der Form UCxx eindeutig
durchnummeriert. Dies ist insofern hilfreich, dass im weiteren Verlauf der
Arbeit auf einzelne Anforderungen referenziert werden kann.
3.1.1
Überblick
Bevor nun die funktionalen Anforderungen an das System detailliert erläutert
werden, soll zunächst ein kurzer Überblick helfen, die nachfolgend im Detail
beschriebenen Teile besser im Kontext der gesamten Anwendung einordnen
zu können.
Zur besseren Gliederung der Anforderungen unterteilen wir das System in
Pakete. Diese Pakete (annotiert mit dem UML Stereotyp package) haben die Aufgabe, zusammengehörige oder funktional ähnliche Anforderungen in Form von Anwendungsfällen zu gruppieren. Tauchen in mehreren
Diagrammen gleichnamige Pakete oder Anwendungsfälle auf, so handelt es
sich tatsächlich um das selbe Paket bzw. den selben Anwendungsfall. Die
Anwendungsfälle verteilen sich dabei auf die folgenden Pakete:
Benutzerverwaltung
Zur Benutzerverwaltung gehören alle funktionalen
Anforderungen rund um das Benutzerkonto eines Benutzers, der aktiv
in Interaktion mit dem System steht. Hierzu zählen auch Anwendungsfälle im Zusammenhang mit der Authentizierung von Benutzern sowie
das eigentliche Anlegen von Benutzerkonten, also die Benutzerverwaltung im engeren Sinne.
13
Bewertung und Kategorisierung
Die Bewertung und Kategorisierung
umfasst alle Anwendungsfälle, die sowohl mit der Bewertung von Dokumenten als auch von anderen Benutzern in Zusammenhang stehen.
Desweiteren beinhaltet sie die Anwendungsfälle, die der Verwaltung
von Zuordnungen (Kategorisierung ) von Bewertungen zu Kompetenzfeldern dienen.
Inferenz
Die Aufgabe der Inferenz ist es, aus den vorhandenen Bewertungen von Benutzern und Dokumenten sowie den Beziehungen zwischen
Benutzern eine vertrauenswürdige Aussage über andere, als vom Benutzer selbst bewertete, Dokumente zu erhalten. Das Paket Inferenz
enthält konsequent nur einen Anwendungsfall Bewertung inferieren,
dessen Funktionsweise in Abschnitt 4.3 erläutert wird. Deswegen wird
auf eine Erläuterung zu diesem Anwendungsfall nachfolgend verzichtet.
Suche
Zur Suche gehören alle Anwendungsfälle, die sich der Aundung
von Dokumenten und Benutzern zuordnen lassen. Dabei kann nach
verschiedenen Kritieren wie Kompetenzfeldern und Benutzern sowie
nach Benutzerdetails wie Vorname, Nachname etc. gesucht werden.
3.1.2
Paket: Benutzerverwaltung
Die Anwendungsfälle der Benutzerverwaltung sind in dem Anwendungsfalldiagramm in Abbildung 3.1 dargestellt. Die Anwendungsfälle sind wie folgt:
UC01 Registrieren
Dieser Anwendungsfall ermöglicht die Erstellung eines
Benutzerkontos. Dabei muss ein Benutzer seine Daten wie gewünschter
Benutzername, Passwort und E-Mailadresse angeben. Dabei wird dem
Benutzer direkt im Anschluÿ eine Bestätigungsnachricht zugesendet,
mit der er sein Konto durch einen darin enthaltenen Link aktivieren
kann. Bei einer erfolgreichen Aktivierung wird die Aktion Anmelden
ausgeführt, wobei der Benutzername sowie das Passwort automatisch
übergeben werden.
UC02 Anmelden
Der Benutzer meldet sich am System mit seinem Benutzernamen und Passwort an. Der Anwendungsfall Anmelden ist die
Grundvoraussetzung für alle anderen Anwendungsfälle auÿer Registrieren. Nach erfolgreichem Abschluss dieses Anwendungsfalls wird der
Benutzer vom System erkannt.
UC03 Abmelden
Der Benutzer kann sich zu jedem Zeitpunkt vom System
abmelden. Ab diesem Zeitpunkt wird er vom System nicht länger als
ein bestimmter Benutzer erkannt.
14
Abbildung 3.1: Anwendungsfalldiagramm der Benutzerverwaltung
UC04 Einladen
Benutzer haben die Möglichkeit andere Benutzer, die noch
nicht registriert sind, in das Kompetenznetz einzuladen. Dazu wird der
Name sowie die E-Mailadresse des einzuladenden Benutzers angegeben.
Das Einladen einer Person erfordert auch das Bewerten der einzuladenden Person. Siehe dazu UC09 Benutzer bewerten in Abschnitt 3.1.3.
UC05 Eigenes Prol bearbeiten Angemeldete Benutzer können ihre persönlichen Daten ändern.
Der Anwendungsfall Benutzer bewerten wird in Abschnitt 3.1.3 beschrieben.
3.1.3
Paket: Bewertung und Kategorisierung
Die Anwendungsfälle der Bewertung und Kategorisierung sind der Übersicht
halber auf zwei Diagramme verteilt. Das Anwendungsfalldiagramm in Abbildung 3.2 zeigt dabei die Kernaktivitäten der Bewertungsabfrage sowie
Bewertungserstellung. Die Anwendungsfälle sind wie folgt:
UC06 Dokumentbewertung abfragen
Dieser Anwendungsfall beschreibt die
Anfrage des Benutzers, eine Bewertung zu einem bestimmten Doku15
Abbildung 3.2: Anwendungsfalldiagramm der Bewertungen und Inferenzen
ment zu erhalten. Dies kann durch ein einfaches Laden der entsprechenden Seite und ein entsprechendes Browser-Plugin realisiert werden als
auch durch eine direkte Angabe eines Uniform Resource Locator (URL).
Die Abfrage von Bewertungen impliziert immer, dass eine Bewertung
für das angefragte Dokument erstellt wird, weshalb der Anwendungsfall Bewertung inferieren eingeschlossen wird.
UC07 Bewertung inferieren
In diesem Anwendungsfall, der ohne Benutzereinwirkung stattndet, wird vom System eine Bewertung mittels eines
Inferenzmechanismus generiert. Der Inferenzmechanismus wird in Abschnitt 4.3 beschrieben.
UC08 Dokument bewerten
Dieser Anwendungsfall beschreibt, dass ein Benutzer ein Dokument bewerten möchte. Dabei gibt der Benutzer neben
der Web-Adresse (URL) des Dokuments auch die gewünschte Bewertung auf einer Bewertungsskala an. Durch den eingeschlossenen Anwendungsfall UC10 Angabe von Kompetenzfeldern (Tagging) erfolgt
die Angabe eines Kompetenzfeldes.
UC09 Benutzer bewerten Dieser Anwendungsfall tritt auf, wenn ein Benut-
zer einen anderen Benutzer bewerten möchte. Dabei gibt der Benutzer
neben dem zu bewertenden Benutzer sowie der gewünschten Bewertung auf einer Bewertungsskala auch die Kompetenzfelder an, die er
der Bewertung zuordnen will, weshalb der Anwendungsfall UC11 eingeschlossen ist.
UC10 Angabe von Kompetenzfeldern (Tagging) Bei diesem Anwendungsfall
ordnet der Benutzer anderen Benutzern bzw. Dokumenten Kompetenzfelder in Form von Schlagwörtern (Tags ) zu.
16
Abbildung 3.3: Anwendungsfalldiagramm der Bewertungsverwaltung
Anzumerken ist hierbei, dass es keinen Anwendungsfall für die Abfrage von
inferierten Benutzer bewertungen gibt. Wir erachten eine Möglichkeit zur Abfrage dieser Informationen als unvorteilhaft und möglicherweise schädlich für
den Aufbau der Nutzer-Community.
Die weiteren Anwendungsfälle, die sich mit der Verwaltung von vorhandenen
Bewertungen befassen, sind in Abbildung 3.3 dargestellt:
UC12 Bewertung anzeigen
Dieser Anwendungsfall ist ein abstrakter Anwendungsfall zum Anzeigen der vom Benutzer eigens vergebenen Bewertungen, der durch folgende konkrete Anwendungsfälle spezialisiert
wird:
UC12a Benutzerbewertung anzeigen Bei diesem Anwendungsfall werden dem Benutzer die bisher von ihm vorgenommenen Benutzerbewertungen angezeigt. Dabei wird ihm die Möglichkeit gegeben,
diese zu ändern oder zu löschen (siehe dazu UC13 Bewertung
ändern bzw. UC14 Bewertung löschen ).
UC12b Dokumentbewertung anzeigen Bei diesem Anwendungsfall werden dem Benutzer die bisher von ihm vorgenommenen Dokumentbewertungen angezeigt. Dabei wird ihm die Möglichkeit gegeben,
diese zu ändern oder zu löschen (siehe dazu UC13 Bewertung
ändern bzw. UC14 Bewertung löschen ).
17
Abbildung 3.4: Anwendungsfalldiagramm der Suchfunktionen
UC13 Bewertung ändern
Der Benutzer kann die von ihm vorgenommenen
Benutzer- und Dokumentbewertungen ändern, indem er die neue, gewünschte Bewertung angibt. Dieser Anwendungsfall enthält den Anwendungsfall UC12 Bewertung anzeigen und wird aktiviert sobald der
Benutzer diese Aktion bei der Bewertungsanzeige auslöst.
UC14 Bewertung löschen
Der Benutzer kann die von ihm vorgenommenen
Benutzer- und Dokumentbewertungen löschen. Dieser Anwendungsfall
enthält den Anwendungsfall UC12 Bewertung anzeigen und wird aktiviert sobald der Benutzer diese Aktion bei der Bewertungsanzeige
auslöst.
3.1.4
Paket: Suche
Die Anwendungsfälle für die Suche sind in dem Anwendungsfalldiagramm in
Abbildung 3.4 dargestellt. Die Anwendungsfälle sind wie folgt:
UC21 Benutzer suchen
Dieser Anwendungsfall ist ein abstrakter Anwendungsfall zum Suchen nach Benutzern, wobei die Ergebnisse nach der
vom Benutzer abgegebenen Bewertung, sofern vorhanden, sortiert werden. Dafür wird der Anwendungsfall UC12a Benutzerbewertung anzeigen eingeschlossen. Der Anwendungsfall wird durch folgende konkrete
Anwendungsfälle realisiert:
UC21a Benutzer nach Schlagwort suchen Sucht nach Benutzern durch
die Angabe von Schlagworten
18
UC21b Benutzer nach Details suchen
Sucht nach Benutzern durch
die Angabe von Details wie Name oder eMail-Adresse.
Durch eine geeignete Navigation ist ein Übergang zum Anwendungsfall
UC09 Benutzer bewerten möglich (siehe Abschnitt 3.1.3).
UC22 Dokument suchen Benutzer suchen
Dieser Anwendungsfall ist ein
abstrakter Anwendungsfall zum Suchen nach Dokumenten, wobei die
Ergebnisse nach der ermittelten Bewertung sortiert werden. Dafür wird
der Anwendungsfall UC06 Dokumentbewertung abfragen eingeschlossen. Der Anwendungsfall wird durch folgende konkrete Anwendungsfälle realisiert:
UC22a Dokumente nach Schlagwort suchen
durch die Angabe von Schlagworten
Sucht nach Dokumenten
UC22b Dokumente nach Benutzer suchen
Sucht nach (bewerteten)
Dokumenten eines bestimmten Benutzers
Ein Navigationsmechanismus erlaubt den Eintritt in den Anwendungsfall UC08 Dokument bewerten (siehe Abschnitt 3.1.3).
3.2
Nichtfunktionale Anforderungen
Nichtfunktionale Anforderungen beschreiben nach (BD03) "Aspekte des
Systems, die nicht unmittelbar in Bezug zu seiner Funktionalität stehen.
Dabei betreen nichtfunktionale Abhängigkeiten häug mehr als nur einen
Aspekt des Systems". Obwohl sie keinen direkten Funktionsbezug aufweisen,
können sie für den Erfolg des Gesamtsystems entscheident sein, wie in (So04)
beschrieben. Häug haben nichtfunktionale Anforderungen groÿen Einuss
auf den Systementwurf. Analog zu den funktionalen Anforderungen werden
sie in der Folge mit NRxx durchnummiert, da im weiteren Verlauf noch auf
diese referenziert werden soll. Auf eine Einordnung, wie in (BD03) nach dem
FURPS+1 Modell vorgeschlagen, wird hier aufgrund der geringen Anzahl an
nichtfunktionalen Anforderungen verzichtet, welche sich wie folgt darstellen:
NR01 Verfügbarkeit und Zuverlässigkeit
Das System muss eine Verfügbarkeit von mindestens 99% aufweisen. Dies ist nötig, um eine hohe Akzeptanz beim Benutzer zu erreichen.
1
Das FURPS+ Modell wird im USP Prozess (JBR99) verwendet. FURPS steht dabei für die benutzten Kategorien Functionality, Usability, Reliability, Performance sowie
Supportability, wobei das + für Unterkategorien steht.
19
NR02 Antwortzeiten
Die Antwortzeiten für alle Anwendungsfälle müssen
weniger als 4 Sekunden betragen, wobei die Antwortzeiten für erwartet häug nachgefragte Anwendungsfälle, z.B. die Suche nach Dokumenten und Benutzern sowie die Anzeige von Dokumentbewertungen
(einschlieÿlich der Inferenz), 2 Sekunden nicht überschreiten darf. Ziel
ist hierbei ebenfalls, die Akzeptanz durch den Benutzer zu fördern.
NR03 Flexibler Objektentwurf
Der Objektentwurf soll so gestaltet sein,
dass gewisse Mechanismen, wie der Inferenzmechanismus oder die Beziehungsverwaltung zwischen Kompetenzfeldern, exibel austauschbar
sind. Damit soll erreicht werden, dass diese Konzepte zu einem späteren Zeitpunkt einfach und ohne groÿe Zeitaufwände ersetzt werden
können.
NR04 Technologische Basis Als technologische Basis soll die Java Enterprise Edition (Java EE) Plattform verwendet werden. Dabei bieten sich
insbesondere Java Server Pages (JSP) zur Realisierung der Benutzerschnittstelle sowie Enterprise Java Beans (EJB) für die persistente
Datenhaltung an.
NR05 Browser-Kompatibilität
Die Funktionen, die durch die Anwendungsfälle deniert wurden, sollen unter allen weitverbreiteten Webbrowsern
(Internet Explorer 7.0+, Firefox 2.0+, Opera 9+) fehlerfrei darstellbar
sein. Darüber hinaus soll die Möglichkeit zur Anbindung an BrowserErweiterungen (Addons ) durch das System oen gestaltet werden.
20
Kapitel 4
Lösungsentwurf
Dieses Kapitel beschreibt den von uns gewählten Lösungsentwurf für ein reputationsbasiertes Kompetenznetz, wobei aber Details der Implementierung
erst im nachfolgenden Kapitel genauer erläutert werden.
In der Folge werden das Datenmodell und darauf aufbauend der konzeptionelle Objektentwurf näher vorgestellt. Die Ergebnisse daraus werden dann
im implementierungsnahen Objektentwurf erweitert und verfeinert.
Anschlieÿend beschreiben wir wichtige Lösungsbestandteile im Detail. Hierzu
zählt neben der zentralen Komponente zum Inferieren von Bewertungen auch
der Baustein zum Aufbau einer Taxonomie zwischen Kompetenzfeldern.
4.1
Datenmodell
Der erste logische Schritt unseres Lösungsansatzes liegt im Datenmodell. Ziel
des Datenmodells ist es, die in unserem Entwurf vorkommenden Daten so
zu strukturieren, dass eine persistente Datenhaltung ermöglicht wird. Dabei verwenden wir das relationale Datenmodell (Co70). Unsere konkreten
Anforderungen an das Datenmodell umfassen folgende:
•
Das Datenmodell muss ausnahmslos alle persistent zu speichernden Daten erfassen. Persistent zu speichernden Daten sind
die Daten, die von der Anwendung über eine Benutzersitzung hinaus
gebraucht werden.
•
Abstrakte Datentypen aus der Anforderungsanalyse werden
auf konkrete Typen übersetzt. Dabei richten sich die verwendete21
ten Datentypen nach dem SQL-92 Standard. Die Umsetzung soll dabei
keine semantischen Änderungen zwischen den abstrakten und den konkreten Typen im Datenmodell vornehmen.
•
Beziehungen zwischen Entitäten sollen im Datenmodell erkennbar sein. Durch Verwendung des relationalen Datenmodells ist
es möglich durch den Einsatz von Fremdschlüsseln, Entitäten anderen
Entitäten zuzuordnen. Dabei sind 1:1, 1:n, n:m Beziehungen zwischen
Entitäten möglich.
4.1.1
Entitäten
Wir haben während der Datenanalyse folgende Entitäten einschlieÿlich ihrer
Attribute erfasst:
Benutzer
Die Entität Benutzer (engl. user ) repräsentiert einen dem System bekannten Benutzer. Die Identikation geschieht dabei über eine
benutzerspezische Identikationsnummer. Weitere Attribute des Benutzers sind sein gewählter Benutzername, sein Passwort, sein Vorund Nachname, seine E-Mail-Adresse, seine Anschrift sowie eine kurze
Selbstbeschreibung, wobei alle diese Attribute als Zeichenketten entsprechender Länge repräsentiert werden. Der Aktivierungscode wird
für die Aktivierung bei einer Selbstregistrierung oder einer Einladung
durch einen anderen Benutzer verwendet. Der an das System übergebene Aktivierungscode muss dabei dem in der Datenbank gespeicherten
Code entsprechen. Bei bereits aktivierten Benutzern bzw. Benutzern,
die eine Einladung annehmen wird dem Attribut eine leere Zeichenkette zugewiesen. Die Repräsentation in der Datenbank erfolgt ebenfalls
als Zeichenkette entsprechender Länge.
Benutzerbewertungen
Die Entität Benutzerbewertung (engl. user_rating )
repräsentiert eine Bewertung, die von einem Benutzer über einen anderen Benutzer abgegeben wurde. Attribute einer Benutzerbewertung
stellen dabei die vergebene Bewertung selbst als auch das Datum der
Bewertungsabgabe dar.
Dokumente
Zu bewertende oder als Lesezeichen gespeicherte Dokumente
werden durch die Entität Dokumente (engl. documents ) repräsentiert.
Dokumente werden eindeutig durch ihren Uniform Resource Locator
(URL) (BLMM94) identiziert. Als weiteres Attribut wird jedem Dokument ein Titel zugeordnet, der das Dokument beschreiben soll. Beide
Attribute werden dabei als Zeichenketten variabler Länge gespeichert.
22
Dokumentbewertungen
Bewertungen zu Dokumenten werden durch die
Entität Dokumentbewertung (engl. document_ratings ) repräsentiert.
Dabei sind neben der Bewertung selber das Datum der Bewertung
sowie ein Hashcode des bewerteten Dokuments zum Zeitpunkt der Bewertung Attribute der Dokumentbewertung. Konzeptuell betrachtet
stellt der Hashcode eine Dokumenteigenschaft dar1 , wurde jedoch in
die Entität Dokumentbewertung aufgenommen, da erst in dieser der
Bezug zur Dokumentversion wichtig wird. Entsprechend existiert zu
verschiedenen Versionen nur ein Eintrag in Dokumente. Dies hat den
Vorteil, dass redundante Einträge bei der Entität Dokument verhindert
werden.
Tags
Die Entität Tags repräsentiert die Kompentenzfelder unseres Systems
in Form von Stichworten bzw. Stichphrasen. Das einzige Attribut dieser
Entität ist die Phrase selbst, welche als Zeichenkette gegebener Länge
abgespeichert wird.
4.1.2
Beziehungen zwischen Entitäten
Nachfolgend werden die von uns denierten Beziehungen zwischen den Entitäten und deren Kardinalitäten beschrieben werden. Darüber hinaus wird
angegeben, durch welche Attribute die Beziehung realisiert wird und was
Gründe und Auswirkungen der Beziehung sind. Im Mittelpunkt des Beziehungsgeechts im Datenmodell stehen die Entitäten Benutzerbewertungen
und Dokumentbewertungen. Deshalb werden nachfolgend die Beziehungen
ausgehend von diesen beiden Entitäten beschrieben.
Beziehungen der Entität Dokumentbewertungen
Folgende Beziehungen gehen von der Entität Dokumentbewertungen (engl.
document_ratings ) aus:
Beziehung zu Dokumenten
Zu jedem Dokument gehören eine bis mehrere Dokumentbewertungen, wohingegen zu jeder Dokumentbewertung
genau ein Dokument gehört.
Beziehung zu Benutzern
Zu jeder Dokumentbewertung gehört genau ein
Benutzer, wohingegen zu jedem Benutzer keine bis mehrere Dokumentbewertungen gehören. Dadurch wird erzwungen, dass jede Bewertung
genau einem Benutzer zugeordnet werden kann, und somit anonyme
Bewertungen ausgeschlossen werden.
1
Ein Hashcode berechnet sich geeignet durch eine Hashfunktion (Co01)
23
Beziehung zu Tags
Zu jeder Dokumentbewertung gehört genau ein Tag,
und ein Tag kann zu mehreren Dokumentbewertungen gehören. Der
Grund, warum man zu einer Bewertung nur ein Tag (welches ein Kompetenzfeld repräsentiert) zuordnen kann, ist, dass für jedes Kompetenzfeld eine eigene Bewertung abgegeben werden kann. Somit ist es
durchaus möglich, dass ein Benutzer zum gleichen Dokument mehrere
Bewertungen für verschiedene Tags anlegt, allerdings ist zu einem Tag
maximal eine Bewertung möglich.
Beziehungen der Entität Benutzerbewertungen
Folgende Beziehungen gehen von der Entität Benutzerbewertungen (engl.
user_ratings ) aus:
Beziehung zu bewerteten Benutzern
Jede Benutzerbewertung hat als
Bewertungsgegenstand den bewerteten Benutzer, d.h. den Benutzer für
den die Bewertung erstellt wurde. Zu jeder Benutzerbewertung gehört
genau ein bewerteter Benutzer, wohingegen ein Benutzer in keiner,
einer oder mehreren Benutzerbewertungen bewertet werden kann.
Beziehung zu bewertenden Benutzern
Jede Benutzerbewertung hat andererseits aber auch einen Benutzer, der die Bewertung abgibt, den
bewertenden Benutzer. Dabei hat jede Benutzerbewertung genau einen
solchen Benutzer, der die Wertung abgibt, aber jeder Benutzer kann
keinen, einen oder mehrere Benutzer bewerten. Analog den Dokumentbewertungen wird durch die Erzwingung der Existenz eines bewertenden Benutzers sichergestellt, dass keine anonymen Bewertungen möglich sind.
Beziehung zu Tags
Benutzerbewertungen beziehen sich analog zu Dokumentbewertungen ebenfalls auf Kompetenzfelder, die in unserem System durch Tags repräsentiert werden. Dabei wird einer Benutzerbewertung genau ein Tag zugeordnet, allerdings kann ein Tag zu keinem,
einem oder mehreren Benutzerbewertungen zugeordnet werden. Exakt wie bei den Dokumentbewertungen wird hiermit ermöglicht, dass
Bewertungen zu einem Benutzer unter unterschiedlichen Kompetenzfeldern (repräsentiert durch Tags) auch unterschiedlich sein können.
Abbildung 4.1 bildet das Datenmodell in der Krähenfussnotation2 ab.
2
Auch als Martin-Notation bekannt. Dabei werden die Kardinalitäten durch 0 (Null),
| (Eins) bzw. dem Krähenfuÿ (beliebig viele) gekennzeichnet. Bei jeder Beziehung stehen zwei Kardinalitäten hintereinander, die das minimale bzw. das maximale Auftreten
beschreiben.
24
Abbildung 4.1: Das Datenmodell in der Krähenfussnotation
4.2
Objektorientierter Entwurf
Das im vorangegangenen Kapitel erarbeitete Datenmodell stellt nun die
Grundlage für den objektorientierten Entwurf dar. Dabei unterscheiden wir
nachfolgend zwischen einem konzeptionellen Entwurf, der auf dem eben erwähnten Datenmodell sowie den in Abschnitt 3.1 denierten funktionalen
Anforderungen basiert, sowie einem implementierungsnahen Entwurf, der
den konzeptionellen Entwurf um Details der Implementierung erweitert. Die
Grundlage hierfür bilden die nichtfunktionalen Abhängigkeiten aus Abschnitt
3.2 sowie Einschränkungen durch die Zielplattform.
Die Entwürfe werden in einem Klassendiagramm nach UML2 Notation (OM07)
visualisiert. Da wir uns als bei der Zielsprache auf Java festgelegt haben, verwenden wir die dort unterstützten Datentypen für den Entwurf.
4.2.1
Konzeptioneller Entwurf
Ausgangspunkt für den konzeptionellen Entwurf stellt das Datenmodell dar.
Die Entitäten aus diesem wurden als Klassen übernommen. Die Attribute der
Entitäten wurden durch einen entsprechenden Datentyp der Programmiersprache Java ersetzt und den jeweiligen Klassen hinzugefügt. Beziehungen
werden im konzeptionellen Klassendiagramm als Assoziationen modelliert,
wobei deren Kardinalitäten durch die in UML verwendeten Multiplizitäten
ersetzt wurden. Ergänzt werden diese Assoziationen durch entsprechende
25
Rollennamen an den Enden.
Die Methoden der Klassen gehen dabei aus den funktionalen Anforderungen aus Abschnitt 3.1 hervor und sollen hier kurz vorgestellt werden. Dabei
verzichten wir auf die Beschreibung von get und set-Methoden, die lediglich private Attribute auslesen bzw. setzen. Konsequent werden die Klassen
UserRating und DocumentRating, welche keine weiteren Methoden beinhalten, nicht im Detail erläutert.
Methoden der Klasse UserManager
Die Klasse UserManager setzt die in Abschnitt 3.1.2 denierten Anwendungsfälle zur Benutzerverwaltung wie Registrierung sowie An- und Abmeldung
um. Die Klasse hat dabei keine Entsprechung im Datenmodell, da sie lediglich Funktionalität in Form von Methoden zur Verfügung stellt und eine
persistente Speicherung von Instanzen dieser Klasse nicht vorgesehen ist.
Deshalb wurden die Methoden von der Klasse User in unserem konzeptuellen Entwurf getrennt.
Die Methoden register, login sowie logout sind für die Registrierung respektive für die An- und Abmeldung zuständig. Bei der Registrierung notwendige Angaben sind der Benutzername, das gewünschte Password sowie
die E-Mailadresse. Die Methode invite wird dazu verwendet, noch nicht
registrierte Kontake von Benutzern einzuladen, sich der Kooperationsplattform anzuschlieÿen. Dazu muss der Name des einzuladenen Benutzers sowie dessen E-Mailadresse als Parameter an die Methode übergeben werden.
Zusätzlich muss auch noch eine Bewertung für den einzuladenen Benutzer
erstellt werden.
Sowohl bei der Registrierung als auch bei Einladung zur Kooperationsplattform muss der neue Benutzer sein Konto (und gegebenenfalls damit die Einladung selbst) durch den in der E-Mail angegebenen Link bestätigen, der einen
zum Zeitpunkt der Registrierung generierten Aktivierungscode enthält. Die
Methode activate bekommt den Aktivierungscode sowie den Benutzernamen als Parameter übergeben und prüft, ob der übergebene Aktivierungscode mit dem in der Datenbank gespeicherten Wert identisch ist. Ist das der
Fall wird das Konto aktiviert und der Benutzer mithilfe der Methode login
angemeldet.
26
Methoden der Klasse User
Instanzen der Klasse User stellen einen (im System registrierten) Benutzer
dar. Das Hinzufügen und Entfernen von Benutzerbewertungen (vgl. Anwendungsfälle in Abschnitt 3.1.3) wird von den Methoden rate sowie unrate
realisiert. Dabei werden diese Methoden auf dem zu bewertenden Benutzer
(User-Objekt) aufgerufen, wobei der gerade am System angemeldete Benutzer als bewertender Benutzer übergeben wird. Dabei wird der Methode rate
des weiteren neben der eigentlichen Bewertung noch das Kompetenzfeld in
Form eines Tags, unter dem der Benutzer bewertet wird, übergeben.
Die Methoden searchByTags sowie searchByDetails implementieren die in
Abschnitt 3.1.4 denierten Anwendungsfälle für die Suche von Benutzern.
Bei der Methode searchByTags wird dabei eine Menge von Tags angegeben, und die Benutzer zurückgegeben, die unter allen Tags bewertet wurden. Bei der Methode searchByDetails werden ein oder mehrere Details
der gesuchten Person übergeben, wobei ebenfalls nur die Personen ins Resultat übernommen werden, für die alle angegebenen Details erfüllt werden.
Sollen gewisse Details nicht berücksichtigt werden, müssen diese mit dem
Wert null übergeben werden. Wir modellieren diese Methoden als statisch,
da sie unabhängig von einem bestimmten Benutzer (Instanz ) sind, sondern
Funktionalität auf der Menge aller Benutzer darstellen.
Methoden der Klasse Document
Das Hinzufügen und Entfernen von Dokumentbewertungen funktioniert analog zu den Benutzerbewertungen. Es werden die gleichnamigen Methoden
rate und unrate sowie entsprechende Parameter verwendet.
Da Dokumente im Internet zu unterschiedlichen Zeitpunkten verschiedene
Inhalte haben können, Dokumentbewertungen sich aber auf den Moment
der Bewertungsabgabe beziehen, brauchen wir einen Mechanismus der eine
Momentaufnahme des Dokuments zu speichert. Eine komplette Kopie des
Dokuments wäre zwar die naheliegendste Lösung, ist aber aufgrund des Umfangs aktueller Internetinhalte nicht praktikabel. So speichern wir lediglich
einen Hashwert des Dokuments. Die Generierung dieses Hashwertes erfolgt
mittels der Methode hash, die das Ergebnis als Zeichenkette zurückliefert.
Bei der Bewertung eines Dokuments wird dieser Hashcode dann der Dokumentbewertung hinzugefügt.
Der statischen Methode getDocument wird eine URL als Parameter übergeben, die in unserem System ein Dokument eindeutig identiziert, und gibt
daraufhin, sofern vorhanden, das entsprechende Dokumentobjekt zurück.
27
Dies ist erforderlich, da viele Methoden ein Objekt der Klasse Document
erwarten, von dem die URL bekannt ist.
Die Methoden searchByTags sowie searchByUser implementieren die in Abschnitt 3.1.4 denierten Anwendungsfälle für die Suche von Dokumenten. Bei
der Methode searchByTags wird dabei eine Menge von Tags angegeben, wobei nur die Dokumente als Resultat zurückgeliefert werden, die mit allen
Tags annotiert sind. Bei der Methode searchByUser wird ein bestimmter
Benutzer übergeben und die von ihm bewerteten Dokumente zurückgeliefert. Wir modellieren diese Methoden als statisch, da sie unabhängig von
einem bestimmten Dokument (Instanz ) sind, sondern Funktionalität auf der
Menge aller Dokumente darstellen.
Methoden der Klasse Tag
Kompetenzfelder werden in unserem System durch Tags dargestellt, die wiederum durch die Klasse Tag repräsentiert werden.
Die statische Methode getTag, welche nicht mit der gleichnamigen Methode
ohne Parameter verwechselt werden darf, dient dazu, ein Tag welches im
System bereits vorhanden ist, zurückzugeben. Dazu wird der Methode die
Phrase des Tags als Parameter übergeben. Dies ist erforderlich, weil viele
Methoden Objekte vom Typ Tag statt der Zeichenkette selbst erwarten.
Die Methode getRelatedTags dient dazu Tags, welche mit dem aktuellen
Tag-Objekt verwandt sind, abzufragen. Details zu dieser Funktion werden in
Abschnitt 4.4.4 diskutiert. Generell gibt es Beziehungen zwischen Tags, und
diesen Umstand versuchen wir uns zunutze zu machen, indem wir ihn z.B. bei
der Suche nach Tags oder die Einbeziehung von Bewertungen ähnlicher bzw.
verwandter Kompetenzfelder in den Inferenzmechanismus, berücksichtigen.
4.2.2
Implementierungsnaher Entwurf
Aufbauend auf dem konzeptuellen Entwurf soll dieser nachfolgend um implementierungstechnische Aspekte verfeinert werden. Dabei werden Entwurfsmuster (Ga95) verwendet. Die Entwurfsentscheidungen, die bei der Verfeinerung zum implementierungsnahen Entwurf getroen wurden, sind u.a. stark
abhängig von den nichtfunktionalen Anforderungen (vgl. Abschnitt 3.2) beeinusst. Nachfolgend sollen diese Entscheidungen erläutert werden, wobei
zunächst auf die relevanten Teile des Klassendiagramms eingegangen wird,
und zum Schluss dieses Abschnitts die einzelnen Teile in einem Klassendiagramm integriert werden.
28
Abbildung 4.2: Konzeptionelles Klassendiagramm in UML Notation
Verwendung des Singleton Pattern für die Klasse UserManager
Die Klasse UserManager hat die Aufgabe, die Registrierung, An- und Abmeldung sowie die Einladung von Benutzern zu bearbeiten, ohne aber ihren
eigenen Zustand persistent zu speichern. Eine solche Hilfsklasse, die lediglich
Funktionalität zur Verfügung stellt, könnte man mit statischen Methoden
und Eigenschaften entwerfen.
Eine wesentlich elegantere Lösung wird von (Ga95) durch Einsatz des Singleton Design-Pattern vorgeschlagen. Dabei wird auf die Verwendung von statischen Methoden (mit einer Ausnahme) verzichtet, stattdessen wird sichergestellt, dass jederzeit (maximal) genau eine Instanz dieser Klasse existiert.
Zusätzlich wird ein globaler Zugangspunkt zu der Klasse (mit Hilfe einer
einzigen statischen Methode) angeboten.
In unserer Klasse UserManager nutzen wir das Singleton-Pattern wie folgt.
Wir denieren ein statisches Attribut instance vom Typ UserManager, welches eine Referenz auf das einzige UserManager-Objekt darstellt. Zugri auf
den UserManager erhalten wir durch die statische Methode getInstance,
welche den Wert des Klassenattributs instance zurückgibt. Sollte das
UserManager Objekt dabei nicht existieren, wird es zuvor erstellt und die
Referenz darauf im Attribut instance gespeichert. Um sicherzustellen, dass
keine weiteren Instanzen dieser Klasse erzeugt werden, wird der einzige Konstruktor (der Standardkonstruktor) als private deklariert. Abbildung 4.3
zeigt die Klasse UserManager.
29
Abbildung 4.3: Die verfeinerte Klasse UserManager
Austauschbarer Inferenzmechanismus durch das Strategy Pattern
In Abschnitt 3.2 haben wir mit NR03 die Anforderung nach einem exiblen
Objektentwurf formuliert, der unter anderem die Berücksichtigung der Austauschbarkeit des Inferenzmechanismus fordert. Dieser Anforderung soll hier
Rechnung getragen werden, indem wir eine weiteres Design Pattern nach
(Ga95) verwenden: das Strategy Pattern. Bei diesem Entwurfsmuster wird
eine Familie von Algorithmen austauschbar gemacht sowie die Realisierung
des Algorithmus vom Clients entkoppelt. In diesem Zusammenhang sei angemerkt, dass wir eine kleine Variation des Musters verwenden, indem wir
anstatt abstrakter Klassen Interfaces benutzen.
Realisiert wird dieses Pattern durch die Denition des Interfaces
DeductionStrategy, das eine Methode calculateRating deniert. Dieser
Methode wird neben dem Benutzer (User), der die Bewertung abfragen
will, das Dokument (Document) mitsamt Kompetenzfeld (Tag) übergeben,
für welches die Bewertung abgefragt werden soll. Der Rückgabe der Methode ist die Bewertung, die wie alle anderen Bewertungen in unserem System
als Flieÿkommazahl (Java Datentyp double) dargestellt wird. Jeder zu unserer Anwendung kompatible Inferenzmechanismus muss nun lediglich dieses Interface und somit die gerade beschriebene Methode calculateRating,
implementieren, wobei der interne Inferenzmechanismus beliebig realisiert
sein kann. Den von uns entwickelten Inferenzalgorihmus bezeichnen wir als
CompetenceDeductionStrategy. Er wird ausführlich in Abschnitt 4.3 beschrieben.
Zusätzlich wird die Klasse Document um ein statisches Attribut
deductionStrategy vom oben beschriebenen Interfacetyp DeductionStrategy
ergänzt, wobei alle Klassen erlaubt sind, die dieses Interface implementieren.
30
Abbildung 4.4: Anwendungs des Strategy Patterns auf den Inferenzmechanismus
Die Methode getRating der Klasse Document, die für die Abfrage von Dokumentbewertungen zuständig ist, ruft ihrerseits nun die Methode
; calculateRating auf dem Objekt3 deductionStrategy auf. Dabei wird
der gerade angemeldete Benutzer sowie das Dokument, auf welchem die
getRating-Methode aufgerufen wurde, übergeben. Durch einfaches Austauschen der Objektreferenz in deductionStrategy kann der Inferenzmechanismus somit ausgetauscht werden.
Abbildung 4.4 zeigt die Auswirkungen auf die Klasse Document sowie die
Erweiterung durch die neue Interfacedenition sowie unsere Implementierungsklasse namens CompetenceDeductionStrategy.
Erweiterung der Klasse Tag zur Unterstützung von Klassikationsbeziehungen
Der konzeptuelle Entwurf lässt sich hinsichtlich der möglichen Beziehungen
zwischen Kompetenzfeldern wie folgt verfeinern. Es können zwischen Kompetenzfeldern, bzw. deren Repräsentation als Tags, Beziehungen bestehen.
Beispielsweise bestehen Beziehungen zwischen Kompetenzfeldern, die Teilkompetenzen darstellen und somit anderen Kompetenzfeldern untergeordnet sind, also ein hierarchisches Klassikationssystem bilden. Ein anderes
Beispiel wäre, dass gewisse Kompetenzfelder in einer Ähnlichkeitsbeziehung
zueinander stehen, die lediglich aussagt, dass zwei Kompetenzfelder sich inhaltlich ähnlich sind. Diese Beziehungseigenschaften können dann sowohl bei
der Inferenz als auch bei der Suche von Dokumenten herangezogen werden.
So ist es bei der Inferenz einer Bewertung möglich, Subkompetenzfelder entsprechend mit zu betrachten.
3
Präziser gesagt wird das Objekt, auf welches die Referenz des Attributs
deductionStrategy zeigt, aufgerufen.
31
Abbildung 4.5: Erweiterung der Strukturbeziehungen bei Tags
Wir denieren zur allgemeinen Repräsentation von Beziehungen zwischen
Tags die abstrakte Klasse TagRelationship, die auf zwei Tags (TagA und
TagB) verweist und geschützte (protected) Attribute für den Namen der
Beziehung sowie ein Flag das angibt, ob es sich bei dem Beziehungstyp
um eine symmetrische Beziehung handelt, besitzt. Symmetrische Beziehungen sagen aus, dass wenn die Beziehung von TagA zu TagB gilt, dann gilt
diese Beziehung auch von TagB zu TagA. Die Ähnlichkeitsbeziehung ist ein
Beispiel für eine symmetrische Beziehung, wogegen hierarchische Beziehungen nicht symmetrisch sind. Um eigene Beziehungstypen zu erstellen genügt es, diese von der Klasse TagRelationship abzuleiten. So denieren
wir die Beziehungstypen ParentRelationship, ChildRelationship sowie
SimilarityRelationship, welcher noch ein zusätzliches Attribut
(similarityCoeff) hat, das den Grad der Ähnlichkeit zweier Tags angibt.
Der Algorithmus zur Auswertung von Beziehungen wird analog dem vorangegangenen Abschnitt mithilfe des Strategy Patterns entkoppelt. Abbildung
4.5 zeigt den für die Tags relevanten Ausschnitt des Klassendiagramms. Für
genauere Erläuterungen zur Funktionsweise der Klassikationsbeziehungen
von Tags sei auf Abschnitt 4.4 verwiesen, der dies detailiert beschreibt.
In diesem Zusammenhang sollte beachtet werden, dass eine Neuberechnung
der Beziehungen zwischen Tags bei jeder Anfrage einen erheblichen Aufwand generieren kann, vorallem in den nach NR02 der nichtfunktionalen
Anforderungen (vgl. Abschnitt 3.2) zeitkritischen Anwendungsfällen der Dokumentsuche sowie Inferenz. Mit der persistenten Speicherung der Beziehungen wären aber weitreichende Erweiterungen des Datenmodells verbunden.
32
Abbildung 4.6: Überblick des implementierungsnahen Klassendiagramms
Integration der besprochenen Konzepte
Abbildung 4.6 zeigt das implementierungsnahe Klassendiagramm, bei welchem die besprochenen Erweiterungen in das konzeptuelle Klassendiagramm
(vgl. Abbildung 4.2) integriert wurden.
4.3
Bewertungsinferenz
Die zentrale Komponente der Kooperationsplattform ist der Mechanismus
zur Inferenz von Bewertungen, welchem dieser Abschnitt gewidmet ist. Dabei werden wir zunächst Grundannahmen treen, wie sich unser Mechanismus verhalten soll. Diese Grundannahmen werden daraufhin in einem Kalkül
durch geeignete Regeln formalisiert. Abschlieÿend wird der von uns entworfene Inferenzmechanismus kritisch diskutiert sowie mögliche alternative Herangehensweisen vorgestellt.
4.3.1
Grundannahmen zur Bewertungsinferenz
Grundsätzlich soll es die Bewertungsinferenz ermöglichen, vertrauenswürdige
Aussagen über Dokumente zu erlangen, die der Benutzer nicht selbst bewertet hat. Dies geschieht über das soziale Netzwerk zu anderen Benutzern,
33
die ebenfalls wie Dokumente, unter bestimmten Kompetenzfeldern bewertet
werden, sowie deren Bewertungen für das angefragte Dokument.
Dabei basiert der von uns zu entwickelnde Inferenzmechanismus auf folgenden Annahmen, welche zur späteren Referenzierbarkeit eindeutig durchnummeriert wurden:
•
IN01
•
IN02
•
IN03
•
IN04 Dokument- und Benutzerbewertungen, die über einen kürzeren
Benutzer- und Dokumentbewertungen werden auf einer Ordinalskala von 1 bis 5 Sternen vergeben, wobei ein Stern für ein äuÿerst
schwache, positive Bewertung und fünf Sterne für eine äuÿerst starke,
positive Bewertung steht.
Existiert für das angefragte Dokument eine vom Benutzer erstellte Dokumentbewertung, wird diese direkt als Endbewertung der
Inferenz übernommen. Analog wird für mit dem Ausgangsbenutzer direkt benachbarten Benutzer die vorhandene Benutzerbewertung übernommen.
Dokumentbewertungen, die von Benutzern mit stärker positiver Bewertung stammen, sollen auch im Ergebnis entsprechend stärker
berücksichtigt werden.
Pfad von Benutzerknoten erreichbar sind, sollen stärker berücksichtigt
werden als Bewertungen, die über sehr lange Benutzerbewertungsketten erreichbar sind.
•
IN05
•
IN06 Sollte bei einer Dokumentbewertung der Hashwert des aktuellen
Kreise in den Bewertungsgraphen zwischen Benutzern dürfen
weder positive noch negative Auswirkungen auf die Endbewertung haben
Dokuments von dem Hashwert zum Zeitpunkt der Bewertungserstellung abweichen wird dem Benutzer der Hinweis gegeben, dass sich der
Dokumentinhalt möglicherweise geändert hat.
•
IN07
•
IN08 Sollte kein Pfad zwischen dem Ausgangsbenutzer und dem an-
Sollten Dokument- und Benutzerbewertungen ähnlicher Kompetenzfelder mithilfe der generierten Taxonomie (vgl. Abschnitt 4.4)
einbezogen werden, wird deren Einuss auf die Endbewertung reduziert, wobei der Grad der Reduktion vom Grad der Ähnlichkeit der
Kompetenzfelder abhängen sollte.
gefragten Dokument möglich sein, wird dem Benutzer mitgeteilt, dass
eine Bewertung für das vorliegende Dokument nicht möglich sei.
34
4.3.2
Ein einfacher Kalkül zur Bewertungsinferenz
Aufbauend auf den im vorherigen Abschnitt denierten Grundannahmen
sollen diese nun in einem Kalkül formalisiert werden. Dies geschieht schrittweise, wobei wir von einer Formalisierung der Ausgangssituation ausgehen
und über die Inferenz von Benutzerbewertungen auf die Inferenz der Dokumentbewertungen kommen. Dabei werden die im vorangegangenen Abschnitt
denierten Annahmen über das Verhalten des Inferenzmechanismus' an den
relevanten Stellen aufgegrien.
Grundlegende Denitionen
Zunächst sollen die grundsätzlichen Elemente unseres Kalküls vorgestellt
werden. Als Ausgangspunkt haben wir eine Menge von Benutzern U, eine
Menge von Tags T, eine Ordinalskala für Bewertungen, deren diskrete Wert
durch die Menge R mit totaler Ordnung repräsentiert werden, sowie eine
Menge an Dokumenten D.
Für Zwischenergebnisse in der Berechnung von gewichteten Durchschnittsbewertungen (z.B. nach IN03) verwenden wir Flieÿkommawerte, welche wir
durch die Menge R beschreiben. Für die Anzeige des Endergebnisses verwenden wir die Rundungsfunktion r : R → R, welche jedem Flieÿkommawert ihren gerundeten Wert auf der Ordinalskala zuordnet (IN01). Die Verwendung
der Menge R stellt dabei stärkere Anforderungen an die Skala der Bewertungen. Um das Kalkül jedoch einfach und anschaulich zu halten wird auf eine
komplexe, skalentreue Behandlung verzichtet.
Die Zuordnung von Tags zu Benutzerbewertungen stellt eine Teilmenge des
kartesischen Produkts aus dem bewertenden Benutzer der Menge U, dem
bewerteten Benutzer der Menge U sowie dem zugeordneten Tag der Menge
T dar:
EU ⊆ U × U × T
(4.1)
Analog dazu wird eine Zuordnung eines Tags der Menge T von einem Benutzer der Menge U zu einem Dokument der Menge D deniert:
ED ⊆ U × D × T
(4.2)
Die eigentliche Bewertung ist eine surjektive Funktion RU von EU auf Bewertungen R im Falle von Benutzerbewertungen, bzw. die (ebenfalls surjektive)
Funktion RD von ED auf Bewertungen R für Dokumentbewertungen:
RU : EU → R
35
(4.3)
RD : ED → R
(4.4)
Diese Denition als surjektive Funktionen gewährleistet, dass jede Zuordnung von Benutzern sowie Dokumenten zu Tags auch eine Bewertung beinhaltet. Ebenfalls wird durch die Modellierung als Funktion sichergestellt,
dass es zu jeder solchen Zuordnung maximal eine Bewertung gibt, oder anders ausgedrückt, dass man einen Benutzer bzw. ein Dokument unter einem
Kompetenzfeld nur mit einer Bewertung versehen kann.
Ziel unseres Inferenzkalküls ist es, eine (inferierte) Bewertungsfunktion vom
Benutzer u ∈ U unter dem Kompetenzfeld t ∈ T für das Dokument d ∈ D zu
schaen. Die Denition dieser Funktion lautet wie folgt:
RD : U × D × T → R
(4.5)
Dazu muss in einem vorherigen Schritt eine Bewertung für andere Benutzer
inferiert werden, welche sich analog denieren lässt:
RU : U × U × T → R
(4.6)
Der von uns gewählte Lösungsweg beruht darauf, ausgehend von einem Benutzer u, Bewertungen RU für andere Benutzer auf Grundlage abgegebener
Benutzerbewertungen zu inferieren. Die Bewertung RD für das angefragte
Dokument d wird dann aus Dokumentbewertungen von Benutzern, deren
Benutzerbewertungen wir im vorherigen Schritt berechnet haben, inferiert
und anschlieÿend auf R gerundet.
Bevor wir nun im Detail erläutern, wie wir diese Bewertungen inferieren,
befassen wir uns zunächst mit der Wahl eines geeigneten Kompetenzfeldes
t, unter dem die Inferenz geführt wird.
Wahl eines geeigneten Kompetenzfeldes
Bei der Wahl eines geeigneten Kompetenzfeldes sollen zwei Fälle unterschieden werden. Zum einen hat der Benutzer die Möglichkeit, das von ihm gewünschte Kompetenzfeld, unter welchem die Inferenz durchgeführt wird, direkt anzugeben. Zum anderen soll es ihm aber auch möglich sein, die Wahl
eines Kompetenzfeldes, welches auf das gesuchte Dokument d ∈ D geeignet
zutrit, durch die Kooperationsplattform durchführen zu lassen,
In diesem Fall wählen wir jenes Kompetenzfeld t, welches die meisten Dokumentbewertungen von Benutzern u0 ∈ U erhalten hat. Präziser ausge36
drück wählen wir jenes Kompetenzfeld t, welches unter der Voraussetzung
(u0 , d, t) ∈ ED für beliebigen Benutzer u0 ∈ U am häugsten in ED für das
angefragte Dokument d vorkommt. Sollte dies für kein Kompetenzfeld t ∈ T
möglich sein, so besteht keine Bewertung für das angefragte Dokument und
somit ist die Inferenz einer Bewertung für das angefragte Dokument nicht
möglich.
Berücksichtigung von Pfadlängen durch Sphären
Um die Kompetenzbeziehungen zwischen Benutzern in unserem Kompetenznetz besser erläutern zu können, denieren wir uns zunächst eine Hilfsfunktion EU (t) : T → P(U × U):
EU (t) = {(u1 , u2 ) | (u1 , u2 , t) ∈ EU }
(4.7)
Ausgehend davon beschreibt für ein beliebiges t ∈ T das Tupel (U, EU (t))
einen gerichteten Graphen, dessen Knoten durch RU mit Bewertungen versehen werden, die ein (positives) Maÿ für das Vertrauen in die Kompetenz
des entsprechenden Benutzers im Gebiet t darstellen.
Nun sollen nach IN04 die Anzahl der Stationen, oder eben die Pfadlänge
in oben genanntem Graphen, bei der Bewertungsinferenz mit berücksichtigt werden, weshalb wir das Konzept der Sphäre verwenden. Der Abstand
d(u, u0 ) zwischen zwei Benutzern ist dabei als die minimale Pfadlänge zwischen ihnen deniert. Dabei denieren wir den Abstand für Knoten, die unter
vom Ausgangsbenutzer u unter dem Kompetenzfeld t nicht erreichbar sind,
als ∞.
Um die in IN05 geforderte Kreisfreiheit der Bewertungen zu erreichen, legen
wir fest, dass für einen Benutzer mit Abstand n vom Startbenutzer nur Benutzerbewertungen geringerer Abstände, also < n, verwendet werden. Zum
Einen ergibt sich dadurch, dass für Benutzer des Radius n nur Bewertungen
von Benutzern des Radius n − 1 berücksichtigt werden müssen4 und somit
eine Gewichtung von Pfadlängen wegfällt, zum Anderen impliziert dies auch,
dass die geforderte Kreisfreiheit sichergestellt wird. Diese Denition wird in
der Diskussion in Abschnitt 4.3.3 nochmals aufgegrien.
Abbildung 4.7 veranschaulicht dieses Konzept, wobei die roten Kanten Benutzerbewertungen darstellen, die zwar im System vorhanden sein können,
4
Würden Benutzerbewertungen von Benutzern mit Abstand n0 ≤ n−2 vorliegen, würde
der Benutzer auf Radius n0 + 1 liegen, wobei n0 + 1 < n gilt.
37
Abbildung 4.7: Anwendung des Sphärenkonzepts auf das Kompetenznetzwerk
aber aus dem im vorherigen Abschnitt erläuterten Grund nicht berücksichtigt werden.
Um nun eine Reduzierung der Bewertungsstärke nach IN04 abhängig von
der Pfadlänge zu bewirken, wird entsprechemd dem Abstand eine Dämpungsfunktion angewendet. Diese berechnet den Dämpfungsfaktor g(n) abhängig
vom Abstand n zum Ausgangsbenutzer u. Wir haben dabei folgende Anforderungen an die Dämpfungsfunktion:
• Nach IN02 sollen Bewertungen, die vom anfragenden Benutzer u selbst
ausgehen, übernommen werden, ohne andere Bewertungen zu berücksichtigen. Eine Dämpfungsfunktion soll deshalb für einen Radius echt
kleiner Eins das Ergebnis 1 liefern, das ausdrückt, dass diese Bewertung
als einziges und damit in voller Stärke in das Endergebnis eingeht.
• Nach dem von (Mi67) vorgestellten Kleine-Welt-Phänomen kennt jede
Person jede andere über eine maximale Länge von 6 Kanten. Deshalb
sollen alle Bewertungen von Benutzern, die weiter als Radius 5 vom
Ursprungsbenutzer u entfernt sind, nicht in die Inferenz einbezogen
werden.
• Da die Aussagekraft von Bewertungen nach IN04 mit der Länge der
Kette singt, muss unsere Dämpfungsfunktion streng monoton fallend
sein.
In diesem Inferenzkalkül verwenden wir folgende Dämpfungsfunktion:
38
( 1,
g(n) =
2
2n ,
0,
für n < 1
für 1 ≤ n ≤ 5
für n > 5
(4.8)
Neben der Erfüllung der Anforderungen zeichnet sich unsere Dämpfungsfunktion durch eine stärkere negative Steigung5 im Vergleich zu einer linearen Dämpfungsfunktion aus, die mit zunehmendem Radius exponentiell
steigt. Auf unser Inferenzkalkül angewendet bedeutet dies, dass die engeren
Radien das Inferenzergebnis erheblich (exponentiell) stärker beeinussen als
die weiteren Radien. So hat eine Bewertung eines Benutzers mit Radius 1
eine vierfach( 223 ) so hohe Aussagekraft wie eine Bewertung eines Benutzers
mit Radius 3.
Inferenz von Benutzerbewertungen
Die in den vorhergehenden Abschnitten entwickelten Konzepte sollen zunächst auf die Inferenz von Benutzerbewertungen angewendet werden, welche die Voraussetzung für die spätere Inferenz der Dokumentbewertungen
darstellen.
In IN02 wird verlangt, dass die vom Ausgangsbenutzer u erstellte Werte
für alle direkt benachbarten Benutzer ohne weitere Anwendung von Inferenzberechnungen übernommen wird. Dies geschieht durch eine kanonische
Einbettung von RU in RU :
∀e ∈ EU : RU (u) = RU (e)
(4.9)
Für alle Benutzer, für die keine direkte Bewertung durch den Ausgangsbenutzer besteht d.h. ∀u0 : (u, u0 ) ∈
/ EU (t), berechnet sich die inferierten Benutzerbewertung aus dem arithmetischen Mittel der (inferierten) Benutzerbewertungen RU (u, v, t) der Vorgänger v und der Bewertung des Vorgängers
zum zu inferierenden Benutzer Ru (v, u0 , d):
0
v∈Uu0 ,d,t [RU (v, u , d)
P
RU
(u, u0 , t)
=
+ RU (u, v, t)]
2 | Uu0 ,d,t |
(4.10)
5
Die Steigung beträgt g 0 (n) = −2 log 0.5 · 0.5n , und somit werden für gröÿere Radien n
die Funktionswerte exponentiell kleiner. Die negative Steigung linearer Dämpfungsfunktionen ist dagegen konstant.
39
Abbildung 4.8: Allgemeine Struktur und Beispiel der Inferenz von Benutzerbewertungen
Abbildung 4.9: Beispiel für die Inferenz der Dokumentbewertung
mit Uu,u0 ,t = {v ∈ U | (v, u0 , t) ∈ Eu ∧ d(u, v) < d(u, u0 )}, die Menge alle Vorgänger des Benutzers u0 repräsentiert.
Abbildung 4.8 zeigt im rechten Teil die allgemeine Struktur der Benutzerbewertungen auf und veranschaulicht dies im linken Teil durch ein einfaches
Beispiel.
Inferenz von Dokumentbewertungen
Der nale Schritt des Inferenzkalküls befasst sich damit, die bereits inferierten Benutzerbewertungen RU vom Ausgangsbenutzer u mit den im System
vorhandenen Dokumentbewertungen RD geeignet zu kombinieren, so dass
eine möglichst aussagekräftige Bewertung RD über das Dokument d für den
Benutzer u inferiert wird.
Zunächst soll aber der triviale Fall betrachtet werden, dass der Ausgangsbenutzer das nachgefragte Dokument selbst bewertet hat. Dabei soll dann die
vom ihm erstellte Bewertung ohne Anwendung von Inferenzmechanismen,
wie in Anforderung IN02 beschrieben, übernommen werden. Dies wird analog der Inferenz von Benutzerbewertungen mittels einer kanonischen Einbet40
tung von RD in RD bewerkstelligt:
∀e ∈ ED : RD (e) = RD (e)
(4.11)
Der eigentliche Nutzen der Kooperationsplattform liegt aber darin, Dokumentbewertungen für nicht eigens bewertete Dokumente zu bekommen. Dazu
bilden wir wieder das arithmetische Mittel, müssen es allerdings entsprechend
den Anforderungen IN03 und IN04 gewichten, wobei wir zur Gewichtung
der Pfadlängen nach IN04 die Gewichtungsfunktion g(n) verwenden. Die
inferierte Bewertung für ein Dokument d unter einem Kompetenzfeld t von
einem Ausgangsbenutzer u ausgehend berechnet sich daher wie folgt:
P
RD (u, d, t) =
g(nu0 ) · RD (u0 , d, t) · RU (u, u0 , t)
P
0
v∈Ud,t g(nv ) · RU (u, u , t)
u0 ∈Ud,t
(4.12)
n
o
mit Ud,t = v ∈ U | (v, d, t) ∈ Ed ∧ RU (u, v, t) als die Menge der Benutzer,
für die eine Benutzerbewertung vorliegt (und somit vom Ausgangsbenutzer u
erreichbar ist) und die das Dokument d unter dem Kompetenzfeld t bewertet
haben.
Abbildung 4.9 soll dies veranschaulichen, indem das Beispiel aus dem vorherigen Abschnitt um die Dokumentbewertungen erweitert wird.
4.3.3
Diskussion der Bewertungsinferenz
Einleitend für die Diskussion der Bewertungsinferenz sei zu erwähnen, dass
es sicher keine triviale Aufgabe ist, das menschliche Verhalten bei der Bewertungsndung zu unbekannten Inhalten aufgrund von Aussagen anderer
abzubilden, zumal dies sicher auch von Mensch zu Mensch verschieden ist.
Deswegen sei auch darauf hingewiesen, dass die mit IN01-IN07 Annahmen
keinen Anspruch auf Vollständigkeit oder Universalität erheben, sondern lediglich als Ausgangspunkt für die prototypische Realisierung dienen. Deshalb wurde bereits im Abschnitt 3.2 mit der nichtfunktionalen Anforderung
NR03 Flexibler Objektentwurf festgelegt, dass sich dieser Inferenzmechanismus austauschen lassen soll.
Eines der Kernkonzepte des vorgestellten Kalküls ist die Nutzung von Spähren in Graphen. In diesem Zusammenhang wird auch festgelegt, dass Benutzerbewertungen lediglich von einem Radius tiefergelegenen Benutzern bewertet werden können. Natürlich stellt dies eine Vereinfachung dar, die neben
41
Abbildung 4.10: Das dargestellte Beispiel der Bewertungsinferenz für einen
Benutzer T soll mit Hilfe der Beschränkung auf kleinere Radien für Benutzerbewertungen verhindert werden.
dem Vorteil der Kreisfreiheit (siehe Anforderung IN05) vorallem deswegen
gewählt wurde, weil wir verhindern wollten, dass Benutzer höherer Entfernungen zum Ausgangsbenutzer die Bewertungen von Benutzern geringerer
Entfernungen beeinussen. Vorallem soll dabei der in Abbildung 4.10 abgebildete Fall vermieden werden, dass Benutzer höherer Radien die Bewertungen direkter Vorfahren beeinussen.
Die Verwendung des gewichteten arithmetischen Mittels bei der Inferenz von
Dokumentbewertungen kann in Zusammenspiel mit der von uns gewählten
Dämpfungsfunktion g(n) zu unerwarteten Ergebnissen führen. Dabei wird
für Dokumente, sofern die Benutzerbewertungen die in die Dokumentbewertungen eingehen allesamt von Benutzern der gleichen (oder allgemein zumindest naheliegenden) Radien stammen, die gleiche Bewertung generiert.
Dies folgt daraus, dass die Pfadlänge die Gewichtung lediglich im Hinblick zu
anderen Benutzern ändert. Dies würde sich durch die Einführung einer zweiten Bewertungsskala, der Bewertungsaussagekraft, vermeiden lassen, wovon
aber aufgrund der hohen zusätzlich entstehenden Komplexität im Verhältnis
zum Mehrwert für den Benutzer abgesehen wurde. Alternativ liese sich auch
eine subtraktive Dämpfung der Dokumentbewertungen mit zunehmendem
Abstand einführen.
Einen weiteren Diskussionspunkt stellt der vorgestellte Mechanismus zur
Auswahl des Kompetenzfeldes t dar, unter dem die Inferenz durchgeführt
wird. Dabei kann dieser unter gewissen Rahmenbedingungen kritisch sein.
Dies ist dann der Fall, wenn entweder zu einem Dokument d nur eine geringe Anzahl an Bewertungen vorliegt und somit die Menge ED entsprechend
gering ist, da die Wahrscheinlichkeit hier eine Inferenz unter einem darin
enthaltenen Tag t durchführen zu können ebenfalls gering ist.
Die Anforderung nach der Berücksichtigung verwandter Kompetenzfelder
(IN07) könnte den Inferenzmechanismus robuster machen, im Hinblick dar42
auf, dass sowohl für die eigentliche Bewertungsinferenz als auch die Wahl
eines geeigneten Kompetenzfeldes weniger Bewertungen benötigt würden.
Dies brächte vorallem in der Anfangsphase des Systems einen erheblichen
Mehrwert für die Benutzer. Allerdings sei hierbei auch auf Gefahren dieser Methode verwiesen. Zum einen würde eine weitere, maschinell schwer
quantizierbare Einuÿgröÿe die Akzeptanz beim Benutzern aufgrund der
zunehmenden Komplexität mindern. Zum anderen würde dies auch die Frage aufwerfen, in wie weit diese Klassikationsbeziehungen im Gegensatz zu
den anderen Einuÿgröÿen das Ergebnis beeinussen dürfen, so dass das
Endergebnis noch vertretbar ist.
4.4
Beziehungen zwischen Kompetenzfeldern
Dieser Abschnitt befasst sich mit der Repräsentation von Kompetenzfeldern
durch Tags sowie dem Aufbau einer Beziehungsstruktur. Dabei wird zuerst
die Verwendung von Tags als geeignete Darstellung begründet. Anschlieÿend
wird der Begri der Beziehungen zwischen Tags im Zusammenhang mit dem
hier zu entwickelnden System vorgestellt, einschlieÿlich der Vorstellung eines Verfahrens zur automatischen Generierung von Ähnlichkeitsbeziehungen
zwischen Tags. Weiterführende Konzepte, welche über den Rahmen dieser
Arbeit hinaus gehen, werden am Schluss dieses Abschnitts skizziert.
4.4.1
Repräsentation von Kompetenzfelder durch Tags
Die Abbildung von Kompetenzfeldern wird, wie bereits mehrfach erläutert,
in unserem System durch die Verwendung einzelner Wörter bzw. Phrasen,
sogenannter Tags, realisiert. Tags zeichnen sich dabei dadurch aus, dass sie
für Benutzer nicht vordeniert sind, sondern von ihnen frei gewählt werden
können. Obwohl sich dadurch Nachteile wie die Gefahr qualitativ minderwertiger6 oder gar schädlicher Tags ergeben, wird durch den Ansatz eine Reihe
von positiven Eekten erreicht, wie von (Se07) skizziert. Dazu zählt, dass
Tagsysteme sehr gut skalieren, die Einbeziehung der Benutzer deren Partizpationswillen steigert sowie der Pegeaufwand minimal gehalten wird oder
im optimalen Fall komplett wegfällt.
Generell sind wir der Meinung, dass die Vorteile der Verwendung von Tags
überwiegen, vorallem unter Berücksichtigung dass Nachteile wie qualitativ
minderwertiger Tags sich durch Anwendung wissenschaftlicher Forschungsresultate, wie von (Se07) skizziert, minimieren lassen.
6
Bei der in (Se07) erforschten Onlinecommunity wurden 21% der Tags als nicht anzeigewürdig eingestuft
43
4.4.2
Beziehungen zwischen Tags
Da sich Tags als Kompetenzfeldrepräsentation sowohl direkt auf die Benutzerals auch auf die Dokumentbewertungen beziehen, sowie bei der Suche nach
Dokumenten verwendet werden, sind sie für das zu realisierende System von
zentraler Bedeutung. In der Realität sind aber nicht alle Kompetenzfelder
bzw. Tags voneinander unabhängig, sondern es können vielfältige Beziehungen zwischen ihnen bestehen. Beispielsweise können Tags in hierarchischer Beziehung zueinander stehen. Weitere Beispiele sind die SynonymieBeziehung (Tags beziehen sich auf das selbe Konzept) oder die Ähnlichkeitsbeziehung (Tags beziehen sich auf ähnliche Konzepte).
Sowohl bei der Inferenz von Bewertungen als auch bei der Abfrage von Dokumenten können diese Beziehungen zwischen Tags vorteilhaft genutzt werden.
So kann durch sie die Inferenz auf verwandte Tags ausweitet werden, um für
eine gröÿere Menge von Zielobjekten Aussagen treen zu können. Dies führt
besonders im Anfangsstadium einer solchen Plattform mit anfangs wenigen
Bewertungen zu einer Vielzahl von Dokumenten im Internet zu besseren Resultaten. Ebenfalls könnte die Einbeziehung von Beziehungen zwischen Tags
die Anzahl der Suchergebnisse bei einer Dokumentsuche nach Tags erhöhen.
Dabei wählen wir für diese Arbeit den Ansatz der Folksonomy (Ma04), eine Wortneubildung aus Folk und Taxonomy. Im Gegensatz zu traditionellen
Ansätzen, die von einem verwalteten Vokubalar mit einer fest vorgegebenen Taxonomie ausgehen, nutzt dieser Ansatz die Möglichkeiten, Metadaten
durch die Community, genauer gesagt deren Annotation von Objekten mit
Tags, zu gewinnen, woraus dann bottom-up ein Beziehungsgeecht generiert
werden kann.
Nachfolgend soll zunächst gezeigt werden, wie sich auf Basis von mit Tags
annotierten Objekten ein Ähnlichkeitsgraph konstruieren lässt, aus dem sich
Ähnlichkeitsbeziehungen zwischen Tags ablesen lassen. Darauf aufbauend
wird das Verfahren von (HGM06) erläutert, welches aus dem Ähnlichkeitsgraphen eine hierarchische Folksonomie ableiten kann.
4.4.3
Berechnung der Ähnlichkeit zwischen Tags
Die folgenden Ausführungen basieren auf Ähnlichkeitsbeziehungen zwischen
Tags. Diese Ähnlichkeitsbeziehungen, wenngleich weniger aussagekräftig wie
beispielsweise hierarchische Beziehungen, unterliegen dem praktischen Vorteil, dass sie durch einfache Analyse automatisch generiert werden können.
Dabei wurden durch empirische Studien (HGM06) deren praktischer Nutzen
aufgezeigt.
44
Für unsere Generierung von Ähnlichkeitsbeziehungen gehen wir davon aus,
dass wir allgemein Objekte (o1 , o2 , . . . ∈ O) haben, die im vorliegenden Fall
Benutzer oder Dokumente sind. Diese werden von Benutzern (u1 , u2 , . . . ∈ U)
mit Tags (t1 , t2 . . . ∈ T) versehen.
Die Ähnlichkeitsbeziehungen zwischen Tags wird dabei durch einen ungerichteten Graphen G, den Ähnlichkeitsgraphen (engl. similarity graph ), dargestellt, wobei Tags dessen Knoten und Ähnlichkeitsbeziehungen zwischen
Tag-Paaren dessen Kanten darstellen. Dabei werden nur die Ähnlichkeitsbeziehungen zwischen Tags als Kanten in den Graph übernommen, deren
Ähnlichkeitsmaÿ über einem bestimmten Grenzwert, dem SimilarityThreshold thsimilarity , liegen.
Entscheidend für die Ermittlung der Ähnlichkeit ist somit die Wahl eines
geeigneten Maÿes. Dabei bietet sich das Kosinus-Ähnlichkeitsmaÿ (cosine
similarity ) an, welches häug zum Vergleich der Ähnlichkeiten von zwei Dokumenten verwendet wird (vgl. (SB87)). Dazu aggregieren wir unsere Tags
in Tag-Vektoren, wobei vtl [om ] angibt, wie oft das Objekt om mit dem Tag
tl versehen wurde. Das Kosinus-Ähnlichkeitsmaÿ zweier Vektoren A und B
ist deniert als7 :
Θ = arccos
A·B
|A| · |B|
(4.13)
Das Ergebnis ist der Winkel zwischen den beiden Vektoren im Bereich [0; π],
wobei der Winkel π2 ausdrückt, dass keinerlei Ähnlichkeit besteht. Umgekehrt bedeutet ein Winkel 0 respektive π maximale Ähnlichkeit (absolute
Gleichheit).
Require: similarity threshold thsimilarity ; function for cosine similarity calculation cosSim
V ← ∅; E ← ∅
f o r a l l t ∈ T do
V ← V ∩ {t}
f o r a l l u ∈ T \ {t} do
i f cosSim ( vt , vu ) ∈/ ]thsimilarity ; π − thsimilarity [
E ← E ∩ {( t , u)}
then
end i f
end f o r a l l
end f o r a l l
Listing 4.1: Algorithmus zur Generierung des Ähnlichkeitsgraphen
7
A · B stellt dabei das Skalarprodukt der Vektoren A und B dar
45
Abbildung 4.11: Generierung des Ähnlichkeitsgraphen auf Grundlage des
Kosinus Ähnlichkeitsmaÿes mit einem Grenzwert thsimilarity von 0.70.
Der in Listing 4.1 skizzierte Algorithmus generiert ausgehend von einer Funktion cosSim zur Berechnung des Kosinus-Ähnlichkeitsmaÿes nach 4.13 sowie
dem Ähnlichkeitsgrenzwert thsimilarity den Ähnlichkeitsgraph G(V, E). Die
Laufzeit liegt dabei in Θ(|T|2 ), wobei an dieser Stelle darauf hingewiesen sei,
dass dabei keinerlei Optimierungen angewendet wurden. Neben den Kanten kann der Algorithmus optional noch erweitert werden, um das Ergebnis
von cosSim noch als Ähnlichkeitskoezient gespeichert werden kann, wie im
Klassendiagramm in Abbildung 4.5 bereits angedeutet wurde.
Das Verfahren wird dabei in Abbildung 4.11 mit einem verwendeteten Grenzwert thsimilarity von 0.70 dargestellt. Die Werte der Ergebnisse der cosine
similarity sind dabei im linken Teil eingetragen, wobei die roten Kanten unter dem Grenzwert liegen und deshalb aus dem Ähnlichkeitsgraphen (rechts)
entfernt wurden.
4.4.4
Automatische Erstellung hierarchischer Beziehungen
Das im vorherigen Abschnitt dargestellte Verfahren lässt sich erweitern, um
auf Grundlage der Ähnlichkeit zwischen Tag-Paaren hierarische Beziehungen
zu generieren, wie in (HGM06) dargestellt.
Hierfür wird das graphentheoretische Konzept der Zentralität eines Knotens
(vertex centrality ) verwendet, welches ein Maÿ für die relative Bedeutung
eines Knoten in einem Graphen G(E, V ) darstellt.
Dabei gibt es verschiedene Denitionen von Zentralität. Der auf dem Grad
des Knotens basierende Zentralitätbegri (degree centrality ) gibt an, wieviele
Kanten zum Knoten inzidieren. Der Vorteil dieser Methode ist, dass diese
46
eine einfache und ezient Berechnung ermöglich, wobei die Laufzeit bei einer
geeigneten Repräsentation des Graphen in Θ(|E|) liegt.
Der bei der Netzwerkanalyse präferierte Begri der Zentralität bezieht sich
aber auf den durchschnittlichen Abstand eines Knotens zu allen anderen
Knoten, die sogennante closeness centrality. Dabei wird das arithmetische
Mittel aus der Distanz zwischen einem Knoten v und allen anderen Knoten
des Graphen V \ {v} berechnet:
P
c(v) =
t∈V \{v} dG (v, t)
n−1
(4.14)
Dabei bezeichnet n den von v erreichbaren Teilgraphen von G, so dass n =
|V | gilt, sofern der Graph zusammenhängend ist. Der Wert dG bezeichnet
die Distanz zwischen zwei Knoten im Graphen G. Je kleiner der Wert von
c(v) für einen Knoten v ∈ V ausfällt, desto höher dessen Zentralität.8
Der Algorithmus in Listing 4.2 zur Generierung eines hierarchischen Beziehungsgeechts erfordert eine Liste aller Tags t0 , . . . , tn ∈ T, sortiert nach
ihrer Zentralität. Zunächst wird der Graph G, der das Ergebnis in Form
eines hierarchischen Beziehungsbaums darstellt, mit einem Wurzel-Element
root und einer leeren Menge (∅) an Kanten initalisiert. Danach wird aus
der sortierten Liste der erste, d.h. der zentralste verbleibende Tag ausgelesen und mit allen anderen Knoten, die sich momentan in G benden,
verglichen. Dabei wird mit Hilfe der Funktion sinCos das ähnlichste Tag,
das sog. Kandidaten-Tag (maxCandidate), sowie dessen Ähnlichkeitsgrad
(maxCandidateVal) ermittelt. Dieser wird dann mit einem Grenzwert thtaxonomy 9
verglichen, der bestimmt, wann ein Tag dem Kandidaten-Tag oder direkt der
Wurzel untergeordnet wird.
Die Laufzeit des Algorithmus selber liegt in Θ(|T|2 ), allerdings ist die genaue Berechnung der Zentralität zeitaufwendig. Es gibt jedoch eziente Approximationen zur schnellen Berechnung der Zentralität, wie in (Br01) und
(EW01) beschrieben.
In diesem Zusammenhang muss aber auch darauf hingewiesen werden, dass
dieser Algorithmus einige Grundannahmen über die Beschaenheit der Tags
macht. Zum einen gehen (HGM06) davon aus, dass die hierarchischen Beziehungen bereits in den Kanten des Ähnlichkeitsgraphen (vgl. Abschnitt 4.4.3)
vorhanden sind. Andererseits existieren im Ähnlichkeitsgraphen Kanten, die
8
Hierbei sei darauf hingewiesen, dass in manchen Fällen auch der Kehrwert 1/c(v)
verwendet wird. Dies ist aber für die vorliegende Arbeit ausdrücklich nicht der Fall.
9
(HGM06) haben dabei gute Ergebnisse mit einem thtaxonomy Grenzwert von 0.099,
weshalb dieser an der Stelle empfohlen werden soll.
47
G ← h r o o t , ∅i
for i = 1 . . . | Lcentrality | do
ti ← Lcentrality [i]
maxCandidateVal ← 0
f o r a l l tj ∈ g e t V e r t i c e s ( G ) do
i f cosSim ( ti , tj ) > maxCandidateVal
maxCandidateVal ← s ( ti , tj )
maxCandidate ← tj
end i f
end f o r a l l
i f maxCandidateVal
> thtaxonomy
G ← G ∪ hmaxCandidate, ti i
else
G ← G ∪ hroot, ti i
then
then
end i f
end f o r a l l
Listing 4.2: Algorithmus zur automatischen Generierung eines hierarchischen
Beziehungsbaums
Abbildung 4.12: Generierung eines hierarchischen Beziehungsbaums (rechts)
aus dem Ähnlichkeitsgraphen (links).
48
keine Bedeutung in der zugrundeliegenden Hierarchie haben. Diese werden
als Störkanten (noisy connections ) bezeichnet wird. Ohne diese Annahmen
wäre allerdings keine Hierarchiebildung auf Basis des Ähnlichkeitsgraphen
möglich, und die Resulte in der Praxis scheinen diese Methode zu bestätigen
(HGM06).
Eine Anwendung des Verfahrens wird in Abbildung 4.12 dargestellt. Dabei ist
links der Ähnlichkeitsgraph als Ausgangspunkt abgebildet, woraus der rechts
dargestellte Beziehungsbaum erstellt wird. Dabei sieht man, wie die zentralen
Knoten in der Hierarchie höher eingeordnet werden sowie die Störkanten
(noisy edges ) wegfallen.
4.4.5
Diskussion und weiterführende Konzepte
Auch wenn der im vorherigen Absatz beschriebene Ansatz sehr vielversprechend aussehen mag, so muss an dieser Stelle auf einige mit ihm verbundene
Probleme eingegangen werden. Zwar wurden die Ergebnisse bei groÿen Webseiten bestätigt, allerdings sind dabei gewisse Kennzahlen zu beachten. Dazu
zählt neben der Dichte (engl. density ),
Annotierte Objekte
Objekte
(4.15)
die beschreibt wie häug Benutzer Objekte mit Tags annotieren, sowie die
Überlappung (engl. overlap ),
Gemeinsam annotierte Objekte
Annotierte Objekte
(4.16)
die beschreibt wie häug Benutzer Objekte annotieren, die bereits von anderen annotiert wurden.
Dabei haben die Ergebnisse aus der Praxis gezeigt (HGM06), dass die automatische Generierung hierarchischer Beziehungen auf Grundlage des Ähnlichkeitsgraphes stark von einer hohen Dichte und einer hohen Überlappung
protiert. Da eine Bewertung eines Dokuments immer auch eine Annotation einschlieÿt, sollte der Wert für die Dichte nicht zu niedrig ausfallen10 .
Aufgrund der Tatsache, dass es eine praktisch unbegrenzte Anzahl an Dokumenten im Internet gibt, könnte jedoch für den Groÿteil der bewerteten
Dokumente die Überlappung äuÿerst niedrig sein.
10
Zumindest aber ist die Dichte zu jeder Zeit ≥ 1.0, da eine Bewertung immer auch eine
Annotation einschlieÿt
49
Vorallem in der Anfangsphase des Kompetenznetzes könnte aufgrund der
geringen Anwendbarkeit der vorgestellten Methode für eingeschränkte Nutzbarkeit sorgen. Angesichts dieser Tatsache sollte man überlegen, ob nicht
die Beschränkung auf den Ähnlichkeitsgraphen gewählt werden sollte, oder
sogar (zumindest anfangs) auf die Verwendung von benutzerdenierten Tags
zugunsten eines vorgegebenen, von Experten gepegtem Vokabular, dem sog.
library Ansatz, verzichtet werden sollte. Die Vorteile der Verbesserungen von
Ergebnissen bei geringer Anzahl von Benutzern, einer einheitlichen (und optimalerweise fehlerfreien), Hierarchie sowie geringem Rechenaufwand würden
jedoch einige Nachteile gegenüberstehen. So skalieren diese Expertensysteme
schlecht mit der Anzahl der Benutzer. Darüber hinaus hemmt das vordenierte Vokabular die Partizipation der Mitglieder, was dem Wachstum der
Community ebenfalls entgegenwirken kann.
Deshalb empfehlen wir trotz bekannter Schwächen die Verwendung von Tags,
da unserer Meinung nach deren Vorteile überwiegen. In diesem Zusammenhang sollte auch auf das Problem von qualitativ minderwertigen Tags wie
Spam, Beleidigungen, etc. eingegangen werden. Dabei lässt sich dieses Problem durch eine Erweiterung der von uns vorgestellten Ansätze verringern,
wie von (Se07) beschrieben. Dabei werden dem Benutzer die Möglichkeit gegeben, Tags als positiv oder negativ (mit Hilfe kleiner Icons) zu bewerten.
Durch die Auswertung dieser Daten wird dann ermöglicht, zu entscheiden,
welche Tags qualitativ hochwertiger sind.
50
Kapitel 5
Implementierung
Die prototypische Implementierung der Kooperationsplattform soll deren
Machbarkeit in der Praxis aufzeigen. Dazu wurden wichtige Lösungsbestandteile mittels der objektorientierten Programmiersprache Java realisiert. Zunächst wird dabei auf die Realisierung des Algorithmus' zur Inferenz von
Bewertungen eingegangen. Anschlieÿend wird die Implementierung der automatischen Erstellung der Ähnlichkeitsbeziehung für Kompetenzfelder erläutert. Das Kapitel schlieÿt mit einer kurzen Erläuterung, wie die Benutzerschnittstelle mittels der Plattform Toro realisiert werden kann.
Das Vorgehen bei der Implementierung des Inferenzalgorithmus und der automatischen Beziehungserstellung ist ähnlich. Zunächst werden die verwendeten Datenstrukturen vorgestellt und deren Implementierung in Java skizziert. Darauf aufbauend wird die Implementierung der Algorithmen anhand
des Quelltextes erläutert.
Die Realisierung der Benutzerschnittstelle mittels der Plattform hebt sich
von den anderen Abschnitten insofern ab, als dass hier nicht genauer auf
einzelne Implementierungsdetails eingeht, sondern vielmehr versucht, einen
Überblick über die Implementierung der Benutzerschnittstelle mittels der
Plattform Toro zu geben. Eine genauere Abhandlung zu diesem Thema würde den Rahmen dieser Arbeit sprengen.
5.1
Entwurf und Implementierung des Inferenzalgorithmus
Ziel der Inferenz ist es, aus den im System vorhandenen Benutzer- und Dokumentbewertungen Aussagen für nicht eigens bewertete Dokumente zu ge51
winnen. Dazu haben wir in Abschnitt 4.3 Grundannahmen an einen solchen
Algorithmus formuliert und diese anschlieÿend in einem Kalkül formalisiert.
Darauf aufbauend werden nun geeignete Datenstrukturen gewählt, anhand
derer der Kalkül in einem Algorithmus umgesetzt wird.
5.1.1
Verwendete Datenstrukturen
Bei dem von uns vorgestellten Verfahren operieren wir auf einem Graphen,
wobei es allerdings zwei Arten von Knoten, Benutzerknoten und Dokumentknoten, gibt. Wir verzichten an dieser Stelle auf die expliziete Repräsentation
des vollständigen Graphen. Dieser wäre lediglich für dessen Darstellung erforderlich, für die eigentliche Inferenz reichen lokale Knoten jedoch aus. Dabei
muss angemerkt werden, dass für eine Berechnung der Benutzerbewertungen dessen direkte Vorgänger bekannt sein müssen, weshalb eine implizite
Speicherung der Kanten des Benutzergraphen erzwungen wird.
Die Benutzerknoten werden als eigene Klasse UserNode implementiert, die als
wesentliche Bestandteile neben dem Benutzer, auf den sie sich beziehen, eine Liste mit Vorgängern enthält, die ebenfalls Objekte der Klasse UserNote
sind, bei denen aber zusätzlich eine Benutzerbewertung (userRating) und eine
Kantenbewertung (edgeRating) angegeben werden müssen. Neben Methoden
zum Hinzufügen eines Vorgängers oder Abrufen der Liste alle Vorgänger
überschreibt die Klasse die Methode equals, die wahr ist, wenn die beiden
Benutzer, auf die sich das UserNote Objekt bezieht, identisch sind. Die Implementierung zeigt Listing 5.1.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public c l a s s UserNode {
private User u ;
public double u s e r R a t i n g ;
public double ed ge Ra ti ng ;
// r e c u r s i v e d e f i n i t i o n o f p r e d e c e s s o r s
private L i s t <UserNode> pred ;
public UserNode ( User u ) {
this . u = u ;
this . pred = new A r r a y L i s t <UserNode >() ;
}
public void a d d P r e d e s s e c o r ( User u , double predRating , double
15
16
17
18
19
}
userRating ) {
UserNode un = new UserNode ( u ) ;
un . u s e r R a t i n g = p redR ati ng ;
un . edg eR at in g = u s e r R a t i n g ;
this . pred . add ( un ) ;
52
20
public L i s t <UserNode> g e t A l l P r e d e s s e c o r s ( ) {
return pred ;
21
22
}
23
24
public User g e t U s e r ( ) {
return this . u ;
25
26
}
27
28
public boolean e q u a l s ( Object o ) {
i f ( o instanceof UserNode ) {
return ( ( UserNode ) o ) . g e t U s e r ( ) . e q u a l s ( this . g e t U s e r ( ) ) ;
29
30
31
}
32
33
34
35
}
}
return f a l s e ;
Listing 5.1: Datenstruktur zur Repräsentation von Benutzerknoten
Die Klasse DocumentNode repräsentiert Dokumentbewertungen. Attribute sind
der bewertungsabgebende Benutzer, dessen Abstand zum Startbenutzer und
seine Benutzerbewertung sowie die abgegebene Dokumentbewewertung. Listing 5.2 zeigt deren Implementierung.
1
public c l a s s DocumentNode {
User u s e r ;
2
double u s e r R a t i n g ;
double docRating ;
int r a d i u s ;
3
4
5
6
public DocumentNode ( User u , double ur , double dr , int r ) {
this . u s e r = u ;
this . u s e r R a t i n g = ur ;
this . docRating = dr ;
this . r a d i u s = r ;
7
8
9
10
11
12
13
}
}
Listing 5.2: Datenstruktur zur Repräsentation von Dokumentknoten
5.1.2
Implementierung in Java
Die Implementierung der Bewertungsinferenz orientiert sich eng an dem in
Abschnitt 4.3 vorgestellten Kalkül. Listing 5.3 zeigt, wie dieser implementiert
wurde.
1
public c l a s s CompetenceDeductionStrategy implements
DeductionStrategy {
2
53
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
private f i n a l int MAX_RADIUS = 6 ;
private Tag t a g ;
public double g e t R a t i n g ( User u , Document d , Tag t ) {
// g e t d e f a u l t competence f i e l d i f none s p e c i f i e d
this . t a g = ( t == null ) ? this . g e t D e f a u l t C o m p e t e n c e F i e l d ( u , d
) : t;
// check f o r d i r e c t document r a t i n g
i f ( u . getDocuments ( ) . c o n t a i n s ( d ) ) {
for ( DocumentRating r : d . g e t R a t i n g s ( ) )
{
i f ( r . g e t U s e r ( ) . e q u a l s ( u ) && r . getTag ( ) . e q u a l s ( this . t a g ) )
return r . g e t R a t i n g ( ) ;
}
}
// b r e a d t h f i r s t s e a r c h on u s e r s
L i s t <UserNode> curQueue = new A r r a y L i s t <UserNode >() ;
L i s t <UserNode> u s e r V i s i t e d = new A r r a y L i s t <UserNode >() ;
L i s t <DocumentNode> docNotes = new A r r a y L i s t <DocumentNode >() ;
curQueue . add ( new UserNode ( u ) ) ;
for ( int n = 0 ; n < MAX_RADIUS; n++) {
L i s t <UserNode> nextQueue = new A r r a y L i s t <UserNode >() ;
for ( UserNode curNote : curQueue ) {
// i g n o r e a l r e a d y expanded nodes ( IN05 )
i f ( u s e r V i s i t e d . c o n t a i n s ( curNote ) )
continue ;
double r_user = curNote . g e t U s e r ( ) . e q u a l s ( u ) ? 5 . 0 :
d e d u c t U s e r R a t i n g ( curNote ) ;
L i s t <Document> user_docs = curNote . g e t U s e r ( ) .
getDocuments ( ) ;
// e x t r a c t document r a t i n g s from u s e r graph
i f ( user_docs . c o n t a i n s ( d ) ) {
for ( DocumentRating dr : user_docs . g e t ( user_docs .
indexOf ( d ) ) . g e t R a t i n g s ( ) ) {
i f ( dr . g e t U s e r ( ) . e q u a l s ( curNote . g e t U s e r ( ) ) && dr .
getTag ( ) . e q u a l s ( this . t a g ) ) {
docNotes . add ( new DocumentNode ( curNote . g e t U s e r ( ) ,
r_user , dr . g e t R a t i n g ( ) , n ) ) ;
}
}
}
for ( UserRating r : curNote . g e t U s e r ( ) . g e t U s e r R a t i n g s ( ) ) {
// add c u r r e n t node a s p r e d e c e s s o r s f o r s u b s e q u e n t
nodes
i f ( r . getTag ( ) . e q u a l s ( this . t a g ) ) {
UserNode n o t e = new UserNode ( r . g e t U s e r _ r a t e d ( ) ) ;
int i = nextQueue . indexOf ( n o t e ) ;
i f ( i >= 0 ) {
n o t e = nextQueue . g e t ( i ) ;
n o t e . a d d P r e d e s s e c o r ( curNote . g e t U s e r ( ) , r_user , r .
54
getRating () ) ;
} else {
n o t e . a d d P r e d e s s e c o r ( curNote . g e t U s e r ( ) , r_user , r .
getRating () ) ;
nextQueue . add ( n o t e ) ;
}
50
51
52
53
}
}
u s e r V i s i t e d . add ( curNote ) ;
54
55
56
}
curQueue = nextQueue ;
57
58
59
60
61
62
63
64
}
private double d e d u c t U s e r R a t i n g ( UserNode u ) {
L i s t <UserNode> pred = u . g e t A l l P r e d e s s e c o r s ( ) ;
65
double r = 0 . 0 ;
for ( UserNode p : pred ) {
66
67
68
}
69
70
71
72
73
74
75
}
// r e t u r n ( round ) i n f e r r e d r a t i n g based on e x t r a c t e d
document nodes
return r ( deductDocumentRating ( docNotes ) ) ;
}
return ( r / 2 ∗ pred . s i z e ( ) ) ;
private double deductDocumentRating ( L i s t <DocumentNode> dn ) {
double n = 0 . 0 , d = 0 . 0 ;
for ( DocumentNode doc : dn ) {
76
77
}
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
r += p . u s e r R a t i n g + p . e dge Ra ti ng ;
}
n += ( g ( doc . r a d i u s ) ∗ doc . u s e r R a t i n g ∗ doc . docRating ) ;
d += ( g ( doc . r a d i u s ) ∗ doc . u s e r R a t i n g ) ;
return ( n/d ) ;
private double g ( int n ) {
i f ( 1 <= n && n <= 5 )
return ( 2 / Math . pow ( 2 . 0 , n ) ) ;
return 0 . 0 ;
}
private int r ( double r ) {
return ( int ) Math . round ( r ) ;
}
private Tag g e t D e f a u l t C o m p e t e n c e F i e l d ( User u , Document d ) {
Map<Tag , I n t e g e r > c = new HashMap<Tag , I n t e g e r >() ;
int max = 0 , v a l u e = 0 ;
Tag t_max = null ;
for ( DocumentRating dr : d . g e t R a t i n g s ( ) ) {
i f ( c . c o n t a i n s K e y ( dr . getTag ( ) ) ) {
v a l u e = c . g e t ( dr . getTag ( ) ) + 1 ;
} else {
value = 1;
55
101
102
103
104
105
106
}
107
108
}
109
110
112
113
return t_max ;
public Tag getTag ( ) {
return this . t a g ;
111
114
}
c . put ( dr . getTag ( ) , v a l u e ) ;
i f ( v a l u e > max) {
max = v a l u e ;
t_max = dr . getTag ( ) ;
}
}
}
Listing 5.3: Implementierung des Algorthmus zur Bewertungsinferenz
Die Hauptmethode des Algorithmus stellt dabei getRating dar, welche als
Parameter den Ausgangsbenutzer u, das abgefragte Dokument d sowie das
Kompetenzfeld t, welches optional vom Algorthmus (Z. 9) gewählt werden
kann, bekommt. Dazu wird zunächst (Z. 11-18) geprüft, ob eine unmittelbare
Dokumentbewertung für den Ausgangsbenutzer vorliegt und diese gegebenenfalls zurückgegeben.
Sollte keine direkte Bewertung verfügbar sein muss eine Bewertung inferiert
werden. Dazu starten wir eine Breitensuche1 (Z. 20), die bis zu einem denierten maximalen Radius MAX_RADIUS unserer Sphäre (vgl. Abschnitt 4.3)
arbeitet.
Dabei wird während jeder Iteration zunächst die Benutzerbewertung für den
gerade betrachteten Benutzer curUser mittels der Methode deductUserRating
(vgl. Z. 64) nach Formel 4.10 inferiert (Z. 32). Danach wird überprüft, ob
dieser Benutzer für das gesuchte Dokument d eine Bewertung abgegeben hat
(Z. 35-41). Ist dies der Fall, so wird diese zusammen mit dem bewerteten
Benutzer, der inferierten Benutzerbewertung und dem aktuellen Abstand in
einem DocumentNode Objekt gespeichert (Z. 38). Zum Ende jeder Iteration
(Z. 42-55) werden die Nachfolger des Benutzers durch UserNode Objekte repräsentiert, wobei der aktuelle Benutzerknoten als Vorgänger hinzugefügt
wird.
Mittels
der ermittelten DocumentNode Objekte und der Methode
deductDocumentRating (Z. 73), die die Formel 4.12 implementiert, wird die
inferierte Dokumentbewertung zurückgeliefert.
1
Wie beispielsweise in (Co01) erläutert.
56
5.2
Implementierung der automatischen Beziehungsgenerierung zwischen Tags
Ein weiterer wichtiger Lösungsbestandteil der Implementierung stellt die automatische Generierung eines Beziehungsgeechts zwischen Tags dar. Dabei
soll, wie in Abschnitt 4.4.3 beschrieben, aus den im System vorhandenen
Tags mithilfe des Algorithmus 4.1 ein Ähnlichkeitsgraph erstellt werden, in
dem Ähnlichkeitsbeziehungen zwischen Paaren von Tags ablesbar sind.
Dazu werden zunächst die dafür verwendeten Datenstrukturen mitsamt ihrer Implementierung vorgestellt. Anschlieÿend wird auf diesen der gerade
erwähnte Algorthmus mittels Java realisiert.
5.2.1
Verwendete Datenstrukturen
Zu Repräsentation des Ähnlichkeitsgraphen verwenden wir eine Datenstruktur für einen Graph, der über eine Art objektorientierte Implementierung
der Adjazenzlisten nach (St07) darstellt.
Dazu denieren wir zunächst eine Klasse Vertex, die Knoten unseres Graphen darstellt. Dieser Knoten hat dabei eine Liste adjacencyList, welche zu
ihm benachbarte Knoten beinhaltet. Neben den trivialen Operationen wie
Hinzufügen von Nachbarknoten oder Abrufen dieser überschreiben wir die
Methode equals der Basisklasse Object, die unsere Knoten zueinander vergleichbar machen soll, wobei zwei Knoten identisch sind, sofern sie gleiche
Namen haben. Listing 5.4 zeigt die Implementierung:
1
2
3
4
5
6
7
8
9
public c l a s s Vertex {
private S t r i n g name = "" ;
// L i s t o f d i r e c t n e i g h b o r s r e a c h a b l e from t h i s v e r t e x
private L i s t <Vertex> a d j a c e n c y L i s t = new A r r a y L i s t <Vertex >() ;
public boolean e q u a l s ( Object o b j ) {
i f ( o b j instanceof Vertex ) {
return ( ( Vertex ) o b j ) . name . e q u a l s ( this . name ) ;
}
10
11
12
13
14
15
16
17
18
}
return f a l s e ;
public S t r i n g getName ( ) {
return name ;
}
public void setName ( S t r i n g name ) {
57
19
}
20
21
public void addAdjacentVertex ( Vertex v ) {
22
23
}
24
25
27
29
a d j a c e n c y L i s t . add ( v ) ;
public L i s t <Vertex> g e t A d j a c e n t V e r t i c e s ( ) {
return a d j a c e n c y L i s t ;
26
28
this . name = name ;
}
}
Listing 5.4: Datenstruktur
Ähnlichkeitsgraphen
zur
Repräsentation
von
Knoten
des
Der Ähnlichkeitsgraph wird mittels der Klasse Graph repräsentiert, der die
erwartete Funktionalität in Form von Hinzufügen und Abrufen von Knoten
und Kanten bereitstellt. Das Entfernen von Knoten oder Kanten wurde nicht
berücksichtigt, da es in unserem Algorithmus nicht verwendet wird. Listing
5.5 zeigt die Implementierung:
1
2
3
public c l a s s Graph {
private boolean d i r e c t e d = f a l s e ;
private Set<Vertex> V = new HashSet<Vertex >() ;
4
5
6
7
8
9
public Vertex g e t V e r t e x ( S t r i n g name ) {
for ( Vertex v : this .V) {
i f ( v . getName ( ) . e q u a l s ( name ) ) {
return v ;
10
}
11
12
13
14
15
}
17
18
19
20
21
23
24
25
}
27
28
30
Vertex v = g e t V e r t e x ( name ) ;
i f ( v == null ) {
v = new Vertex ( ) ;
v . setName ( name ) ;
}
V. add ( v ) ;
return v ;
public void addEdge ( Vertex a , Vertex b ) {
26
29
return null ;
public Vertex addVertex ( S t r i n g name ) {
16
22
}
}
a . addAdjacentVertex ( b ) ;
if (! directed ) {
b . addAdjacentVertex ( a ) ;
}
58
31
public L i s t <Vertex> g e t A d j a c e n t V e r t i c e s ( Vertex v ) {
return v . g e t A d j a c e n t V e r t i c e s ( ) ;
32
33
}
34
35
public boolean i s D i r e c t e d ( ) {
return d i r e c t e d ;
36
37
}
38
39
public void s e t D i r e c t e d ( boolean d i r e c t e d ) {
this . d i r e c t e d = d i r e c t e d ;
40
41
42
43
}
}
Listing 5.5: Datenstruktur zur Repräsentation des Ähnlichkeitsgraphen
5.2.2
Implementierung in Java
Die im vorangegangenen Abschnitt vorgestellten Datenstrukturen stellen zusammen mit dem in Abschnitt 4.4.3 vorgestellten Algorithmus zur Konstruktion des Ähnlichkeitsgraphen die Grundlage für dessen Implementierung dar.
Listing 5.6 zeigt dessen Realisierung:
1
2
3
4
5
6
7
8
9
10
11
public c l a s s S i m i l a r i t y S t r a t e g y implements
TagRelationshipStrategy {
private Graph s i m i l a r i t y G r a p h = new Graph ( ) ;
private double t h _ s i m i l a r i t y = 0 . 8 ;
public S i m i l a r i t y S t r a t e g y ( ) {
}
public S i m i l a r i t y R e l a t i o n s h i p [ ] g e t R e l a t e d T a g s ( Tag t ) {
L i s t <S i m i l a r i t y R e l a t i o n s h i p > t r s = new A r r a y L i s t <
12
13
14
15
16
17
18
19
20
21
s i m i l a r i t y G r a p h . s e t D i r e c t e d ( true ) ;
}
S i m i l a r i t y R e l a t i o n s h i p >() ;
buildSimiliartyGraph () ;
for ( Vertex v : s i m i l a r i t y G r a p h . g e t A d j a c e n t V e r t i c e s (
s i m i l a r i t y G r a p h . g e t V e r t e x ( t . getTag ( ) ) ) ) {
t r s . add ( new S i m i l a r i t y R e l a t i o n s h i p ( t , Tag . getTag ( v . getName
() ) , 0.0) ) ;
}
S i m i l a r i t y R e l a t i o n s h i p [ ] t r s _ a r r a y = new
SimilarityRelationship [ trs . size () ] ;
t r s . toArray ( t r s _ a r r a y ) ;
return t r s _ a r r a y ;
private void b u i l d S i m i l i a r t y G r a p h ( ) {
59
L i s t <Tag> t a g s = Tag . g e t A l l T a g s ( ) ;
22
for ( Tag t : t a g s ) {
23
24
25
26
27
28
29
30
31
32
33
}
34
35
}
private L i s t <I n t e g e r > b u i l d T a g V e c t o r ( Tag a ) {
L i s t <I n t e g e r > v_a = new A r r a y L i s t <I n t e g e r >() ;
for ( Document d : Document . getAllDocuments ( ) ) {
int count = 0 ;
for ( DocumentRating r : d . g e t R a t i n g s ( ) ) {
i f ( r . getTag ( ) . e q u a l s ( a ) ) {
36
37
38
39
40
41
42
}
43
44
45
}
46
47
}
48
49
}
v_a . add ( new I n t e g e r ( count ) ) ;
return v_a ;
I t e r a t o r <I n t e g e r > i_A = A. i t e r a t o r ( ) ;
I t e r a t o r <I n t e g e r > i_B = B . i t e r a t o r ( ) ;
while ( i_A . hasNext ( ) ) {
double a = i_A . next ( ) . doubleValue ( ) ;
double b = i_B . next ( ) . doubleValue ( ) ;
sumA += a ∗ a ;
sumB += b ∗ b ;
AB += a ∗ b ;
}
double magnA = Math . s q r t (sumA) ;
double magnB = Math . s q r t (sumB) ;
52
53
54
55
56
57
58
59
60
61
62
63
64
66
count++;
private double cosSim ( L i s t <I n t e g e r > A, L i s t <I n t e g e r > B) {
double AB = 0 . 0 , sumA = 0 . 0 , sumB = 0 . 0 ;
50
51
65
Vertex v = s i m i l a r i t y G r a p h . addVertex ( t . getTag ( ) ) ;
for ( Tag u : t a g s ) {
double cosSim = cosSim ( b u i l d T a g V e c t o r ( t ) , b u i l d T a g V e c t o r
(u) ) ;
i f ( ! t . e q u a l s ( u ) && ( cosSim <= t h _ s i m i l a r i t y | | cosSim
>= Math . PI − t h _ s i m i l a r i t y ) ) {
Vertex s = s i m i l a r i t y G r a p h . addVertex ( u . getTag ( ) ) ;
// Add edge ( t , u ) t o graph
s i m i l a r i t y G r a p h . addEdge ( v , s ) ;
}
}
}
}
return Math . a c o s (AB / (magnA ∗ magnB) ) ;
Listing 5.6: Datenstruktur zur Repräsentation von Dokumentknoten
Die Methode getRelatedTags (Z. 10) stellt den Einsprungspunkt für die Generierung des Beziehungsgeechts dar, die durch das Interface TagRelationshipStrategy
festgelegt ist.
60
Darin wird zunächst der Ähnlichkeitsgraph mittels der Methode buildSimilarityGraph
(Z. 21) konstruiert. Dabei wird über alle vorhandene Tags iteriert (Z. 23)
und jeweils dem Graphen, sofern noch nicht vorhanden, hinzugefügt (Z. 24).
Anschlieÿend wird in einer inneren Schleife (Z. 25) wieder über alle Tags
iteriert, um aus diesen Tag-Vektoren (Z. 26) zu konstruieren und anschlieÿend deren Ähnlichkeit mittels dem Kosinus-Ähnlichkeitsmaÿes (Z. 26-27) zu
vergleichen. Sollte dabei das Ähnlichkeitsmaÿ in einem Bereich, der durch
th_similarity deniert wird, liegen, so wird das Tag der inneren Schleife (sofern noch nicht vorhanden) (Z. 28) sowie eine Kante zwischen diesem Tag
und dem der äuÿeren Schleife (Z. 30) dem Graphen hinzugefügt.
5.3
Implementierung der Benutzerschnittstelle als
Webanwendung
Zur Realisierung der Benutzerschnittstelle als Webanwendung verwenden
wir, wie in NR04 Technologische Basis (vgl. Abschnitt 3.2) beschrieben,
Java Enterprise Edition (Java EE) Technologie. Dabei richten wir uns nach
dem Model/View/Controller (MVC) Architekturmuster (KP88). Die Datenbasis, also das Model, wird durch objektrelationales Mapping mittels Entity
Beans implementiert, und die Präsentation (View ) durch Java Server Pages
realisiert. Die Verbindung zwischen diesen beiden Teilen (Controller ) wird
mittels Servlets realisiert.
Um einen Überblick über die Realisierung als Webanwendung zu bekommen, soll nachfolgend der Anwendungsfall UC06 Dokumentbewertung abfragen beispielhaft für die Anwendungsfälle der Kooperationsplattform vorgestellt werden. Ausgangspunkt ist dabei die in Abbildung 5.1 dargestellte
HTML-Benutzerschnittstelle, bei der ein (angemeldeter) Benutzer neben der
obligatorischen Angabe des abzufragenden Dokuments (URL) auch optional
ein Kompetenzfeld in Form eines Tags in einem Formular eingibt.
Beim Abschicken dieser Anfrage wird auf dem Web- und Anwendungsserver
ein unter der Zieladresse des Formulars registriertes Servlet, im vorliegenden
Fall QueryRatingServlet, aufgerufen. Da die Daten an den Webserver per
POST Methode des HTTP Protokolls (BLFF) übertragen werden, muss die
Methode doPost der Basisklasse HttpServlet überschrieben werden. Darin
werden zunächst Validierungen auf den Eingabedaten durchgeführt. Sollten
dabei Fehler auftreten wird die Anfrage mit einer Fehlermeldung an das Formular mittels RequestDispatcher Objekt zurückgeleitet. Ansonsten wird
mit Hilfe des in Abschnitt 5.1 erläuterten Inferenzalgorithmus eine Bewertung für das angefragte Dokument ermittelt und an eine Java Server Page
zur Anzeige der Resultate weitergeleitet. Listing 5.7 zeigt die Implementie61
Abbildung 5.1: Benutzerschnittstelle zur Abfrage von Dokumentbewewertungen
62
rung des Servlets:
1
2
3
4
5
6
public c l a s s Q u e r y R a t i n g S e r v l e t extends H t t p S e r v l e t {
@PersistenceContext
private EntityManager em ;
protected void doPost ( H t t p S e r v l e t R e q u e s t req ,
HttpServletResponse resp )
throws S e r v l e t E x c e p t i o n , IOException {
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
L i s t <S t r i n g > f a u l t s = new A r r a y L i s t <S t r i n g >() ;
L i s t <S t r i n g > w a r n i n g s = new A r r a y L i s t <S t r i n g >() ;
User u = User . g e t U s e r ( UserManager . g e t I n s t a n c e ( ) .
getCurrentUserName ( r e q ) ) ;
i f ( u == null ) {
f a u l t s . add ( new S t r i n g ( " P o l l i n g document r a t i n g s r e q u i r e s
logon " ) ) ;
}
Document d = Document . getDocument ( ( S t r i n g ) r e q . getP arameter (
" url ") ) ;
i f ( d == null ) {
f a u l t s . add ( new S t r i n g ( "The r e q u e s t e d document has not been
rated yet " ) ) ;
}
Tag t = Tag . getTag ( ( S t r i n g ) r e q . getPara meter ( " t a g " ) ) ;
i f ( t == null && ! ( r e q . getParamete r ( " t a g " ) . e q u a l s ( "" ) ) ) {
// u s e r e x p l i c i t l y s t a t e d d e s i r e d t a g s , but no r a t i n g s
exist
w a r n i n g s . add ( new S t r i n g ( "No r a t i n g s f o r t h e d e s i r e d t a g
a v a i l a b l e . Most p o p u l a r t a g used i n s t e a d . " ) ) ;
}
i f ( f a u l t s . s i z e ( ) > 0) {
29
30
31
32
33
34
35
36
37
38
39
40
}
req . setAttribute ( " f a u l t s " , f a u l t s ) ;
r e q . g e t R e q u e s t D i s p a t c h e r ( " q u e r y _ r a t i n g . j s p " ) . f o r w a r d ( req ,
resp ) ;
// i n f e r document r a t i n g u s i n g t h e
CompetenceDeductionStrategy
D e d u c t i o n S t r a t e g y ds = new CompetenceDeductionStrategy ( ) ;
Document . s e t D e d u c t i o n S t r a t e g y ( ds ) ;
double r = d . g e t R a t i n g ( u , d , t ) ;
Set<Document> r e s u l t = new HashSet<Document >() ; r e s u l t . add ( d
);
Map<Document , Double> r a t i n g s = new HashMap<Document , Double
>() ; r a t i n g s . put ( d , r ) ;
Map<Document , Tag> t a g s = new HashMap<Document , Tag>() ; t a g s
63
. put ( d , ( ( CompetenceDeductionStrategy ) ds ) . getTag ( ) ) ;
41
42
43
44
45
46
47
48
49
}
}
// s e t a t t r i b u t e s and f o r w a r d t o s p e c i f i e d j s p
req . setAttribute ( " r e s u l t " , r e s u l t ) ;
req . setAttribute ( " r a t i n g s " , r a t i n g s ) ;
req . setAttribute ( " tags " , tags ) ;
req . s e t A t t r i b u t e ( " warnings " , warnings ) ;
r e q . g e t R e q u e s t D i s p a t c h e r ( " document_result . j s p " ) . f o r w a r d ( req ,
resp ) ;
Listing 5.7: Die Implementierung der Anfragebearbeitung in einem Servlet
Die Anzeige der Ergebnisse erfolgt wie erwähnt mittels der Java Server Pages. Diese bestehen im Grunde aus HTML-Markup, in dem Java Code eingebettet werden kann. Die Implementierung der in Abbildung 5.2 dargestellten
Ausgabe der Abfrageergebnisse zeigt Listing 5.8:
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
<%@ page import=" de . tum . s e b i s . competenceWeb . e n t i t i e s . ∗ " %>
<%@ page import=" j a v a . u t i l . ∗ " %>
<%
Set<Document> r e s u l t = ( S e t<Document>) r e q u e s t . g e t A t t r i b u t e ( "
result ") ;
Map<Document , Double> r a t i n g s = (Map<Document , Double>)
request . getAttribute (" ratings ") ;
Map<Document , Tag> t a g s = (Map<Document , Tag>) r e q u e s t .
getAttribute (" tags ") ;
boolean a = true ;
%>
<html>
<head>
< t i t l e >CompetenceWeb</ t i t l e >
<meta http −e q u i v=" c o n t e n t −type " content=" t e x t / html ; c h a r s e t=
i s o −8859 −1" />
< link r e l =" s t y l e s h e e t " type=" t e x t / c s s " href="main . c s s ">
</ head>
<body>
< !−− HEADER −−>
<%@ i n c l u d e f i l e =" h e a d e r . j s p f " %>
< !−− CONTENT −−>
<table c l a s s=" content_frame " align=" c e n t e r " style=" h e i g h t : 600
px ; ">< tr><td>
<div style=" c l e a r : both ; v e r t i c a l − a l i g n : top ; ">
<h1>S e a r c h R e s u l t s</ h1>
<%
// P r i n t w a r n i n g s i f p r e s e n t
i f ( r e q u e s t . g e t A t t r i b u t e ( " w a r n i n g s " ) != null ) {
64
out . p r i n t ( "<t a b l e width=\"90%\" c e l l p a d d i n g =\" 5\ " a l i g n
=\" center \ " c l a s s =\" warning \ ">" ) ;
for ( String w : ( L i s t <String>) r e q u e s t . g e t A t t r i b u t e ( "
warnings " ) ) {
out . p r i n t ( "<t r ><td><b>Warning</b>: " + w + "</td></t r >
") ;
}
out . p r i n t ( "</t a b l e >" ) ;
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
}
%>
<table width="90%" align=" c e n t e r " cellpadding=" 4 "
cellspacing=" 0">
< tr><td colspan=" 4 " c l a s s="td_h2">Document S e a r c h R e s u l t (<
%= r e s u l t . s i z e ( ) %> Documents found )</ td></ tr>
< tr style=" background − c o l o r : #dddddd ; "><td><b>Document URL</
b></ td><td><b>Rating</b></ td><td><b>Tag used</b></ td><td>
<b>Action</ b></ td></ tr>
<% for ( Document r : r e s u l t ) { %>
<% i f ( a ) out . p r i n t ( "<t r >" ) ; else out . p r i n t ( "<t r s t y l e =\"
background−color : #e e e e e e ; \ ">" ) ; a = ! a ; %>
<%= "<td>" + r . g e t U r l ( ) + "</td>" %>
<%
out . p r i n t ( "<td>" ) ;
i f ( r a t i n g s . g e t ( r ) < 1 . 0 ) out . p r i n t ( "None" ) ;
else i f ( r a t i n g s . g e t ( r ) < 1 . 5 ) out . p r i n t ( "<img s r c =\"
img / r a t i n g 1 . g i f \ " />" ) ;
else i f ( r a t i n g s . g e t ( r ) < 2 . 5 ) out . p r i n t ( "<img s r c =\"
img / r a t i n g 2 . g i f \ " />" ) ;
else i f ( r a t i n g s . g e t ( r ) < 3 . 5 ) out . p r i n t ( "<img s r c =\"
img / r a t i n g 3 . g i f \ " />" ) ;
else i f ( r a t i n g s . g e t ( r ) < 4 . 5 ) out . p r i n t ( "<img s r c =\"
img / r a t i n g 4 . g i f \ " />" ) ;
else i f ( r a t i n g s . g e t ( r ) < 5 . 5 ) out . p r i n t ( "<img s r c =\"
img / r a t i n g 5 . g i f \ " />" ) ;
out . p r i n t ( "</td>" ) ;
i f ( r a t i n g s . g e t ( r ) < 1 . 0 ) out . p r i n t ( "<td>n/a</td>" ) ;
else
out . p r i n t ( "<td>" + t a g s . g e t ( r ) . getTag ( ) + "
</td>" ) ;
%>
<%= "</td>"
+ "<td><a h r e f =\" h t t p : // " + r . g e t U r l ( ) + "\" t a r g e t =\"
new\"> V i s i t </a> | <a h r e f =\" r a t e . j s p ? u r l =" + r . g e t U r l
( ) + "\">Rate</a></td >"
+ "</t r >" %>
<% } %>
</ table>
<br /><br />
</ div>
</ td></ tr></ table>
< !−− FOOTER −−>
<%@ i n c l u d e f i l e =" f o o t e r . j s p f " %>
</ body>
65
Abbildung 5.2: Benutzerschnittstelle zur Anzeige von Suchergebnissen samt
Bewertungsinferenz
66
</ html>
Listing 5.8: Java Server Page (JSP) zur Anzeige der Abfrageresultate
Die Implementierung der weiteren Anwendungsfälle der Kooperationsplattform verläuft dem hier vorgestellten Beispiel ähnlich. Eine ausführliche Darstellung dieser würde den Rahmen dieser Arbeit allerdings sprengen.
66
Kapitel 6
Zusammenfassung und
Ausblick
Zum Abschluss dieser Arbeit sollen zunächst deren wesentlichen Inhalte zusammengefasst werden, um darauf aufbauend Ausblicke auf weiterführende
Aspekte zu geben.
In Kapitel 2 haben wir verwandte Systeme aus den Bereichen Social Network,
Social Bookmarking und der Bewertungsbilung für Internetinhalte kurz vor-
gestellt. Dabei wurde auch aufgezeigt, inwiefern die in dieser Arbeits zu entwickelnde Kooperationsplattform über eine Nachbildung bekannter Systeme
hinausgeht und einen Mehrwert für Benutzer darstellt.
Die Anforderungen an diese Kooperationsplattform wurden in Kapitel 3 erhoben. Dabei wurden zunächst anhand von Anwendungsfalldiagrammen die
funktionalen Anforderungen dargestellt, wobei hier eine erste Einteilung von
Anwendungsfällen in Pakete vorgenommen wurde. Kapitel 3 schloss mit der
Erhebung der nichtfunktionalen Anforderungen ab.
Zu Beginn von Kapitel 4 wurde das unserer Arbeit zugrundeliegende Datenmodell deniert. Darauf aufbauend wurde anschlieÿend ein objektorientierter
Entwurf erstellt. Dabei wurde zunächst ein konzeptionelles Klassendiagramm
enwickelt, welches in einem nachfolgenden Schritt um Entwurfsentscheidungen durch Design Patterns verfeinert wurde. Im zweiten Teil des Kapitels
4 wurden dann die Lösungsbausteine Inferenzmechanismus sowie Klassikationsbeziehungen zwischen Tags detailierter erläutert. Bei ersterem wurden
aufbauend auf allgemeinen Anforderungen an einen Inferenzmechanismus
ein einfacher Kalkül für einen solchen erstellt, welcher anschlieÿend kritisch
disktutiert wurde. Nach einer kurzen Einführung in die Kompetenzfeldrepräsentation mittels Tags wurde dann auf den Mehrwert durch die Verwendung
67
von Beziehungen zwischen Tags hingewiesen. Daraufhin wurde ein Verfahren
vorgestellt, um Ähnlichkeitsbeziehungen zwischen Tags sowie darauf aufbauend hierarchische Beziehungen automatisch zu generieren.
Kapitel 5 hat die prototypische Implementierung von Kernkomponenten des
Kompetenznetzsystems detailierter beschrieben. Dabei wurden die verwendeten Datenstrukturen, die Realisierung des Inferenzmechanismus sowie das
Verfahren zur Bestimmung von Ähnlichkeitsbeziehungen zwischen Tags beschrieben. Darüber hinaus wurde kurz aufgezeigt, wie die Benutzerschnittstelle als Webanwendung umgesetzt werden kann.
6.1
Ausblick
Neben den in der Arbeit diskutierten Aspekten der Kooperationsplattform
existiert noch eine Vielzahl interessanter Überlegungen. welche in der Folge
angesprochen werden sollen. Dieser Ausblick soll dabei zum einen dem interessierten Leser helfen, diese Arbeit in Beziehung zu anderen Arbeiten und
somit auch in einen Gesamtkontext einzuordnen, liefert zum anderen aber
auch Ansatzpunkte für weiterführende Arbeiten zu diesem Themenbereich.
Von zentraler Bedeutung für den Erfolg der reputationsbasierten Kooperationsplattform ist die Schaung einer groÿen Community. Eng damit verbunden ist der in der Betriebswirtschaftslehre geprägte Begri der positiven
Netzeekte (vgl. (PRW03)). Dieser besagt, dass durch jeden weiteren Netzteilnehmer sich der Wert des gesamten Netzes und somit auch der Nutzen
für alle bisherigen Teilnehmer steigt. Dies tritt in der von uns beschriebenen Kooperationsplattform besonders stark auf, da durch die Einschränkung
von Bewertungen auf Kompetenzfelder die Aussagekraft zwar zunimmt, der
Suchraum der Inferenzanfragen aber zum Teil erheblich eingeschränkt wird,
und somit nach dem von uns vorgestellten Inferenzmechanismuis eine hohe
Anzahl von Bewertungen nicht nur die Qualität der inferierten Bewertung
erhöht, sondern in vielen Fällen erst ermöglicht.
Eine der möglichen Maÿnahmen zur Erhöhung der Attraktivität der Plattform wäre die Einbeziehungen mehrerer Strategien bei der Denition von
Beziehungen zwischen Kompetenzfeldern. So würde es sich, wie in Abschnitt
4.4.4 skizziert, anbieten, zu unterschiedlichen Verbreitungsstadien der Plattform unterschiedliche Herangehensweisen zu berücksichtigen. In der Anlaufphase würde sich ein von Experten verwaltetes, überschaubares Vokabular
mit Kompetenzfeldern und deren Beziehungen untereinander anbieten, um
potentiellen Mitgliedern den Einstieg zu erleichtern und die Anzahl der Inhalte, für die eine Bewertung möglich ist, zu erhöhen. Mit zunehmender
Anzahl der Mitglieder sollte dann allerdings der Übergang zu einer Folkso68
nomy (Ma04), wie beispielsweise in Abschnitt 4.4.4 vorgestellt, vollzogen
werden, um die Einbindung der existierenden Benutzer zu erhöhen und somit das Wachstum der Community weiter voranzutreiben. Dabei sollten die
angedachten Lösungen auf Benutzerfreundlichkeit und Zweckmäÿigkeit geprüft werden, so wie der entsprechende Übergangszeitpunkt entsprechend
sorgfältig gewählt werden, um ein optimales Wachstum zu erreichen.
Die in dieser Arbeit vorgestellte prototypische Realisierung von Kernkomponenten muss für einen praxisdienlichen Einsatz noch unter den Gesichtspunkten der Benutzerfreundlichkeit (Usability ) sowie der Leistungsfähigkeit
(Performance ) untersucht werden. Zum einen sollte, wie beispielsweise in
(Pa03) beschrieben, die Benutzerfreundlichkeit analysiert und die Kooperationsplattform darauf optimiert werden. Zum anderen sollte Transparenz
über die im Hintergrund ablaufenden Prozesse der Bewertungsbildung dem
Benutzer anschaulich vermittelt werden. Unter dem Gesichtspunkt der Leistungsfähigkeit sei nochmals auf die nichtfunktionalen Anforderungen verwiesen (siehe NR02 Antwortzeiten, Abschnitt 3.2), für die Optimierungen
an der in dieser Arbeit vorgestellten prototypischen Implementierung nötig
werden könnten. Zum einen bieten sich hierfür Caching -Verfahren (IC97),
vor allem für die Abfrage von Dokumentenbewertungen und Generierung
der Klassikationsbeziehungen zwischen Tags, an, da diese in einem System
mit einer hohen Anzahl von Benutzern in (relativ) kurzen Zeitintervallen
nicht allzu groÿen Schwankungen unterliegen sollten. Zum anderen würde
sich die Untersuchung der häug verwendeten Algorithmen auf Optimierbarkeit empfehlen.
Einen weiteren zu untersuchenden Aspekt stellen der im Abschnitt 4.3 aufgezeigte Inferenzkalkül und die ihm zu Grunde liegenden Annahmen dar.
Hier jedoch sehen wir kaum Möglichkeiten Fortschritte theoretisch zu erzielen. Vielmehr könnten hier empirische Methoden zum Einsatz kommen.
Aufgrund der Tatsache, dass die Abbildung von Bewertungsableitung zum
einen eine äuÿerst komplexe Aufgabe ist, die zum anderen von Mensch zu
Mensch auch noch unterschiedlich als rational angesehen wird, erhebt diese
Arbeit nicht den Anspruch, den optimalen Ansatz gefunden zu haben. Vielmehr wird hier ein relativ einfacher Kalkül vorgestellt, auf dem aufbauend
erst durch die wissenschaftliche Anwendung von Ergebnissen des praktischen
Einsatzes dieser Kooperationsplattform die Güte des Kalküls feststellbar und
somit verbesserbar ist. Dies wird durch die vorgestellte exible Softwarearchitektur geeignet unterstützt.
Diese Arbeit gibt also eine Art Einführung in das spannende Thema der reputationsbasierten Plattform zur netzwerkbasierten Bewertungsndung für
Web-Inhalte, deren praktische Umsetzbarkeit hier lediglich gezeigt wird. Die
Verzierung der hier getroenen Annahmen und Mechanismen in einem
69
groÿen Praxiseinsatz bleibt diese Arbeit aber schuldig. Die daraus generierten Resultate und Weiterentwicklungen könnten einen Beitrag dazu leisten,
dem quantitativen Wachstum eine exible Methode der benutzergenerierten
Qualitätssicherung entgegenzustellen.
70
Literaturverzeichnis
[Ar08] Arnold, H.:. Virtuelle Welten im Internet, Kapitel Virtuelle Identitäten und Reputation - Reputation als zentrales Element im
Web der Zukunft. Huethig GmbH, 2008.
[BD03] Bruegge, B.; Dutoit, A. H.:. Object-Oriented Software Engineering: Using UML, Patterns and Java, Second Edition. PrenticeHall, Inc., Upper Saddle River, NJ, USA, 2003. 0130471100.
[BL89] Berners-Lee, T.:. Information Management: A Proposal. Conseil
Européen pour la Recherche Nucléaire (CERN), March, 1989.
[BLFF] Berners-Lee, T.; Fielding, R.; Frystyk, H.:. Hypertext Transfer Protocol. Work in progress of the HTTP working group
of the IETF.< URL: ftp://nic. merit. edu/documents/internetdrafts/draft-elding-http-spec-00. txt.
[BLMM94] Berners-Lee, T.; Masinter, L.; McCahill, M.:. RFC1738 - Uniform Resource Locators (URL). Bericht, Network Working
Group, 1994.
[Br01] Brandes, U.:. A faster algorithm for betweenness centrality. Journal of Mathematical Sociology, 25(2):163177, 2001.
[Co70] Codd, E. F.:. A relational model of data for large shared data
banks. Commun. ACM, 13(6):377387, 1970.
[Co01] Cormen, T.:. Introduction to Algorithms. MIT Press, 2001.
[EW01] Eppstein, D.; Wang, J.:. Fast approximation of centrality. Sym-
posium on Discrete Algorithms: Proceedings of the twelfth annual
ACM-SIAM symposium on Discrete algorithms, 7(09):228229,
2001.
[Ga95] Gamma, E. et al.:. Design Patterns. elements of Reusable ObjectOriented Software. Addison-Wesley Professional, 1995.
71
[GH05] Golder, S.; Huberman, B.:. The Structure of Collaborative Tagging Systems. Arxiv preprint cs.DL/0508082, 2005.
[Ha05] Hammond, T. et al.:. Social Bookmarking Tools (I). D-Lib Magazine, 11(4):10829873, 2005.
[HGM06] Heymann, P.; Garcia-Molina, H.:. Collaborative creation of communal hierarchical taxonomies in social tagging systems. Bericht,
Technical Report 2006-10, Stanford University, April 2006, 2006.
[Hi05] Hitz, M. et al.:. UML@Work. dpunkt.verlag, 3. Auage, 2005.
[IC97] Iyengar, A.; Challenger, J.:. Improving Web Server Performance
by Caching Dynamic Data. In USENIX Symposium on Internet
Technologies and Systems, 1997.
[JBR99] Jacobson, I.; Booch, G.; Rumbaugh, J.:. The Unied Software
Development Process. Addison-Wesley, 1999.
[KP88] Krasner, G.; Pope, S.:. A cookbook for using the model-view
controller user interface paradigm in Smalltalk-80. Journal of
Object-Oriented Programming, 1(3):2649, 1988.
[Ma04] Mathes, A.:. Folksonomies-Cooperative Classication and Communication Through Shared Metadata. Computer Mediated
Communication, LIS590CMC (Doctoral Seminar), Graduate
School of Library and Information Science, University of Illinois
Urbana-Champaign, December, 2004.
[Mi67] Milgram, S.:. The Small World Problem. Mai 1967:6067, 1967.
[Of02] Outt, J.:. Quality Attributes of Web Software Applications. IEEE SOFTWARE, Seiten 2532, 2002.
[OM07] OMG, O. M. G.:. UML 2.1.2. 2007.
[Pa03] Palmer, J.:. Web Site Usability, Design, and Performance Metrics. Information Systems Research, 13(2):151167, 2003.
[Po] Poter, M.:. Hash-Algorithmen.
[PRW03] Picot, A.; Reichwald, R.; Wigand, R. T.:. Die grenzenlose Unternehmung. Dr. The. Gabler GmbH, 2003.
[SB87] Salton, G.; Buckley, C.:. Term Weighting Approaches in Automatic Text Retrieval. Bericht, Ithaca, NY, USA, 1987.
[Se07] Sen, S. et al.:. The quest for quality tags. Proceedings of the
2007 international ACM conference on Conference on supporting
group work, 07:361370, 2007.
72
[So04] Sommerville, I.:. Software-Engineering, 7th Edition. Pearson
Education, 2004.
[St07] Steger, A.:. Diskrete Strukturen: Band 1: Kombinatorik, Graphentheorie, Algebra. Springer, 2007.
[We96] Wellman, B. et al.:. Computer Networks as Social Networks:
Collaborative Work, Telework, and Virtual Community. Annual
Reviews in Sociology, 22(1):213238, 1996.
73