Esittelyssä kirjastojen avoin rajapinta SRU

Asiaan liittymätön, mutta naurusta kangistunut kissa

Julkaisempa tämän SRU:ta käsittelevän jutun luonnos-kansiostani, kun SRU on tullut puheeksi viime aikoina useampaan kertaan.

Kirjastoilla on pitkät perinteet aineistoluetteloidensa ohjelmointirajapinnoissa. Vaikka alallemme on hakeutunut sangen niukalti tietokone- ja ohjelmointiosaamista, ja vaikka ilmeisen harvat näitä asioita aktiivisesti ajattelevat, eräs asia mistä puhutaan paljon ovat ohjelmointirajapinnat. Nämä tulevat esiin KDK:n, Auroran, Arenan, CS Library ym. kaltaisissa hankkeissa, joissa nimenomaan avoimet ohjelmointirajapinnat ovat keskeisiä jotta eri järjestelmät voivat keskustella keskenään.

Kenties olisi itua kerätä yhteen paikkaan, kenties data.kirjastot.fi:hin tietoa käytössä ja saatavilla olevista rajapinnoista, erityisesti sellaisista joihin on nyt heti tänään pääsy sekä meillä kirjastoihmisillä itsellämme, että myös muilla organisaatioilla, kansalaisilla ja toimijoilla. Näitä tietojahan on esim. Nelli-portaalin myötä kerätty Kansalliskirjastolle.

Search/Retrieval via URL

Eräs yleinen ja tutustumisen arvoinen kirjastomaailman ohjelmointirajapinta on Search and retrieve via URL (SRU). Kyseessä on standardi, ja tavallaan nykyaikainen versio Z39.50:stä (aka ”Z” aka. ”Zing”) jota olemme kauan käyttäneet ns. kopio- eli poimintaluettelointiin. Kuten nimi sanookin, on kyseessä rajapinta tiedonhakuun. Z, SRW ja SRU ovat kaikki oikeasti eri asioita, mutta nimiä kuulee käytettävän ristiin. Z39.50:n juuret ylettävät kauas, kauas aikaan ennen WWW:tä (kuka muistaa WAIS -tiedonhakujärjestelmän?), SRU on tuoreempaa perua.

SRU:ta käytettäessä hakulausekkeet kuvaillaan Contextual Query Language (CQL) -kielellä. SRU:ta varten on toki olemassa valmiita ohjelmointikirjastoja esimerkiksi Perliin. Kun katsot alla olevia esimerkkejä, tuon query parametrin kaverina on CQL:llä kuvailtuja yksinkertaisia hakulausekkeita. CQL on kyllä sangen ilmaisuvoimainen, ja palvelimesta sitten lopulta riippuu miten se lausekkeita tulkitsee.

Kansalliskirjaston NelliWiki kertoo SRUsta ihan kattavasti.

PallasPro -järjestelmien SRU -rajapinnat vaikuttavat olevan verkkokirjastojen /Zing? -osoitteissa, ja mahdollisesti perustuvat Index Datan tekemiin komponentteihin, jotka sinänsä ovat avointa lähdekoodia ja vapaasti netistä ladattavissa ja käyttöön otettavissa. SRU-palvelimen pystyyn säätäminen ja ylläpito ei taida olla erityisen hauskaa, mutta se on mahdollista.

Varsinais-Suomen yleisten kirjastojen kirjastokonsortion Vaskin SRU-rajapinta palveli aiemmin osoitteessa http://borzoi.kirja.turku.fi/Zing?, mutta on poistunut käytöstä Auroraan siirtymisen myötä. Vaskin nykyinen SRU-rajapinta taitaa olla palomuurin takana. Lapin osoite on http://intro.rovaniemi.fi:8001/Zing? ja Ratamo -kirjastojen http://ratamo.kirjas.to:8005/Zing?.Mitäs muita on, miten nuo Axiellilla hostatut palvelut menevät (esim. http://outi.kirjas.to/). Nämä osoitteet eivät taida olla missään mainostettuja, vaan olen deduktiivisesti päätellyt ne itse, eikä niiden käyttöä näytä olevan mitenkään erityisesti estetty. Joissain kirjastoissa, esim. Vaskissa ja PIKIssä on SRU-rajapintoihin pääsy kokonaan palomuurilla estetty. Kansalliskirjaston palveluista on tietoa täällä ja USA:n Kongressin kirjaston http://z3950.loc.gov:7090/voyager?.

