From dbfc79762435fdcc1275783b9da996a55a0b43d9 Mon Sep 17 00:00:00 2001 From: Jan Philipp Timme Date: Mon, 10 Oct 2016 17:09:12 +0200 Subject: [PATCH] [TASK] Generic commit. --- Bachelorarbeit.tex | 43 +++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 41 insertions(+), 2 deletions(-) diff --git a/Bachelorarbeit.tex b/Bachelorarbeit.tex index 94aa912..42a570a 100644 --- a/Bachelorarbeit.tex +++ b/Bachelorarbeit.tex @@ -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: @@ -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: +PREFIX f: +PREFIX xsd: +PREFIX car: +SELECT ?car +FROM STREAM [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}