360 lines
10 KiB
TeX
360 lines
10 KiB
TeX
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
% Setup des Dokuments
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
\documentclass[12pt,DIV14,BCOR10mm,a4paper,twoside,parskip=half-,headsepline,headinclude]{scrreprt} % Grundgröße 12pt, zweiseitig
|
|
% Packages from template
|
|
\usepackage[headsepline,automark]{scrpage2} % Seitenköpfe automatisch
|
|
\KOMAoptions{headinclude} % Fix
|
|
\usepackage[german]{babel} % Sprachpaket für Deutsch (Umlaute, Trennung,deutsche Überschriften)
|
|
% Not needed anymore
|
|
% \usepackage{blindtext}
|
|
\usepackage{graphicx,hyperref} % Graphikeinbindung, Hyperref (alles klickbar, Bookmarks)
|
|
\usepackage{amssymb} % Math. Symbole aus AmsTeX
|
|
\usepackage[utf8]{inputenc} % Umlaute
|
|
% Custom packages
|
|
\usepackage[autostyle=true,german=quotes]{csquotes} % Anführungszeichen mit \enquote{}
|
|
\usepackage{textcomp} % Zusätzliches Package für °C
|
|
\usepackage{listings} % Codesnippets
|
|
\usepackage{scrhack} % Hack for lstlisting i suspect :-/
|
|
\usepackage{color}
|
|
% Setup für Codeblocks
|
|
\lstset{
|
|
% Optionen
|
|
breaklines=true,
|
|
breakatwhitespace=true,
|
|
breakautoindent=true,
|
|
frame=single,
|
|
%framexleftmargin=19pt,
|
|
inputencoding=utf8,
|
|
language=awk,
|
|
%numbers=left,
|
|
%numbersep=8pt,
|
|
showspaces=false,
|
|
showstringspaces=false,
|
|
tabsize=1,
|
|
%xleftmargin=19pt,
|
|
captionpos=b,
|
|
% Styling
|
|
%basicstyle=\footnotesize\ttfamily,
|
|
%commentstyle=\footnotesize,
|
|
%keywordstyle=\footnotesize\ttfamily,
|
|
%numberstyle=\footnotesize,
|
|
%stringstyle=\footnotesize\ttfamily,
|
|
}
|
|
% Hack für Sonderzeichen in Codeblocks
|
|
\lstset{literate=%
|
|
{Ö}{{\"O}}1
|
|
{Ä}{{\"A}}1
|
|
{Ü}{{\"U}}1
|
|
{ß}{{\ss}}1
|
|
{ü}{{\"u}}1
|
|
{ä}{{\"a}}1
|
|
{ö}{{\"o}}1
|
|
{°}{{${^\circ}$}}1
|
|
}
|
|
|
|
% Befehl für TODO-Markierungen
|
|
\newcommand{\todo}{\textcolor{blue}{\emph{Dieser Bereich ist in Bearbeitung.}}}
|
|
|
|
% Festlegung Kopf- und Fußzeile
|
|
\defpagestyle{meinstil}{%
|
|
{\headmark \hfill}
|
|
{\hfill \headmark}
|
|
{\hfill \headmark\hfill}
|
|
(\textwidth,.4pt)
|
|
}{%
|
|
(\textwidth,.4pt)
|
|
{\pagemark\hfill Jan Philipp Timme}
|
|
{Version 0.1 vom \today \hfill \pagemark}
|
|
{Version 0.1 vom \today \hfill \pagemark}
|
|
}
|
|
\pagestyle{meinstil}
|
|
|
|
\raggedbottom
|
|
|
|
\renewcommand{\topfraction}{1}
|
|
\renewcommand{\bottomfraction}{1}
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
% Beginn der Inhalte
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
\begin{document}
|
|
|
|
% Titelseite
|
|
\thispagestyle{empty}
|
|
\includegraphics[width=0.2\textwidth]{res/Wortmarke_WI_schwarz.pdf}
|
|
{ ~ \sffamily
|
|
\vfill
|
|
{\Huge\bfseries Verarbeitung von Datenströmen im RDF-Format in Kombination mit Hintergrundwissen in der C-SPARQL-Engine}
|
|
\bigskip
|
|
|
|
{\Large Jan Philipp Timme
|
|
\\[2ex]
|
|
Bachelor-Arbeit im Studiengang "`Angewandte Informatik"'
|
|
\\[5ex]
|
|
\today
|
|
}
|
|
}
|
|
\vfill
|
|
~ \hfill
|
|
\includegraphics[height=0.3\paperheight]{res/H_WI_Pantone1665.pdf}
|
|
\vspace*{-3cm}
|
|
|
|
% Seite mit Personen und Selbstständigkeitserklärung
|
|
\newpage \thispagestyle{empty}
|
|
\begin{tabular}{ll}
|
|
{\bfseries\sffamily Autor} & Jan Philipp Timme \\
|
|
& 1271449 \\
|
|
& jan-philipp.timme@stud.hs-hannover.de \\[5ex]
|
|
{\bfseries\sffamily Erstprüferin:} & Prof. Dr. Jürgen Dunkel \\
|
|
& Abteilung Informatik, Fakultät IV \\
|
|
& Hochschule Hannover \\
|
|
& juergen.dunkel@hs-hannover.de \\[5ex]
|
|
{\bfseries\sffamily Zweitprüfer:} &Prof. Dr. --- --- \\
|
|
& Abteilung Informatik, Fakultät IV \\
|
|
& Hochschule Hannover \\
|
|
& ---@---.--
|
|
\end{tabular}
|
|
|
|
\vfill
|
|
|
|
% fett und zentriert in der Minipage
|
|
\begin{center} \sffamily\bfseries Selbständigkeitserklärung \end{center}
|
|
|
|
Hiermit erkläre ich, dass ich die eingereichte Bachelor-Arbeit
|
|
selbständig und ohne fremde Hilfe verfasst, andere als die von mir angegebenen Quellen
|
|
und Hilfsmittel nicht benutzt und die den benutzten Werken wörtlich oder
|
|
inhaltlich entnommenen Stellen als solche kenntlich gemacht habe.
|
|
\vspace*{7ex}
|
|
|
|
Hannover, den \today \hfill Unterschrift
|
|
|
|
\pdfbookmark[0]{Inhalt}{contents}
|
|
% Inhaltsverzeichnis
|
|
\tableofcontents
|
|
% Abbildungsverzeichnis
|
|
\listoffigures
|
|
% Codeverzeichnis
|
|
\lstlistoflistings
|
|
% Tabellenverzeichnis
|
|
\listoftables
|
|
|
|
\newpage
|
|
|
|
%%% Hier kommt inhaltlicher Inhalt! %%%
|
|
|
|
\chapter{Einleitung}
|
|
|
|
\todo
|
|
|
|
Diese Arbeit beschäftigt sich mit der Verarbeitung von komplexen Ereignissen (CEP) auf RDF-Datenströmen mit C-SPARQL.
|
|
|
|
\section{Einführung in Complex Event Processing}
|
|
|
|
\todo
|
|
|
|
Was ist CEP und warum sollte man es verwenden wollen?
|
|
|
|
Generell sollen Muster von primitiven Events erkannt und zu komplexen Events zusammengefasst werden. (Niedrige Abstraktion \textrightarrow~ Höhere Abstraktion). Dann sollen daraus tolle Erkenntnisse gewonnen werden.
|
|
|
|
Wir verarbeiten Ereignisströme und versuchen aus dem großen Rauschen bestimmte Ereignismuster zu erkennen.
|
|
Und wir wollen kurz-, mittel- oder langfristig bestimmte Werte beobachten und sicherstellen, dass sie innerhalb eines spezifizierten Wertebereichs bleiben.
|
|
Es ist eine tolle Herangehensweise, um aus großen Datenströmen wesentliche Informationen zu extrahieren - noch bevor ein Mensch diese Daten zu Gesicht bekommt.
|
|
|
|
\section{Ereignisquellen}
|
|
|
|
\todo
|
|
|
|
Ereignisse treten überall auf, wenn man sich darauf einlässt.
|
|
|
|
Welche Ereignisse kann man sich denn so vorstellen?
|
|
Diese hier:
|
|
\begin{itemize}
|
|
\item Ein Online-Shop meldet eine ausgelöste Bestellung
|
|
\item Ein soziales Netzwerk meldet die Interaktion eines Benutzers
|
|
\item Die Wetterstation meldet ihre aktuellen Messwerte
|
|
\item Windkraftanlagen melden ihre Drehgeschwindigkeit
|
|
\item Ein Auto meldet Fehlzündungen im zweiten Zylinder
|
|
\item Fabrikmaschinen melden Fehler im Betrieb
|
|
\item Rauchmelder melden ihre Auslösung
|
|
\item \dots und vieles mehr
|
|
\end{itemize}
|
|
|
|
\section{Ereignisse als Informationsträger}
|
|
|
|
\todo
|
|
|
|
Alles, was irgendwo passiert liefert Informationen über den Zustand unserer Umgebung.
|
|
Jede aktuell gemeldete Information ist ein Ereignis. Eine gerade gemessene Temperatur, eine Fehlermeldung einer Werkzeugmaschine oder das Auslösen eines Rauchmelders sind Ereignisse, die einen aktuellen Zustand unserer Welt repräsentieren.
|
|
|
|
Für unsere Zwecke können wir das nutzen.
|
|
Ereignisse haben einen Zeitstempel [und eine ID]. Der Zeitstempel ist wichtig, die ID auch etwas.
|
|
|
|
Ein Ereignis kann beispielsweise so strukturiert sein:
|
|
\begin{lstlisting}[caption={Beispielhaftes Ereignis dargestellt in JSON}]
|
|
{
|
|
"ID": "17352",
|
|
"Zeitstempel": "Mo 4. Apr 12:38:19 CEST 2016",
|
|
"Daten": {
|
|
"Temperatur": "19°C",
|
|
"Luftfeuchtigkeit": "31%"
|
|
}
|
|
}
|
|
\end{lstlisting}
|
|
|
|
\section{Ereignisströme als Datenquelle}
|
|
|
|
\todo
|
|
|
|
Ja, Ereignisse treten öfters in Rudeln auf. Wenn viele Ereignisse aneinandergereiht werden, spricht man von einem Ereignisstrom.
|
|
Anbieter von Daten können anstatt aktueller Messwerte als einzelnes Ereignis natürlich gleich Ereignisströme liefern. Das ist technisch sicherlich auch ganz praktisch, weil Verzicht auf Polling und so Sachen.
|
|
|
|
\chapter{Gegenüberstellung existierender CEP-Engines}
|
|
|
|
\todo
|
|
|
|
Es gibt bereits einige Technologien um Ereignisströme zu verarbeiten.
|
|
Im Folgenden stelle ich nun ein paar bekannte Systeme kurz vor.
|
|
|
|
Wichtig wären gegebenenfalls diese Kriterien:
|
|
|
|
\paragraph{Integration von Hintergrundwissen}
|
|
Ereignisse kommen ohne Kontext, daher ist es nötig, sie in einen Kontext zu bringen, um etwas mit dem Ereignis anfangen zu können.
|
|
Um nun den passenden Kontext herzustellen, muss dieses Ereignis also mit weiteren Daten verknüpft werden.
|
|
Das können andere Ereignisse oder Daten sein, die uns schon bekannt sind - Hintergrundwissen.
|
|
|
|
\paragraph{(Performance)}
|
|
Auch, wenn einige tausend Ereignisse über einen Datenstrom in der Minute eintreffen muss die Software dennoch sehr zeitnah (im Idealfall sofort) Ergebnisse liefern.
|
|
|
|
(Das hier wird später ein Grund sein, weshalb Reasoning nur sehr begrenzt auf Datenströmen stattfinden kann oder aber sehr teuer ist.)
|
|
|
|
|
|
\section{Etalis/EP-SPARQL?}
|
|
|
|
\todo
|
|
|
|
Kenne ich noch nicht.
|
|
|
|
\section{CQELS?}
|
|
|
|
\todo
|
|
|
|
Kenne ich noch nicht.
|
|
|
|
\section{Esper}
|
|
|
|
\todo
|
|
|
|
Ein Ansatz mit einer eigenen Abfragesprache.
|
|
Hintergrundwissen etwas fummelig, aber theoretisch möglich. Nur halt nicht in der selben Abfragesprache.
|
|
|
|
\section{C-SPARQL}
|
|
|
|
\todo
|
|
|
|
Verarbeitet Ströme im RDF-Format. Kann Hintergrundwissen im RDF-Format einbeziehen. Wurde in Java implementiert \dots
|
|
Es gibt einen W3C-Standard für die Sprache C-SPARQL.
|
|
Diese Engine werde ich nachher genauer vorstellen und benutzen.
|
|
|
|
\chapter{Die C-SPARQL-Engine im Detail}
|
|
|
|
\todo
|
|
|
|
So, hier kommt dann das, was man so zu C-SPARQL erzählen kann.
|
|
Dieser Bereich bekommt noch genug Sections für die Features von C-SPARQL.
|
|
|
|
\section{Abfrage von bestimmten Ereignistypen}
|
|
|
|
\todo
|
|
|
|
\section{Keine Ahnung, aber ganz viel}
|
|
|
|
\todo
|
|
|
|
\chapter{Die C-SPARQL-Engine im Einsatz}
|
|
|
|
\todo
|
|
|
|
Hier wird jetzt mal wirklich C-SPARQL verwendet.
|
|
|
|
\section{RDF-Datenströme}
|
|
|
|
\todo
|
|
|
|
Spannender ist es, wenn man dann ein Haufen RDF-Tripel reingedrückt bekommt.
|
|
Die sehen anders aus, sind aber auch toll.
|
|
Schemenhaft könnten die ja so aussehen:
|
|
|
|
Wir können uns diese Datenströme angucken und beispielsweise auf bestimmte Dinge achten.
|
|
Aber irgendwie ist das nicht so toll, weil unsere Abfragen recht spezifisch sein müssen.
|
|
Wäre es nicht toll, wenn wir bestimmte Dinge bereits vorher irgendwie da integrieren könnten?
|
|
|
|
\section{Beispielszenario}
|
|
|
|
\todo
|
|
|
|
Ich hab noch keine richtig tolle Idee, aber das kommt noch.
|
|
|
|
\section{Umsetzung mit C-SPARQL}
|
|
|
|
\todo
|
|
|
|
Jetzt kommt ein kurzer Schwank dazu, wie die Umsetzung gedacht ist.
|
|
|
|
\subsection{Nötiger Code für das Setup}
|
|
|
|
\todo
|
|
|
|
Zunächst wird ein Datenstrom benötigt; dafür wäre ein kleiner Generator nicht verkehrt.
|
|
|
|
\subsection{Abfrage des Datenstroms mit C-SPARQL}
|
|
|
|
\todo
|
|
|
|
Und jetzt werden Listener und Abfragen gebaut, um aus diesem Strom Informationen zu extrahieren oder neue, höherwertige Ereignisse zu konstruieren.
|
|
|
|
\section{Bewertung/Ergebnis}
|
|
|
|
\todo
|
|
|
|
\enquote{Und? Wie war's?}
|
|
|
|
\chapter{Fazit}
|
|
|
|
\todo
|
|
|
|
Die Engine macht sich hoffentlich ganz gut.
|
|
|
|
\chapter{Ausblick}
|
|
|
|
\todo
|
|
|
|
Vielleicht geht das mit dem Reasoning später ja noch besser - aktueller Stand ist noch limitiert, aber es wird fleißig daran geforscht. \dots
|
|
|
|
% Kurzer Test
|
|
\cite{robbins:gawk}[Siehe ab S.95]
|
|
|
|
% Referenz auf Bibtex mit Kommentar
|
|
% \cite{robbins:gawk}[Siehe ab S.95]
|
|
|
|
% Einbinden von Tex-Files
|
|
%\input{abkuerz.tex}
|
|
%\input{einfuehrung.tex}
|
|
|
|
% Einbinden von größeren Tex-Files, z.B. Kapiteln
|
|
%\include{normen}
|
|
%\include{aufbau}
|
|
%\include{zitieren}
|
|
%\include{form}
|
|
%\include{allgtips}
|
|
|
|
%%% Ende inhaltlicher Inhalt! %%%
|
|
|
|
% Literaturverzeichnis
|
|
% Schlüssel als Buchstaben
|
|
\bibliographystyle{alpha}
|
|
\bibliography{Literaturverweise}
|
|
|
|
\end{document}
|
|
% Nothing beyond this line!
|