bachelorcolloquium/Bachelorkolloquium.tex

436 lines
13 KiB
TeX
Raw Normal View History

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
2016-10-18 11:49:57 +02:00
\item $\rightarrow$ In Form von RDF-Ereignisdatenströmen abrufbar
2016-10-17 09:49:21 +02:00
\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
2016-10-18 11:49:57 +02:00
\item Jedes Ereignis bildet kleinen Teil der Realität ab
2016-10-17 09:49:21 +02:00
\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-18 11:49:57 +02:00
\item Ein Ereignis für sich trägt kaum Bedeutung
2016-10-17 10:11:07 +02:00
\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}
2016-10-18 11:49:57 +02:00
\item Möglichst schnelle Verarbeitung gefordert
2016-10-17 10:11:07 +02:00
\item $\rightarrow$ Complex Event Processing (CEP)
\end{itemize}
\end{frame}
2016-10-18 14:14:10 +02:00
\begin{frame}{Was ist Complex Event Processing? (CEP)}
2016-10-17 10:11:07 +02:00
\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
2016-10-18 16:07:09 +02:00
\begin{itemize}
\item \dots unter Nutzung der C-SPARQL-Engine
\end{itemize}
2016-10-17 11:25:34 +02:00
\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-18 11:49:57 +02:00
2016-10-17 16:10:57 +02:00
\section{Exkurs: Grundlagen RDF}
2016-10-17 10:11:07 +02:00
2016-10-18 14:14:10 +02:00
\begin{frame}{Exkurs: Grundlagen 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}
2016-10-18 11:49:57 +02:00
\begin{lstlisting}
car:23 carOnt:isCarModel carModel:42 .
car:23 carOnt:hasNickname "Alf"^^xsd:string .
\end{lstlisting}
2016-10-17 11:00:23 +02:00
\end{frame}
2016-10-17 10:51:17 +02:00
2016-10-18 12:03:09 +02:00
\begin{frame}{Assertion Box (ABox) und Terminology Box (TBox)}
2016-10-17 13:12:33 +02:00
\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-18 11:49:57 +02:00
\item $\rightarrow$ Analog: Klassendefinition in OOP
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
2016-10-18 11:49:57 +02:00
\item $\rightarrow$ Analog: Instanzen in OOP
2016-10-17 13:22:30 +02:00
\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-18 14:04:21 +02:00
\begin{comment}
2016-10-17 13:22:30 +02:00
\begin{frame}[fragile]{Beispiel für eine TBox}
2016-10-18 11:49:57 +02:00
Definition der Klassen \texttt{Car}, \texttt{CarModel} und \texttt{Driver} in RDF-Schema (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 .
2016-10-18 11:49:57 +02:00
: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:54:11 +02:00
car:5 rdf:type :Car .
car:5 :isCarModel carModel:8 .
2016-10-17 13:22:30 +02:00
2016-10-17 16:54:11 +02:00
carModel:8 rdf:type :CarModel .
carModel:8 :maximumMotorRPM 4300 .
2016-10-17 13:22:30 +02:00
2016-10-17 16:54:11 +02:00
driver:1 rdf:type :Driver .
driver:1 :drives car:5 .
driver:1 :hasName "Max Mustermann"^^xsd:string .
2016-10-17 13:22:30 +02:00
\end{lstlisting}
\end{frame}
2016-10-18 14:04:21 +02:00
\end{comment}
2016-10-17 13:22:30 +02:00
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
2016-10-18 14:02:36 +02:00
\item Baut auf einer gegebenen TBox auf
2016-10-18 14:14:10 +02:00
\item Ermittelt in der ABox enthaltenes, \emph{implizites} Wissen
2016-10-17 13:38:20 +02:00
\end{itemize}
2016-10-17 15:23:21 +02:00
2016-10-18 11:49:57 +02:00
Dazu folgt nun ein Beispiel \dots
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}
2016-10-18 14:04:21 +02:00
Gegeben sei folgende Faktenbasis (ABox):
2016-10-17 13:50:52 +02:00
\begin{lstlisting}
2016-10-17 16:51:26 +02:00
:a :drives :b .
2016-10-17 13:50:52 +02:00
\end{lstlisting}
2016-10-18 14:04:21 +02:00
Führt man nun Reasoning mit Hilfe dieser Terminologie (TBox) durch:
2016-10-17 13:50:52 +02:00
\begin{lstlisting}
2016-10-17 16:51:26 +02:00
:drives rdf:type rdf:Property .
:drives rdfs:domain :Driver .
:drives rdfs:range :Car .
2016-10-18 11:49:57 +02:00
:Vehicle rdf:type rdfs:class .
:Car rdf:type rdfs:class .
:Car rdfs:subclassOf :Vehicle .
2016-10-17 13:50:52 +02:00
\end{lstlisting}
2016-10-18 12:03:09 +02:00
So ergibt sich daraus folgendes, implizites Wissen:
2016-10-17 13:50:52 +02:00
\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-18 14:02:36 +02:00
\begin{comment}
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)
2016-10-18 13:30:29 +02:00
\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
2016-10-17 14:06:36 +02:00
\begin{itemize}
2016-10-18 12:03:09 +02:00
\item \dots dafür ist eine TBox mit Vokabular notwendig
2016-10-18 13:30:29 +02:00
\item Unter Nutzung von Vokabular auf RDFS-Basis kann schon viel erreicht werden
2016-10-17 14:06:36 +02:00
\end{itemize}
\end{itemize}
\end{frame}
2016-10-18 14:02:36 +02:00
\end{comment}
2016-10-17 14:06:36 +02:00
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-18 11:49:57 +02:00
2016-10-18 14:02:36 +02:00
\begin{frame}[fragile]{Input: RDF-Ereignisdatenströme}
2016-10-18 13:30:29 +02:00
\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}
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
2016-10-18 14:02:36 +02:00
\begin{itemize}
\item Definieren Bedingungen und Aktionen
\item Aktionen werden ausgeführt, wenn Bedingungen erfüllt sind
\end{itemize}
2016-10-17 16:04:52 +02:00
\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-18 12:03:09 +02:00
\begin{frame}{Sliding Window und Tumbling Window}
2016-10-17 14:06:36 +02:00
\begin{itemize}
2016-10-18 12:11:36 +02:00
\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
2016-10-17 16:04:52 +02:00
\begin{itemize}
2016-10-18 12:03:09 +02:00
\item $\rightarrow$ Ereignisse nur ein \emph{einziges Mal} darin enthalten
2016-10-17 16:04:52 +02:00
\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-18 14:02:36 +02:00
\begin{frame}{CEP mit der C-SPARQL-Engine}
2016-10-17 14:06:36 +02:00
\begin{itemize}
2016-10-17 16:10:57 +02:00
\item \enquote{Continuous SPARQL}
2016-10-18 14:14:10 +02:00
\item In Java implementiert, basiert auf Bibliotheken Apache Jena und Sesame
2016-10-18 12:11:36 +02:00
\item Erweiterung der Abfragesprache SPARQL für RDF-Daten
\item Enthält Funktionalität zur Verarbeitung von RDF-Datenströmen
2016-10-18 14:02:36 +02:00
\item Ermöglicht leichte Einbindung von lokalem Domänenwissen
\item Unterstützt Reasoning auf RDF-Datenströmen mit RDFS-Vokabular
2016-10-17 14:06:36 +02:00
\end{itemize}
2016-10-17 10:12:34 +02:00
\end{frame}
2016-10-18 14:02:36 +02:00
\begin{frame}{CEP-Regeln}
2016-10-18 14:54:18 +02:00
Szenario:
\begin{itemize}
\item PKW-Verleihgesellschaft möchte Fuhrpark überwachen
\item Vergünstigte Tarife für verschleißarmes Fahrverhalten
\item PKW senden periodisch \texttt{CarStatusEvent}s aus
\item Domänenwissen enthält Daten über die Fahrer der PKW
\item Beispiel: Notorische Raser (>130km/h) sollen erkannt werden
\end{itemize}
Dazu folgt nun der C-SPARQL-Query \dots
2016-10-18 14:02:36 +02:00
\end{frame}
2016-10-17 10:12:34 +02:00
2016-10-18 14:54:18 +02:00
\begin{frame}[fragile]{C-SPARQL Query}
\begin{lstlisting}
REGISTER QUERY getSpeedingCars AS
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX car: <http://example.org/carSim/carSimulationOntology#>
SELECT ?driverName ?car (AVG(?speed) AS ?avgSpeed)
FROM STREAM <http://example.org/carSim/stream/carStream> [RANGE 5m STEP 1m]
FROM <http://example.org/carSimKnowledgeGraph>
WHERE {
?e rdf:type car:CarStatusEvent .
?e car:relatedCar ?car .
?e car:speed ?speed .
?driver car:isDriving ?car .
?driver car:hasName ?driverName .
}
GROUP BY (?car)
HAVING (AVG(?speed) > 130)
\end{lstlisting}
\end{frame}
\begin{frame}{Ergebnis}
\begin{itemize}
\item Alle PKW mit Durchschnittsgeschwindigkeit >130km/h werden gemeldet
\item Verantwortliche Fahrer sind Teil des Ergebnisses
\item Weiterführend möglich: Observer schreiben und an Abfrage registrieren
\item In Observer: Buch über solche Vorfälle führen, ggf. in Rechnung stellen
\end{itemize}
2016-10-17 10:12:34 +02:00
\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
2016-10-18 14:54:18 +02:00
\begin{itemize}
\item Probleme mit Sprachparser, kryptische Exceptions, Zeitstempel nicht immer abrufbar
\end{itemize}
2016-10-17 16:25:59 +02:00
\item Einige Probleme bei der Durchführung des Beispielszenarios aufgetaucht
\item Einfacher Zugriff auf Domänenwissen ist großer Pluspunkt
2016-10-18 14:54:18 +02:00
\item Domänenwissen zur Laufzeit leicht veränderbar
2016-10-18 12:03:09 +02:00
\item Nutzung von Reasoning auf Basis von TBox mit RDF-Schema möglich
2016-10-18 14:54:18 +02:00
\begin{itemize}
\item \dots auch auf Daten der Ereignisdatenströme!
\end{itemize}
2016-10-17 16:25:59 +02:00
\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