[TASK] Generic commit.
This commit is contained in:
parent
2cd773b73f
commit
b067451a2f
@ -785,8 +785,28 @@ Innerhalb der \texttt{WHERE}-Klausel sieht dies wie folgt aus:
|
||||
?eventY rdf:type <http://example.org/type/Y> .
|
||||
FILTER(f:timestamp(?eventX,rdf:type,<http://example.org/type/X>) < f:timestamp(?eventY,rdf:type,<http://example.org/type/Y>))
|
||||
\end{lstlisting}
|
||||
\item Die \textbf{boolschen Operatoren} $\wedge$ und $\vee$: Öhm ... muss ich selber bauen \todo{FUCK!}
|
||||
\item Der \textbf{Negationsoperator} ($\neg A$): \dots
|
||||
\item Die \textbf{boolschen Operatoren} $\wedge$ und $\vee$: Mit dem Operator $\wedge$ kann über Ausdrücke wie $(A \wedge B)$ definiert werden, dass sowohl ein Ereignis vom Typ A als auch ein Ereignis vom Typ B im Muster vorkommen müssen. Um dies innerhalb von C-SPARQL auszudrücken, müssen innerhalb der \texttt{WHERE}-Klausel lediglich die Tripel selektiert werden, die zu den Ereignistypen korrespondieren:
|
||||
\begin{lstlisting}
|
||||
WHERE {
|
||||
?eventA rdf:type <http://example.org/type/A> .
|
||||
?eventB rdf:type <http://example.org/type/B> .
|
||||
}
|
||||
\end{lstlisting}
|
||||
Sollte eines der beiden Tripel nicht in der zu verarbeitenden Datenmenge enthalten sein, so gibt die gesamte C-SPARQL-Abfrage kein Ergebnis zurück. Somit ist gewährleistet, dass diese \texttt{WHERE}-Klausel dem Ereignismuster $(A \wedge B)$ entspricht.
|
||||
|
||||
Für den Operator $\vee$, mit dem eine entweder-oder-Beziehung ausgedrückt werden kann, ist etwas mehr Arbeit erforderlich. Nimmt man den Ausdruck $(A \vee B)$, so bedeutet dieser, dass \emph{entweder} ein Ereignis vom Typ A \emph{oder} ein Ereignis vom Typ B vorkommt, jedoch nicht beide zugleich. Innerhalb von C-SPARQL bedeutet dies, dass für die Selektion der Tripel für die Ereignistypen A und B zwei \emph{separate} \texttt{OPTIONAL}-Blöcke verwendet werden müssen. Auf Basis der selektierten Tripel wird dann eine \texttt{FILTER}-Anweisung gebaut, die mit Hilfe von \texttt{BOUND()} alle Tripel aus der Ergebnismenge ausschließt, bei denen beide oder keiner von beiden Ereignistypen vorhanden ist:
|
||||
\begin{lstlisting}
|
||||
WHERE {
|
||||
OPTIONAL {
|
||||
?eventA rdf:type <http://example.org/type/A> .
|
||||
}
|
||||
OPTIONAL {
|
||||
?eventB rdf:type <http://example.org/type/B> .
|
||||
}
|
||||
FILTER((BOUND(?eventA) || BOUND(?eventB)) && NOT (BOUND(?eventA) && BOUND(?eventB)))
|
||||
}
|
||||
\end{lstlisting}
|
||||
\item Der \textbf{Negationsoperator} ($\neg A$): \dots dafür wird \texttt{FILTER NOT EXISTS \{ \dots \}} benötigt, dann kann man einigermaßen akzeptable Muster bauen.
|
||||
\end{itemize}
|
||||
|
||||
\paragraph{Aggregation von Ereignissen}
|
||||
|
Loading…
Reference in New Issue
Block a user