Kokosin viivakoodigeneraattorin HelMet-korteille

Viivakoodigeneraattori HelMet-korteille

Viivakoodigeneraattori HelMet-korteille

Kokosin ennen lounasta simppelin viivakoodigeneraattorin HelMet -kirjastokorteille. HelMetissä käytetään Code 39 -koodausta, ja kyseessä on aivan yksinkertainen HTML + JavaScript -käyttöliittymä jQueryllä ja jQuery Barcode -plugarilla pikaisesti kokoamaani generaattoriin. Se kysyy käyttäjältä kirjastokortin numeroa (se 200000… -alkunen litania), ja tekaisee siitä napin painalluksella viivakoodin. Ei ole vaikeaa.

Saatavilla GitHubista. Kiitos avoin lähdekoodi ja kiitos internet.

Unohtuiko kirjastokortti himaan mutta tarvit sitä johonkin? Ei hätää, tulosta oma Code 39 viivakoodi!

Unohtuiko kirjastokortti himaan mutta tarvit sitä johonkin? Ei hätää, tulosta oma Code 39 viivakoodi!

Mainokset

Esitelmäni kirjaston bibliografisen datan laadusta sekä laadun arvioinnista ja valvonnasta (ym.)

Tein vuoden 2012 lopulla freelancerina parin kuukauden ajan erittäin hauskaa, opettavaa ja vaativaa ”kuutamokeikkaa” PIKI-kirjastoille bibliografisen datan parissa, ja ilmeisesti sen vuoksi olin kutsuttuna Kansalliskirjaston Kuvailun tiedotuspäivillä 20.-21.3.2013 puhumaan asiasta. Kansalliskirjaston Tarja Mäkisellä sekä minulla oli tunnin osuus otsikolla Näkökulmia laatuun. Itse juttelin luettelointityön ja luettelointidatan suhteesta tietojenkäsittelyyn, ohjelmointiin ja tietohallintoon, laatuajattelusta sekä kirjavista mahdollisuuksista joita meillä kirjastoilla olisi käytettävissämme, ja joiden parissa marras-joulukuussa estottomasti revittelin.

Tapahtuman molemmat päivät on taltioitu, oma osuuteni alkaa ensimmäisen päivän (20.3.) videotallenteen noin kohdasta 2:18:00 ja kestää 25 minuuttia plus keskustelua.

Jos haluat katsella pelkkää esitysgrafiikkaani tuolta tiedotuspäiviltä, se löytyy Prezistä. Aiempi blogipostauksessani maaliskuun 12. päivältä sisältää linkit laatimaani lähdekoodiin, myös työpäiväkirjana käyttämääni projektin- ja asianhallintajärjestelmään sekä myös tekstiksi kirjoittamaani raporttiin.

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.

Vaskin asiasanat, jotka eivät ole YSAssa

Sanaston pengontaa

Kävin läpi Vaski-kirjastojen aineistotietokannan ja etsin asiasanat, jotka eivät esiinny tesauruksessa. Ohessa lista yleisimmistä:

esiintymien lkm termi
202 sotaromaanit
108 Lieto-kokoelma
100 korjausoppaat
66 eräkirjat
38 matkakirjat
29 sisustusoppaat
27 Suomen historia
23 kansanmusiikki: Venäjä
23 jouluaskartelu
22 posliinimaalaus
21 viihdetaiteilija : Suomi
21 salapoliisiromaanit
20 Yhdistyneet kansakunnat
20 kirjasto- ja informaatiopalveluala
20 1980-LUKU
18 vaateompelu
17 rock and roll
16 MURRENÄYTTEET
16 itämaiset taistelulajit
15 sosiaali- ja terveydenhuolto
15 rajavartiolaitos
15 paperiaskartelu
15 laivaluettelo
15 DVD-elokuvat
14 tiedeakatemiat
14 Suomen taideyhdistys
14 piirroselokuvat
13 tabulatuurinotaatiot
13 ranskalainen keittiö
13 nuorten aikuisten kirjat
13 Jeesus Kristus
13 äänentoistotekniikka
13 šamanismi
12 YKSINLAULU
12 vauvanhoito
12 Titanic
12 tilastollinen tutkimus
12 punk rock
12 kaupunkihistoriat
12 historia : 1900-luku
12 arabialainen musiikki
12 1960-luku
11 tšekin kieli
11 säveltäjät : Suomi
11 rentoutuminen
11 muodin historia
11 kuultokudos
10 varastaminen
10 Uusi testamentti
10 taitelijat
10 seminaarit (kokoukset)
10 samanismi
10 rockmusiikki
10 kiinalainen keittiö
10 1800-LUKU

