Upload
adrian-pohl
View
456
Download
4
Embed Size (px)
DESCRIPTION
Diese Präsentation gibt einen Einblick, wie die oft getrennten Welten von Web-APIs und Linked Open Data miteinander verschmolzen werden können. Nach einer Einleitung zu Web-APIs und JSON, wird gezeigt, wie aus JSON Linked Data (=JSON-LD) gemacht werden kann. Abschließend wird die lobid-API vorgestellt, die JSON-LD und andere RDF-Serialisierungen ausliefert und Auto-Suggest-Funktionen für Organisationen, GND-Normdaten und hbz-Titeldaten anbietet.
Citation preview
Aufbau einer LOD- basierten Web-API am Beispiel von api.lobid.org
ZBIW-Seminar „Semantic Web / Open Catalogue / Linked Open Data für Bibliotheken“. Köln, 10.10.2013.
Adrian Pohl
Struktur2
Pohl: LOD-basierte Web-API am Beispiel von api.lobid.org
1. Hintergrund
2. Web-APIs
3. JSON-LD to the Rescue
4. lobid-API
1. Hintergrund
3
Ziele4
Pohl: LOD-basierte Web-API am Beispiel von api.lobid.org
Warum Bibliotheksdaten gemäß Web Standards bereitstellen?
Verlinkbarkeit von Bibliotheksinformationen
Indexierung und Auffindbarkeit
Interoperabilität
Einfache Wiederverwendung
Problem5
"Semantic Web"-Community sehr akademisch
"Linked Open Data" sollte das ändern, was nur bedingt geklappt hat → für viele ist LOD nicht interessant
Aber: Web 2.0 und RESTful APIs sind erfolgreich
Um APIs entsteht App-Ökosystem, z. B. Twitter.
Nutzung von APIs ist "täglich Brot" von Webentwicklern
LOD und Web-APIs waren lange Zeit getrennte Ansätze
Pohl: LOD-basierte Web-API am Beispiel von api.lobid.org
2. Web-APIs
6
(Web-)APIs7
API = "Application Programming Interface"
Programmierschnittstelle für andere Anwendungsentwickler
Web-APIS:
HTTP-basiert, d. h. Zugriff mittels HTTP-Methoden (GET, PUT, POST, DELETE)
liefern JSON und/oder XML
Pohl: LOD-basierte Web-API am Beispiel von api.lobid.org
API: Motivation8
APIs sind ein essentieller Bestandteil von wiederverwendbaren Modulen
Module kommunizieren über API, kennen keine Implementierungsdetails
Implementierung so austauschbar und veränderbar – ohne dass alle API-Clients (=Anwendungen) angepasst werden müssen
Pohl: LOD-basierte Web-API am Beispiel von api.lobid.org
Beispiel-Anfrage: github-API9
GET https://api.github.com/users/acka47
Antwort (JSON):{ "login": "acka47", "id": 160292, "url": "https://api.github.com/users/acka47", "name": "Adrian Pohl", "company": "hbz", "blog": "http://www.uebertext.org", "created_at": "20091201T10:29:19Z", "updated_at": "20131009T09:41:07Z"}
Pohl: LOD-basierte Web-API am Beispiel von api.lobid.org
LOD vs. Web-APIs 10
Pohl: LOD-basierte Web-API am Beispiel von api.lobid.org
LOD Web-APIs●HTTP-URIs für Dinge & ihre Beschreibungen
●RDF●SPARQL
●URLs für Ressourcen & Repräsentation
●JSON und/oder XML●HTTP-Methoden mit URL-Parametern
3. JSON-LD to the Rescue
11
12
{ "login": "acka47", "id": 160292, "url": "https://api.github.com/users/acka47", "name": "Adrian Pohl", "company": "hbz", "blog": "http://www.uebertext.org"}
13
{ "@context": { "login": "http://xmlns.com/foaf/0.1/nick", "id": "http://purl.org/dc/terms/identifier", "url": { "@id": "http://xmlns.com/foaf/0.1/page", "@type": "@id" }, "name": "http://xmlns.com/foaf/0.1/name", "company": "http://www.w3.org/ns/org#memberOf", "blog": { "@id": "http://xmlns.com/foaf/0.1/weblog", "@type": "@id" }, "email": "http://xmlns.com/foaf/0.1/mbox" }, "login": "acka47", "id": 160292, "url": "https://api.github.com/users/acka47", "name": "Adrian Pohl", "company": "hbz", "blog": "http://www.uebertext.org"}
14
{ "@context": { "login": "http://xmlns.com/foaf/0.1/nick", "id": "http://purl.org/dc/terms/identifier", "url": { "@id": "http://xmlns.com/foaf/0.1/page", "@type": "@id" }, "name": "http://xmlns.com/foaf/0.1/name", "company": "http://www.w3.org/ns/org#memberOf", "blog": { "@id": "http://xmlns.com/foaf/0.1/weblog", "@type": "@id" }, "email": "http://xmlns.com/foaf/0.1/mbox" }, "login": "acka47", "id": 160292, "url": "https://api.github.com/users/acka47", "name": "Adrian Pohl", "company": "hbz", "blog": "http://www.uebertext.org"}
JSON-LD-Kontext15
{ "@context": { "login": "http://xmlns.com/foaf/0.1/nick", "id": "http://purl.org/dc/terms/identifier", "url": { "@id": "http://xmlns.com/foaf/0.1/page", "@type": "@id" }, "name": "http://xmlns.com/foaf/0.1/name", "company": "http://www.w3.org/ns/org#memberOf", "blog": { "@id": "http://xmlns.com/foaf/0.1/weblog", "@type": "@id" },}
Pohl: LOD-basierte Web-API am Beispiel von api.lobid.org
JSON-LD > Turtle16
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
[] <http://purl.org/dc/terms/identifier> 160292 ; <http://www.w3.org/ns/org#memberOf> "hbz" ; foaf:name "Adrian Pohl" ; foaf:nick "acka47" ; foaf:page <https://api.github.com/users/acka47> ; foaf:weblog <http://www.uebertext.org> .
Pohl: LOD-basierte Web-API am Beispiel von api.lobid.org
JSON-LD > Turtle17
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
[] <http://purl.org/dc/terms/identifier> 160292 ; <http://www.w3.org/ns/org#memberOf> "hbz" ; foaf:name "Adrian Pohl" ; foaf:nick "acka47" ; foaf:page <https://api.github.com/users/acka47> ; foaf:weblog <http://www.uebertext.org> .
Pohl: LOD-basierte Web-API am Beispiel von api.lobid.org
Keine URI
API + JSON-LD = Linked Data18
JSON-LD: RDF in JSON serialisieren
Web-Entwickler können damit sofort etwas anfangen
Bestehende Daten können relativ einfach in Linked Data überführt werden:
URIs prägen, z.B. https://api.github.com/users/acka47#thing
JSON-LD-Kontext ergänzen
Vorteil: JSON-LD-Kontext ermöglicht Abstraktion von konkreter RDF-Modellierung
Pohl: LOD-basierte Web-API am Beispiel von api.lobid.org
4. lobid-API
19
lobid.org20
lobid.org: LOD-Dienst des hbz, seit 2010 (’linking open bibliographic data’)
Titeldaten (lobid-resources), Normdaten (lobid-organisations)
Verschiedene Probleme und neue Anforderungen (z.B. Auto-Suggest für Normdaten) → Entwicklung eines neuen Backends
Pohl: LOD-basierte Web-API am Beispiel von api.lobid.org
API anstatt und Triple Store21
Triple-Store als API? - Triple-Store cool, aber als API problematisch (z.B. Performance)
Wegen Performance (z.B. Auto-Suggest) anderer Ansatz: Suchmaschinentechnologie – aber: Suchmaschine als API?
API unabhängig von Implementierung! API als stabile Abstraktion über Daten!
Pohl: LOD-basierte Web-API am Beispiel von api.lobid.org
API-Anfragen22
GET /resource?id=0940450003GET /resource?name=Faust
GET /organisation?id=DE832GET /organisation?name=fachhochschule+köln
GET /person?id=118580604GET /person?name=loki+schmidt
GET /resource?author=118580604GET /resource?subject=44141956
Pohl: LOD-basierte Web-API am Beispiel von api.lobid.org
API-Antworten23
GET /person?name=Loki+Schmidt&format=full
[{ "@id": "http://dnb.info/gnd/118836617", "gnd:preferredNameForThePerson": "Schmidt, Hannelore", "gnd:variantNameForThePerson“: [ "Glaser, Hannelore", "Schmidt, Loki" ], "gnd:dateOfBirth" : ”1919”, "gnd:dateOfDeath": ”2010”,...}]
Pohl: LOD-basierte Web-API am Beispiel von api.lobid.org
Implementierung I24
Was rauskommt: JSON-LD über HTTP sowie auch andere RDF-Serialisierungen
Hinter API andere Implementierungen denkbar, auch z.B. mit Triple Store
Pohl: LOD-basierte Web-API am Beispiel von api.lobid.org
Implementierung II25
Pohl: LOD-basierte Web-API am Beispiel von api.lobid.org
Live-Demonstration 26
http://api.lobid.org
Pohl: LOD-basierte Web-API am Beispiel von api.lobid.org
Nutzung der API27
Pohl: LOD-basierte Web-API am Beispiel von api.lobid.org
Edoweb3 (hbz-Projekt zur Archivierung elektronischer Dokumente und Websites)
Evtl. openbiblio-Jobs, LIFE (UB Münster)
2014: Aufbau des NWBib-Auftritts auf Basis der lobid-API
Weiterführende Informationen29
JSON-LD: http://json-ld.org/
hbz-LOD-blog: https://wiki1.hbz-nrw.de/pages/viewrecentblogposts.action?key=SEM
lobid-API-Dokumentation: http://api.lobid.org
lobid-Code & Issues: https://github.com/lobid/
Adrian Pohl: Sharing context – publishing application profiles with JSON-LD (Blogbeitrag): https://wiki1.hbz-nrw.de/x/qZCW
Pohl: LOD-basierte Web-API am Beispiel von api.lobid.org
Lizenz30
Pohl: LOD-basierte Web-API am Beispiel von api.lobid.org
Diese Folien stehen unter einer Creative-Commons-Lizenz:
http://creativecommons.org/licenses/by/3.0/de/