[TASK] Generic commit.

This commit is contained in:
Jan Philipp Timme 2016-09-30 11:44:50 +02:00
parent 5ac780c517
commit 138d66b268

View File

@ -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 <http://example.org> [RANGE 5s STEP 1s]
WHERE {
...
?a a <http://example.org/type/A> .
?c a <http://example.org/type/C> .
BIND(f:timestamp(?a,rdf:type,<http://example.org/type/A>) AS ?tsa)
BIND(f:timestamp(?c,rdf:type,<http://example.org/type/C>) AS ?tsc)
FILTER(?tsa < ?tsc)
FILTER NOT EXISTS {
?b a <http://example.org/type/B> .
BIND(f:timestamp(?b,rdf:type,<http://example.org/type/B>) 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.