Löpinät sikseen, näin haet 10 kissoja tai koiria käsittelevää teosta Lapista:

http://intro.rovaniemi.fi:8001/Zing?operation=searchRetrieve&query=dc.subject=kissa%20or%20dc.subject=koira

Vastaus näyttää sitten tällaiselta

<?xml version="1.0" encoding="UTF-8"?>
<SRW:searchRetrieveResponse xmlns:srw_dc="info:srw/schema/1/dc-v1.1" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:cld="http://www.ukoln.ac.uk/metadata/rslp/schema/" xmlns:DIAG="http://www.loc.gov/zing/srw/diagnostic/" xmlns:mods="http://www.loc.gov/mods" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dcmitype="http://purl.org/dc/dcmitype/" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:SRW="http://www.loc.gov/zing/srw/" xmlns:zng="urn:z3950:zng_prototype1" xmlns:rec="info:srw/schema/2/rec-1.0">
 <SRW:version>1.1</SRW:version>
 <SRW:numberOfRecords>2382</SRW:numberOfRecords>
  <SRW:records>
 <SRW:record>
   <SRW:recordPacking>XML</SRW:recordPacking>
   <SRW:recordSchema>info:srw/schema/1/dc-v1.1</SRW:recordSchema>
   <SRW:recordData>
     <dc:title>Joiku 2007 2 : Lapin nuuskut ry:n jäsentiedote</dc:title>
<dc:subject>koira</dc:subject>
<dc:subject>noutajat</dc:subject>
<dc:description>4 kertaa vuodessa</dc:description>
<dc:publisher>Lapin nuuskut ry</dc:publisher>
<dc:date>2007</dc:date>
<dc:language>fin</dc:language>
   </SRW:recordData>
   <SRW:recordPosition>1</SRW:recordPosition>
   <SRW:extraRecordData>
     <rec:id>Ppro698_10067478</rec:id>
   </SRW:extraRecordData>
  </SRW:record>
  <SRW:record>
   <SRW:recordPacking>XML</SRW:recordPacking>
   <SRW:recordSchema>info:srw/schema/1/dc-v1.1</SRW:recordSchema>
   <SRW:recordData>
     <dc:title>Burda 2005/10</dc:title>
<dc:subject>koira</dc:subject>
<dc:subject>vaatteet</dc:subject>
<dc:subject>kaavat</dc:subject>
   </SRW:recordData>
   <SRW:recordPosition>2</SRW:recordPosition>
   <SRW:extraRecordData>
     <rec:id>Ppro698_10050294</rec:id>
   </SRW:extraRecordData>
  </SRW:record>
  <SRW:record>
   <SRW:recordPacking>XML</SRW:recordPacking>
   <SRW:recordSchema>info:srw/schema/1/dc-v1.1</SRW:recordSchema>
   <SRW:recordData>
     <dc:title>Suuri käsityölehti 2005/4</dc:title>
<dc:subject>koira</dc:subject>
<dc:subject>vaatteet</dc:subject>
   </SRW:recordData>
   <SRW:recordPosition>3</SRW:recordPosition>
   <SRW:extraRecordData>
     <rec:id>Ppro698_10050187</rec:id>
   </SRW:extraRecordData>
  </SRW:record>
  <SRW:record>
   <SRW:recordPacking>XML</SRW:recordPacking>
   <SRW:recordSchema>info:srw/schema/1/dc-v1.1</SRW:recordSchema>
   <SRW:recordData>
     <dc:title>Suuri käsityölehti 2005/2</dc:title>
