Pensumhjelp

Fra Biblab

Gå til: navigasjon, søk

Innhold

[rediger] Ideen: Automatisk søk etter pensumlitteratur

Vi fikk ideen til tjenesten etter å ha avdekket et sterkt behov for hjelp til å lokalisere pensumlitteratur for studenter ved universiteter og høgskoler i Norge. I dag inneholder pensumlistene både bøker, artikler og nettressurser, og studentene bruker mye unødig tid på å lete fram disse i bibliotek og bokhandler. Mange gir kanskje opp når det er noe de ikke finner, og vi ønsket derfor å lage en løsning som kan gjøre automatiske søk i diverse databaser på bakgrunn av pensumlistene. Vi ville også gi lærerne et verktøy for å kunne utvikle pensumlister på en bedre måte, og lettere kunne dele og utveksle pensumlister. For å få til dette ville vi lage en todelt løsning. Den første delen er et verktøy for å generere pensumlister i XML/Dublin Core-format. Den andre delen er en mashup som bruker distribuerte søk til å finne dokumentene som er beskrevet i XMLen.

[rediger] Implementeringen

Løsningen ble laget som en temaoppgave i kurset Webteknologier på masterutdanningen i bibliotek- og informasjonsvitenskap. På grunn av tidsrammene for temaoppgaven ble ideen noe forenklet, og vi valgte å lage en løsning for pensumlister som kun inneholder bøker, ikke artikler eller nettressurser. Programmet starter med å hente en allerede lagret pensumliste i XML-format. Fra XML-dokumentet henter vi informasjon om fagets navn, bibliotektilhørighet og en liste med pensumbøkenes ISBN-nummer. Deretter starter programmet en løkke som går gjennom listen av ISBN, og for hver ISBN sendes det søk mot de forskjellige dataleverandørene: BIBSYS, Bokkilden, Amazon og DnB Nor. Trefflisten er en alfabetisk ordnet liste hvor innførslene er skrevet etter APA-standarden. Innførslene inneholder informasjon om hvor mange eksemplar av boka som finnes hos ditt bibliotek, og hvis boka finnes hos både Bokkilden og Amazon har vi gjort en prissammenligning ved hjelp av valutakurser fra DnB Nor. Hvis det finnes bilde av bokomslaget blir også dette vist. I tillegg har vi lenker til hvor man kan finne mer informasjon om boka hos de aktuelle kildene.

[rediger] Tekniske løsninger

Vi har definert to typer forespørsler; en som henter bibliografisk informasjon, og en som henter tjenestespesifikk informasjon som pris, bilde og lenke til bokens side på dataleverandørens side. Det bibliografiske søket sendes kun mot én og én dataleverandør til vi får treff. Søket sendes først mot BIBSYS, deretter Bokkilden og til slutt Amazon. Får vi treff hos BIBSYS, sendes det ikke mot de andre. Dette har vi gjort for å slippe å forholde oss til den overflødige datamengden vi ville få med å hente like data fra hver leverandør. Slik vi har løst det, henter vi kun bibliografisk informasjon fra en tjeneste hvis den ikke kunne hentes fra en annen tjeneste.

De tjenestespesifikke søkene sendes alltid til alle leverandørene, gitt at det er treff. Med andre ord, hvis vi har prøvd å sende et bibliografisk søk mot Bokkilden og ikke fått treff, prøver vi heller ikke å sende det tjenestespesifikke søket, fordi vi da naturlig nok ikke vil få treff. Dette vet vi fordi den eneste forskjellen på de ulike typene av søk er informasjonen vi henter, ikke hva vi søker på. Men om vi får treff hos Bibsys eller Bokkilden på det bibliografiske søket, har vi ikke testet om det bibliografiske søket gir treff hos Amazon, og det tjenestespesifikke søket sendes da uansett.

Hvis vi har fått treff i Amazon, henter vi valutakurser fra DnB NOR, og bruker disse for å regne ut prisen fra dollar til norske kroner. Dette gjør at vi senere kan sammenligne prisen med Bokkilden sin pris, og markere hvilken som er den billigste. Her har vi valgt en enkel løsning hvor vi finner den største av to verdier. Dette kan vi gjøre fordi vi bare har to bokhandlere å sammenligne. Hvis vi hadde hentet data fra flere bokhandlere måtte vi valgt en løsning som kan sammenligne flere enn to verdier.

