[TASK] Generic commit.

This commit is contained in:
Jan Philipp Timme 2016-09-30 08:40:45 +02:00
parent 22527963ff
commit 9cb558b582

View File

@ -693,15 +693,22 @@ FROM STEAM <http://example.org/exampleStream> [RANGE 30m STEP 5m]
verwendet werden.
\paragraph{Mustererkennung}
Um nun in der \texttt{WHERE}-Klausel von C-SPARQL-Abfragen Ereignismuster definieren zu können und diese mit Kontextbedingungen weiter zu verfeinern, müssen zunächst die Operatoren der Ereignisalgebra aus Kapitel~\ref{cpt:cep_intro} in Elemente der C-SPARQL-Sprache übersetzt werden. Um dies zu tun, werden folgende Ausdrücke aus C-SPARQL benötigt:
Um nun innerhalb der \texttt{WHERE}-Klausel von C-SPARQL-Abfragen Ereignismuster definieren zu können und diese mit Kontextbedingungen weiter zu verfeinern, müssen zunächst die Operatoren der Ereignisalgebra aus Kapitel~\ref{cpt:cep_intro} in Elemente der C-SPARQL-Sprache übersetzt werden. Um dies zu tun, werden folgende Ausdrücke aus C-SPARQL benötigt:
\begin{itemize}
\item \texttt{?s p o .}
\item \texttt{FILTER()}
\item \texttt{f:timestamp(?s,?p,?o)}
\item \texttt{ISBOUND(?var)}
\item Die Funktion \texttt{f:timestamp(?s,?p,?o)} gibt für das gegebene Tripel eines Ereignis-Quadrupels, bestehend aus Subjekt, Prädikat und Objekt, den zugehörigen Zeitstempel des Quadrupels zurück. Das Ergenis dieser Funktion wird später dazu verwendet, zeitliche Abfolgen und Beziehungen von Ereignissen festzustellen. Um die Funktion über das Prefix \texttt{f} ansprechen zu können, ist in der Abfrage folgende Prefix-Definition notwendig:
\begin{lstlisting}
PREFIX f: <http://larkc.eu/csparql/sparql/jena/ext#>
\end{lstlisting}
Die Funktion akzeptiert für jeden der drei Parameter neben klassischen Platzhaltern wie \texttt{?var}, auch die direkte Angabe von Werten in Form von URIs, sowohl in vollständiger Notation (\texttt{<\emph{uri}>}) und unter Nutzung von Prefixen (\texttt{\emph{prefix:example}}). Auch Literale können als Parameter angegeben werden\footnote{In der aktuell verwendeten Version 0.9.7 der C-SPARQL-Engine gibt es diesbezüglich einen Bug, sodass die Funktion für Tripel, die Literalwerte enhalten, keinen Zeitstempel zurückgibt.}. Ein Beispiel für die Nutzung dieser Funktion kann wie folgt aussehen:
\begin{lstlisting}
f:timestamp(?s,rdf:type,<http://example.org/type/A>)
\end{lstlisting}
\item \texttt{BIND(ausdruck AS ?var)}
\item \texttt{FILTER NOT EXISTS { ... }}
\item Optional: \texttt{OPTIONAL { ... }}
\item \texttt{ISBOUND(?var)}
\item \texttt{OPTIONAL \{ ... \}}
\item \texttt{FILTER NOT EXISTS \{ ... \}}
\item \texttt{FILTER()}
\end{itemize}
\todo{\dots} Ereignismuster lassen sich durch Sequenzen von auftretenden bzw. nicht auftretenden Ereignissen definieren. Um diese zu finden, müssen Tripel selektiert werden, die zu den benötigten Ereignistypen korrespondieren, wobei diese später über \texttt{FILTER}-Anweisungen in ihrer Reihenfolge festgelegt werden. Über Differenzen der durch \texttt{f:timestamp(?s,?p,?o)} angegebenen Zeitstempel von gegebenen Tripeln lassen sich auch zeitliche Beziehungen eingrenzen und festlegen.