[TASK] Generic commit

This commit is contained in:
Jan Philipp Timme 2016-07-19 11:54:50 +02:00
parent 0766956f2f
commit 8f724334ec
1 changed files with 36 additions and 27 deletions

View File

@ -153,13 +153,13 @@ Hannover, den \today \hfill Unterschrift
\chapter{Einleitung} \chapter{Einleitung}
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. Diese Arbeit beschäftigt sich mit \enquote{Complex Event Processing} (CEP), also der Verarbeitung komplexer Ereignisse auf Ereignisdatenströmen in Kombination mit Domänenwissen, und der praktischen Umsetzung dieses Vorhabens auf Basis von RDF-Datenströmen mit der CEP-Engine \enquote{C-SPARQL}.
\todo{Dem Dokument anpassen; Soll groben Ausblick auf Inhalte geben.}
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/resources/c-sparql}} die Verarbeitung von Ereignisströmen im RDF-Format in Kombination mit Hintergrundwissen im Detail kennenlernen. 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/resources/c-sparql}} 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. 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.
\todo{Dem Dokument anpassen; Soll groben Ausblick auf Inhalte geben.}
\section{Motivation} \section{Motivation}
@ -168,27 +168,9 @@ An einem Beispielszenario soll dann der Praxiseinsatz von C-SPARQL erklärt werd
\item Vorhaben: Auf den Daten dieser Systeme CEP fahren unter Integration von Domänenwissen \item Vorhaben: Auf den Daten dieser Systeme CEP fahren unter Integration von Domänenwissen
\item Ziel: Relevante komplexe Ereignisse aus (Mustern von) einfachen Ereignissen extrahieren \item Ziel: Relevante komplexe Ereignisse aus (Mustern von) einfachen Ereignissen extrahieren
\item Mittel zum Weg: CSPARQL (Erweiterung von SPARQL um Befehle für Datenströme) \item Mittel zum Weg: CSPARQL (Erweiterung von SPARQL um Befehle für Datenströme)
\item
\end{itemize} \end{itemize}
\begin{draft} \dots
Wir haben offene Systeme, über die wir Ereignisse via RDF-Datenstrom bereitgestellt bekommen und wollen damit CEP machen.
Complex Event Processing auf RDF-Datenströmen aus offenen Systemen
Warum denn RDF?
RDF ist von der Struktur her der kleinste gemeinsame Nenner und es lässt sich alles in RDF verlustfrei abbilden.
Weiterhin ist es sehr leicht, RDF-Daten aus verschiedensten Quellen miteinander zu verknüpfen.
Warum nicht ein anderes Format?
Es gibt kaum andere Formate, die ebenso universell und offen sind.
Wie sieht RDF im Vergleich zu RDBMS aus?
Bei RDBMS gibt es je nach Anwendung unterschiedlichste Datenbankschemen, die Struktur und verwendete Datentypen von Tupeln in Relationen vorschreiben.
Für die Verknüpfung von Daten aus verschiedenen RDBMS miteinander wird es hier sehr schwierig, da beispielsweise klassisches SQL keine Unterstützung für Queries über mehrere Datenbankserver unterstützt.
\end{draft}
\section{Einführung in Complex Event Processing} \section{Einführung in Complex Event Processing}
@ -204,7 +186,7 @@ Im folgenden Abschnitt wird ein kurzer Einstieg in das Konzept von Complex Event
Wie der Begriff \enquote{Complex Event Processing} schon andeutet, geht es bei CEP um die Verarbeitung von komplexen Ereignissen --- konkret: Die Erkennung und Erfassung von komplexen Ereignissen aus Datenströmen von primitiven Ereignissen. Von Messereignissen aus mit Sensoren ausgestatteten Geräten über Transaktionen im Handel bis hin zu Benutzerinteraktionen auf Webseiten entstehen täglich unzählig viele Ereignisse, die abhängig von ihrem Kontext für einen bestimmten Zeitraum ein Stück der echten Welt korrekt abbilden. Wie der Begriff \enquote{Complex Event Processing} schon andeutet, geht es bei CEP um die Verarbeitung von komplexen Ereignissen --- konkret: Die Erkennung und Erfassung von komplexen Ereignissen aus Datenströmen von primitiven Ereignissen. Von Messereignissen aus mit Sensoren ausgestatteten Geräten über Transaktionen im Handel bis hin zu Benutzerinteraktionen auf Webseiten entstehen täglich unzählig viele Ereignisse, die abhängig von ihrem Kontext für einen bestimmten Zeitraum ein Stück der echten Welt korrekt abbilden.
Die Informationen dieser Ereignisse stellen nur einen momentanen Zustand dar; sie sind für sich alleine betrachtet Kontext- und somit Bedeutungslos. Betrachtet man beispielsweise ein Ereignis \enquote{Die gemessene Temperatur beträgt 42°C.}, so ist zunächst nicht einmal zu erkennen, was es mit dieser Temperatur auf sich hat. Hier kommt das \emph{Hintergrundwissen} (auch Domänenwissen) ins Spiel, welches uns in diesem Fall verraten kann, dass die Quelle dieses Ereignisses ein Sensor in einem PKW ist und am Motorblock befestigt ist. Dieses Wissen beinhaltet auch weitere Angaben zum konkreten Modell des PKW --- unter anderem auch dessen zulässige Höchstgeschwindigkeit und die für den Motor zugelassenen Temperaturbereiche. Dies ermöglicht eine weiterführende Interpretation des Ereignisses; allerdings werden noch weitere Informationen benötigt, um ein eindeutiges Bild zu erhalten. Kombiniert man dieses Ereignis mit den Meldungen des im PKW installierten Geschwindigkeitssensors, so kann man herausfinden, ob die gemessene Motortemperatur für den aktuellen Betriebszustand des PKW innerhalb der im Hintergrundwissen für die über das spezifische PKW-Modell hinterlegten Grenzwerten liegt. Die Informationen, die diese Ereignisse neben einem Zeitstempel und einer eindeutigen ID mit sich tragen stellen nur einen momentanen Zustand dar; sie haben für sich alleine betrachtet keinen Kontext und somit vorerst bedeutungslos. Betrachtet man beispielsweise ein Ereignis \enquote{Die gemessene Temperatur beträgt 42°C.}, so ist zunächst nicht zu erkennen, was es mit dieser Temperatur auf sich hat. Hier kommt das \emph{Hintergrundwissen} ins Spiel, welches uns in diesem Fall verraten kann, dass die Quelle dieses Ereignisses ein Sensor in einem PKW ist und am Motorblock befestigt ist. Dieses Wissen beinhaltet auch weitere Angaben zum konkreten Modell des PKW --- unter anderem auch dessen Höchstgeschwindigkeit und die für den Motor zulässigen Betriebstemperaturen. Dies ermöglicht eine weiterführende Interpretation des Ereignisses; allerdings werden noch weitere Informationen benötigt, um ein eindeutiges Bild zu erhalten. Kombiniert man dieses Ereignis mit den Meldungen des im PKW installierten Geschwindigkeitssensors, so kann man herausfinden, ob die gemessene Motortemperatur für den aktuellen Betriebszustand des PKW innerhalb der im Hintergrundwissen für die über das spezifische PKW-Modell hinterlegten Grenzwerten liegt.
Ein weiterer, wichtiger Faktor ist der Zeitraum in dem gewisse Ereignisse auftreten. Um dies näher zu erläutern, betrachten wir den gegebenen Ereignisstrom aus Listing~\ref{lst:sample_eventstream}. Ein weiterer, wichtiger Faktor ist der Zeitraum in dem gewisse Ereignisse auftreten. Um dies näher zu erläutern, betrachten wir den gegebenen Ereignisstrom aus Listing~\ref{lst:sample_eventstream}.
\begin{lstlisting}[caption={Exemplarischer Ereignisstrom: Motortemperatur eines PKW},label={lst:sample_eventstream}] \begin{lstlisting}[caption={Exemplarischer Ereignisstrom: Motortemperatur eines PKW},label={lst:sample_eventstream}]
@ -222,9 +204,10 @@ Insgesamt liegt die Herausforderung von CEP darin, in kürzester Zeit große Dat
\section{Complex Event Processing auf RDF-Datenströmen} \section{Complex Event Processing auf RDF-Datenströmen}
\begin{draft}
\begin{itemize} \begin{itemize}
\item Was ist RDF?
\item Warum überhaupt RDF? \item Warum überhaupt RDF?
\item RDF vs RDBMS?
\item Kleinster gemeinsamer Nenner für Informationen \item Kleinster gemeinsamer Nenner für Informationen
\item Events als Quadrupel (wegen Timestamps) \item Events als Quadrupel (wegen Timestamps)
\item Einführung des Begriffs CSPARQL als SPARQL mit Erweiterungen für Ereignisverarbeitung \item Einführung des Begriffs CSPARQL als SPARQL mit Erweiterungen für Ereignisverarbeitung
@ -232,11 +215,37 @@ Insgesamt liegt die Herausforderung von CEP darin, in kürzester Zeit große Dat
\item Erläuterung der einzelnen Bestandteile? \item Erläuterung der einzelnen Bestandteile?
\item Vorteile bei der Nutzung von CSPARQL? \item Vorteile bei der Nutzung von CSPARQL?
\end{itemize} \end{itemize}
\end{draft}
Um Ereignisse aus verschiedenartigen Quellen gemeinsam zu verarbeiten ist das RDF-Format das Mittel der Wahl. Das Ressource Description Framework (RDF) wird bereits im semantischen Web zur Erfassung und Verknüpfung von Wissen verwendet und kann leicht über die Sprache SPARQL (\enquote{SPARQL Protocol And RDF Query Language}) abgefragt werden. RDF-Daten bestehen aus einer Menge von Tripeln, welche sich aus den drei Komponenten Subjekt, Prädikat und Objekt zusammensetzen. Ein Subjekt wird durch eine eindeutige URI identifiziert; über Prädikate aus Ontologien können diesem Subjekt über Spezifikation im Objekt-Teil des Tripels bestimmte Attribute mit Werten zugesprochen werden oder Verknüpfungen mit anderen Subjekten hergestellt werden. Aufgrund der Flexibilität dieser Struktur ist es möglich, nahezu jede Art von Informationen auf Tripel abzubilden. Das Ressource Description Framework (RDF) wird bereits im semantischen Web zur Erfassung und Verknüpfung von Wissen verwendet und kann leicht über die Sprache SPARQL (\enquote{SPARQL Protocol And RDF Query Language}) abgefragt werden. RDF-Daten bestehen aus einer Menge von Tripeln, welche sich aus den drei Komponenten Subjekt, Prädikat und Objekt zusammensetzen. Ein Subjekt wird durch eine eindeutige URI identifiziert; über Prädikate aus Ontologien können diesem Subjekt über Spezifikation im Objekt-Teil des Tripels bestimmte Attribute mit Werten zugesprochen werden oder Verknüpfungen mit anderen Subjekten hergestellt werden. Aufgrund der Flexibilität dieser Struktur ist es möglich, nahezu jede Art von Informationen auf Tripel abzubilden, wie Listing \ref{lst:sample_rdf_data} zeigt.
Zur Verarbeitung von Ereignissen im RDF-Format werden die Ereignisdatenströme der verarbeitenden Engine entweder direkt als RDF-Datenstrom zugeführt oder gegebenenfalls vor der Zuführung in einen RDF-Datenstrom konvertiert. In Listing~\ref{lst:sample_rdf_event} aufgeführt sind RDF-Tripel, die ein beispielhaftes Zustands-Ereignis aus einem PKW zeigen. \begin{lstlisting}[caption={RDF-Daten beschreiben zwei Geschwister},label={lst:sample_rdf_data}]
ex:a rdf:type ex:person
ex:a ex:isGender ex:female
ex:a ex:hasName "Marie"
ex:b rdf:type ex:person
ex:b ex:isGender ex:male
ex:b ex:hasName "Max"
ex:b ex:hasSibling ex:a
\end{lstlisting}
Im Gegensatz zu Abfragesprachen von relationalen Datenbanksystemen wie SQL ist es mit SPARQL möglich, Daten über verschiedene Datenquellen wie Tripel- oder Quadstores hinweg miteinander zu verknüpfen. Auch ist im Gegensatz zu SQL keine spezielle Anpassung der Abfragen an ein Datenbankschema notwendig; lediglich die Art und Weise, wie die angeforderten Daten miteinander in Verbindung stehen, ist für SPARQL-Abfragen wichtig. Im Folgenden zeigt Listing\ref{lst:sample_sparql_query} eine Abfrage auf den Daten aus Listing \ref{lst:sample_rdf_data}.
\begin{lstlisting}[caption={Abfrage vom Namen des Bruders von Marie aus den Daten von Listing \ref{lst:sample_rdf_data}},label={lst:sample_sparql_query}]
SELECT ?nameOfBrother
WHERE {
?marie rdf:type ex:person .
?marie ex:hasName "Marie" .
?marie ex:hasSibling ?brother .
?brother ex:hasName ?nameOfBrother .
}
\end{lstlisting}
Um Ereignisse aus verschiedenen Quellen gemeinsam zu verarbeiten ist das RDF-Format das Mittel der Wahl. Hierbei werden die Ereignisse gegebenenfalls vorher in das RDF-Format transformiert und als Datenstrom aus RDF-Quadrupeln der CEP-Engine zugeführt. Die Quadrupel führen neben den Informationen aus den Tripeln noch den Zeitstempel mit, zu dem das Ereignis ausgelöst wurde.
Als Abfragesprache für die RDF-Datenströme kommt eine um zusätzliche Funktionalitäten erweiterte Form von SPARQL --- im Folgenden \enquote{CSPARQL} --- zum Einsatz. CSPARQL kann die eingehenden RDF-Datenströme mit sogenannten \enquote{Sliding Windows} erfassen und ermöglicht die Berücksichtigung der Zeitstempel der Ereignisse innerhalb der Abfrage durch die Bereitstellung von zusätzlichen Sprachkonstrukten und Funktionen. Dabei besteht weiterhin die Möglichkeit, lokal in Form von RDF-Daten vorhandenes Domänenwissen in die Abfrage einzubeziehen und mit den Ereignisdaten zu verknüpfen.
In Listing~\ref{lst:sample_rdf_event} aufgeführt sind RDF-Tripel, die ein beispielhaftes Zustands-Ereignis aus einem PKW zeigen.
\begin{lstlisting}[caption={Ereignis im RDF-Format},label={lst:sample_rdf_event}] \begin{lstlisting}[caption={Ereignis im RDF-Format},label={lst:sample_rdf_event}]
http://myexample.org/cars/event#1468064960110 http://myexample.org/cars#carID http://myexample.org/cars#8 http://myexample.org/cars/event#1468064960110 http://myexample.org/cars#carID http://myexample.org/cars#8
http://myexample.org/cars/event#1468064960110 http://myexample.org/cars#currentTemperature "27"^^http://www.w3.org/2001/XMLSchema#integer http://myexample.org/cars/event#1468064960110 http://myexample.org/cars#currentTemperature "27"^^http://www.w3.org/2001/XMLSchema#integer