Dataene fra både det bibliografiske søket og de tjenestespesifikke søkene legges inn i en array som vi har kalt $resultat. Resultatet av hvert søk er en array, og denne slås sammen med $resultat-arrayen. Når alle dataene for den gjeldende boken er hentet, legges den bibliografiske informasjonen som en tekststreng i APA-format inn i en ny variabel kalt $post.

Bilde til presentasjonen finner vi ved å først sjekke om det tjenestespesifikke søket har hentet bilde fra Amazon, og legge dette inn i en variabel med tittelen på boken som alternativ tekst. Hvis det ikke er treff hos Amazon, sjekker vi om det er hentet bilde fra Bokkilden. Hvis det ikke finnes omslagsbilde for boken, legger vi inn et generisk bilde.

Informasjonen kombineres som en tekststreng i en innførsel i en array kalt $treffliste. Tekststrengen inneholder bibliografisk informasjon sammen med informasjon fra de tjenestespesifikke søkene.

Deretter lager programmet en ny array hvor bokens sorteringselementer lagres. Vi bruker forfatter og år hvis boken har en forfatter, tittel og år om den ikke har forfatter. Indeksen for boka i dette sorteringsarrayet er parallell med indeksen til boka i trefflistearrayen. Vi bruker en ekstra array for å enkelt skille ut den informasjonen som er relevant for sorteringen. Treffliste-arrayen består av html-tagger og andre tegn som ikke påvirker sorteringen, og vi unngår dermed potensielle feilkilder sammenlignet med å sortere treffliste-arrayen. Fordi de opprettes med samme variabel som angir indeks ($j), er det enkelt å identifisere hvilke innførsler i de to arrayene som hører sammen. Deretter oppdateres løkka, og hele prosessen gjentas for neste ISBN.

Når programmet har gått igjennom hele ISBN-lista, sorteres sorteringsarrayen alfabetisk, men indeksene beholdes slik at f.eks tredje innførsel kan ha indeksen 7. Ved å bruke en foreachløkke på sorteringsarrayen, går programmet gjennom postene alfabetisk, og skriver ut den innførselen i trefflistearrayen som har tilsvarende indeks.

[rediger] Søk mot BIBSYS via SRU-protokollen

For søk mot BIBSYS har vi brukt SRU via HTTP GET. Det fungerer slik at man sender en CQL-spørring i URL og får et XML-dokument tilbake. I denne spørringen kan man definere hvilken indeks man vil søke i. Vi ønsket å søke etter ISBN, og det kan man gjøre ved å bruke indeksen identifier i kontekstsettet Dublin Core, i følge den nye NorZIG-profilen. Dette vil imidlertid ikke virke før BIBSYS oppgraderer SRU-tjeneren. Derfor må vi søke i BIBSYS’ eget kontekstsett hvor de har en indeks som heter isbn. Postskjema angir hva slags XML-skjema som skal benyttes på postene i responsen. Her vurderte vi også å bruke Dublin Core, men fant ut at vi fikk mer informasjon ved å bruke MarcXML. Spesielt viktig for oss er det at MarcXML-postskjemaet inneholder opplysninger om hvilke bibliotek som har boka, dette er informasjon vi kan bruke til å finne ut hvor mange eksemplar som finnes hos utdanningsinstitusjonens bibliotek. Det har vist seg at eksemplarinformasjonen som er kodet i XML-dokumentet ikke alltid stemmer helt overens med det som vises i BIBSYS Ask, men vi har likevel valgt å beholde denne funksjonen for å vise hvordan tjenesten skal fungere. MarcXML inneholder også mer spesifikke opplysninger om f.eks ansvarshavende som gjør det lettere å skrive ut trefflisten etter APA-standarden. Dessverre var det ingen av postskjemaene som returnerte opplysninger om utlånsstatus, og vi kunne derfor ikke implementere denne informasjonen i tjenesten.

[rediger] Presentasjon

Det opprinnelige ønsket for tjenesten var å vise informasjon om hvor dokumentet kan lånes, kjøpes eller lastes ned for hver innførsel i pensumlisten. Eks.:

Morville, P. & Rosenfeld, L. (2007). Information architecture for the World Wide Web.
Last ned: (url)
Lån: Læringssenteret P48: 3 eks., 1 ledig. Hylleoppstilling: HIO/P48, 004.678 Mor (Kart)
Kjøp: Beste pris: Capris.no 152 kr


Hvis du er nysgjerrig på hvordan det ferdige resultatet ble kan du se på demoen av Pensumhjelpen som er publisert på Biblioteklaboratoriet sin server.


[rediger] Eksterne lenker

Personlige verktøy