\documentclass{f4_beamer}

% Basic setup
\usepackage[german]{babel} % Sprachpaket für Deutsch (Umlaute, Trennung,deutsche Überschriften)
\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{xcolor}
\usepackage{float}
\usepackage{soul}
\usepackage{verbatim} % für comment-environment
\usepackage{amsmath}

% 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
}

% Broken citation needs broken command
\newcommand\mathplus{+}

% Actual beamer related document setup
\title{CEP auf RDF-Datenströmen mit C-SPARQL}
\subtitle{Bachelorkolloquium}
\author{Jan Philipp Timme}
\date{\today}

% Content below this line
\begin{document}


\section{Motivation}

\begin{frame}{Motivation}
\begin{itemize}
\item Immer mehr Geräte sind mit dem Internet verbunden
\item Sollen überwacht werden beziehungsweise überwachen selbst etwas
\item Bieten kontinuierlich aktuelle Zustands- und Messinformationen 
\item $\rightarrow$ In Form von RDF-Ereignisdatenströmen abrufbar
\end{itemize}
\end{frame}

\begin{frame}{Ereignisdatenströme}
\begin{itemize}
\item Transportieren Daten von einzelnen Ereignissen
\item Jedes Ereignis bildet kleinen Teil der Realität ab
\begin{itemize}
\item \dots sofern Daten korrekt sind (Messfehler, Übertragungsfehler, \dots)
\end{itemize}
\item Aber: Sind oft zeitlich begrenzt gültig
\item Und: Treten meist hochfrequent auf
\item $\rightarrow$ Große Datenmengen in kürzester Zeit
\end{itemize}
\end{frame}

\begin{frame}{Verarbeitung der Ereignisdatenströme}
\begin{itemize}
\item Ein Ereignis für sich trägt kaum Bedeutung
\item Betrachtung in Kontext notwendig
\item Der Kontext ergibt sich \dots
\begin{itemize}
\item \dots durch relevante, weitere Ereignisse
\item \dots durch Integration von \emph{Domänenwissen}
\end{itemize}
\item Möglichst schnelle Verarbeitung gefordert
\item $\rightarrow$ Complex Event Processing (CEP)
\end{itemize}
\end{frame}

\begin{frame}{Complex Event Processing (CEP)}
\begin{itemize}
\item Betrachtung von Ereignissen in \emph{Sliding Windows}
\item $\rightarrow$ In-Memory Processing
\item Erkennung von Ereignismustern
\item Aggregation von Ereignissen
\item $\rightarrow$ Erzeugung von komplexen Ereignissen
\end{itemize}
\end{frame}

\begin{frame}{Ziel der Arbeit}
\begin{itemize}
\item Verarbeitung von RDF-Ereignisdatenströmen mit CEP
\item Dabei: Integration von Domänenwissen
\item Und: In wie weit kann Reasoning\footnote{Dazu später mehr \dots} genutzt werden?
\item $\rightarrow$ Anhand eines Beispielszenarios praktisch durchführen
\end{itemize}
\end{frame}


\section{Exkurs: Grundlagen RDF}

\begin{frame}{Exkurs: RDF}
\begin{itemize}
\item Resource Description Framework
\item Framework zur Beschreibung und Modellierung von Wissen
\item Aussagen sind Tripel
\item Bestehen aus Subjekt, Prädikat und Objekt
\item Werden als URI repräsentiert
\begin{itemize}
\item Im Objektteil sind auch Literalwerte erlaubt
\end{itemize}
\end{itemize}

Es folgt ein Beispiel \dots
\end{frame}

\begin{frame}[fragile]{Beispiel: Zwei RDF-Tripel in Turtle-Notation}
Fakten über ein beispielhaftes Subjekt in RDF:
\begin{lstlisting}
@prefix car: <http://example.org/carSim/objects/Car#> .
@prefix carModel: <http://example.org/carSim/objects/CarModel#> .
@prefix carOnt: <http://example.org/carSim/carSimulationOntology#> .

car:23	carOnt:isCarModel	carModel:42 .
car:23	carOnt:hasNickname	"Alf"^^xsd:string .
\end{lstlisting}
\begin{itemize}
\item Turtle erlaubt mit \texttt{@prefix} die Definition von Prefixen\footnote{Für die Übersichtlichkeit werden Prefixe auf den folgenden Folien weggelassen.}
\item $\rightarrow$ Übersichtliche Repräsentation der Fakten
\end{itemize}
\end{frame}