<dc:subject>koira</dc:subject>
<dc:subject>vaatteet</dc:subject>
<dc:subject>neuleet</dc:subject>
   </SRW:recordData>
   <SRW:recordPosition>4</SRW:recordPosition>
   <SRW:extraRecordData>
     <rec:id>Ppro698_10050185</rec:id>
   </SRW:extraRecordData>
  </SRW:record>
  <SRW:record>
   <SRW:recordPacking>XML</SRW:recordPacking>
   <SRW:recordSchema>info:srw/schema/1/dc-v1.1</SRW:recordSchema>
   <SRW:recordData>
     <dc:title>Suuri käsityölehti 2003/10</dc:title>
<dc:subject>koira</dc:subject>
<dc:subject>vaatteet</dc:subject>
   </SRW:recordData>
   <SRW:recordPosition>5</SRW:recordPosition>
   <SRW:extraRecordData>
     <rec:id>Ppro698_10036034</rec:id>
   </SRW:extraRecordData>
  </SRW:record>
  <SRW:record>
   <SRW:recordPacking>XML</SRW:recordPacking>
   <SRW:recordSchema>info:srw/schema/1/dc-v1.1</SRW:recordSchema>
   <SRW:recordData>
     <dc:title>Suuri käsityölehti 2001/11-12</dc:title>
<dc:subject>koira</dc:subject>
<dc:subject>vaatteet</dc:subject>
<dc:subject>neuleet</dc:subject>
   </SRW:recordData>
   <SRW:recordPosition>6</SRW:recordPosition>
   <SRW:extraRecordData>
     <rec:id>Ppro698_10021521</rec:id>
   </SRW:extraRecordData>
  </SRW:record>
  <SRW:record>
   <SRW:recordPacking>XML</SRW:recordPacking>
   <SRW:recordSchema>info:srw/schema/1/dc-v1.1</SRW:recordSchema>
   <SRW:recordData>
     <dc:title>Lappalaiskoirat : iloisesti läsnä / [teksti Sanna Karppinen] ; [kuvat Lappalaiskoirat ry]</dc:title>
<dc:creator>Karppinen, Sanna</dc:creator>
<dc:creator>Lappalaiskoirat</dc:creator>
<dc:subject>koira</dc:subject>
<dc:subject>suomenlapinkoira</dc:subject>
<dc:subject>lapinporokoira</dc:subject>
<dc:subject>ruotsinlapinkoira</dc:subject>
<dc:subject>porokoirat</dc:subject>
<dc:subject>lappalaiskoirat</dc:subject>
<dc:subject>historia</dc:subject>
<dc:subject>harrastukset</dc:subject>
<dc:subject>paimenkoirat</dc:subject>
<dc:subject>paimennus</dc:subject>
<dc:publisher>Kirjakaari</dc:publisher>
<dc:date>2012</dc:date>
<dc:identifier>978-952-5969-06-1</dc:identifier>
<dc:language>fin</dc:language>
   </SRW:recordData>
   <SRW:recordPosition>7</SRW:recordPosition>
   <SRW:extraRecordData>
     <rec:id>Ppro698_541666</rec:id>
   </SRW:extraRecordData>
  </SRW:record>
  <SRW:record>
   <SRW:recordPacking>XML</SRW:recordPacking>
   <SRW:recordSchema>info:srw/schema/1/dc-v1.1</SRW:recordSchema>
   <SRW:recordData>
     <dc:title>Ketterä kisu / [Sarah Phillips ; suunnittelu: Mark Richards ; suomennos: Anu Karvinen]</dc:title>
