diff --git a/Bachelorarbeit.tex b/Bachelorarbeit.tex index 70e3c37..4106b3e 100644 --- a/Bachelorarbeit.tex +++ b/Bachelorarbeit.tex @@ -423,34 +423,39 @@ ACTION \end{lstlisting} \paragraph{Erkennung von Ereignismustern} -\todo{MEHR!} -Komplexe Vorgänge kann man häufig über Muster aus den Ereignissen erkennen, die sie auslösen. Hierbei spielen Ereignissequenzen und die zeitlichen Beziehungen zwischen Ereignissen eine Rolle. Um ein \enquote{bedeutungsvolles Ereignismuster} zu erkennen, wird eine CEP-Regel definiert, die dieses Muster in ihrem \texttt{CONDITION}-Teil beschreibt. -Ein Beispiel für ein Ereignismuster, welches unsachgemäß abgestellte PKW erkennen kann, könnte so aussehen: +Komplexe Vorgänge kann man durch Muster in den Ereignisfolgen erkennen, die sie bei ihrer Durchführung ausgelöst haben. Hierbei spielen Ereignisfolgen und die zeitlichen Beziehungen zwischen Ereignissen eine Rolle. Um ein \enquote{bedeutungsvolles Ereignismuster} zu erkennen, wird eine CEP-Regel benötigt, die dieses Muster in ihrem \texttt{CONDITION}-Teil beschreibt. +Ein Beispiel für eine Ereignisfolge, welche durch unsachgemäß abgestellte PKW ausgelöst werden kann, könnte so aussehen: \begin{itemize} -\item Ereignis A: Motor wurde abgeschaltet -\item \st{Ereignis B: Handbremse wurde angezogen} (trat \textbf{nicht} auf!) -\item Ereignis C: PKW wurde verriegelt +\item Ereignistyp A: Motor wurde abgestellt +\item \st{Ereignistyp B: Handbremse wurde angezogen} (trat \textbf{nicht} auf!) +\item Ereignistyp C: PKW wurde verriegelt \end{itemize} -Um dieses Muster in einer CEP-Regel verwenden zu können, müssen die Bedingungen, die das Muster impliziert, mit \emph{Ereignisalgebra} beschrieben werden. Diese Bedingungen müssen dann von einer Ereignisfolge erfüllt werden, um das Muster selbst zu erfüllen\cite{hsh:cep}. +Um diese Folge von Ereignistypen mit einer CEP-Regel erkennen zu können, müssen die Bedingungen, die dieses Ereignismuster impliziert, mit Hilfe von \emph{Ereignisalgebra} beschrieben werden. Eine Ereignisfolge ist Teilmenge eines Ereignisdatenstromes. Sie kann nach dem Schema $a_1b_1a_2c_1$ notiert werden, wobei $a_i$ die $i$-te Instanz des Ereignistypen A bezeichnet\cite{hsh:cep}. Zur Unterscheidung von Ereignistypen und Instanzen werden für Instanzen kleine Buchstaben, für Ereignistypen Großbuchstaben verwendet. Die Typen von Ereignissen werden zur Beschreibungen von Bedingungen in Ereignismustern verwendet. -Um ein Ereignismuster zu beschreiben werden diese Operatoren aus der Ereignisalgebra nach \cite{hsh:cep} benötigt: +Um ein Ereignismuster zu beschreiben werden Operatoren aus der Ereignisalgebra nach \cite{hsh:cep} benötigt: \begin{itemize} -\item Der \textbf{Sequenzoperator} $\rightarrow$ dient zur Formulierung zeitlicher Abhängigkeiten zwischen zwei Ereignistypen. So beschreibt der Ausdruck $A \rightarrow B$ eine Ereignisfolge, in der zuerst ein Ereignis vom Typ A auftritt, gefolgt von einer Ereignisinstanz des Typ B. Die Ereignisfolge $c_1a_1c_2b_1d_1$ erfüllt diese Bedingung. -\item Die \textbf{boolschen Operatoren} $\wedge$ und $\vee$: Sie definieren \textbf{keine} zeitlichen Abhängigkeiten zwischen Ereignissen, bestimmen aber, \emph{welche} Ereignisse in einer Folge vorkommen dürfen. So trifft der Ausdruck $(A \vee B)$ auf Ereignisfolgen zu, die entweder ein Ereignis vom Typ A oder ein Ereignis vom Typ B enthalten. Die Folgen $c_1b_1d_1d_2$, $a_1d_1d_2c_1c_2$ und $b_1c_1a_1$ würden auf diesen Ausdruck passen. Der Ausdruck $(A \wedge B)$ hingegen trifft nur auf Ereignisfolgen wie $d_1c_1a_1b_1c_2$ zu, in denen beide Ereignistypen vorkommen, wobei die zeitliche Reihenfolge keine Rolle spielt. -\item Den \textbf{Negationsoperator} $\neg$ erlaubt keine Vorkommnisse eines Ereignistyps in der Ereignisfolge und ergibt nur in Kombination mit dem Sequenzoperator oder unter Verwendung von Sliding Windows (siehe nachfolgenden Abschnitt über Sliding Windows) Sinn. So würde der Ausdruck $(\neg A)$ für die Folge $b_1c_1b_2$ zutreffen, nicht jedoch für die Folge $b_1b_2a_1c_1$. +\item Der \textbf{Sequenzoperator} $X \rightarrow Y$ dient zur Formulierung zeitlicher Abhängigkeiten zwischen zwei Ereignistypen. So beschreibt der Ausdruck eine Ereignisfolge, in der zuerst ein Ereignis vom Typ X auftritt, gefolgt von einer Ereignisinstanz des Typ Y. Die Ereignisfolge $c_1a_1c_2b_1d_1$ erfüllt diese Bedingung. +\item Die \textbf{boolschen Operatoren} $\wedge$ und $\vee$: Sie definieren \textbf{keine} zeitlichen Abhängigkeiten zwischen Ereignissen, bestimmen aber, \emph{welche} Ereignisse in einer Folge vorkommen dürfen. So trifft der Ausdruck $(A \vee B)$ auf Ereignisfolgen zu, die entweder ein Ereignis vom Typ A oder ein Ereignis vom Typ B enthalten. Die Folgen $c_1b_1d_1d_2$, $a_1d_1d_2c_1c_2$ und $b_1c_1a_1$ passen auf diesen Ausdruck. Der Ausdruck $(A \wedge B)$ hingegen trifft nur auf Ereignisfolgen wie $d_1c_1a_1b_1c_2$ zu, in denen beide Ereignistypen vorkommen, wobei die zeitliche Reihenfolge keine Rolle spielt. +\item Den \textbf{Negationsoperator} $\neg X$ erlaubt keine Vorkommnisse des Ereignistyps X in der Ereignisfolge und ergibt nur in Kombination mit dem Sequenzoperator oder unter Verwendung von Sliding Windows (siehe nachfolgenden Abschnitt über Sliding Windows) Sinn. So würde der Ausdruck $(\neg A)$ für die Folge $b_1c_1b_2$ zutreffen, nicht jedoch für die Folge $b_1b_2a_1c_1$. \end{itemize} -\todo{texttt within math environment?!} - Nimmt man nun das oben angegebene Beispielmuster und formuliert es in Ereignisalgebra, so erhält man: $(A)\rightarrow (\neg B) \rightarrow (C)$. Um auf die für dieses Muster passenden Ereignisinstanzen im Rahmen der weiteren Ereignisverarbeitung zugreifen zu können, müssen diese mit dem \texttt{AS}-Operator einer Variable zugewiesen werden können. Somit sieht dieses Muster nun wie folgt aus: \[(A\ AS\ a)\rightarrow (\neg B) \rightarrow (C\ AS\ c)\] -Dieses Muster kann man nun in einer CEP-Regel einsetzen, wie Listing~\ref{lst:abstract_cep_rule_two} zeigt. +Dieses Muster kann man nun in einer CEP-Regel einsetzen, jedoch ist noch nicht garantiert, dass die auf das Muster passenden Ereignisinstanzen sich auf den \emph{selben} PKW beziehen --- es fehlen noch \emph{Kontextbedingungen}. Um diese zu definieren muss innerhalb der CEP-Regel Zugriff auf die Daten der gefundenen Ereignisinstanzen möglich sein. Um dies zu ermöglichen, sind zwei weitere Hilfsmittel nötig: +\begin{itemize} +\item Die \textbf{Aliasanweisung} \texttt{AS} ermöglicht die Definition eines Variablennamens innerhalb des Ereignismusters, der die für einen Ereignistypen gefundene Ereignisinstanz enthalten soll. So würde das Ereignismuster $(A\ AS\ eventA)$ dafür sorgen, dass die gefundene Ereignisinstanz vom Typ A in der Variable \texttt{eventA} für den Rest der CEP-Regel verfügbar ist. +\item Um nun auf Attribute einer Ereignisinstanz zuzugreifen, wird der \textbf{Attributoperator} \texttt{.} verwendet: Gegeben sei eine Ereignisinstanz, welche das Attribut \texttt{pkwID} enthält und in der Variable \texttt{eventA} enthalten ist, so würde der Ausdruck \[eventA.pkwID\] den Wert dieses Attributs zurückgeben. +\item Methodenaufrufe und/oder lokaler Wissenslookup? \texttt{lookup(\emph{name})} +\end{itemize} +Geht man davon aus, dass die Ereignistypen A und C aus dem obigen Ereignismuster die ID des PKW, von dem das Ereignis ausgelöst wurde, in dem Attribut \texttt{pkwID} enthalten, so kann man mit der Kontextbedingung +\[a.pkwID\ =\ c.pkwID\] +sicherstellen, dass die CEP-Regel nur für Ereignisfolgen matcht, die von dem selben PKW ausgelöst wurden und das Muster erfüllen. Listing~\ref{lst:abstract_cep_rule_two} zeigt diese CEP-Regel. -\begin{lstlisting}[mathescape=true,label={lst:abstract_cep_rule_two},caption={CEP-Regel mit Definition eines Ereignisfensters}] +\begin{lstlisting}[mathescape=true,label={lst:abstract_cep_rule_two},caption={CEP-Regel mit Ereignismuster und Kontextbedingungen}] CONDITION ($(A\ AS\ a)\rightarrow (\neg B) \rightarrow (C\ AS\ c)$)[WindowSize:15min,StepSize:10s] - ... weitere Bedingungen ... + $\wedge$ a.pkwID = c.pkwID ACTION ... auszulösende Aktionen ... \end{lstlisting}