[TASK] Generic commit.

This commit is contained in:
Jan Philipp Timme 2016-10-10 17:09:12 +02:00
parent 804d6b219c
commit dbfc797624

View File

@ -1049,7 +1049,7 @@ Es folgt ein gekürzter Auszug aus der ABox der lokalen Wissensbasis:
:CarModel#1 car:maximumTirePressure 38^^xsd:integer .
:CarModel#1 car:requiresDriverLicense "B"^^xsd:string .
\end{lstlisting}
Für die Umsetzung dieses Beispielszenarios befindet sich das lokale Domänenwissen in dem Graphen \texttt{http://example.org/carSim/localDomainKnowledge}.
\section{Umsetzung der Anforderungen}
Um diese Ereignisdatenströme nun zu Verarbeiten, werden die Anforderungen des Szenarios aus Kapitel~\ref{cpt:scenario} zunächst genauer betrachtet und CEP-Regeln für sie formuliert.
@ -1286,7 +1286,7 @@ car:CarHandbrakeWearEvent rdfs:subClassOf car:CarWearEvent .
car:CarTireWearEvent rdf:type rdfs:Class .
car:CarTireWearEvent rdfs:subClassOf car:CarWearEvent .
\end{lstlisting}
Durch diese TBox ist es nun möglich, mit Hilfe von aktiviertem Reasoning alle Verschleißereignisse aus den vier erzeugten Ereignisdatenströmen zu extrahieren, ohne die einzelnen Verschleißereignistypen direkt nennen zu müssen. Um den jeweiligen Fahrer eines PKW den Verschleißereignissen zuordnen zu können, wird dieser über das lokale Domänenwissen unte Nutzung des Prädikats \texttt{car:isDrivenBy} ermittelt. Der folgende Query demonstriert dies:
Durch diese TBox ist es nun möglich, mit Hilfe von aktiviertem Reasoning alle Verschleißereignisse aus den vier erzeugten Ereignisdatenströmen zu extrahieren, ohne die einzelnen Verschleißereignistypen direkt nennen zu müssen. Um den jeweiligen Fahrer eines PKW den Verschleißereignissen zuordnen zu können, wird dieser über das lokale Domänenwissen unter Nutzung des Prädikats \texttt{car:isDrivenBy} ermittelt. Der folgende C-SPARQL-Query demonstriert dies:
\begin{lstlisting}
REGISTER QUERY getWearEvents AS
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
@ -1311,6 +1311,45 @@ WHERE {
}
}
\end{lstlisting}
Beobachtet man die Ergebnisse dieser Abfrage, so hat man die Möglichkeit, nutzungsbedingten Verschleiß dem Fahrer eines PKW zuzuordnen und umgekehrt natürlich auch, verschleißarmes Fahrverhalten durch günstigere Tarife zu belohnen.
\paragraph{Erkennen von unbeabsichtigt wegrollenden PKW}
Ein immer wieder auftauchendes Phänomen, vor dem frühzeitig gewarnt werden soll, betrifft PKW, welche ohne angezogene Handbremse abgestellt wurden und dann weggerollt sind. Eine abstrakte CEP-Regel hierfür sieht wie folgt aus:
\begin{lstlisting}[mathescape=true,label={},caption={}]
CONDITION ($(CarLockEvent\ AS\ lockEvent)\ \rightarrow\ (CarStatusEvent\ AS\ rollEvent$)
[WindowSize:15s,StepSize:1s]
$\wedge$ lockEvent.relatedCar = rollEvent.relatedCar
$\wedge$ rollEvent.locked = true
$\wedge$ rollEvent.handbrakeEngaged = false
$\wedge$ rollEvent.speed > 0
ACTION
...
\end{lstlisting}
Setzt man dies mit C-SPARQL um, so entsteht folgender Query:
\begin{lstlisting}[label={lst:scenario_detect_locked_rolling_cars},caption={Erkennung von unbeabsichtigt losgerollten PKW}]
REGISTER QUERY getLockedMovingCars AS
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX f: <http://larkc.eu/csparql/sparql/jena/ext#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX car: <http://example.org/carSim/carSimulationOntology#>
SELECT ?car
FROM STREAM <http://example.org/carSim/stream/carStream> [RANGE 15s STEP 1s]
WHERE {
?lockEvent rdf:type car:CarLockEvent .
?lockEvent car:relatedCar ?car .
?rollingEvent rdf:type car:CarStatusEvent .
?rollingEvent car:relatedCar ?car .
?rollingEvent car:speed ?speed .
?rollingEvent car:handbrakeEngaged ?handbrake .
?rollingEvent car:locked ?locked .
FILTER(?speed>0)
FILTER(?locked)
FILTER(!?handbrake)
FILTER(f:timestamp(?lockEvent,rdf:type,car:CarLockEvent) < f:timestamp(?rollingEvent,rdf:type,car:CarStatusEvent))
}
\end{lstlisting}
\section{Nutzung der C-SPARQL Engine in Java}