# Shark Framework

Shark Framework, Kürzel SharkFW, ist ein Java-Framework zum Bau von semantischen P2P-Anwendungen. Im Gegensatz zu Systemen wie JXTA, BitTorrent usw. liegt Shark im ISO Layer 7. Die Programmierung mit Shark ist eher vergleichbar mit der Programmierung von Servlets. Tatsächlich hat Shark einige Gemeinsamkeiten mit Webprogrammierung, aber den wesentlichen Unterschied, dass es keine Server gibt.
Der Name Shark entstand als Acronym von „Shared Knowledge“. Das P2P-Konzept basiert auf einer kleinen Algebra, das Framework ist die Implementierung des Konzeptes. SharkFW wurde zur Entwicklung von serverfreien Web-2.0-Anwendungen, besonders von sozialen Anwendungen, entwickelt. SharkNet ist die erste Anwendung, die basierend auf dem Framework entwickelt wurde. Das Projekt ist Open Source und kostenfrei.

## Generelle Konzepte

Shark ist ein pures P2P System. Jedes Peer verwaltet seine Daten selber und kommuniziert nach eigenem Wunsch mit anderen Peers. Dadurch unterscheidet es sich von anderen P2P Systemen. Es stellt keine Verteilungstransparenz und Peer sind autonom: Stellt ein Peer eine Frage an ein anderes Peer, so hat das Peer Wahlfreiheit der Handlung. Die Anfrage kann ignoriert werden. Das Peer kann mit einer eigenen Anfrage reagieren, es kann aber auch Daten senden. Welche Daten das sind, entscheidet das Peer selber. Peers können Anfragen weiter senden, müssen das aber nicht. Somit führt die gleiche Anfrage bei unterschiedlichen Peers in der Regel zu unterschiedlichen Resultaten. Die Anfragen werden in der Regel nicht weiter geleitet.
Die Kommunikation zwischen Shark Peer erfolgt mit proprietären Kommunikationsprotokoll: Knowledge Exchange Protocol (KEP). Das Protokoll hat zwei Funktionsprimitive: Eine Methode sendet ein Interesse eine andere sendet Wissen.

### Interesse

Ein Interesse beschreibt den Willen zum Austausch von Informationen. Das Interesse umfasst sieben Facetten: Es beschreibt das Thema, über das sich das Peer austauschen mag. Es beschreibt das Peer selber, die anderen Peers mit denen es gern reden will und an welchem Ort und zu welcher Zeit ein solcher Austausch geschehen soll. Es beschreibt außerdem die Richtung des Austausches, d. h. ob das Peer Informationen empfangen oder senden will. Als letztes ist beschreibbar, welches Peer die Informationen initial dem Thema zugeordnet haben soll. Diese Facette wird Originator genannt.
Ein Peer Alice könnte also den Wunsch formulieren, sich über das Thema Java mit Bob auszutauschen will und zwar in der Form, dass sie ihm ein paar Dokumente anbietet, die sie selber gefunden bzw. geschrieben hat. Eine Kommunikation kommt zustande, wenn ein anderes Peer, Bob in dem Fall, ein passendes Interesse formuliert, z. B. könnte Bob sagen, dass er sich für alles interessiert, was von Alice kommt.
Die einzelnen Facetten in Shark werden mit Semantic Tags definiert. Das ist eine Erweiterung von Tags in der Form, dass ihnen beliebig viele URLs hinzugefügt werden können. Diese URLs entsprechen dem Topic Map Konzept der Subject Identifier (SI) aus dem ISO-Standard 13250 Topic Maps. Die SI beschreiben die Bedeutung, die Semantik, der Tags.
Shark erlaubt den Bau von Begriffsystemen, d. h. den Bau von semantischen Netzen. So können sich auch Interessenübereinstimmungen gefunden werden, wenn die Begriffe nur ähnlich, aber nicht gleich sind.
Die Interessen stellen technisch gesehen einen siebendimensionalen Raum dar, wobei jede Dimension von einer eigenen Ontologie erklärt wird. Diese Ontologie ist das semantische Netz bestehend aus den Semantic Tags. Diese Zusammenhänge werden den Entwicklern von Shark weitgehend verborgen gehalten.
Die Übereinstimmung von Interessen kann durch den Algorithmus der Kontextualisierung ermittelt werden. Hierbei wird ein Interesse als der Kontext ausgewählt, das andere als Quelle. Es wird nun geprüft, ob und welche Semantic Tags die Quelle enthält, die auch der Kontext hat. Diese Methode nutzt ein Interesse (den Kontext) als eine Maske und macht nur die Konzepte der Quelle sichtbar, die dazu passen. Der Algorithmus ähnelt der Breitensuche und kann weiter parametrisiert werden.

### Wissen

SharkFW arbeitet genauso wie Webserver: Es können beliebige Daten zwischen Peers ausgetauscht werden. Sie bleiben gänzlich uninterpretiert. Daten werden aber immer mit Metadaten versehen. Das sind wieder die sieben Facetten, die bereits oben beschrieben wurden. Bei jedem Austausch wird der Kontext geliefert, warum diese Daten gesendet werden, also wer sie sendet an wen, an welchem Ort usw.

## Plattformen und Stand der Entwicklung

SharkFW ist in Java geschrieben und arbeitet auf allen gängigen stationären Betriebssystemen, die Java unterstützen und auf Android. SharkFW ist ein freies nicht-kommerzielles Projekt und in der Beta-Phase.