count: false # Diese Präsentation ![QR-Code](img/qr-presentation.svg) --- class: center, middle # Linked Data - An Introduction on Speed Adrian Gschwend, Zazuko GmbH --- background-image: url(img/web_documents.png) # Web of Documents --- # Web of Documents * Seit den 90ern * Link (URL) pro Seite * Eine Seite repräsentiert typischerweise ein Dokument * Links auf weitere Seiten * Für Menschen --- background-image: url(img/web_url.png) # URL als eindeutiger Identifikator --- # URL als eindeutiger Identifikator * Wir geben die URL händisch ein * Benutzen eine Suchmaschine * Oder folgen den Links innerhalb von Dokumenten * Die Links sind nicht typisiert, * sprich wir wissen nicht, was die Beziehung zum aktuellen Dokument ist --- background-image: url(img/proposal.gif) # Wer hats erfunden? --- # Wer hats erfunden? * Das Internet existiert schon seit den späten 70er Jahren (TCP/IP Stack) * Mail (SMTP) seit 1981 * Ist gewachsen, aber nicht gross --- background-image: url(img/Evolution.png) # Entwicklung des Web --- # Entwicklung des Web * Mit der Verbreitung des Web kam ein exponentielles Wachstum * Das ist in erster Linie dem Link zu verdanken (und Hypertext/HTML) --- background-image: url(img/web_documents.png) # Soweit so gut --- background-image: url(img/China-News.png) # Verstehen Sie Chinesisch? --- # Verstehen Sie Chinesisch? * Die Semantik einer Seite ist für (sehende) Menschen verständlich, * so lange mir die Schrift, Sprache und Thematik vertraut ist --- background-image: url(img/SBB_Delay.png) # Semantik für Maschinen schwer erfassbar --- background-image: url(img/SBB_Teilausfall_Google.png) # Zum Beispiel für Google --- # Zum Beispiel für Google * Die Semantik ist für Maschinen nur schwer erfassbar * Der Kontext fehlt oftmals völlig * Beispiel: Jaguar das Tier, das Auto oder der MacOS 10.2 Release? --- background-image: url(img/Pieter_Bruegel-Tower_Of_Babel.jpg) # Babylonische Sprachverwirrung --- # Alles wird besser mit Datenbanken? * Daten in Silos * Teilweise auf dem Web verfügbar * Zwischen den Datenbanken herrscht Sprachverwirrung * Sowohl technisch wie inhaltlich (Semantik) * Datensatzübergreifende Suche und Verlinkung ist nicht möglich --- # Zentrale Datenhaltung als Lösung? Kaum realistisch: * Es gibt nicht eine Wahrheit * Entspricht nicht föderalen und pluralistischen Strukturen * Funktioniert selbst in zentralistischen Systemen eher selten * Inhärente Hürden bei der Skalierbarkeit * Technisch wie inhaltlich anspruchsvoll --- # Dezentraler Lösungsansatz Was wären Anforderungen? * Ein gemeinsames Austauschformat * Semantik muss Teil der Daten sein * Mehrsprachigkeit muss im Kern unterstützt sein * Muss jegliche Beziehungen zwischen Daten ausdrücken können * Beziehungen zwischen Datensätzen/Silos können ausgedrückt werden * Dezentrale Datenhaltung/Pflege muss möglich sein * Datensatzübergreifende Abfragen müssen möglich sein --- background-image: url(img/Things.jpg) # Try this! --- # Linked Data als Lösungsansatz * RDF als allgemeines Datenmodell * Well known Schemas & Ontologien als Lingua Franca * Web (HTTP) als Transportmedium * Links (URIs) als (dezentrale) Identifikatoren * Mehrsprachigkeit im Datenmodell * SPARQL als standardisierte Abfragesprache * "Agiles" Datenmodell --- background-image: url(img/METROPOLIS_machine.jpg) # Maschinenlesbarkeit --- # Datenmodell ![Ein Ding](img/AThing.svg) --- # RDF Datenmodell ![Ein Ding mit URIs](img/AThing2.svg) --- # RDF Datenmodell * Statt ein Dokument beschreibe ich eine einzelne Information Beispiel: ```turtle
"Adrian"
"Gschwend" ``` --- # Der Unterschied zum bisherigen Web ![URLs vs URIs](img/URL-vs-URI.png) --- background-image: url(img/TheFarSide-ClearUpThings.jpg) --- # Technologiestack * W3C Standard, wie das Web selber * SPARQL als Abfragesprache * Implementationen des Stacks in allen gängigen Programmiersprachen --- # SPARQL * Hersteller von Datenbanken halten sich an den Standard * Abfragesprache für Linked Data * Standardisiert * Skaliert (in memory) * Unterstützt Federated Queries * Kommerzielle Anbieter, stark wachsender Markt * Open Source Alternativen --- # SPARQL Basics * At home: [SPARQL in 11 minutes](https://www.youtube.com/watch?v=FvGndkpa4K0) * SELECT für Auswahl, WHERE für Konditionen * WHERE kombiniert typischerweise verschiedene Kombinationen miteinander * Entspricht in SQL einem JOIN * Aber ohne die Kopfschmerzen, die JOIN verursacht --- # Historisiertes Gemeindeverzeichnis * Via Bundesamt für Statistik, [Daten & Doku](http://www.bfs.admin.ch/bfs/portal/de/index/infothek/nomenklaturen/blank/blank/gem_liste/02.html) * eCH-0071 Standard * Kantone, Bezirke und Gemeinden * Namensraum des Schemas: `PREFIX gont:
` * Nun kann per verkürzter URI darauf zugegriffen werden * Klassen: `gont:Municipality`, `gont:District`, `gont:Canton` * Details zur Dokumentation: https://github.com/zazuko/fso-lod/tree/master/doc/eCH0071 --- # SPARQL by Example * [Siehe Github Dokumentation](https://github.com/zazuko/fso-lod/blob/master/doc/eCH0071/sparql.md) --- # Vorteile * Wiederverwendbarkeit ausserhalb des Anwendungsfalles * Daten bleiben beim Datenhalter (wie Webseiten auch) * Zugriffe werden sichtbar * Komplexere Abfragen über SPARQL möglich * ➞ Antworten als CSV, XML, JSON, RDF * die Daten sind das API * ➞ Antworten in Text, XML, JSON * keine Probleme wie API versioning & maintenance --- # Zusammenfassung * Web of Data statt Web of Documents * Gleicher Technologiestack * Offene, klar definierte Standards * Semantische Interoperabilität durch Vokabulare & Ontologien * Dezentral, wie das Web * Web Scale Database Aufbauend auf einem agilen Datenmodell --- background-image: url(img/Scrum.png) --- background-image: url(img/LinkedOpenDataCloud2014.svg) # Linked Open Data Cloud --- # Linked Open Data Cloud * Siehe [lod-cloud.net](http://lod-cloud.net/) * Beinhaltet die grössten öffentlichen Linked Open Data Repositories * Linked Open Vocabularies [LOV](http://lov.okfn.org/dataset/lov/) für gängige Vokabulare * [Prefix.cc](http://prefix.cc/) für Prefixe & Shortcuts --- # Wikidata * Wikipedia für Rohdaten * Laaange Geschichte um/gegen RDF & Linked Data * Heute mit SPARQL Endpunkt! * Via korrektem Prefix `http://www.wikidata.org/entity/Qxyz` auch Linked Data * Beispielabfrage Flughafencodes & Labels: https://t.co/gyWQ7MRzL6 * Neu auch mit [Geospatial Queries](http://addshore.com/2016/05/geospatial-search-for-wikidata-query-service/) --- # Google Suche * SEO, Suchmaschinenoptimierung * Heute via schema.org * Komplett Linked Data * JSON-LD oder RDFa Serialisierung ![Filmsuche](img/movie-google.png) --- background-image: url(img/movie-google.png) --- # Offshore Leaks als Linked Data Gibt zwei verschiedene Datasets aktuell: * https://titanpad.com/gdVduv14jD * https://rawgit.com/Ontotext-AD/leaks/master/README.html --- background-image: url(img/metropolis-5.jpg) # Danke! Fragen? --- # Kontakt adrian.gschwend@zazuko.com http://www.zazuko.com ![Zazuko GmbH](img/logo_color_letter.svg) --- # Referenzen: Standards * [RDF 1.1 Primer](http://www.w3.org/TR/rdf11-primer/) * [Turtle Serialisierung](http://www.w3.org/TR/turtle/) * [JSON for Linking Data](http://json-ld.org/) (JSON-LD) * [SPARQL 1.1 Query Language](http://www.w3.org/TR/sparql11-query/) --- # Bücher * Learning SPARQL, [Homepage](http://www.learningsparql.com/), [Safari Books Online](http://proquest.safaribooksonline.com/book/web-development/rdf/9781449371449) * Semantic Web for the Working Ontologist [Homepage](http://workingontologist.org/), [Safari Books Online](http://proquest.safaribooksonline.com/book/web-design-and-development/9780123859655) --- # Programmiersprachen * JavaScript: [RDF-Ext](https://github.com/rdf-ext/rdf-ext), [Übersicht mit Alternativen](https://www.w3.org/community/rdfjs/wiki/Comparison_of_RDFJS_libraries) * JavaScript Visualisierung: [Uduvudu](https://github.com/uduvudu/uduvudu), [RDF2h](https://github.com/rdf2h/rdf2h) * Java: [Apache Jena](http://jena.apache.org/), [Eclipse RDF4J](http://rdf4j.org/) (ehemals Sesame) * C#.Net: [dotNetRDF](http://dotnetrdf.org/) * Ruby: [Ruby RDF Project](https://ruby-rdf.github.io/) * Python: [RDFLib](https://github.com/RDFLib) * C: [Redland RDF Libraries](http://librdf.org/) * PHP: [EasyRdf](http://www.easyrdf.org/) (Google for more) * Perl: [Perl and RDF](http://www.perlrdf.org/) & [Attean](https://github.com/kasei/attean)