\documentclass{f4_beamer}
\usepackage{graphicx}
\usepackage{float}
\usepackage{subfigure}
\usepackage{xspace}
\usepackage{textcomp}
\usepackage{tabularx}
\usepackage{booktabs}
\usepackage{amsmath}
\usepackage{subfigure} 
\usepackage{here}
\usepackage{verbatim}
\usepackage{listings}
\usepackage{url}
\usepackage{caption}
\usepackage[autostyle=true,german=quotes]{csquotes}

% Suppress numbering captions
\captionsetup{labelformat=empty}

% Setup für Codeblocks
\lstset{
	% Optionen
	breaklines=true,
	breakatwhitespace=true,
	breakautoindent=true,
	frame=single,
	%framexleftmargin=19pt,
	inputencoding=utf8,
	%language=awk,
	%numbers=left,
	%numbersep=8pt,
	showspaces=false,
	showstringspaces=false,
	tabsize=1,
	%xleftmargin=19pt,
	captionpos=b,
	% Styling
	basicstyle=\footnotesize\ttfamily,
	commentstyle=\footnotesize,
	keywordstyle=\footnotesize\ttfamily,
	numberstyle=\footnotesize,
	stringstyle=\footnotesize\ttfamily,
}
% Hack für Sonderzeichen in Codeblocks
\lstset{literate=%
    {Ö}{{\"O}}1
    {Ä}{{\"A}}1
    {Ü}{{\"U}}1
    {ß}{{\ss}}1
    {ü}{{\"u}}1
    {ä}{{\"a}}1
    {ö}{{\"o}}1
    {°}{{${^\circ}$}}1
}

\mode<presentation>
\title{Intelligente Systeme}
\subtitle{Ontologieprojekt: RDFS Ontologie }
\author{Marcel Felix, Jan Philipp Timme}
\date{\today}

\begin{document}
%\tableofcontents[hideallsubsections]

\section{Einleitung}
\begin{frame}{Szenario}
\begin{itemize}
\item Welt der Spielekonsolen mit Bewertungen
\item Spielekonsolen mit einigen Attributen beschrieben
\item Spielekonsolen werden von Organisationen hergestellt
\item Spielekonsolen haben einen Nachfolger/Vorgänger
\item Organisationen haben einen CEO
\item \dots
\end{itemize}
\end{frame}

\begin{frame}[fragile]{Selbstdefinierte Prädikate}
\begin{lstlisting}
:foundingYear   rdf:type    rdf:Property ;
                rdfs:domain foaf:Organization ;
                rdfs:range  xsd:int .

:internetEnabled    rdf:type    rdf:Property ;
                    rdfs:domain :GameConsole ;
                    rdfs:range  xsd:boolean .

:consoleName        rdf:type    rdf:Property ;
                    rdfs:domain :GameConsole ;
                    rdfs:range  xsd:string .
\end{lstlisting}
\end{frame}

\begin{frame}[fragile]{Ein eigener Datentyp und mehr \dots}
\begin{lstlisting}
# rdfs:Datatype
:PriceEur   rdf:type    rdfs:Datatype .
:PriceEur   rdfs:label  "Preis in Euro"^^xsd:string .

# rdfs:subPropertyOf
:predecessorOfConsole  rdfs:subPropertyOf  :relatedToConsole .
:successorOfConsole    rdfs:subPropertyOf  :relatedToConsole .

# rdfs:subClassOf
:GameConsole            rdf:type        rdfs:Class .
:PortableGameConsole    rdf:type        rdfs:Class .

:PortableGameConsole    rdfs:subClassOf :GameConsole .
\end{lstlisting}
\end{frame}



\begin{frame}[fragile]{Überblick Daten A-Box (1/2)}
\begin{lstlisting}
@prefix :     <http://example.com/ins_uebung/#> .
@prefix rdf:  <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix xsd:  <http://www.w3.org/2001/XMLSchema#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
@prefix rev:  <http://purl.org/stuff/rev#> .

:Nintendo   rdf:type        foaf:Organization ;
            :ceo            :Kimishima ;
            :foundingYear   1889 ;
            foaf:name      	"Nintendo Co., Ltd."^^xsd:string .

:Kimishima  rdf:type        foaf:Person ;
            foaf:familyName "Kimishima"^^xsd:string ;
            foaf:givenName  "Tatsumi"^^xsd:string .

\end{lstlisting}
\end{frame}

\begin{frame}[fragile]{Überblick Daten A-Box (2/2)}
\begin{lstlisting}
:Switch  rdf:type                    :PortableGameConsole .
:Switch  rev:hasReview               :SwitchReviewByJPT .

:Wii     rdf:type                    :GameConsole .

:Wii_u   rdf:type                    :GameConsole ;
         :internetEnabled            true ;
         :consoleName                "Wii U"^^xsd:string ;
         :numOfSupportedControllers  8 ;
         :predecessorOfConsole       :Wii ;
         :releaseYear                2012 ;
         :successorOfConsole         :Switch .
\end{lstlisting}
...
\end{frame}

\begin{frame}[fragile]{T-Box (1/2)}
\begin{lstlisting}
@prefix :     <http://example.com/ins_uebung/#> .
@prefix rdf:  <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix xsd:  <http://www.w3.org/2001/XMLSchema#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
@prefix rev:  <http://purl.org/stuff/rev#> .

# Our own properties
:ceo                rdf:type        rdf:Property ;
                    rdfs:domain     foaf:Organization ;
                    rdfs:range      foaf:Person .

:foundingYear       rdf:type        rdf:Property ;
                    rdfs:domain     foaf:Organization ;
                    rdfs:range      xsd:int .

:internetEnabled    rdf:type        rdf:Property ;
                    rdfs:domain     :GameConsole ;
                    rdfs:range      xsd:boolean .
\end{lstlisting}
\end{frame}

\begin{frame}[fragile]{T-Box (2/2)}
\begin{lstlisting}
:consoleName                rdf:type     rdf:Property ;
                            rdfs:domain  :GameConsole ;
                            rdfs:range   xsd:string .

:numOfSupportedControllers  rdf:type     rdf:Property ;
                            rdfs:domain  :GameConsole ;
                            rdfs:range   xsd:string .

:successorOfConsole         rdf:type     rdf:Property ;
                            rdfs:domain  :GameConsole ;
                            rdfs:range   :GameConsole .
\end{lstlisting}

\end{frame}

\begin{frame}[fragile]{Anwendung von RDFS-Regeln}
Gegeben sei folgende A-Box
\begin{lstlisting}
:Wii_U                rdf:type             :GameConsole .
:Switch               :successorOfConsole  :Wii_U .
\end{lstlisting}
mit dieser T-Box
\begin{lstlisting}
:successorOfConsole   rdf:type             rdf:Property ;
                      rdfs:domain          :GameConsole ;
                      rdfs:range           :GameConsole .
\end{lstlisting}
Anwendung der Regel \texttt{rdfs2}
\begin{lstlisting}
s p 		  o .
p rdfs:domain c .         ==>              s rdf:type c .
\end{lstlisting}
Ergebnis:
\begin{lstlisting}
:Switch               rdf:type             :GameConsole .
\end{lstlisting}
\end{frame}

\begin{frame}[fragile]{SPARQL-Anfragen (1/2)}
Wie viele verschiedene Konsolen wurden von Nintendo hergestellt?
\begin{lstlisting}
SELECT COUNT(?console) AS ?numConsoles
WHERE {
  ?console :madeBy ?organization .  
}
GROUP BY ?organization
\end{lstlisting}
Welche Konsolen kamen nach Jahr X raus?
\begin{lstlisting}
SELECT ?console
WHERE {
  ?console :madeBy :Nintendo .
  ?console :releaseYear ?releaseYear .  
  FILTER(?releaseYear > 1997)
}
\end{lstlisting}
\end{frame}
\begin{frame}[fragile]{SPARQL-Anfragen (2/2)}
Einen CEO einer Konsole zuordnen.
\begin{lstlisting}
CONSTRUCT {
  ?ceo :isRelatedToConsole ?console .
}
WHERE {
  ?console rdf:type :GameConsole .
  ?console :madeBy  ?org .
  ?org :ceo ?ceo .
  ?ceo rdf:type foaf:Person .
}
\end{lstlisting}
Alle Konsolen die mindestens ein Review haben.
\begin{lstlisting}
SELECT DISTINCT ?console
WHERE {
  ?console rev:hasReview ?anyReview .
}
\end{lstlisting}
\end{frame}

\begin{frame}{Description Logic: T-Box (1/2)}
A PortableGameConsole is a specific type of GameConsole.
\begin{itemize}
\item \texttt{PortableGameConsole $\sqsubseteq$ GameConsole}
\end{itemize}
\end{frame}

\begin{frame}{Description Logic: T-Box (2/2)}
An Organization can have a Person as CEO.
\begin{itemize}
\item \texttt{$\exists$ ceo.$\top$ $\sqsubseteq$ Organization}
\item \texttt{Organization $\sqsubseteq$ $\forall$ceo.Person}
\end{itemize}
A GameConsole is made by an Organization.
\begin{itemize}
\item \texttt{$\exists$ madeBy.$\top$ $\sqsubseteq$ GameConsole}
\item \texttt{GameConsole $\sqsubseteq$ $\forall$madeBy.Organization}
\end{itemize}
\end{frame}

\begin{frame}{Description Logic: R-Box (1/2)}
\begin{itemize}
\item \texttt{$\exists$ successorOfConsole.$\top$ $\sqsubseteq$ relatedToConsole}
\end{itemize}
\end{frame}

\begin{frame}{Description Logic: R-Box (2/2)}
\begin{itemize}
\item \texttt{relatedToConsole $\circ$ relatedToConsole $\sqsubseteq$ relatedToConsole}
\item \texttt{successorOfConsole $\circ$ successorOfConsole $\sqsubseteq$ successorOfConsole}
\item \texttt{predecessorOfConsole $\circ$ predecessorOfConsole $\sqsubseteq$ predecessorOfConsole}
\end{itemize}
\end{frame}

\begin{frame}{Description Logic: A-Box}
\begin{itemize}
\item \texttt{\{Nintendo\} $\sqsubseteq$ foaf:Organization}
\item \texttt{\{Nintendo\} $\sqsubseteq$ $\exists$ :ceo.Kimishima}
\item \texttt{\{Nintendo\} $\sqsubseteq$ $\exists$ :foundingYear.\{1889\}}
\item \texttt{\{Nintendo\} $\sqsubseteq$ $\exists$ :foaf:name.\{Nintendo Co., Ltd.\}}

\item \texttt{\{Wii\_U\} $\sqsubseteq$ foaf:Organization}
\item \texttt{\{Wii\_U\} $\sqsubseteq$ $\exists$ :consoleName.\{Wii U\}}
\item \texttt{\{Wii\_U\} $\sqsubseteq$ $\exists$ :predecessorOfConsole.Wii}
\item \texttt{\{Wii\_U\} $\sqsubseteq$ $\exists$ :successorOfConsole.Switch}
\end{itemize}
\end{frame}

\begin{frame}{Description Logic: New Concepts}
Boolean concept constructors:
\begin{itemize}
\item \texttt{HomeConsole $\equiv$ GameConsole $\sqcap$ $\neg$ PortableConsole}
\end{itemize}
Existential restriction:
\begin{itemize}
\item \texttt{NintendoConsole $\sqsubseteq$ $\exists$ madeBy.Nintendo}
\end{itemize}
Universal restriction:
\begin{itemize}
\item \texttt{GameConsole $\sqsubseteq$ $\forall$madeBy.Organization $\wedge$ $\forall$foundingYear.\{ $\geq$1700\}}
\end{itemize}
Number restrictions:
\begin{itemize}
\item \texttt{PartyConsole $\sqsubseteq$ $\leq$1 madeBy.Organization}
\end{itemize}
Reflexivity restriction:
\begin{itemize}
\item \texttt{GameConsole $\sqsubseteq$ $\nexists$ predecessorOfConsole.Self}
\end{itemize}
Nominals:
\begin{itemize}
\item \texttt{HomeConsole $\equiv$ \{Switch\} $\sqcap$ \{Wii\} $\sqcap$ \{Wii U\}}
\end{itemize}
\end{frame}

\begin{frame}[fragile]{OWL (1/2)}
\begin{lstlisting}
:HomeConsole owl:differentFrom :PortableConsole .
\end{lstlisting}
\begin{lstlisting}
:predecessorOfConsole owl:propertyChainAxiom (:predecessorOfConsole :predecessorOfConsole) .
\end{lstlisting}
\begin{lstlisting}
:HomeConsole owl:equivalentClass [
  rdf:type owl:Class ;
  owl:intersectionOf (
    :GameConsole [owl:complementOf :PortableConsole]
  )
] .
\end{lstlisting}
\begin{lstlisting}
:NintendoConsole owl:equivalentClass [
  rdf:type              owl:Restriction ;
  owl:onProperty        :madeBy ;
  owl:someValuesFrom    :Nintendo
] .
\end{lstlisting}
\end{frame}

\begin{frame}[fragile]{OWL (2/2)}
\begin{lstlisting}
:PartyConsole 	rdf:equivalentClass [
  rdf:type                      owl:Restriction ;
  owl:minQualifiedCardinality   "2"^^xsd:nonNegativeInteger ;
  owl:onProperty                :numOfSupportedControllers ;
  owl:onClass                   :GameConsole
] .
\end{lstlisting}
\end{frame}

\begin{frame}[fragile]{Jena Rules}
With Jena built-ins
\begin{lstlisting}
[rule1: (?con rdf:type :GameConsole) (?con :predecessorOfConsole ?otherCon)
    noValue(?otherCon :successorOfConsole ?con)
    -> (?otherCon :successorOfConsole ?con)]
\end{lstlisting}
Removing facts
\begin{lstlisting}
[rule2: (?con :hasPrice ?someValue)
    -> remove(?con :hasPrice ?someValue)]
\end{lstlisting}
Insert new facts
\begin{lstlisting}
[rule3: (?con rev:hasReview ?rev) (?rev rev:reviewer ?reviewer)
    -> (?reviewer :hasReviewedConsole ?con)]
\end{lstlisting}
Testing with Jena Rule \dots by using the rules in our code.
\end{frame}

% The end.
\end{document}