Digitale Bibliothek Jakob Voß Schnittstellen und Webservices Digitale Bibliothek WS 2008/2009 Fachhochschule Hannover Info...
Zusammenfassung Datenformate <ul><li>Es gibt viele Wege, die gleichen Informationen zu kodieren </li></ul><ul><li>Festlegu...
Zeitangabe nach RFC 822* <ul><li>date-time  =  [ day &quot;,&quot; ] date time  ; dd mm yy </li></ul><ul><li>;  hh:mm:ss z...
Motivation <ul><li>Für Aufbau, Weiterentwicklung und Wartung digitaler Bibliotheken sind Kenntnisse von Datenformaten und ...
Wie kommen nun die Daten zusammen? Dokumente Nutzer Datenbank Experte Autor Beitrag Dokumente Datensatz Datenbank Datensat...
Wie kommen nun die Daten zusammen? Dokumente Nutzer Datenbank Experte Anwendung Autor Beitrag Dokumente Datensatz Datenban...
Schnittstellen Benutzer Benutzerschnittstelle Programmierschnittstelle Informations- system Programm
Programmierschnittstellen = Application Programming Interface (API) <ul><li>Spezifikation  durch Standards </li></ul><ul><...
Beispiel: HTTP <ul><ul><li>Cache-Control: private </li></ul></ul><ul><ul><li>Content-Type: text/html; charset=UTF-8 </li><...
Beispiel: HTTP <ul><ul><li>Cache-Control: private </li></ul></ul><ul><ul><li>Content-Type: text/html; charset=UTF-8 </li><...
Relevante Schnittstellen für Digitale Bibliotheken <ul><li>Suchen:   Z39.50, SRU/SRW, OpenSearch </li></ul><ul><li>Sammeln...
Beispiel: unAPI <ul><li>Zweck </li></ul><ul><ul><li>Bereitstellung einzeln identifizierter Objekte </li></ul></ul><ul><li>...
unAPI <ul><li>BASEURL  (keine Parameter) </li></ul><ul><li>Liste von allgemeinen Formaten </li></ul><ul><li><?xml version=...
unAPI <ul><li>BASEURL ?id= IDENTIFIER  (kein Format) </li></ul><ul><li>Liste von Formaten für dieses Objekt </li></ul><ul>...
unAPI <ul><li>BASEURL ?id= IDENTIFIER &format= FORMAT </li></ul><ul><li>Formatspezifisch (z.B. DC, MARCXML, ...) </li></ul...
Schnittstelle != Datenformat <ul><li>Viele Schnittstellen lassen offen, welche konkreten Datenformate verwendet werden </l...
API-Programmbibliotheken <ul><li>Zugriff auf APIs mittels Programmiersprache </li></ul><ul><li>Beispiele: Z39.50-Client in...
zustandslose und zustandsbasiere APIs <ul><li>Alle Anfragen unabhängig voneinander </li></ul><ul><li>Keine Reihenfolge </l...
Beispiel: OAI-PMH <ul><li>Open Archives Initiative (OAI) </li></ul><ul><li>Protocol for Metadata Harvesting (PMH) </li></u...
OAI-PMH <ul><li>Repository als Data Provider </li></ul><ul><li>Harvester sammelt Metadaten-Records </li></ul><ul><li>Berei...
OAI-PMH <ul><li>Anfrage-Parameter </li></ul><ul><ul><li>verb  (Identify, ListMetadataFormats, GetRecord, ListIdentifier, L...
Beispiel: Search/Retrieve via URL (SRU) Search/Retrieve Web Service (SRW) <ul><li>Neuentwicklung der wichtigsten Z39.50-Fu...
SRU/SRW-searchRetrieve <ul><li>Request aus mehreren optionalen Parametern </li></ul><ul><li>version  ist notwendig,  query...
Beispiel: SeeAlso <ul><li>Basiert auf unAPI und OpenSearch Suggestions </li></ul><ul><li>Query-Format: </li></ul><ul><ul><...
(OpenSearch Suggestions) SeeAlso Linkserver ISBN JSON Links JavaScript
(OpenSearch Suggestions) SeeAlso Wrapper Webservice ISBN JSON Verfügbarkeit JavaScript OPAC ISBN
Spezifikation durch Standards <ul><li>Ohne etablierte Programmbibliothek: Standard genau lesen! </li></ul><ul><li>Vertraue...
Webservices <ul><li>Informatiker-Buzzword </li></ul><ul><li>Komplex:  SOAP, XML-RPC, WSDL...  </li></ul><ul><li>Einfach:  ...
Was tun ohne API? <ul><li>Selber machen! (Scraping, Wraping...) </li></ul><ul><li>Vorteil </li></ul><ul><ul><li>Lehrreich ...
Verfügbarkeit ermitteln mittels Screen Scraper <ul><li>Katalog der Bibliothek im Kurt-Schwitters-Forum </li></ul><ul><li>h...
Verfügbarkeit ermitteln mittels Screen Scraper <ul><li>use LWP::Simple; </li></ul><ul><li>my $opac = 'http://opc4.tib.uni-...
Verfügbarkeit ermitteln mittels Screen Scraper <ul><li>$ ./isbn-at-schwitters.pl 3-931659-29-1 </li></ul><ul><li>3-931659-...
Vorhandensein über- prüfen mittels SRU-API <ul><li>Gesamtkatalog Hannover </li></ul><ul><ul><li>http://gso.gbv.de/DB=2.92/...
Vorhandensein über- prüfen mittels SRU-API <ul><li>use PICA::Server; </li></ul><ul><li>my $isbn = shift @ARGV; </li></ul><...
Serviceorientierte Architektur (SOA) <ul><li>Eine monolithische Anwendung </li></ul><ul><li>Geht nicht, unsere Software ka...
Integriertes Bibliothekssystem Suchindex Suchinterface Trefferanzeige Titelanzeige Katalogisierung Ausleihe Benachrichtigu...
Modulares Bibliothekssystem Suchinterface Trefferanzeige Titelanzeige Katalogisierung Suchindex Ausleihe Fernleihe Gespeic...
Serviceorientiertes Bibliothekssystem Benachrichtigung Gespeicherte Suchen Katalogisierung Suchinterface Trefferanzeige Su...
Zusammenfassung <ul><li>Schnittstellen (APIs) zum Datenaustausch </li></ul><ul><li>Webservices: APIs über HTTP (meist REST...
<ul><li>Relevant für digitale Bibliotheken </li></ul><ul><ul><li>Suchen:   Z39.50, SRU/SRW, OpenSearch... </li></ul></ul><...
Weitere Quellen <ul><li>Library-related APIs http://techessence.info/apis </li></ul><ul><li>DLF Working group on digital l...
Bis nächste Woche!
Upcoming SlideShare
Loading in …5
×

Schnittstellen und Webservices

4,079
-1

Published on

Vorlesung zu Schnittstellen und Webservices im Rahmen der Lehrveranstaltung \'Digitale Bibliothek\' an der Fachhochschule Hannover im WS 2008/09

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
4,079
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
41
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Schnittstellen und Webservices

  1. 1. Digitale Bibliothek Jakob Voß Schnittstellen und Webservices Digitale Bibliothek WS 2008/2009 Fachhochschule Hannover Informationsmanagement (BA) 13. Oktober 2008
  2. 2. Zusammenfassung Datenformate <ul><li>Es gibt viele Wege, die gleichen Informationen zu kodieren </li></ul><ul><li>Festlegung von Datenformaten geschieht durch aufeinander aufbauende Standards </li></ul><ul><ul><li>Abstrakte Strukturierung ( Datenmodell ) </li></ul></ul><ul><ul><li>Konkrete Kodierung ( Datenformat ) </li></ul></ul><ul><ul><li>Anwendung ( Werkzeuge und Praxis ) </li></ul></ul><ul><li>Einhaltung von Standards muss mittels Validierung überprüft werden </li></ul>
  3. 3. Zeitangabe nach RFC 822* <ul><li>date-time = [ day &quot;,&quot; ] date time ; dd mm yy </li></ul><ul><li>; hh:mm:ss zzz </li></ul><ul><li>day = &quot;Mon&quot; / &quot;Tue&quot; / &quot;Wed&quot; / &quot;Thu&quot; </li></ul><ul><li>/ &quot;Fri&quot; / &quot;Sat&quot; / &quot;Sun&quot; </li></ul><ul><li>date = 1*2DIGIT month 2DIGIT ; day month year </li></ul><ul><li>; e.g. 20 Jun 82 </li></ul><ul><li>month = &quot;Jan&quot; / &quot;Feb&quot; / &quot;Mar&quot; / &quot;Apr&quot; </li></ul><ul><li>/ &quot;May&quot; / &quot;Jun&quot; / &quot;Jul&quot; / &quot;Aug&quot; </li></ul><ul><li>/ &quot;Sep&quot; / &quot;Oct&quot; / &quot;Nov&quot; / &quot;Dec&quot; </li></ul><ul><li>time = hour zone ; ANSI and Military </li></ul><ul><li>hour = 2DIGIT &quot;:&quot; 2DIGIT [&quot;:&quot; 2DIGIT] </li></ul><ul><li>; 00:00:00 - 23:59:59 </li></ul><ul><li>zone = &quot;UT&quot; / &quot;GMT&quot; ; Universal Time </li></ul><ul><li>; North American : UT </li></ul><ul><li>/ &quot;EST&quot; / &quot;EDT&quot; ; Eastern: - 5/ - 4 </li></ul><ul><li>/ &quot;CST&quot; / &quot;CDT&quot; ; Central: - 6/ - 5 </li></ul><ul><li>/ &quot;MST&quot; / &quot;MDT&quot; ; Mountain: - 7/ - 6 </li></ul><ul><li>/ &quot;PST&quot; / &quot;PDT&quot; ; Pacific: - 8/ - 7 </li></ul><ul><li>/ 1ALPHA ; Military: Z = UT; </li></ul><ul><li>; A:-1; (J not used) </li></ul><ul><li>; M:-12; N:+1; Y:+12 </li></ul><ul><li>/ ( (&quot;+&quot; / &quot;-&quot;) 4DIGIT ) ; Local differential </li></ul><ul><li>; hours+min. (HHMM) </li></ul>Formale Regeln in Backus- Naur-Form *STANDARD FOR THE FORMAT OF ARPA INTERNET TEXT MESSAGES (E-Mail) August 13, 1982
  4. 4. Motivation <ul><li>Für Aufbau, Weiterentwicklung und Wartung digitaler Bibliotheken sind Kenntnisse von Datenformaten und Schnittstellen (Zweck, Eigenschaften...) unerlässlich. </li></ul>
  5. 5. Wie kommen nun die Daten zusammen? Dokumente Nutzer Datenbank Experte Autor Beitrag Dokumente Datensatz Datenbank Datensatz Anwendung Datenbank Unbekanntes System Anwendung
  6. 6. Wie kommen nun die Daten zusammen? Dokumente Nutzer Datenbank Experte Anwendung Autor Beitrag Dokumente Datensatz Datenbank Datensatz Anwendung Datenbank Unbekanntes System
  7. 7. Schnittstellen Benutzer Benutzerschnittstelle Programmierschnittstelle Informations- system Programm
  8. 8. Programmierschnittstellen = Application Programming Interface (API) <ul><li>Spezifikation durch Standards </li></ul><ul><li>Implementation durch Programme </li></ul><ul><li>Kompatibilität durch gemeinsame Einhaltung der Spezifikation </li></ul><ul><li>Nutzung von Diensten (Services) durch andere Programme </li></ul><ul><li>Grundprinzip: Daten rein, Daten raus </li></ul>
  9. 9. Beispiel: HTTP <ul><ul><li>Cache-Control: private </li></ul></ul><ul><ul><li>Content-Type: text/html; charset=UTF-8 </li></ul></ul><ul><ul><li>Content-Encoding: gzip </li></ul></ul><ul><ul><li>Server: gws </li></ul></ul><ul><ul><li>Content-Length: 1845 </li></ul></ul><ul><ul><li>Date: Mon, 01 Oct 2007 09:05:53 GMT </li></ul></ul><ul><ul><li>200 OK </li></ul></ul><ul><ul><li>... </li></ul></ul><ul><ul><li>GET /search?q=internet HTTP/1.1 </li></ul></ul><ul><ul><li>Host: www.google.de </li></ul></ul><ul><ul><li>User-Agent: Mozilla/5.0 (...) </li></ul></ul><ul><ul><li>... </li></ul></ul><ul><ul><li>Referer: http://www.wikipedia.de/wiki/Internet </li></ul></ul>Relevant auch für Webserver-Logfiles <ul><ul><li>Antwort </li></ul></ul><ul><ul><li>Anfrage </li></ul></ul>
  10. 10. Beispiel: HTTP <ul><ul><li>Cache-Control: private </li></ul></ul><ul><ul><li>Content-Type: text/html; charset=UTF-8 </li></ul></ul><ul><ul><li>Content-Encoding: gzip </li></ul></ul><ul><ul><li>Server: gws </li></ul></ul><ul><ul><li>Content-Length: 1845 </li></ul></ul><ul><ul><li>Date: Mon, 01 Oct 2007 09:05:53 GMT </li></ul></ul><ul><ul><li>200 OK </li></ul></ul><ul><ul><li>... </li></ul></ul><ul><ul><li>GET /search?q=internet HTTP/1.1 </li></ul></ul><ul><ul><li>Host: www.google.de </li></ul></ul><ul><ul><li>User-Agent: Mozilla/5.0 (...) </li></ul></ul><ul><ul><li>... </li></ul></ul><ul><ul><li>Referer: http://www.wikipedia.de/wiki/Internet </li></ul></ul><ul><ul><li>Antwort </li></ul></ul><ul><ul><li>Anfrage </li></ul></ul>URL DNS MIME type HTML RFC 822 date-time
  11. 11. Relevante Schnittstellen für Digitale Bibliotheken <ul><li>Suchen: Z39.50, SRU/SRW, OpenSearch </li></ul><ul><li>Sammeln/Verteilen: OAI-PMH, ATOM, RSS </li></ul><ul><li>Kopieren/Status: unAPI, SeeAlso, DAIA </li></ul><ul><li>Bearbeiten: SRU Update, ATOMPub </li></ul><ul><li>Identity Management: Shibboleth, OpenID </li></ul><ul><li>Außerdem bisher: NCIP, SIP2 ... </li></ul><ul><li>Initiativen für bessere Schnittstellen: </li></ul><ul><ul><li>Jangle, OCLC Service Grid ... </li></ul></ul>
  12. 12. Beispiel: unAPI <ul><li>Zweck </li></ul><ul><ul><li>Bereitstellung einzeln identifizierter Objekte </li></ul></ul><ul><li>Anfragesyntax </li></ul><ul><ul><li>HTTP-Request mit zwei Parametern </li></ul></ul><ul><ul><ul><li>id: Identifikator des Objektes </li></ul></ul></ul><ul><ul><ul><li>format : Gewünschtes Format </li></ul></ul></ul><ul><li>Antwortsyntax </li></ul><ul><ul><li>Formatliste in XML oder Objekt in einem gewünschten Format </li></ul></ul>
  13. 13. unAPI <ul><li>BASEURL (keine Parameter) </li></ul><ul><li>Liste von allgemeinen Formaten </li></ul><ul><li><?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?> </li></ul><ul><li><formats> </li></ul><ul><li><format name=&quot;text&quot; type=&quot;text/plain&quot; /> </li></ul><ul><li><format name=&quot;marcxml&quot; type=&quot;application/xml&quot; docs=&quot;http://www.loc.gov/standards/marcxml/&quot;/> </li></ul><ul><li></formats> </li></ul>
  14. 14. unAPI <ul><li>BASEURL ?id= IDENTIFIER (kein Format) </li></ul><ul><li>Liste von Formaten für dieses Objekt </li></ul><ul><li><?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?> </li></ul><ul><li><formats id=&quot; IDENTIFIER &quot;> </li></ul><ul><li><format name=&quot;text&quot; type=&quot;text/plain&quot; /> </li></ul><ul><li><format name=&quot;marcxml&quot; type=&quot;application/xml&quot; docs=&quot;http://www.loc.gov/standards/marcxml/&quot;/> </li></ul><ul><li></formats> </li></ul>
  15. 15. unAPI <ul><li>BASEURL ?id= IDENTIFIER &format= FORMAT </li></ul><ul><li>Formatspezifisch (z.B. DC, MARCXML, ...) </li></ul>Datensatz unAPI Server
  16. 16. Schnittstelle != Datenformat <ul><li>Viele Schnittstellen lassen offen, welche konkreten Datenformate verwendet werden </li></ul><ul><li>Ähnlich wie bei allgemeinen Kodierungs-formen (XML, JSON, CSV...) und konkreten Kodierungen von Datenformaten </li></ul><ul><li>„Format X über Schnittstelle Y“ </li></ul><ul><li>Beispiele: </li></ul><ul><ul><li>HTML, XML ... über HTTP </li></ul></ul><ul><ul><li>DC, MARCXML ... über unAPI oder OAI-PMH </li></ul></ul>
  17. 17. API-Programmbibliotheken <ul><li>Zugriff auf APIs mittels Programmiersprache </li></ul><ul><li>Beispiele: Z39.50-Client in PHP: </li></ul><ul><li>$con = yaz_connect ( &quot;z3950.loc.gov:7090/voyager&quot; ); </li></ul><ul><li>yaz_syntax ( $con, &quot;usmarc&quot; ); </li></ul><ul><li>yaz_range ( $con, 1, 10 ); </li></ul><ul><li>yaz_search ( $con, &quot;rpn&quot;, $query ); </li></ul><ul><li>yaz_wait (); </li></ul><ul><li>$hits = yaz_hits ( $con ); </li></ul><ul><li>for ($p = 1; $p <= 10; $p++) { </li></ul><ul><li>$rec = yaz_record ( $con, $p, &quot;string&quot; ); </li></ul><ul><li># ... </li></ul><ul><li>} </li></ul>
  18. 18. zustandslose und zustandsbasiere APIs <ul><li>Alle Anfragen unabhängig voneinander </li></ul><ul><li>Keine Reihenfolge </li></ul><ul><li>Eine Anfrage reicht </li></ul><ul><li>z.B. HTTP, unAPI ... </li></ul><ul><li>„REST“ </li></ul><ul><li>Anfragen bauen aufeinander auf </li></ul><ul><li>Stehende Verbindung </li></ul><ul><li>Beispiel: Login, Suche, Download </li></ul><ul><li>z.B. Z39.50, OAI resumptionToken ... </li></ul>
  19. 19. Beispiel: OAI-PMH <ul><li>Open Archives Initiative (OAI) </li></ul><ul><li>Protocol for Metadata Harvesting (PMH) </li></ul><ul><li>REST-API (außer: resumptionToken) </li></ul><ul><ul><li>Anfrage: HTTP GET (URL) </li></ul></ul><ul><ul><li>Antwort: XML </li></ul></ul><ul><li>Nützliche Anfrage: Neue Metadatensätze </li></ul>Metadatensatz OAI Data Provider Metadatensätze
  20. 20. OAI-PMH <ul><li>Repository als Data Provider </li></ul><ul><li>Harvester sammelt Metadaten-Records </li></ul><ul><li>Bereitstellung von Dienstleistungen durch Service-Provider </li></ul><ul><ul><li>Beispiel: OAIster (http://www.oaister.org/) </li></ul></ul>
  21. 21. OAI-PMH <ul><li>Anfrage-Parameter </li></ul><ul><ul><li>verb (Identify, ListMetadataFormats, GetRecord, ListIdentifier, ListRecords) </li></ul></ul><ul><ul><li>identifier </li></ul></ul><ul><ul><li>metadataPrefix (oai_dc, ...) </li></ul></ul><ul><ul><li>from, until , set (Eingrenzung Datum/Menge) </li></ul></ul><ul><ul><li>resumptionToken (Ergebnisliste fortsetzen) </li></ul></ul><ul><li>Ausprobieren: OAI Repository Explorer http://re.cs.uct.ac.za/ </li></ul>
  22. 22. Beispiel: Search/Retrieve via URL (SRU) Search/Retrieve Web Service (SRW) <ul><li>Neuentwicklung der wichtigsten Z39.50-Funktionalität als Webservice </li></ul><ul><li>Suchabfrage von Datenbanken </li></ul><ul><li>verschiedene Operationen ( operation ) </li></ul><ul><ul><li>explain </li></ul></ul><ul><ul><li>searchRetrieve </li></ul></ul><ul><ul><li>scan </li></ul></ul>
  23. 23. SRU/SRW-searchRetrieve <ul><li>Request aus mehreren optionalen Parametern </li></ul><ul><li>version ist notwendig, query enthält die Anfrage in Common Query Language (CQL) </li></ul><ul><li>Beispiel: http://gso.gbv.de/sru/DB=2.1/ </li></ul>
  24. 24. Beispiel: SeeAlso <ul><li>Basiert auf unAPI und OpenSearch Suggestions </li></ul><ul><li>Query-Format: </li></ul><ul><ul><li>wie unAPI mit format=seealso&id=... </li></ul></ul><ul><li>Response-Format: </li></ul><ul><ul><li>OpenSearch Suggestions (JSON) </li></ul></ul><ul><ul><li>[&quot;..id..&quot;,[..titles..],[..descriptions..],[..urls..]] </li></ul></ul>
  25. 25. (OpenSearch Suggestions) SeeAlso Linkserver ISBN JSON Links JavaScript
  26. 26. (OpenSearch Suggestions) SeeAlso Wrapper Webservice ISBN JSON Verfügbarkeit JavaScript OPAC ISBN
  27. 27. Spezifikation durch Standards <ul><li>Ohne etablierte Programmbibliothek: Standard genau lesen! </li></ul><ul><li>Vertrauen ist gut, Kontrolle ist besser. </li></ul><ul><ul><li>Z39.50: > 100 Seiten nicht frei verfügbar </li></ul></ul><ul><ul><li>OAI-PMH: ~ 30 Seiten http://www.openarchives.org/OAI/openarchivesprotocol.html </li></ul></ul><ul><ul><li>unAPI: 1 (+3) Seiten http://unapi.info/specs/ </li></ul></ul>
  28. 28. Webservices <ul><li>Informatiker-Buzzword </li></ul><ul><li>Komplex: SOAP, XML-RPC, WSDL... </li></ul><ul><li>Einfach: API über HTTP </li></ul><ul><li>Meist ist XML im Spiel </li></ul><ul><li>Kombination mehrere Services als „Mashup“ </li></ul>
  29. 29. Was tun ohne API? <ul><li>Selber machen! (Scraping, Wraping...) </li></ul><ul><li>Vorteil </li></ul><ul><ul><li>Lehrreich </li></ul></ul><ul><li>Nachteil </li></ul><ul><ul><li>Keine Verlässlichkeit </li></ul></ul><ul><ul><li>Meist aufwändiger (aber nicht immer) </li></ul></ul><ul><ul><li>Jemand könnte sich beschweren </li></ul></ul><ul><li>Oft die einzige Möglichkeit </li></ul><ul><li>Tip: Firefox DownloadHelper -Plugin </li></ul>
  30. 30. Verfügbarkeit ermitteln mittels Screen Scraper <ul><li>Katalog der Bibliothek im Kurt-Schwitters-Forum </li></ul><ul><li>http://opc4.tib.uni-hannover.de:8080/DB=11/ </li></ul><ul><li>Titeldaten Standort und Ausleihstatus </li></ul><ul><li>Raussuchen per Hand </li></ul>
  31. 31. Verfügbarkeit ermitteln mittels Screen Scraper <ul><li>use LWP::Simple; </li></ul><ul><li>my $opac = 'http://opc4.tib.uni-hannover.de:8080/DB=11'; </li></ul><ul><li>my $ikt = 1016; </li></ul><ul><li>my $regexp = '>Ausleihstatus: </strong></td><td[^>]+>([^>]+)<BR>([^>]+)<'; </li></ul><ul><li>my $isbn = shift @ARGV; </li></ul><ul><li>my @status; </li></ul><ul><li>if ($isbn) { </li></ul><ul><li>my $url = $opac . &quot;/CMD?ACT=SRCHA&IKT=&quot; . $ikt . &quot;&TRM=&quot; . $isbn; </li></ul><ul><li>my $html = get($url); </li></ul><ul><li>while ($html =~ m/$regexp/g) { </li></ul><ul><li>push @status, &quot;$isbn: $1, $2&quot;; </li></ul><ul><li>} </li></ul><ul><li>@status = (&quot;$isbn: nicht gefunden&quot;) unless @status; </li></ul><ul><li>print join(&quot; &quot;, @status) . &quot; &quot;; </li></ul><ul><li>} else { </li></ul><ul><li>print &quot;Usage: $0 ISBN &quot;; </li></ul><ul><li>} </li></ul>
  32. 32. Verfügbarkeit ermitteln mittels Screen Scraper <ul><li>$ ./isbn-at-schwitters.pl 3-931659-29-1 </li></ul><ul><li>3-931659-29-1: Ausleihbar, Bitte selbst am Standort Freihand dem Regal entnehmen </li></ul><ul><li>$ ./isbn-at-schwitters.pl 3-936931-16-X </li></ul><ul><li>3-936931-16-X: Praesenzexemplar, - </li></ul><ul><li>3-936931-16-X: Ausleihbar, z. Zt. ausgeliehen </li></ul><ul><li>3-936931-16-X: Ausleihbar, z. Zt. ausgeliehen </li></ul><ul><li>$ ./isbn-at-schwitters.pl 978-0-8050-8043-8 </li></ul><ul><li>978-0-8050-8043-8: beim Buchhandel bestellt, - </li></ul><ul><li>$ ./isbn-at-schwitters.pl 978-3-446-41208-8 </li></ul><ul><li>978-3-446-41208-8: Praesenzexemplar, - </li></ul><ul><li>$ ./isbn-at-schwitters.pl 978-3-937514-42-0 </li></ul><ul><li>978-3-937514-42-0: nicht gefunden </li></ul>
  33. 33. Vorhandensein über- prüfen mittels SRU-API <ul><li>Gesamtkatalog Hannover </li></ul><ul><ul><li>http://gso.gbv.de/DB=2.92/ </li></ul></ul><ul><li>SRU-Schnittstelle </li></ul><ul><ul><li>http://gso.gbv.de/sru/DB=2.92/ </li></ul></ul><ul><li>Titel- und Exemplardaten im PICA-Format </li></ul>
  34. 34. Vorhandensein über- prüfen mittels SRU-API <ul><li>use PICA::Server; </li></ul><ul><li>my $isbn = shift @ARGV; </li></ul><ul><li>my @status; </li></ul><ul><li>if ($isbn) { </li></ul><ul><li>my $server = PICA::Server->new( </li></ul><ul><li>SRU => &quot;http://gso.gbv.de/sru/DB=2.92/&quot; </li></ul><ul><li>); </li></ul><ul><li>$server->cqlQuery( 'pica.isb=' . $isbn, </li></ul><ul><li>Record => sub { </li></ul><ul><li>$record = shift; </li></ul><ul><li>my @bib = $record->values('101@$d'); </li></ul><ul><li>push @status, @bib; </li></ul><ul><li>} </li></ul><ul><li>); </li></ul><ul><li>@status = (&quot;$isbn: nicht gefunden&quot;) unless @status; </li></ul><ul><li>print join(&quot; &quot;, @status) . &quot; &quot;; </li></ul><ul><li>} else { print &quot;Usage: $0 ISBN &quot;; } </li></ul>API-Programmbibliothek
  35. 35. Serviceorientierte Architektur (SOA) <ul><li>Eine monolithische Anwendung </li></ul><ul><li>Geht nicht, unsere Software kann nicht </li></ul><ul><li>Viele lose gekoppelte Bausteine </li></ul><ul><li>Probier' es selber aus, hier sind die APIs! </li></ul>
  36. 36. Integriertes Bibliothekssystem Suchindex Suchinterface Trefferanzeige Titelanzeige Katalogisierung Ausleihe Benachrichtigung Erwerbung Fernleihe u.v.a.m. Gespeicherte Suchen
  37. 37. Modulares Bibliothekssystem Suchinterface Trefferanzeige Titelanzeige Katalogisierung Suchindex Ausleihe Fernleihe Gespeicherte Suchen Erwerbung Benachrichtigung
  38. 38. Serviceorientiertes Bibliothekssystem Benachrichtigung Gespeicherte Suchen Katalogisierung Suchinterface Trefferanzeige Suchindex Erwerbung Ausleihe Fernleihe Titelanzeige Externe Anwendung Externe Anwendung Externe Anwendung
  39. 39. Zusammenfassung <ul><li>Schnittstellen (APIs) zum Datenaustausch </li></ul><ul><li>Webservices: APIs über HTTP (meist REST) </li></ul><ul><li>(Idealerweise) genau spezifiziert und mit Referenz-Programmbibliothek implementiert </li></ul><ul><li>Zustandslose Protokolle einfacher </li></ul>
  40. 40. <ul><li>Relevant für digitale Bibliotheken </li></ul><ul><ul><li>Suchen: Z39.50, SRU/SRW, OpenSearch... </li></ul></ul><ul><ul><li>Einsammeln/Verteilen: OAI, ATOM, RSS... </li></ul></ul><ul><ul><li>Kopieren/Status: unAPI, SeeAlso, DAIA </li></ul></ul><ul><ul><li>ATOMPub, Shibboleth, OpenID, NCIP, SIP2 ... </li></ul></ul><ul><li>Oft versch. Datenformate über eine API </li></ul><ul><li>Wenn keine API vorhanden: Wrapper/Scraper </li></ul><ul><li>Serviceorientierte Architektir (SOA): Netz-werk aus Diensten & gut dokumentierte APIs </li></ul>Zusammenfassung
  41. 41. Weitere Quellen <ul><li>Library-related APIs http://techessence.info/apis </li></ul><ul><li>DLF Working group on digital library APIs </li></ul><ul><li>Jangle Project </li></ul><ul><li>Programmable Web </li></ul><ul><li>... </li></ul>
  42. 42. Bis nächste Woche!

×