\begin{frame}[fragile]{Beispiel: Zwei RDF-Tripel visualisiert}
\begin{figure}[htbp]
\centering
\includegraphics[width=\textwidth]{img/triple-spo.pdf}
\caption{Prädikate verknüpfen ein Subjekt mit Objekt und Literalwert}
\label{fig:triple_spo}
\end{figure}
\begin{lstlisting}
car:23	carOnt:isCarModel	carModel:42 .
car:23	carOnt:hasNickname	"Alf"^^xsd:string .
\end{lstlisting}
\end{frame}

\begin{frame}{Assertion Box (ABox) und Terminology Box (TBox)}
\begin{itemize}
\item Unterscheidung zwischen Faktenbasis (ABox) und Terminologie (TBox)
\item TBox enthält Vokabular mit definierter Bedeutung
\item $\rightarrow$ Analog: Klassendefinition in OOP 
\begin{itemize}
\item Objektklassen
\item Prädikate
\end{itemize}
\item ABox enthält konkrete Fakten
\item $\rightarrow$ Analog: Instanzen in OOP 
\begin{itemize}
\item z.B. Wissen über existierende Objekte, \dots
\end{itemize}
\end{itemize}
\end{frame}

\begin{frame}[fragile]{Beispiel für eine TBox}
Definition der Klassen \texttt{Car}, \texttt{CarModel} und \texttt{Driver} in RDF-Schema (RDFS):
\begin{lstlisting}
:Car	rdf:type	rdfs:class .
:CarModel	rdf:type	rdfs:class .
:Driver	rdf:type	rdfs:class .

:drives	rdf:type	rdf:Property .
:drives	rdfs:domain	:Driver .
:drives	rdfs:range	:Car .

:isCarModel	rdf:type	rdf:Property .
:isCarModel	rdfs:domain	:Car .
:isCarModel	rdfs:range	:CarModel .
\end{lstlisting}
\end{frame}

\begin{frame}[fragile]{Beispiel für eine ABox}
Beschreibung eines PKW und dessen Fahrer mit Hilfe der Terminologie aus der vorherigen TBox:
\begin{lstlisting}
car:5	rdf:type	:Car .
car:5	:isCarModel	carModel:8 .

carModel:8	rdf:type	:CarModel .
carModel:8	:maximumMotorRPM	4300 .

driver:1	rdf:type	:Driver .
driver:1	:drives	car:5 .
driver:1	:hasName	"Max Mustermann"^^xsd:string .
\end{lstlisting}
\end{frame}

\begin{frame}{Reasoning}
\begin{itemize}
\item Prozess zum automatischen Anreichern von RDF-Daten
\item Basiert auf einer gegebenen TBox
\item Ermittelt in der ABox enthaltenes, implizites Wissen
\end{itemize}

Dazu folgt nun ein Beispiel \dots
\end{frame}

\begin{frame}[fragile]{Beispiel: Reasoning}
Gegeben sei folgende ABox:
\begin{lstlisting}
:a	:drives	:b .
\end{lstlisting}
Führt man nun Reasoning mit Hilfe dieser TBox durch:
\begin{lstlisting}
:drives	rdf:type	rdf:Property .
:drives	rdfs:domain	:Driver .
:drives	rdfs:range	:Car .

:Vehicle	rdf:type	rdfs:class .
:Car	rdf:type	rdfs:class .
:Car	rdfs:subclassOf	:Vehicle .
\end{lstlisting}
So ergibt sich daraus folgendes, implizites Wissen:
\begin{lstlisting}
:a	rdf:type	:Driver .
:b	rdf:type	:Car .
:b	rdf:type	:Vehicle .
\end{lstlisting}
\end{frame}

\begin{frame}{Zusammenfassung RDF-Exkurs}
\begin{itemize}
\item RDF-Daten bestehen aus Tripeln (Subjekt, Prädikat, Objekt)
\item ABox enthält Fakten
\item TBox enthält Definitionen für Klassen und Attribute
\item Reasoning reichert vorhandenes Wissen automatisch um \emph{implizites} Wissen an
\begin{itemize}
\item \dots dafür ist eine TBox mit Vokabular notwendig
\item Unter Nutzung von Vokabular auf RDFS-Basis kann schon viel erreicht werden
\end{itemize}
\end{itemize}
\end{frame}


\section{Complex Event Processing mit C-SPARQL}

