From 6d15f56ad347b8bd60f4098753eea669d0fef98e Mon Sep 17 00:00:00 2001 From: Jan Philipp Timme Date: Fri, 29 Jul 2016 10:58:45 +0200 Subject: [PATCH] [TASK] Generic commit. --- Bachelorarbeit.tex | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/Bachelorarbeit.tex b/Bachelorarbeit.tex index 7674f10..4234c9b 100644 --- a/Bachelorarbeit.tex +++ b/Bachelorarbeit.tex @@ -258,14 +258,28 @@ Im Gegensatz zu Abfragesprachen von relationalen Datenbanksystemen wie SQL ist e \begin{lstlisting}[caption={Abfrage des Namens des Bruders von Marie aus Daten von Listing~\ref{lst:sample_rdf_data}},label={lst:sample_sparql_query}] SELECT ?nameOfBrother WHERE { - ?marie rdf:type :person . - ?marie :hasName "Marie" . - ?marie :hasSibling ?brother . - ?brother :hasName ?nameOfBrother . + ?marie rdf:type :person . + ?marie :hasName "Marie" . + ?marie :hasSibling ?brother . + ?brother :hasName ?nameOfBrother . } \end{lstlisting} -Listing~\ref{lst:sample_sparql_query} zeigt, dass SPARQL in der groben Grundstruktur eine Ähnlichkeit zu SQL aufweist; allerdings sind bedingt durch die Struktur der Daten (Relationen bei SQL gegenüber Tripel und Quadrupel bei SPARQL) große Unterschiede in der Gestaltung der Abfragen --- speziell in der WHERE-Klausel --- zu finden: Hier werden Tripel mit Platzhaltern verwendet, um aus dem vorhandenen Datenbestand die Tripel zu isolieren, die auf das angegebene Muster passen. So wird in diesem Beispiel ein beliebiges Subjekt (gekennzeichnet durch \texttt{?marie}) gesucht, welches gleichzeitig vom Typ Person ist, den Namen \enquote{Marie} trägt und einen bisher unbekannten Bruder (\texttt{?brother}) hat, der einen noch unbekannten Namen (\texttt{?nameOfBrother}) trägt. Für jedes Subjekt, auf welches diese Beschreibung passt, ergibt sich nun ein Ergebnis, welches die in der SELECT-Klausel angegebenen Felder zurückgibt --- in diesem Fall also lediglich ein Ergebnis mit dem Wert \enquote{Max}. +Listing~\ref{lst:sample_sparql_query} zeigt, dass SPARQL in der groben Grundstruktur eine Ähnlichkeit zu SQL aufweist; allerdings sind bedingt durch die Struktur der Daten (Relationen bei SQL gegenüber Tripel und Quadrupel bei SPARQL) große Unterschiede in der Gestaltung der Abfragen --- speziell in der \texttt{WHERE}-Klausel --- zu finden: Hier werden Tripel mit Platzhaltern verwendet, um aus dem vorhandenen Datenbestand die Tripel zu isolieren, die auf das angegebene Muster passen. So wird in diesem Beispiel ein beliebiges Subjekt (gekennzeichnet durch \texttt{?marie}) gesucht, welches gleichzeitig vom Typ Person ist, den Namen \enquote{Marie} trägt und einen bisher unbekannten Bruder (\texttt{?brother}) hat, der einen noch unbekannten Namen (\texttt{?nameOfBrother}) trägt. Für jedes Subjekt, auf welches diese Beschreibung passt, ergibt sich nun ein Ergebnis, welches die in der \texttt{SELECT}-Klausel angegebenen Felder zurückgibt --- in diesem Fall also lediglich ein Ergebnis mit dem Wert \enquote{Max}. + +Neben \texttt{SELECT} unterstützt SPARQL auch das Schlüsselwort \texttt{CONSTRUCT}. Dieses ermöglicht die direkte Konstruktion von neuen Tripeln aus dem Ergebnis eines Queries. Listing~ref{lst:sample_sparql_construct} zeigt die Erzeugung von Tripeln für Geschwister, die auf ihren jeweilige Schwester (\enquote{isSisterOf}) beziehungsweise ihren jeweiligen Bruder (\enquote{isBrotherOf}) zeigen. + +\begin{lstlisting}[caption={Konstruktion von Tripeln über das Bruder/Schwester-Verhältnis von Personen},label={lst:sample_sparql_construct}] +CONSTRUCT { + ?sister :isSisterOf ?brother . + ?brother :isBrotherOf ?sister . +} WHERE { + ?sister rdf:type :person . + ?sister :isGender :female . + ?sister :hasSibling ?brother . + ?brother :isGender :male . +} +\end{lstlisting} \section{Schlussfolgerungen auf RDF-Daten}