diff --git a/Bachelorarbeit.tex b/Bachelorarbeit.tex index 2d8e11a..5270962 100644 --- a/Bachelorarbeit.tex +++ b/Bachelorarbeit.tex @@ -593,6 +593,14 @@ Da in dieser Arbeit die Verarbeitung von RDF-Ereignisdatenströmen anhand einer \item Transparente Implementierung der Engine durch Verwendung bekannter Technologien \end{itemize} +\begin{tabular}{l|lll} +Kriterium & EP-SPARQL & CQELS & C-SPARQL \\ +\hline +Programmiersprache(n) & Prolog und Java & Java & Java \\ +Technologien & Prolog, eigene Entwicklung & eigene Entwicklung & Jena, Sesame, Esper\\ +Beispiele & \dots & \dots & Ja \\ +\end{tabular} + \todo{Tabelle o.Ä. zum direkten Vergleich der Kriterien!} Unter Berücksichtigung dieser Kriterien fiel die Wahl auf die CEP-Engine C-SPARQL; sie wird im weiteren Lauf der Arbeit vorgestellt, um die Verarbeitung von RDF-Er\-eig\-nis\-da\-ten\-strö\-men durchzuführen und das Beispielszenario aus Kapitel~\ref{cpt:scenario} umzusetzen. @@ -634,26 +642,31 @@ Wie in Listing~\ref{lst:sample_event_rdf_quads} zu sehen ist, wurde die ID der E \section{C-SPARQL als Sprache für CEP-Regeln} Um die Ereignisdatenströme mit RDF-Quadrupeln nun in der C-SPARQL-Engine verarbeiten zu können, werden im Verarbeitungsprozess in C-SPARQL-Queries formulierte CEP-Regeln benötigt. Die Konstrukte und Fähigkeiten von C-SPARQL sollen in diesem Abschnitt erläutert werden. Weiterführend gibt es neben den Grundlagen zu SPARQL aus Kapitel~\ref{cpt:sparql_intro} noch ein Dokument der W3C\cite{w3c:sparql}. Eine detailliertere Erläuterung von C-SPARQL mit Beispielabfragen ist unter \cite{barbieri:csparql} nachzulesen. -Da C-SPARQL die Abfragesprache SPARQL lediglich erweitert, kann ein einfacher SPARQL-\texttt{SELECT}-Query als Grundgerüst verwendet werden: -\begin{lstlisting} -SELECT ... +Da C-SPARQL die Abfragesprache SPARQL lediglich erweitert, sind alle gültigen SPARQL-Abfragen automatisch auch gültige C-SPARQL-Abfragen\cite{barbieri:csparql}. Bevor nun die einzelnen Features von C-SPARQL erläutert werden, folgt nun ein ein gültiger Beispiel-Query, der als Grundlage der Erläuterungen dienen soll. Die Angabe von Prefixen mit der \texttt{PREFIX}-Klausel ist natürlich auch in C-SPARQL-Abfragen erforderlich, wird in diesem Abschnitt aber aus Gründen der Übersichtlichkeit weggelassen. +\begin{lstlisting}[label={cpt:example_csparql_query},caption={Beispielhafter C-SPARQL-Query}] +REGISTER QUERY exampleQuery AS +SELECT ?a ?b ?c +FROM STREAM [RANGE 5s STEP 1s] WHERE { - ... + ?a a . + ?c a . + BIND(f:timestamp(?a,rdf:type,) AS ?tsa) + BIND(f:timestamp(?c,rdf:type,) AS ?tsc) + FILTER(?tsa < ?tsc) + FILTER NOT EXISTS { + ?b a . + BIND(f:timestamp(?b,rdf:type,) AS ?tsb) + FILTER(?tsa < ?tsb && ?tsb < ?tsc) + } } \end{lstlisting} -Neben der Angabe von Prefixen mit der \texttt{PREFIX}-Klausel, die hier aus Gründen der Übersichtlichkeit weggelassen wird, erfordert C-SPARQL die Registrierung des Queries (\texttt{Query}) mit einem Namen (\texttt{QName}) an der Engine nach dem folgenden Schema: +Zuerst fällt auf, dass C-SPARQL die Registrierung des Queries an der Engine erfordert. Diese wird nach dem folgenden Schema durchgeführt, wobei \texttt{QName} einen Namen für die Abfrage angibt und \texttt{Query} für die gesamte, restliche Abfrage steht: \begin{lstlisting} 'REGISTER' ('QUERY'|'STREAM') QName 'AS' Query \end{lstlisting} -Vorerst werden C-SPARQL-Queries unter Angabe des Schlüsselwortes \texttt{QUERY} registriert, mit dem Schlüsselwort \texttt{STREAM} wird sich später im Abschnitt (?)\todo{Referenz!} beschäftigt. -Somit sieht das Grundgerüst eines C-SPARQL-Queries, der unter dem Namen \enquote{exampleQuery} an der Engine registriert werden soll, wie folgt aus: -\begin{lstlisting}[label={lst:sample_csparql_query_structure},caption={Grundgerüst eines C-SPARQL-Queries}] -REGISTER QUERY exampleQuery AS -SELECT ... -WHERE { - ... -} -\end{lstlisting} +Vorerst werden C-SPARQL-Queries unter Angabe des Schlüsselwortes \texttt{QUERY} registriert, mit dem Schlüsselwort \texttt{STREAM} wird sich später im Abschnitt~\ref{cpt:register_stream} beschäftigt. +Somit wurde die in Listing~\ref{lst:example_csparql_query} angegebene Abfrage als \texttt{QUERY} unter dem Namen \enquote{exampleQuery} an der Engine registriert. + \paragraph{Ereignisdatenströme in Sliding Windows} Um mit der Verarbeitung von Ereignisdatenströmen beginnen zu können, müssen die für die Verarbeitung benötigten RDF-Datenströme in der CEP-Regel angegeben werden. Das Konstrukt \texttt{FROM [NAMED] STREAM <\emph{streamUri}> [\emph{window}]} wird zwischen den Klauseln \texttt{SELECT} und \texttt{WHERE} angegeben und definiert neben der in \texttt{streamUri} zu hinterlegenden URI des zu konsumierenden RDF-Datenstroms auch das an Stelle von \texttt{window} zu definierende Sliding Window, in dem dieser betrachtet werden soll\cite{barbieri:csparql}. Die Angabe des Schlüsselworts \texttt{NAMED} ist hierbei optional und funktioniert ähnlich wie in herkömmlichen SPARQL-Queries indem die Herkunft der einströmenden Tripel in Variablen vorgehalten wird, die über die \texttt{GRAPH}-Klausel verwendet werden können. @@ -804,7 +817,7 @@ Mögliche Aggregationsfunktionen laut \cite{barbieri:csparql} sind: \end{itemize} -\section{Auslösen von Aktionen} +\section{Auslösen von Aktionen}\label{cpt:register_stream} \todo{CONSTRUCT wird hier verwendet, der Query wird als Datenstrom registriert um seine Ergebnisse in die Engine einzuspeisen!} Erzeugen von Ereignissen innerhalb von C-SPARQL-Queries (durch Registrierung der C-SPARQL-Queries als neue Ereignisströme an der Engine). Hinweise auf Möglichkeit der Auslösung von Reaktionen beim Beobachten der Abfrageergebnisse.