Posts tagged perl
EPrints upgrade to 3.2 and RoMeO patch v1.1
0Hi all,
i decide to wrote this post in english because i’m talking about an international project, EPrints:
EPrints is the most flexible platform for building high quality, high value repositories, recognised as the easiest and fastest way to set up repositories of research literature, scientific data, student theses, project reports, multimedia artefacts, teaching materials, scholarly collections, digitised records, exhibitions and performances.
At the moment i’m working hard to build and configure an Institutional repository (called “OASi”) for research products of University of Siena.Since it is still in beta stage, i’ve upgraded to newest version 3.2 and i was impressed of all upgraded and innovations they made in that release !
Yep, as in any major releases, there are some changes and fixes to do but i spend only few hours fixing all repository issues.
One of those fix involve my RoMeO patch that let thedepositor to know, if found, editorial policies about your eprint. The patch modify Upload.pm in /perl_lib/EPrints/Plugin/InputForm/Component adding a table that show details about the ISSN’s policies grabbed from Sherpa/RoMeO.
Tecnically, my patch simply did queryes on the new RoMeO v2.4 API asking for infos about specified ISSN.
If you like the idea, try it: click here to get RoMeo.tar.gz !
EPrints: ESSPER Import Plugins
0Come sapete sono alle prese con EPrints in merito ad un importante progetto dell’Università di Siena. Attualmente sto dedicando tanto tempo allo sviluppo di nuovi plugin e sistemi per importare metadati relativi alle pubblicazioni che i Ns docenti e ricercatori hanno in giro per il mondo di Internet, tra cui la banca dati dell’Associazione ESSPER. Come fare per importare i metadati presenti su questa banca dati ? Beh, non c’è il modo di esportare, come per altre, in formati standard quali BibTeX o MARC ma, solamente per chi è iscritto, si può esportare in RefWorks. Insomma, EPrintsamente parlando, un disastro
.
Nella pagina però noto una certa regolarità nella presentazione dei metadati, oltre alla possibilità di recuperare ciascun record direttamente dal parametro GET codice dell’URL, così decido di dare una sbirciata al sorgente html. Noto che non vi sono particolari difficoltà nella realizzazione di un semplice parser, basato sulle Regular Expressions, per catturare i metadati che ci interessano. Così decido di fare un tentativo e scrivo qualche riga di codice in Perl:
my $browser = LWP::UserAgent->new; my $url = "http://www.biblio.liuc.it/scripts/essper/ricerca.asp?tipo=scheda&codice=150406"; my $response = $browser->get( $url ); my $plain_text = HTML::FormatText->new(leftmargin => 0, rightmargin => 256)->format(parse_html($response->content)); my %fields = (); my @vars = split(/\n/,$plain_text); foreach (@vars) { my $line = $_; if($line =~ m/^\s*(Autori|Titolo|Periodico|Anno|Volume|Fascicolo|Pagina iniziale|Pagina finale|SICI):\s*(.*)\s*$/) { print "$1: $2\n"; $fields{$1} = $2; } }
Carramba…funziona ! Praticamente nessun magheggio strano: faccio un fetch dell’html della pagina, elimino tutti i tags ed il codice html (HTML::FormatText) ed eseguo una operazione di matching riga per riga usando le perl Re salvando i metadati e relativo valore dentro una lista hash.
Riesco pertanto ad estrarre i seguenti metadati:
- Titolo
- Autori
- Rivista
- Anno
- Pagina iniziale, pagina finale, volume, serie, fascicolo
- ISSN (direttamente dal SICI)
Interessante approfondire quest’ultimo punto sull’estrazione dell’ISSN. Il SICI contiene sia ISSN della rivista che altri dati univoci dell’articolo, organizzati in maniera univoca. Attraverso una espressione regolare riesco ad estrapolare l’ISSN:
my $sici = $fields{SICI};
if($sici =~ m/^(\d+)-(\d+).*\s*$/) {
print "ISSN: $1-$2\n";
}
A questo punto sviluppare un plugin di importazione per EPrints è un gioco da ragazzi: devo preoccparmi esclusivamente di fare l’override delle classi new, input_fh e convert_input, aggiungendo alcuni controlli per verificare che l’utente inserisca o l’URL completo (da cui poi estrapolo il numero del documento) o direttamente il numero:
if ($ids =~ /^http:.*/) {
my $query = CGI->new("$ids");
$ids = $query->param('codice');
}
if (!($ids =~ /^\d+/)) {
print "Invalid ID: $ids\n";
}
ed alla fine ecco a voi il Plugin di Import EssPer.pm pronto per essere copiato dentro /perl_lib/EPrints/Plugin/Import/ !

Commenti recenti