Pode-workshop oppgave 2

Fra Biblab

Gå til: navigasjon, søk

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”.

Personlige verktøy