\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 \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 : . @prefix rdf: . @prefix xsd: . @prefix rdfs: . @prefix foaf: . @prefix 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 : . @prefix rdf: . @prefix xsd: . @prefix rdfs: . @prefix foaf: . @prefix 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}