Ohjelman (kts. alla) antamista tiedoista näkee myös, että esim. asiasana muodin historia (jota ei ole YSAssa) esiintyy Vaskin tietueissa Ppro853_137785, Ppro853_541141, Ppro853_541143, Ppro853_541144, Ppro853_541145, Ppro853_541146, Ppro853_541634, Ppro853_561083, Ppro853_561086, Ppro853_561087 sekä Ppro853_561088.

Eri asiasanoja joilla on vain yksi esiintymä Vaskissa löysin 1761 kappaletta. Kymmesti esiintyviä asiasanoja on kahdeksan kappaletta. Miten tällaista dataa olisi parasta havainnoillistaa? Ideoita vastaanotetaan.

Vaski on FinMARC 1998 -muotoa ja kyseisen standardin mukaan kentässä 652 olevat asiasanat ovat peräisin Yleisestä suomalaisesta asiasanastosta, eli YSA:sta (kansainvälisessä MARC21:ssä asia ilmaistaan hieman toisin, kuvaamalla asiasanakenttien osakentässä ‡2 mikä sanasto on kyseessä, tyyliin 650 #7 ‡a bibliografinen valvonta ‡2 ysa).

Tein aiemmin pienen työkalun jolle voi antaa yksittäisiä MARC-tietueita ja se kyselee ONKI-palvelun ohjelmointirajapintaa (APIa) käyttäen ovatko tietueen asiasanat YSO-ontologiassa. Kun YSA julkaisiin vastikään avoimena datana, tuli nyt tekemäni massakäsittely helpommaksi. Työn voi nykyään tehdä omalla koneella, pommittamatta ONKIn rajapintaa noin suurella kyselymäärällä.

Prosessi

Noukin ensin YSA:n SKOS-muotoisesta tiedostosta varsinaiset sanat (prefLabel ja altLabel) tekstitiedostoon yhdeksi pitkäksi, pitkäksi listaksi. 14.6.2011 lataamassani tesauruksessa oli 36991 termiä.

Sekä MARC-data että sanasto ovat saatavilla myös XML:nä, jonka käyttäminen olisi oikeaoppisempaa, mutta en nyt jaksanut säätää niiden kanssa sillä XML:n käsittelytyökalut ovat minulle aika tuntemattomia. Sensijaan olen tottunut operoimaan unixin komentoriviltä ja opettelen myös Perliä.

Tässä kirjoittamani Perl-kielinen ohjelma jota käytin:

#!/usr/bin/perl

use MARC::Batch;

my $file = "vaski-kunnostettu.mrc";
my $batch = MARC::Batch->new('USMARC', $file);
my $sanasto = "~/ysa.lista.alt_too";

$batch->strict_off();
while (my $record = $batch->next()) {
        for my $termi ($record->subfield('652', 'a')) {
        if (system("grep -q -i \"$termi\" $sanasto")) {
            print($termi, ";", $record->field('001')->as_string,"\n");
        }
    }
}

Kuten ehkä huomaat, tämä on hyvin kaukana elegantista. Ensinnäkin käsiteltävät tiedostot on nimetty ohjelman sisällä ja toisekseen kukin termi etsitään sanastosta käyttäen ulkoista ohjelmaa. Tämä aiheuttaa yhden forkin per asiasana, joka on huono asia. Oikeasti vertailu pitäisi tehdä tämän ohjelman sisällä, lukemalla asiasanat tiedostosta yksiulotteiseen taulokkoon tai listaan. Mutta toimii tämä näinkin, kun huonoa ohjelmistosuunnittelua voi korvata prosessoriteholla 🙂 Miniläppärini (joka on ainoa käyttämäni työväline) rouskutteli tätä useita tunteja.

Mutta tämän ei olekaan tarkoitus olla eleganttia. Tämän on tarkoitus osoittaa kirjastoammattilaisille, että me itse voimme ottaa aloitteen käsimme sen sijaan, että odottelemme että järjestelmätoimittajamme tekee kivoja asioita puolestamme (sitä on turha odotella).

Vielä pari huomiota laatimani menetelmän puutteista: se ei huomioi asiasanaketjuja, ja tuon kaltainen huoleton merkkijonojen etsintä johtaa vääriin tuloksiin mikäli etsittävä epäkelpo asiasana esiintyy osana kelpoa asiasanaa. Tälle asialle pitäisi todella tehdä jotain.

Mitä välii?

Ymmärtääkseni kaikkien 652-kentässä olevien termien pitäisi olla peräisin YSA:sta. Näin sanoo myös FinMARC -formaatti. Asiasanoja joita ei YSAssa ole, ei pitäisi käyttää ainakaan kyseisessä kentässä. Kuten tiedämme, ei asiasanasto kuvaa kaikkia maailman ilmiöitä. Siksi paikallisille sanastoille onkin tarvetta.

Minua paremmin luettelointiin perehtyneet tietänevät mitä sisällönkuvailussa oikeasti kuvaillaan. Jossain lienee sovittu, onko sisällön lisäksi aiheellista kuvailla muotoa. Esim. Vaskissa käytetään termejä ”Nintendo Wii”, ”sotaromaanit” ja ”elämäkerrat” kuvailemaan muotoa. Nämä teokset eivät kerro Nintendon Wii-peleistä, sotaa kuvaavista romaaneista tai elämäkertojen kirjoittamisesta, vaan ovat niitä. Ehkä tämä on ookoo – en jaksa nyt lueskella luettelointisäännöstöä asiaa tarkistaakseni enkä muista ulkoa mitä siellä sanotaan. Mutta ei ole vaikea nähdä että tämä on problemaattista. Ihmettelin samaa asiaa aiemmin, kun mietin minkähänlaista olisi “ihan oikea kirjastotyö” pelien parissa?

Mainiot luetteloijat ovat arvatenkin tämän muoto vs. sisältö -asian ratkaisseet jollain sopimuksella (joka siis lienee kirjattuna luettelointisääntöihin). Käytännössä ainakin Vaskissa kuvaillaan surutta sekä muotoa että sisältöä 652 -kentässä.

Tässä on muitakin mielenkiintoisia puolia: MARC-tietueessa ei esimerkiksi ole mitään tietoa siitä, mitä YSAssa on ollut tietueen luontihetkellä. YSA muuttuu ajan myötä, kenties osa nyt listaamistani termeistä on ollut kyseisen luetteloijan käyttämässä YSA:n versiossa luettelointihetkellä… MARC-tietueesta itsestään puuttuu tällainen tekninen metadata.

Kirjoitusvirhe luetteloinnissa on fataali virhe, ja teos katoaa kyseisen aiheen kannalta mustaan aukkoon. Varsinaisia kirjoitusvirheitä löysin Vaskista onneksi vain ihan muutaman.

Monet löytämäni, YSA:n ulkopuoliset termit ovat hyvin käytännöllisiä ja olen oikeasti onnellinen että niitä on tietueisiin luettelointisääntöjen vastaisesti tallennettu. Tämä kertoo sanaston puutteellisuudesta ja myös luokitusjärjestelmän puutteista, sekä kirjastoihmisten omatoimisista ongelmanratkaisupyrkimyksistä. Se on tietenkin aivan oikein. Nämä itse keksityt termit voisi eristää omaan sanastoonsa, jolla YSAa täydennetään, ellei ole YSAn tarkoituksenmukainen ylläpito ole mahdollista. Lisäksi meillä on käytettävissämme useampia sanastoja YSAn rinnalla ja niitä olisikin hyvä käyttää MARC-tietueen sellaisissa paikoissa, jotka eivät ole YSAlle varattuja.

Miksei kirjastolaisten keskuudessa kasva koodausosaaminen?

nstop@Flickr: "Perl Art"

Bohyun Kimin Library Hat -blogissa on mielenkiintoinen kirjoitus ja keskustelu menossa otsikolla Why Not Grow Coders from the inside of Libraries? ja se on poikinut kaikenlaista muista blogeissa sekä code4lib -yhteisössä. Monia herkullisia puolia on esillä, esim. taitojen kartuttamiseen kannustaminen kirjastoissa, IT-ihmisten ja kirjastoihmisten luonteentyyppien yhteneväisyydet, rekrypolitiikka, sekä kirjasto-osaamiseen että IT-osaamiseen liittyvät myytit, ”kaikki valmiina paketista” -ajattelu ja alistuminen.

En todellakaan ole koko tekstistä samaa mieltä, sillä osa kirjoittelun väittämistä ei lainkaan vastaa omia kokemuksiani suomalaisesta kirjastomaailmasta. Mutta paljosta on erittäin helppo olla samaa mieltä. Miten voitaisi edistää asiaa? Miten saataisi kirjastolaiset itse noudattamaan sitä aina paljon paasaamaansa 2 §:n lopussakin mainittua asiaa?

Will K. luettelee kommentissaan kolme, erityyppistä ohjelmoitiosaajaa. Ensimmäinen on ongelmalähtöinen ihminen, joka näkee ohjelmoinnin tapana ratkoa muita ongelmia tai helpottaa niiden ratkaisun valmistelua. Toinen on ohjelmistokehittäjä, kolmas tietojenkäsittelytieteilijä (eli atk-tiedemies). Will sanoo osuvasti, että periaatteessa jokaisen informaatioalalla työskentelevän ihmisen, siis kirjastoammattilaiset jos ketkä mukaan lukien tulisi kuulua ensimmäiseen joukkoon (laajentaisin jopa että informaatioyhteiskunnassa asuvan).

Monikohan kirjastolainen on oikeasti lukenut vaikkapa sellaisen ”Teach yourself ohjelmointikieli in 21 days” -kirjan? Niitä kuitenkin hommataan joka kirjastoon läjäpäin asiakkaille tyrkylle, suomennettuinakin. Siellä niitä hyllyssä seisoo, sinunkin kirjastossasi. Tavallaan voisi ajatella että kolme viikkoa on aika pieni investointi ihan hemmetin hyödyllisestä taidosta.

(via @ThatAndromeda at #code4lib)

Analyysi Helsingin kaupunginkirjaston aihepakettien ajallisesta kattavuudesta

Kirjasto on kertomus. Nimenomaiseen kertomukseen sisältyy väite, että kirjasto tuo esille kirjallisuuden (ym. julkaisujen) niin kutsuttua pitkää häntää. Siis pitämällä käytössä ja nostamalla esiin aineistoa, johon ei yksittäisinä julkaisuna kohdistu suurtakaan mielenkiintoa, mutta joka on määrällisesti laajaa.

Viime viikolla tuli mieleen, että Helsingin kaupunginkirjaston aihepakettien tonkiminen toisi tähän ehkä jotain valoa. Aihepaketit ovat sikäli mielenkiintoinen tutkimuskohde, että niiden laatimista ei ole keskitetysti juuri ohjattu; päin vastoin laatijoilla on vapaat kädet vinkata haluamaansa aineistoa, ja koko henkilökunta on pakettien kokoamiseen tervetullut. Näin voitaisi ajatella, että aihepaketit heijastavat kirjastoammattilaisten omaa näkemystä tällaisesta vinkkaamisesta ja aineiston esiin tuonnista, eikä organisaation näkemystä.

Koodasin ihmeellisillä bash-taidoillani pari loitsua, jotka käyvät hakemassa aihepakettien web-sivut kaupunginkirjaston julkaisujärjestelmässä asustavasta aihepakettiarkistosta, tonkivat niistä linkit pääkaupunkiseudun näyttöluetteloon HelMetiin ja käy vielä poimimassa sieltä ns. xrecord-tiedostot, jotka ovat XML-muotoisia MARC 21 -tietueita. Sieltä löytyy kenttä 260‡c, eli Julkaisu-, jakelu- jne. aika. Työkalusettinä minulla on perinteinen unix-varustus tyyliin sed, wget ja libxml:ään nojaava xpath. Logiikka on toteutettu bashillä. Oikeasti minun pitäisi opetella Perl-ohjelmointia juuri tällaista toimintaa varten.

Toivoin tällä tutkimuksella osoittavani, että toisin kuin yleensä tykätään toisella, kirjastolaiset oikeasti nostaisivat näissä paketeissa esille lähinnä uutta materiaalia. Ajattelin etukäteen, että ehkä 80% kohdistuisi viiden edellisen vuoden aikana julkaistuun aineistoon. Valitettavasti (tai siis onneksi) jouduin pettymään, sillä läpikäymäni aihepaketit todellakin nostivat esiin suuren määrän vanhempaa aineistoa!!

Kävin läpi vain vuosien 2010 ja 2009 aihepaketit. Tältä vuodelta on 16 aihepakettia, viime vuodelta 43. Tekemäni työkalu löysi näistä suoria viitteitä teoksiin 186 ja 747 kappaletta.

Alla tulos:

Vaikka painoa kertyykin huomattavasti viiden edellisen vuoden julkaistulle aineistolle vuonna 2009, ei käyrä ole ollenkaan niin jyrkkä kuin olin kuvitellut. Paljonkos se kirjan keskimääräinen aika kirjakaupan hyllyllä onkaan? Jotain 6 kuukautta tai jotain?

X-akselin otsikot ovat tässä aika pientä tihrua, mutta akselilla on sata vuotta julkaisuja vuodesta 1910 alkaen. Suurempi, paremmin luettava versio kuvasta löytyy Flickristä. Nyt nappaamani datat sekä työkalun saa minulta jos haluaa. Tai voin jatkaa työtä jos se jotakuta kovasti kiinnostaa ja siitä olisi kirjastoaatteen ja maailman hyvyyden kannalta iloa.

Mistään käyttämistäni työkaluista ei kiitos kuulu järjestelmätoimittajillemme (Innovative Interfacesin Millenium, Sinisen Meteoriitin Meteor). Ne eivät tarjoa mitään työkaluja tällaiseen tietojen ynnäilyyn eri lähteistä. Kiitos kuuluu sen sijaan avoimen lähdekoodin kansainväliselle yhteisölle, joka on kymmeniä vuosia herkeämättä tuottanut joustavia, tehokkaita, ilmaisia ja vapaita työkaluja, joita ilman maailma olisi erittäin erilainen kuin on. Kiitos.

Samalla menetelmällä ja tekemieni työkalujen avulla voi piirrellä erilaisia graafeja. Esim. käppyrän voisi rajoittaa vain tieto- tai kaunokirjallisuuteen tai vaikka musiikkiin. Myös aiempien vuosien käppyrät voisi piirtää. Aihepaketteja on nyt yhteensä 209, vuodesta 2006 lähtien. Tekemäni työkalusetti ei ole todellakaan täysautomaattinen (tosin tämä proof-of-concept todistaa, että työkalun voisi kehittää sellaiseksi), mutta pointti on, että meillä kirjastoilla on kaikenlaista dataa, jota voimme tutkia jos haluamme. Tämän tekemiseen meni noin yksi työpäivä, mukaan lukien tämä blogikirjoitus.

Ajallinen näkemys pitkään häntään on yksi tapa katsoa asiaa. Jos myös kirjastojen lainaustilastot olisivat saatavilla (kuten niiden pitäisi olla), voitaisi vastaavalla tavalla selvittää vaikkapa kuinka paljon kirjastolaiset nostavat esiin aineistoa jota ei lainata paljoakaan.

Lori Ayre: ”Kymmenen vuotta opittua avuttomuutta”

Lori Ayre haastaa kirjastot tarttumaan niihin emansipaation avaimiin joita jo nyt saatavilla olevat avoimen lähdekoodin ohjelmistot ja menetelmät tarkoittavat. Hän kirjoittaa rohkeasti otsikolla Ten Years of Learned Helplessness Coming to an End.

Lorin mukaan kirjastojen on

  1. hankittava IT-osaajia, jotka osaavat lukea koodia, kirjoittaa koodia, tehdä määrityksiä ja korjata bugeja,
  2. päästävä yli avoimen lähdekoodin pelostaan esimerkiksi lukemalla kirjoja (kts. asiasanat vapaat ohjelmistot ja avoin lähdekoodi),
  3. sukellettava mukaan ja kokeiltava (Kirjastot.fi:n Labs-hanke tarjoaa testikäyttöön sekä Kohan että Evergreenin),
  4. keskusteltava keskenään

Samaa viestiä kuuluu monesta suunnasta.

Minusta tuntuu, että kirjastoalalla on meneillään voimakas emansipaatio. Eikä kyse ole vain tiettyjen tietojärjestelmien ajatuksiamme kahlitsevasta vapautumisesta. Kirjastolaiset puhuvat esimerkiksi siitä, että alan koulutus- ja osaamispohjaa on Suomessa laajennettava. Eikä tämä tarkoita vain, että meillä on oltava enemmän satusetiä ja vanhustenhoidon ammattilaisia. Tarvitsemme – ja uskon että myös haluamme – sisustussuunnittelijoita, somistajia ja tapahtumatuottajia. Ja supermarketologeja ja tilastotieteilijöitä. Kirjastoissa on pitkälti kyse mekaanisesta tietojenkäsittelystä ja -siirtelystä, eli tarvitsemme tietenkin myös ohjelmoijia ja logistikkoja, jotka varmistavat että tarvittava tieto on oikeassa paikassa ja oikeaan aikaan, oikeassa muodossa ja oikein kohdennettuna.

Kindle on oikeasti tietokone

Amazon Kindle 2 (kiitos kuvasta ShakataGaNai@Wikimedia Commons)

Viime viikolla Amazon ilmoitti julkaisevansa SDK:n e-kirjan lukulaitteelleen Kindlelle. SDK on työkalupakki, joka mahdollistaa laitteen ohjelmoinnin. Nyt on siis oikein valmistajan taholta myönnetty, että Kindle ei ole jonkinlainen rampa korvike kirjalle tai muulle painotuotteelle, vaan oikea tietokone. Juuri ohjelmoitavuus määrittää tietokoneen; tietokone on itsessään merkityksetön, mutta looginen ja deterministinen laite, jolla on ohjelmoitavuutensa ansiosta potentiaali olla mikä tahansa muu laite.

Näinhän asia Kindlenkin osalta tietenkin on alunperinkin ollut. Amazonin ilmoitus ohjelmoinnin mahdollistamisesta (tai oikeammin: ohjelmoinnin estämisen lopettamisesta) kuitenkin muuttaa laitteen luonnetta perustavanlaatuisesti. Kuvittele vaikkapa matkaopas, joka jättäisi sadepäivänä kiertokävelyn suosittelematta, ja ohjaisi lukijan sensijaan museokierrokselle. E-kirjan lukulaite vapautuu ja muuttuu takaisin siksi mitä oikeasti onkin, eli tietokoneeksi.

Alkaneella viikolla julkistettaneen myös Applen tabletti, eräänlainen valtavan kokoinen iPod. Nookin alla pyörii Googlen älypuhelimiin kehittämä käyttöjärjestelmä Android. Tietokoneita siis.

E-kirjan lukulaite? So last season. Ymmärrän tarpeen sellaisille laitteille siirtymävaiheen teknologiana, mutta se siirtymävaihe alkaa nyt olemaan jo mennyttä. Suhtaudutaampa e-kirjan lukulaitteisiin sellaisina mitä ne ovatkin, eli läppäreinä.

Mitä bibliofiilien kaipailemaan kirjojen hajuun ja muuhun likaisuuteen, painoon ja esineellisyyteen tulee, niin tiesittekö että on olemassa kirjan hajuista parfyymiä, jota voi suihkuttaa e-kirjan lukulaitteeseensa tai läppäriinsä ja vuodattaa muutama (krokotiilin)kyynel wanhojen hywien aicoien cunniacxi 😉