\begin{frame}[fragile]{RDF-Ereignisdatenströme}
\begin{itemize}
\item Ereignisdaten kommen als RDF-Quadrupel an
\begin{itemize}
\item Tripel + Zeitstempel $\rightarrow$ Quadrupel (kurz: Quads)
\end{itemize}
\end{itemize}
Beispiel für Quadrupel aus RDF-Ereignisdatenströmen:
\begin{lstlisting}
(1344829400)	event:324	rdf:type	carOnt:CarStatusEvent .
(1344829400)	event:324	carOnt:relatedCar	car:0 .
(1344829400)	event:324	carOnt:speed	63 .

(1344829405)	event:325	rdf:type	carOnt:CarStatusEvent .
(1344829405)	event:325	carOnt:relatedCar	car:0 .
(1344829405)	event:325	carOnt:speed	75 .
\end{lstlisting}
\end{frame}

\begin{frame}{Complex Event Processing}
\begin{itemize}
\item Ereignisdaten werden in Sliding Windows betrachtet
\item Auswertung anhand von CEP-Regeln
\item Mustererkennung und Aggregation von Ereignissen
\item $\rightarrow$ Erzeugung komplexer Ereignisse aus Ergebnissen
\item $\rightarrow$ Auslösen von Aktionen (externe Dienste anstoßen, Code ausführen)
\end{itemize}
\end{frame}



\begin{frame}{Sliding Window und Tumbling Window}
\begin{itemize}
\item Nur Ereignisse in einem Window sind Teil der Auswertung
\item Haben feste Größe (z.B. 15 Minuten oder 100 Ereignisse)
\item Werden nach jeder Auswertung weitergeschoben
\item Tumbling Window ist Sonderfall
\item \dots wird um seine Größe weitergeschoben
\begin{itemize}
\item $\rightarrow$ Ereignisse nur ein \emph{einziges Mal} darin enthalten
\end{itemize}
\end{itemize}
\begin{figure}[htbp]
\centering
\includegraphics[width=\textwidth]{img/slidingvstumblingwindow.pdf}
\caption{Sliding- und Tumbling Window auf einem Ereignisstrom}
\label{fig:slidingvstumblingwindow}
\end{figure}
\end{frame}

\begin{frame}{CEP mit C-SPARQL}
\begin{itemize}
\item \enquote{Continuous SPARQL}
\item Erweiterung der Abfragesprache SPARQL für RDF-Daten
\item Enthält Funktionalität zur Verarbeitung von RDF-Datenströmen
\item 
\end{itemize}
\end{frame}



\begin{frame}{}

\end{frame}


\section{Fazit}

\begin{frame}{Fazit}
\begin{itemize}
\item C-SPARQL-Engine noch nicht vollständig ausgereift
\item Einige Probleme bei der Durchführung des Beispielszenarios aufgetaucht
\item Einfacher Zugriff auf Domänenwissen ist großer Pluspunkt
\item Nutzung von Reasoning auf Basis von TBox mit RDF-Schema möglich
\item Umfang der C-SPARQL-Queries ist hingegen etwas groß
\item Für rein didaktische Zwecke auf jeden Fall zur Erprobung von CEP geeignet
\end{itemize}
\end{frame}

\begin{frame}{Ausblick}
\begin{itemize}
\item Nach einigen Verbesserungen und Fehlerbehebungen gut nutzbar
\item Dann auch definitiv für Einsteiger geeignet
\item Eventuell Reasoning auf Basis von TBox mit OWL-Ontologien denkbar
\begin{itemize}
\item Diese sind deutlich mächtiger als Vokabular auf RDFS-Basis
\item Ermöglichen Attribute mit Transitivität, Symmetrie, Inversen, \dots
\end{itemize}
\end{itemize}
\end{frame}


% Probably not used, not sure yet.
\begin{comment}
\begin{frame}{Literaturverzeichnis}
% Literaturverzeichnis
% Schlüssel als Buchstaben
\bibliographystyle{alpha}
\bibliography{Literaturverweise}
% Und JETZT zum Inhaltsverzeichnis hinzufügen. Geil!
\addcontentsline{toc}{chapter}{Literaturverweise}
\end{frame}
\end{comment}

\begin{frame}[fragile]{EOF}
Vielen Dank für Ihre Aufmerksamkeit!

Fragen?

Download der Software und Bachelorarbeit unter: \url{http://jpt.lu/thesispackage.zip}
\end{frame}

\end{document}
% No more content below this line
