Diese Arbeit beschäftigt sich mit \enquote{Complex Event Processing} (CEP), also der Verarbeitung komplexer Ereignisse auf Ereignisdatenströmen mit Integration von Hintergrundwissen, und der praktischen Nutzung der CEP-Engine C-SPARQL.
Nach einem kurzen Einstieg in das Thema CEP soll der Leser einen Einblick in die Features von aktuellen CEP-Engines erhalten und am Beispiel der Engine C-SPARQL\footnote{Mehr Informationen zu C-SPARQL und Download unter \url{http://streamreasoning.org/download}} die Verarbeitung von Ereignisströmen im RDF-Format in Kombination mit Hintergrundwissen im Detail kennenlernen.
An einem Beispielszenario soll dann der Praxiseinsatz von C-SPARQL erklärt werden, in dem einige der vorgestellten Funktionen Anwendung finden. Im Abschluss wird ein kurzer Ausblick auf die technischen Möglichkeiten des \enquote{Reasoning} gegeben - eine Technik, die es erlaubt auf den vorhandenen und eingehenden Daten logische Operationen und Schlussfolgerungen durchzuführen um daraus neues Wissen abzuleiten.
Im folgenden Abschnitt wird ein kurzer Einstieg in das Konzept von Complex Event Processing (CEP) gegeben. Eine detailreiche Erläuterung von CEP und die beispielhafte Anwendung der CEP-Engine \enquote{Esper} wird in \cite{hsh:cep} beschrieben.
Wie der Begriff \enquote{Complex Event Processing} schon andeutet, geht es bei CEP um die Verarbeitung von komplexen Ereignissen.
Dank der immer weiter fortschreitenden Digitalisierung in unserer Welt steckt in nahezu jedem Gebäude, Fahrzeug, Haushaltsgerät bis hin zur Hosentasche inzwischen ein (wenn auch kleiner) Computer, der über seine Umgebung Informationen sammelt.
Beispielsweise erhält der Bordcomputer eines Autos regelmäßig Informationen von den im Auto verbauten Komponenten über fehlgeschlagene Zündungen, die Temperatur des Motors, oder den Einschlagswinkel des Lenkrades.
All diese Informationen können als Messereignisse betrachtet werden, die dem Bordcomputer von den einzelnen Sensoren und Komponenten übermittelt werden.
Während das Beispiel des PKW schon bald komplett in die Kategorie des sogenannten \enquote{Internet der Dinge} fallen wird, finden sich im Internet auf Webseiten zahlreiche weitere Beispiele für Informationen, die in Form von Ereignissen auftreten.
Ein Beispiel hierfür sind Benutzerinteraktionen: Das Auslösen einer Bestellung in einem Onlineshop, das Ändern eines Passwortes durch einen Benutzer oder das Versenden einer Nachricht in einem sozialen Netzwerk sind Ereignisse, die eine Menge an Informationen enthalten.
Abhängig von der Anzahl aktiver Benutzer auf der Webseite, die als Datenquelle dienen soll, kann die Anzahl der dort ausgelösten Ereignisse so groß werden, dass innerhalb von kleinen Zeiträumen bereits \emph{sehr große Datenmengen} zusammenkommen.
Eine Speicherung der Ereignisse hat aufgrund der begrenzten Gültigkeitsdauer ihrer Informationen\footnote{Das Ergebnis der Messung der aktuellen Temperatur eines Automotors kann je nach Situation nur wenige Minuten aktuell sein und wird durch das nächste Messergebnis obsolet.} höchstens einen protokollierenden Nutzen. Daher werden die Ereignisse in Form von Datenströmen an die CEP-Engine übermittelt und dort \emph{nur} für den Zeitraum der Verarbeitung im Hauptspeicher vorgehalten.
Die Informationen der Ereignisse stellen den momentanen Zustand dar; allerdings sind sie für sich alleine betrachtet Kontext- und somit Bedeutungslos. Betrachtet man beispielsweise das Ereignis \enquote{Die gemessene Motortemperatur beträgt 40°C.}, so ist daraus nicht zu erkennen, ob das Fahrzeug gerade seit kurzem auf der Straße unterwegs ist oder lediglich im Hochsommer in der Sonne steht. Auch ist nicht zu erkennen, ob es sich bei dem Motor überhaupt um einen Automotor handelt. Dass überhaupt von einer \enquote{Motortemperatur} die Rede sein kann impliziert bereits die Existenz von \emph{Hintergrundwissen} darüber, wo der Temperatursensor platziert ist - und somit, worauf sich die gemessene Temperatur bezieht.
Ein weiterer wichtiger Faktor ist der Zeitraum, in dem Ereignisse auftreten. Um dies näher zu erläutern, betrachten wir beispielhaft den folgenden Ereignisstrom:
\begin{lstlisting}[caption={Exemplarischer Ereignisstrom: Motortemperatur eines PKW}]
Zunächst sei unter Verwendung von Hintergrundwissen verraten: Der Temperatursensor befindet sich an dem Motor eines PKW und hat in regelmäßigen Abständen diese vier Messwerte gemeldet. Auf den ersten Blick ist ersichtlich, dass die Messwerte einen sehr starken Temperaturanstieg abbilden, jedoch kann über den nächsten Messwert nur spekuliert werden, da die zeitlichen Abstände zwischen den Messereignissen einen großen Unterschied ausmachen können. Liegen zwischen den Messereignissen beispielsweise etwa 30-60 Minuten, so könnte es sich um einen normalen Betrieb bei hoher Geschwindigkeit handeln. Sollten jedoch nur wenige Minuten zwischen den Messereignissen vergangen sein, so lassen die Messwerte auf einen Defekt im Kühlsystem schließen und ein Motorschaden wäre eine mögliche Folge. Die Zeitachse darf somit bei der Ereignisverarbeitung nicht vernachlässigt werden.
Die Herausforderung bei CEP liegt also darin große Ströme von Ereignissen unter Zuhilfenahme von Hintergrundwissen zu kombinieren, relevante Ereignisse daraus zu selektieren und unter diesen bestimmte Muster zu erkennen, daraus höherwertige und bedeutungsvolle Ereignisse zu konstruieren und die Ergebnisse möglichst in Echtzeit weiterzugeben.
Ein durchaus wichtiger Punkt ist die mangelhafte Umsetzung der Timestamp-Funktion in der Version 0.9.6 der C-SPARQL-Engine.
Diese führt dazu, dass man bei der Verarbeitung von Daten aus Temperatursensoren eine Entscheidung treffen muss: Entweder ist es möglich die Timestamps der Events auszuwerten; die Temperaturwerte sind dann keine Literale und können nicht in Filter-Operationen verglichen werden. Oder aber die Temperaturwerte sind Literale und dementsprechend in Filter-Operationen vergleichbar; dann fällt aber die Timestamp-Funktion raus und es ist nicht möglich die zeitliche Abfolge der Ereignisse nachzuvollziehen.