<dc:creator>Phillips, Sarah</dc:creator>
<dc:creator>Richards, Mark</dc:creator>
<dc:creator>Karvinen, Anu</dc:creator>
<dc:subject>lastenkirjallisuus</dc:subject>
<dc:subject>kuvakirjat</dc:subject>
<dc:subject>koskettelukirjat</dc:subject>
<dc:subject>paksulehtiset kirjat</dc:subject>
<dc:subject>etsintä</dc:subject>
<dc:subject>kissa</dc:subject>
<dc:subject>eläimet</dc:subject>
<dc:description>Tunnustelukirja</dc:description>
<dc:description>BTJ, T121015, BTJ Kirjo 2012 : 17a, 20121015, 7,25EUR, 9%, 22, 2,47, ACF-, 021, http://www.btj.com/btjcgi/arvo/get_add_info.cgi?type=PRES&key=4525480053575466, Kuvaus, http://www.btj.com/btjcgi/arvo/get_add_info.cgi?type=IMAGE&key=4525480053575466, Kansikuva</dc:description>
<dc:publisher>Kirjalito</dc:publisher>
<dc:date>2012</dc:date>
<dc:identifier>978-951-28-5523-0</dc:identifier>
<dc:language>fin</dc:language>
   </SRW:recordData>
   <SRW:recordPosition>8</SRW:recordPosition>
   <SRW:extraRecordData>
     <rec:id>Ppro698_541515</rec:id>
   </SRW:extraRecordData>
  </SRW:record>
  <SRW:record>
   <SRW:recordPacking>XML</SRW:recordPacking>
   <SRW:recordSchema>info:srw/schema/1/dc-v1.1</SRW:recordSchema>
   <SRW:recordData>
     <dc:title>Leikkisät pennut / [Sarah Phillips ; suunnittelu: Mark Richards ; suomennos: Anu Karvinen]</dc:title>
<dc:creator>Phillips, Sarah</dc:creator>
<dc:creator>Richards, Mark</dc:creator>
<dc:creator>Karvinen, Anu</dc:creator>
<dc:subject>lastenkirjallisuus</dc:subject>
<dc:subject>kuvakirjat</dc:subject>
<dc:subject>koskettelukirjat</dc:subject>
<dc:subject>paksulehtiset kirjat</dc:subject>
<dc:subject>etsintä</dc:subject>
<dc:subject>ystävät</dc:subject>
<dc:subject>leikki</dc:subject>
<dc:subject>koira</dc:subject>
<dc:subject>pennut</dc:subject>
<dc:description>Tunnustelukirja</dc:description>
<dc:description>BTJ, T121015, BTJ Kirjo 2012 : 17a, 20121015, 7,25EUR, 9%, 22, 2,47, ACF-, 021, http://www.btj.com/btjcgi/arvo/get_add_info.cgi?type=PRES&key=2226144582534108, Kuvaus, http://www.btj.com/btjcgi/arvo/get_add_info.cgi?type=IMAGE&key=2226144582534108, Kansikuva</dc:description>
<dc:publisher>Kirjalito</dc:publisher>
<dc:date>2012</dc:date>
<dc:identifier>978-951-28-5522-3</dc:identifier>
<dc:language>fin</dc:language>
   </SRW:recordData>
   <SRW:recordPosition>9</SRW:recordPosition>
   <SRW:extraRecordData>
     <rec:id>Ppro698_541505</rec:id>
   </SRW:extraRecordData>
  </SRW:record>
  <SRW:record>
   <SRW:recordPacking>XML</SRW:recordPacking>
   <SRW:recordSchema>info:srw/schema/1/dc-v1.1</SRW:recordSchema>
   <SRW:recordData>
     <dc:title>Jakt med älghund : från valp till älghund / Rolf Westerberg ; [illustrationer: Rolf Svensson ; foto: Anna-Sara Persson]</dc:title>
