2016-10-16 11:29:47 +02:00
\documentclass { f4_ beamer}
2016-10-16 19:11:39 +02:00
% 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}
2016-10-16 11:29:47 +02:00
\author { Jan Philipp Timme}
\date { \today }
2016-10-16 19:11:39 +02:00
% Content below this line
2016-10-16 11:29:47 +02:00
\begin { document}
2016-10-17 10:11:07 +02:00
2016-10-16 19:11:39 +02:00
\section { Motivation}
2016-10-16 11:29:47 +02:00
2016-10-17 09:49:21 +02:00
\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 In Form von RDF-Ereignisdatenströmen abrufbar
\end { itemize}
2016-10-16 11:29:47 +02:00
\end { frame}
2016-10-17 09:49:21 +02:00
\begin { frame} { Ereignisdatenströme}
\begin { itemize}
\item Transportieren Daten von einzelnen Ereignissen
\item Ereignisse bilden kleine Teile 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}
2016-10-16 11:29:47 +02:00
2016-10-17 09:49:21 +02:00
\begin { frame} { Verarbeitung der Ereignisdatenströme}
\begin { itemize}
2016-10-17 10:11:07 +02:00
\item Ereignisse für sich tragen 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 erforderlich
\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
2016-10-17 09:49:21 +02:00
\end { itemize}
2016-10-16 11:29:47 +02:00
\end { frame}
2016-10-17 11:25:34 +02:00
\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?
2016-10-17 15:23:21 +02:00
\item $ \rightarrow $ Anhand eines Beispielszenarios praktisch durchführen
2016-10-17 11:25:34 +02:00
\end { itemize}
\end { frame}
2016-10-17 16:10:57 +02:00
\section { Exkurs: Grundlagen RDF}
2016-10-17 10:11:07 +02:00
2016-10-17 11:00:23 +02:00
\begin { frame} { Exkurs: RDF}
2016-10-17 10:11:07 +02:00
\begin { itemize}
\item Resource Description Framework
\item Framework zur Beschreibung und Modellierung von Wissen
2016-10-17 11:00:23 +02:00
\item Aussagen sind Tripel
2016-10-17 11:03:49 +02:00
\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}
2016-10-17 10:11:07 +02:00
\end { itemize}
2016-10-17 11:25:34 +02:00
Es folgt ein Beispiel \dots
2016-10-17 10:11:07 +02:00
\end { frame}
2016-10-16 19:11:39 +02:00
2016-10-17 13:12:33 +02:00
\begin { frame} [fragile]{ Beispiel: Zwei RDF-Tripel in Turtle-Notation}
2016-10-17 13:50:52 +02:00
Fakten über ein beispielhaftes Subjekt in RDF:
2016-10-17 11:00:23 +02:00
\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#> .
2016-10-17 10:51:17 +02:00
2016-10-17 11:00:23 +02:00
car:23 carOnt:isCarModel carModel:42 .
car:23 carOnt:hasNickname "Alf"^ ^ xsd:string .
\end { lstlisting}
2016-10-17 14:02:14 +02:00
\begin { itemize}
2016-10-17 14:11:20 +02:00
\item Turtle erlaubt mit \texttt { @prefix} die Definition von Prefixen\footnote { Für die Übersichtlichkeit werden Prefixe auf den folgenden Folien weggelassen.}
2016-10-17 14:02:14 +02:00
\item $ \rightarrow $ Übersichtliche Repräsentation der Fakten
\end { itemize}
2016-10-17 10:51:17 +02:00
\end { frame}
2016-10-17 11:25:34 +02:00
\begin { frame} [fragile]{ Beispiel: Zwei RDF-Tripel visualisiert}
2016-10-17 11:00:23 +02:00
\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}
\end { frame}
2016-10-17 10:51:17 +02:00
2016-10-17 13:12:33 +02:00
\begin { frame} { Assertion Box (ABox) und Terminlogy Box (TBox)}
\begin { itemize}
2016-10-17 13:22:30 +02:00
\item Unterscheidung zwischen Faktenbasis (ABox) und Terminologie (TBox)
\item TBox enthält Vokabular mit definierter Bedeutung
2016-10-17 13:12:33 +02:00
\begin { itemize}
\item Objektklassen
2016-10-17 13:22:30 +02:00
\item Prädikate
\end { itemize}
\item ABox enthält konkrete Fakten
\begin { itemize}
\item z.B. Wissen über existierende Objekte, \dots
2016-10-17 13:12:33 +02:00
\end { itemize}
\end { itemize}
\end { frame}
2016-10-17 13:22:30 +02:00
\begin { frame} [fragile]{ Beispiel für eine TBox}
2016-10-17 13:38:20 +02:00
Definition der Klassen \texttt { Car} , \texttt { CarModel} und \texttt { Driver} in RDFS:
2016-10-17 13:22:30 +02:00
\begin { lstlisting}
2016-10-17 16:51:26 +02:00
:Car rdf:type rdfs:class .
:CarModel rdf:type rdfs:class .
:Driver rdf:type rdfs:class .
2016-10-17 13:22:30 +02:00
2016-10-17 16:51:26 +02:00
:drives rdf:type rdf:Property .
:drives rdfs:domain :Driver .
:drives rdfs:range :Car .
2016-10-17 13:22:30 +02:00
2016-10-17 16:51:26 +02:00
:isCarModel rdf:type rdf:Property .
:isCarModel rdfs:domain :Car .
.isCarModel rdfs:range :CarModel .
2016-10-17 13:22:30 +02:00
\end { lstlisting}
\end { frame}
\begin { frame} [fragile]{ Beispiel für eine ABox}
2016-10-17 13:50:52 +02:00
Beschreibung eines PKW und dessen Fahrer mit Hilfe der Terminologie aus der vorherigen TBox:
2016-10-17 13:22:30 +02:00
\begin { lstlisting}
2016-10-17 16:51:26 +02:00
car:0 rdf:type :Car .
car:0 :isCarModel carModel:0 .
2016-10-17 13:22:30 +02:00
2016-10-17 16:51:26 +02:00
carModel:0 rdf:type :CarModel .
carModel:0 :maximumMotorRPM 4300 .
2016-10-17 13:22:30 +02:00
2016-10-17 16:51:26 +02:00
driver:0 rdf:type :Driver .
driver:0 :drives car:0 .
driver:0 :hasName "Max Mustermann"^ ^ xsd:string .
2016-10-17 13:22:30 +02:00
\end { lstlisting}
\end { frame}
2016-10-17 13:38:20 +02:00
\begin { frame} { Reasoning}
\begin { itemize}
2016-10-17 13:50:52 +02:00
\item Prozess zum automatischen Anreichern von RDF-Daten
\item Basiert auf einer gegebenen TBox
\item Ermittelt in der ABox enthaltenes, implizites Wissen
2016-10-17 13:38:20 +02:00
\end { itemize}
2016-10-17 15:23:21 +02:00
Dazu folgt nun ein Beispiel
2016-10-17 13:38:20 +02:00
\end { frame}
2016-10-17 13:22:30 +02:00
2016-10-17 13:50:52 +02:00
\begin { frame} [fragile]{ Beispiel: Reasoning}
Gegeben sei folgende ABox:
\begin { lstlisting}
2016-10-17 16:51:26 +02:00
:a :drives :b .
2016-10-17 13:50:52 +02:00
\end { lstlisting}
Führt man nun Reasoning mit Hilfe dieser TBox durch:
\begin { lstlisting}
2016-10-17 16:51:26 +02:00
:Vehicle rdf:type rdfs:class .
:Car rdf:type rdfs:class .
:Car rdfs:subclassOf :Vehicle .
2016-10-17 13:50:52 +02:00
2016-10-17 16:51:26 +02:00
:drives rdf:type rdf:Property .
:drives rdfs:domain :Driver .
:drives rdfs:range :Car .
2016-10-17 13:50:52 +02:00
\end { lstlisting}
So ergibt sich daraus folgendes, zusätzliches Wissen:
\begin { lstlisting}
2016-10-17 16:51:26 +02:00
:a rdf:type :Driver .
:b rdf:type :Car .
:b rdf:type :Vehicle .
2016-10-17 13:50:52 +02:00
\end { lstlisting}
\end { frame}
2016-10-17 15:23:21 +02:00
\begin { frame} { Abfragen von RDF-Daten mit SPARQL}
\begin { itemize}
\item \enquote { SPARQL Protocol And RDF Query Language}
2016-10-17 15:30:20 +02:00
\item Schlüsselwörter sehr ähnlich zu SQL
\item Größter Unterschied in der \texttt { WHERE} -Klausel
\begin { itemize}
\item Gesuchte Tripelmuster werden formuliert
\item Tripel mit Platzhaltern (z.B. \texttt { ?carModel} )
\end { itemize}
\item Auch hier: Prefixe können genutzt werden\footnote { \dots und werden auf den folgenden Folien für die Übersichtlichkeit weggelassen}
2016-10-17 15:23:21 +02:00
\end { itemize}
2016-10-17 15:30:20 +02:00
Es folgt ein beispielhafter SPARQL-Query
2016-10-17 15:23:21 +02:00
\end { frame}
\begin { frame} [fragile]{ Beispielhafte SPARQL-Abfrage}
\begin { lstlisting}
PREFIX carOnt: <http://example.org/carSim/carSimulationOntology#>
PREFIX car: <http://example.org/carSim/objects/Car#>
SELECT ?maxMotorRPM
WHERE {
car:0 carOnt:isCarModel ?carModel .
?carModel carOnt:maximumMotorRPM ?maxMotorRPM .
}
\end { lstlisting}
Diese Abfrage selektiert zu dem PKW \texttt { car:0} die maximal zulässige Motordrehzahl über das Modell des PKW.
\end { frame}
2016-10-17 14:06:36 +02:00
\begin { frame} { Zusammenfassung RDF-Exkurs}
\begin { itemize}
\item RDF-Daten bestehen aus Tripeln (Subjekt, Prädikat, Objekt)
\item Unter Nutzung von Vokabular auf RDFS-Basis kann schon viel erreicht werden
\item Reasoning reichert vorhandenes Wissen automatisch um implizites Wissen an
\begin { itemize}
\item \dots dafür ist eine TBox notwendig
\end { itemize}
2016-10-17 15:23:21 +02:00
\item Mittels SPARQL können RDF-Daten abgefragt werden
2016-10-17 14:06:36 +02:00
\end { itemize}
\end { frame}
2016-10-17 10:51:17 +02:00
2016-10-17 16:10:57 +02:00
\section { Complex Event Processing mit C-SPARQL}
2016-10-17 11:25:34 +02:00
\begin { frame} { Complex Event Processing}
2016-10-17 14:06:36 +02:00
\begin { itemize}
2016-10-17 16:04:52 +02:00
\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)
2016-10-17 14:06:36 +02:00
\end { itemize}
2016-10-16 11:29:47 +02:00
\end { frame}
2016-10-17 16:04:52 +02:00
\begin { frame} { Sliding Window}
2016-10-17 14:06:36 +02:00
\begin { itemize}
2016-10-17 16:04:52 +02:00
\item Fenster, in dem Ereignisse betrachtet werden
\item Hat eine feste Größe bzw. Kapazität (Zeitraum oder Anzahl Ereignisse)
\item Wird um eine bestimmte Größe \enquote { weitergeschoben}
\item Nur die Ereignisdaten in dem Fenster sind Teil der Verarbeitung
2016-10-17 14:06:36 +02:00
\end { itemize}
2016-10-16 11:29:47 +02:00
\end { frame}
2016-10-17 16:04:52 +02:00
\begin { frame} { Unterschied Sliding Window - Tumbling Window}
2016-10-17 14:06:36 +02:00
\begin { itemize}
2016-10-17 16:04:52 +02:00
\item Tumbling Window ist Sonderfall des Sliding Window
\item \dots es wird immer um seine Größe weitergeschoben
\begin { itemize}
2016-10-17 16:10:57 +02:00
\item $ \rightarrow $ Es wird quasi \enquote { umgeklappt}
2016-10-17 16:04:52 +02:00
\item $ \rightarrow $ Ereignisse nur ein \emph { einziges} Mal darin enthalten
\end { itemize}
2016-10-17 14:06:36 +02:00
\end { itemize}
2016-10-17 16:04:52 +02:00
\begin { figure} [htbp]
\centering
\includegraphics [width=\textwidth] { img/slidingvstumblingwindow.pdf}
\caption { Sliding- und Tumbling Window auf einem Ereignisstrom}
\label { fig:slidingvstumblingwindow}
\end { figure}
2016-10-17 10:12:34 +02:00
\end { frame}
2016-10-17 16:10:57 +02:00
\begin { frame} { CEP mit C-SPARQL}
2016-10-17 14:06:36 +02:00
\begin { itemize}
2016-10-17 16:10:57 +02:00
\item \enquote { Continuous SPARQL}
\item Erweiterung von SPARQL zur Verarbeitung von RDF-Datenströmen
2016-10-17 14:06:36 +02:00
\item
\end { itemize}
2016-10-17 10:12:34 +02:00
\end { frame}
\begin { frame} { }
\end { frame}
2016-10-16 19:11:39 +02:00
\section { Umsetzung des Beispielszenarios}
2016-10-16 11:29:47 +02:00
2016-10-17 10:12:34 +02:00
\begin { frame} { }
\end { frame}
2016-10-16 19:11:39 +02:00
\section { Fazit}
2016-10-16 11:29:47 +02:00
2016-10-17 16:25:59 +02:00
\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 \dots dennoch bereits für kleine Projekte geeignet
\item Einfacher Zugriff auf Domänenwissen ist großer Pluspunkt
\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}
2016-10-17 10:12:34 +02:00
2016-10-17 16:25:59 +02:00
\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}
2016-10-17 10:12:34 +02:00
\end { frame}
2016-10-17 16:25:59 +02:00
2016-10-16 19:11:39 +02:00
% 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}
2016-10-16 11:29:47 +02:00
2016-10-17 16:10:57 +02:00
\begin { frame} [fragile]{ EOF}
2016-10-16 19:11:39 +02:00
Vielen Dank für Ihre Aufmerksamkeit!
Fragen?
2016-10-17 16:04:52 +02:00
Download der Software und Bachelorarbeit unter: \url { http://jpt.lu/thesispackage.zip}
2016-10-16 19:11:39 +02:00
\end { frame}
2016-10-16 11:29:47 +02:00
\end { document}
2016-10-16 19:11:39 +02:00
% No more content below this line