[TASK] Generic commit.
This commit is contained in:
parent
e30c8b467e
commit
5939b0ba66
@ -1457,19 +1457,40 @@ Auch das Löschen von Daten aus der lokalen Wissensbasis stellt kein Problem dar
|
||||
Für die Umsetzung von Reasoning wird in der C-SPARQL-Engine die Implementierung des \texttt{GenericRuleReasoner} aus Apache Jena verwendet. Im Rahmen dieses Szenarios wird diesem Reasoner ein Regelwerk zugeführt, welches die Axiome und Folgerungsregeln von RDFS implementiert.
|
||||
|
||||
Um Reasoning mit der C-SPARQL-Engine zu nutzen, müssen die folgenden zwei Schritte durchgeführt werden:
|
||||
\paragraph{Aktivierung der Inferenz}
|
||||
Bei der Registrierung einer C-SPARQL-Abfrage an der Engine muss angegeben werden, ob Inferenz mit dem Reasoner für diesen Query verwendet werden soll. Die folgende Zeile zeigt diesen Schritt, wobei der zweite Parameter ausschlaggebend für die Aktivierung ist:
|
||||
|
||||
\begin{itemize}
|
||||
\item \textbf{Aktivierung von Inferenz:}
|
||||
Bei der Registrierung einer C-SPARQL-Abfrage an der Engine muss bei dem Aufruf der Methode \texttt{registerQuery(String query, boolean useInference)} angegeben werden, ob Inferenz mit dem Reasoner für diesen Query verwendet werden soll. Die folgende Zeile zeigt diesen Schritt, wobei der zweite Parameter ausschlaggebend für die Aktivierung ist:
|
||||
\begin{lstlisting}
|
||||
String query = "...";
|
||||
CsparqlQueryResultProxy resultProxy = engine.registerQuery(query, true);
|
||||
\end{lstlisting}
|
||||
|
||||
\paragraph{Konfiguration des Reasoners}
|
||||
Hat man auf diese Weise einen Query an der Engine registriert, so muss als nächstes für den \texttt{CsparqlQueryResultProxy} Parameter angegeben werden, unter denen das Reasoning durchgeführt werden soll. Neben der Angabe des zu verwendenden Regelwerks, welches in diesem Fall RDFS implementiert, muss eine TBox mit Basisvokabular angegeben werden, die als Basis für die Schlussfolgerungen dient. Weiterhin ist es möglich zu konfigurieren, welche Logik zum Anstellen der Schlussfolgerungen verwendet werden soll. Hierbei gibt es drei Auswahlmöglichkeiten, die nun grob erklärt werden:
|
||||
\item \textbf{Konfiguration des Reasoners:}
|
||||
Hat man auf diese Weise einen Query an der Engine registriert, so muss als nächstes für den \texttt{CsparqlQueryResultProxy} Parameter angegeben werden, unter denen das Reasoning durchgeführt werden soll. Neben der Angabe des zu verwendenden Regelwerks, welches in diesem Fall RDFS implementiert, muss eine TBox mit Basisvokabular angegeben werden, die als Basis für die Schlussfolgerungen dient. Weiterhin ist es möglich zu konfigurieren, welche Logik zum Anstellen der Schlussfolgerungen verwendet werden soll. Hierbei gibt es drei Auswahlmöglichkeiten, die im Folgenden grob erklärt werden:
|
||||
\begin{itemize}
|
||||
\item \textbf{Forward Chaining}: Geht von den bereits existierenden Fakten aus und prüft anhand dieser Fakten, ob es Regeln gibt, die durch diese Fakten erfüllt sind. Ist dies der Fall, werden diese erfüllten Regeln verwendet, um daraus Wissen abzuleiten. Stellt das standardmäßige Vorgehen dar, falls keine Logik explizit angegeben wurde.
|
||||
\item \textbf{Backward Chaining}: Stellt quasi das gegenteilige Vorgehen zu Forward Chaining dar. Begonnen wird bei einer Aussage, die darauf überprüft werden soll, ob sie zutrifft. Nun werden alle Regeln gesucht, die zu dieser Aussage führen und geprüft, ob diese erfüllt sind. Somit sind alle Bedingungen dieser Regeln wiederum Aussagen, die geprüft werden müssen. Dieser Ansatz setzt sich über weitere Regeln so weit fort, bis entweder ein erfüllender Fakt gefunden wurde, oder alle Regeln negativ getestet worden sind.
|
||||
\item \textbf{Hybrid}: Ein Ansatz, welcher Forward Chaining und Backward Chaining kombiniert.
|
||||
\end{itemize}
|
||||
Für die Implementierung des Beispielszenarios dieser Arbeit fiel die Entscheidung auf den standardmäßig von der Engine verwendeten Ansatz des Forward Chaining.
|
||||
\end{itemize}
|
||||
|
||||
Über die folgende Methode kann Reasoning für einen an der Engine registrierten Query aktiviert werden:
|
||||
\begin{lstlisting}
|
||||
updateReasoner(String queryId, String rulesFile,
|
||||
ReasonerChainingType chainingType, String tBoxFile)
|
||||
\end{lstlisting}
|
||||
|
||||
Die Einrichtung von Reasoning wurde mit folgendem Aufruf durchgeführt:
|
||||
\begin{lstlisting}
|
||||
engine.updateReasoner(
|
||||
resultProxy.getSparqlQueryId()
|
||||
CsparqlUtils.fileToString("data/rdfs.rules"),
|
||||
CsparqlUtils.serializeRDFFile("data/carSimulationTBox.rdf"),
|
||||
ReasonerChainingType.FORWARD
|
||||
);
|
||||
\end{lstlisting}
|
||||
|
||||
Tiefgehende Details über die Implementierung von Reasoning in der C-SPARQL-Engine können in \cite{barbieri:reasoning} nachgelesen werden. Weiterführend kann über die Umsetzung von Reasoning mit Complex Event Processing in der Masterarbeit von Stefan Lier\cite{hsh:reasoning} gelesen werden.
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user