Pode-workshop oppgave 2
Fra Biblab
Innhold |
Norgeshistorielinje
Lage tidslinje for Norges historie ved å trekke ut poster som omhandler historiske perioder.
SIMILE prosjektets widgets og APIer kan brukes til å lage presentasjoner.
Relevante Normarc-tagger
*0823 $a948.101 og *650 0$aNorge$x…$1948.101
Dewey-numre (utdrag fra DDK5) Norge, historiske perioder: 948.101-948.106:
- 948.101 Eldre historie til ca. 800
- 948.102 Middelalderen, ca. 800-1536
- 948.1021 Vikingtiden, ca. 800-ca. 1050
- 948.1022 Tidlig kristen middelalder, ca. 105-1130
- 948.1023 Høymiddelalderen, 1130-1349
- 948.1024 Senmiddelalderen, 1349-1536
- 948.103 Reformasjon og unionen med Danmark, 1536-1814
- 948.1031 1536-1660
- 948.1032 Eldre envoldstid, 1660-1721
- 948.1033 1721-1814
- 948.1034 Frihetsåret 1814
- 948.104 Unionen med Sverige, 1814-1905
- 948.1041 Førparlamentarisk tid, 1814-1884
- 948.1042 Parlamentarisme og unionsstrid, 1884-1905
- 948.105 1905-1999
- 948.1051 1905-1918
- 948.1052 1918-1940
- 948.1053 1940-1945
- 948.1054 1945-1969
- 948.1055 1970-1999
- 948.106 2000-
Kan utvides med
Tilsvarende data fra Bibsys og Aleph
Dokumentasjon
Simile timeline widget: http://www.simile-widgets.org/timeline/
Simile widgets wiki timeline: http://code.google.com/p/simile-widgets/wiki/Timeline
Hjemmeside SIMILE: http://simile.mit.edu/
LØSNING
Trekke ut poster
Vi henter ut data dynamisk via SRU-protokollen og konverterer via JSON http://json.org/.
Vi brukte PHP-klassen beskrevet under for å trekke ut poster fra SRU-tjenster; koden under er tilpasset BIBSYS' SRU, men skal være kompatibel med hva som helst av SRU-tjenere. For å få den til å funke mot Koha sin SRU-tjeneste måtte skriptet tilpasses ved å gjerne en del av parametrene som sende til SRU-serveren.
Henting av data
Mens bruk av SRU er å foretrekke framfor Z39.50 pga. at SRU anses som mer framtidsrettet enn Z39.50 er det fortsatt slik at SRU går for sakte til å bruke i produksjon. Dermed tenker vi at vi kunne lage en cron-jobb på serveren som henter ned dataene én gang i døgnet.
Vi tok i bruk regulært uttrykk for å parse ut dataene vi ville ha. Vi tror ikke at dette er den smarteste løsningen, men den funker på sin måte. Vi vil helst se at det brukes XPath for å hente ut dataene fra XML-kilder.
BIBSYS-data
BIBSYS-data hentes inn vha. skriptet under.
Koha
Vi prøvde Koha sin SRU-tjeneste og hente ut deweynummer fra 082 og via Marc to Dublin Core Crosswalk http://www.loc.gov/marc/marc2dc.html, men det viste seg at Koha ikke ga ut de forventete dataene. Dette skal vi rette på. Vi måtte se på Bibliofil sin Z39.50-tjeneste som datakilde istedet.
OpenURL
Legge inn OpenURL for inngang til katalogen.<Rurik må beskrive og lime inn kode>
Dewey
Deweytabellen for Norgeshistorie er hentet direkte fra DDK5.
Vi baserer oss på å bruke deweynummer fordi disse er entydige og brukes av alle de fleste bibliotek. Det fungerer ikke å hente opplysningene fra emneord fordi disse utformes forskjellig i de forskjellige bibliotekkatalogene
Eksempel fra Deichmans katalog Deichman: Kristins verden Marcposten fra Deichman Deichman har besluttet å kun bruke periodebetegnelsene fra Dewey.
Eksempel fra Stavangers katalog Stavangers katalog: Kristins verden Marcposten fra Stavangers katalog
Eksempel fra Bibsys Bibsys: Kristins verden For Marcpost; velg visningsformat ”BIBSYS-MARC” fra dropdownlista
Kode
Hente SRU
<?php
/************************************************************************
* *
* An API to get xml data from BIBSYS' SRU service *
* Copyright (c) 2009 Rurik Thomas Greenall *
* *
* Permission is hereby granted, free of charge, to any person *
* obtaining a copy of this software and associated documentation *
* files (the "Software"), to deal in the Software without *
* restriction, including without limitation the rights to use, *
* copy, modify, merge, publish, distribute, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the *
* Software is furnished to do so, subject to the following *
* conditions: *
* *
* The above copyright notice and this permission notice shall be *
* included in all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, *
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES *
* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND *
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT *
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, *
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR *
* OTHER DEALINGS IN THE SOFTWARE. *
* *
************************************************************************/
//The code here is terse, you might want to help document what is going on :D
class BibsysXml {
var $xml;
function getData($searchData){
if ($searchdata){
try {
$this->xml = $this->getXML($this->encodeSearchData($searchData));
}
catch (Exception $e) {
echo "Error getting XML data:".$e->getMessage();
}
}
else {echo 'no search data';}
}
function getXML($operation = "define",$version="1.1",$query="",$startRecord="0",$maximumRecords="10",$recordPacking="",$recordSchema="dc",$recordXPath="",$resultSetTTL="",$sortKeys="",$stylesheet="",$extraRequestData=""){
define('HOSTNAME', 'http://sru.bibsys.no/services/sru?');
$url=HOSTNAME.'operation='.$operation.'&version='.$version.'&query='.$query.'&startRecord='.$startRecord.'&maximumRecords='.$maximumRecords.'&recordPacking='.$recordPacking.'&recordSchema='.$recordSchema.'&recordXPath='.$recordXPath.'&resultSetTTL='.$resultSetTTL.'&sortKeys='.$sortKeys.'&stylesheet='.$stylesheet.'&extraRequestData='.$extraRequestData;
$session = curl_init($url);
curl_setopt($session, CURLOPT_HEADER, false);
curl_setopt($session, CURLOPT_RETURNTRANSFER, true);
$xml = curl_exec($session);
$this->xml = $xml;
return;
}
/////////////////// CONVENIENCE METHODS ///////////////////
/////////////////// "You'll probably want to add your own methods" ///////////////////
//returns define page for service
function operationDefine(){
$this->getXML();
}
//returns the first ten results in dc format
function returnDC($query){
$this->getXML(
$operation = "searchRetrieve",
$version="1.1",
$query,$startRecord="0",
$maximumRecords="10",
$recordPacking="",
$recordSchema="dc",
$recordXPath="",
$resultSetTTL="",
$sortKeys="",
$stylesheet="",
$extraRequestData=""
);
}
//returns the first ten results in marcxml format
function returnMarcxml($query){
$this->getXML(
$operation = "searchRetrieve",
$version="1.1",
$query,
$startRecord="0",
$maximumRecords="10",
$recordPacking="",
$recordSchema="marcxml",
$recordXPath="",
$resultSetTTL="",
$sortKeys="",
$stylesheet="",
$extraRequestData=""
);
}
//returns the first ten results in dc format with a stylesheet
function returnDCWithStylesheet($query, $stylesheet){
$this->getXML(
$operation = "searchRetrieve",
$version="1.1",
$query,
$startRecord="0",
$maximumRecords="10",
$recordPacking="",
$recordSchema="dc",
$recordXPath="",
$resultSetTTL="",
$sortKeys="",
$stylesheet,
$extraRequestData=""
);
}
//returns the first ten results in marcxml format with a stylesheet
function returnMarcxmlWithStylesheet($query, $stylesheet){
$this->getXML(
$operation = "searchRetrieve",
$version="1.1",
$query,
$startRecord="0",
$maximumRecords="10",
$recordPacking="",
$recordSchema="marcxml",
$recordXPath="",
$resultSetTTL="",
$sortKeys="",
$stylesheet,
$extraRequestData=""
);
}
/////////////////// FIN ///////////////////
}
//Usage examples
header("Content-Type: text/xml; Extension: xml");
$newxml = new BibsysXml;
$newxml->operationDefine();
// $newxml->returnDC('(forfatter%3D"smith%2C+A*")');
// $newxml->returnMarcxml('bibsys.forfatter="Hamsun,%20knut"');
// $newxml->returnDCWithStylesheet('bibsys.dokid="95a015161"',"sruclient.xsl");
// $newxml->returnMarcxmlWithStylesheet('bibsys.dokid="95a015161"',"sruclient.xsl"); //actually this won't work because this stylesheet relies on dc-formatting
echo $newxml->xml;
?>
Betaversjon
http://torfeus.deich.folkebibl.no/~gruppe2/tidslinje/simile_test.html
Forbedringer
Designmessige justeringer for brukervennlighet
Hovedperioder (eks: 948.102) bør skilles ut med egen farge og ligge ”over” de underliggende periodene (eks: 948.1021, 948.1022, 948.1023, 948.1024) som da bør (må) kommer kronologisk. Hver hovedperiode må da ha forskjellig farge, slik at det er mulig å skille de fra hverandre.
Tidsperiodene hentes inn fra en PHP-fil som produserer en XML-fil. Tidslinja leser inn XML-fila og plasserer periodene/tidspunktene utover på tidslinja. Dette er ikke en veldig automatisk måte å gjøre det på. Vi ønsket opprinnelig å hente ut tidsperiodene fra emnestrengen (650 $x nr 2). Det forutsetter imidlertid at man har konstruert emnestrengene på samme måte i alle bibliotek. Det er ikke tilfelle. Standardisering hadde vært fint!
Treffene i basen ønsker vi å vise i en fin liste under tidslinja istedet for i den veldig begrensede ”snakkeboblen”.