<dc:creator>Westerberg, Rolf</dc:creator>
<dc:subject>metsästys</dc:subject>
<dc:subject>hirvi</dc:subject>
<dc:subject>koira</dc:subject>
<dc:subject>metsästys</dc:subject>
<dc:subject>hirvikoirat</dc:subject>
<dc:subject>jämtlanninpystykorva</dc:subject>
<dc:subject>harmaa norjanhirvikoira</dc:subject>
<dc:subject>valkoinen ruotsinhirvikoira</dc:subject>
<dc:subject>musta norjanhirvikoira</dc:subject>
<dc:subject>karjalankarhukoira</dc:subject>
<dc:subject>laika</dc:subject>
<dc:subject>jakt</dc:subject>
<dc:subject>älg</dc:subject>
<dc:subject>hund</dc:subject>
<dc:subject>jakt</dc:subject>
<dc:subject>älghund</dc:subject>
<dc:subject>jämthund</dc:subject>
<dc:subject>norsk älghund, grå</dc:subject>
<dc:subject>svensk vit älghund</dc:subject>
<dc:subject>norsk älghund, svart</dc:subject>
<dc:subject>karelsk björnhund</dc:subject>
<dc:subject>lajka</dc:subject>
<dc:subject>hälleforshund</dc:subject>
<dc:publisher>Settern</dc:publisher>
<dc:date>2011</dc:date>
<dc:identifier>978-91-7586-634-5</dc:identifier>
<dc:language>swe</dc:language>
   </SRW:recordData>
   <SRW:recordPosition>10</SRW:recordPosition>
   <SRW:extraRecordData>
     <rec:id>Ppro698_541413</rec:id>
   </SRW:extraRecordData>
  </SRW:record>
  </SRW:records>
 <SRW:echoedSearchRetrieveRequest>
  <SRW:version>1.1</SRW:version>
  <SRW:query>dc.subject=kissa or dc.subject=koira</SRW:query>
  <SRW:startRecord>1</SRW:startRecord>
  <SRW:maximumRecords>10</SRW:maximumRecords>
  <SRW:recordPacking>xml</SRW:recordPacking>
  <SRW:recordSchema>dc</SRW:recordSchema>
 </SRW:echoedSearchRetrieveRequest>
</SRW:searchRetrieveResponse>

Siis ihan mukavaa XML:ää jolla voi tehdä kaikkea hauskaa. Eli ei muuta kuin parsimaan!! Jos tykkää ylläolevan Dublin Coren sijasta enemmän MARCista (kröhöm), voi vastauksen pyytää MARCXML:nä antamalle SRU-kutsulle parametrin recordSchema=marcxml, näin:

http://intro.rovaniemi.fi:8001/Zing?operation=searchRetrieve&recordSchema=marcxml&query=dc.subject=kissa or dc.subject=koira

SRU:n explain -operaatiolla voi kysyä palvelimelta mitä metadataformaatteja palvelin osaa palauttaa, ja indeksejä on haettavissa.

Muita mielenkiintoisia, olemassaolevia ohjelmointirajapintoja suomalaisiin kirjastoon ovat ONKI -ontologiapalvelimen rajapinnat sekä Kirjastot.fi:n Labsin rakentamat XML ja JSON -muotoiset rajapinnat HelMet -aineiston kyselyä varten. Tuleeko muita mieleen?

Oma lukunsa on sitten niinkutsuttu screenscraping. Tätä menetelmää voidaan toisinaan käyttää sellaisissa skenaarioissa, joissa palvelin ei oikeasti tarjoa mitään kunnollista ohjelmointirajapintaa. Näin toimivat Frank-monihaku sekä Kymenlaakson Kyyti.

Lisää avoimia rajapintoja on tulossa Axiellin kirjastojärjestelmiin (kröhöm) sekä Kansalliseen digitaaliseen kirjastoon KDK:hon.

3 thoughts on “Esittelyssä kirjastojen avoin rajapinta SRU

  1. Seuraavaksi voitkin heittää esimerkkejä miten tuota matskua on leivottu ja tuotetaan jotain järjellistä webbisivulle? kyllähän noita xml-parsereita on, mutta esimerkit ei ole pahitteeksi.

  2. Huomatkaa muuten noi käyttöoikeustiedot tuolla,esim Lapissa lukee ”Database is freely available.” Sekä freely että available on tietenkin monitulkintaisia, mutta tulkintaa kannattaa tietenkin tehdä omien tarpeiden mukaisesti.

Vastaa

Täytä tietosi alle tai klikkaa kuvaketta kirjautuaksesi sisään:

WordPress.com-logo

Olet kommentoimassa WordPress.com -tilin nimissä. Log Out / Muuta )

Twitter-kuva

Olet kommentoimassa Twitter -tilin nimissä. Log Out / Muuta )

Facebook-kuva

Olet kommentoimassa Facebook -tilin nimissä. Log Out / Muuta )

Google+ photo

Olet kommentoimassa Google+ -tilin nimissä. Log Out / Muuta )

Muodostetaan yhteyttä palveluun %s