Nell’articolo di oggi vedremo come popolare la base dati di VUFIND. VUFIND presenta delle utility per il caricamento dati, che si interfacciano con Solr per la creazione del nostro catalogo.
Sono presenti due modalità di caricamenti: tramite file in formato MARC21 oppure tramite file xml con un foglio xsl associato.
Nel caso del formato MARC21 rimando al sito ufficiale. Sostanzialmente si tratta di aver un file MARC21 e di caricarlo tramite il comando
1 |
import-marc.bat nomefile.mrc |
Per chi non conoscesse MARC21 (ad esempio me) VUFIND da la possibilità di caricare i libri in formato XML associando un foglio di stile xsl che effettui la trasformazione del file nel formato xml supportato da Solr, le cui specifiche sono consultabili qui.
Personalmente preferisco questa seconda soluzione, più abbordabile e alla portata di tutti. Inoltre permette a chiunque abbia un catalogo xml di poterlo caricare sul nostro sistema agevolmente.
Facciamo un caso pratico, l’esempio vale più di 1000 parole. Supponiamo di avere un file xml che contiene il nostro catalogo così fatto:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<?xml version="1.0" encoding="utf-8"?> <books> <book> <id>0000000001</id> <title>titolo1</title> </book> <book> <id>0000000002</id> <title>titolo2</title> </book> <book> <id>0000000003</id> <title>titolo3</title> </book> </books> |
A questo punto definiamo un foglio xsl che trasforma il file xml nel formato atteso da Solr.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <add> <xsl:for-each select="/books/book"> <doc> <field name="id"> <xsl:value-of select="id"/> </field> <field name="title"> <xsl:value-of select="title"/> </field> <field name="recordtype">book</field> </doc> </xsl:for-each> </add> </xsl:template> </xsl:stylesheet> |
Questo file permetterà di trasformare il file xml nel seguente formato atteso da Solr:
1 |
<span class="pun" style="color: #666600;"><?</span><span class="pln" style="color: #000000;">xml version</span><span class="pun" style="color: #666600;">=</span><span class="str" style="color: #008800;">"1.0"</span><span class="pln" style="color: #000000;"> encoding</span><span class="pun" style="color: #666600;">=</span><span class="str" style="color: #008800;">"UTF-8"</span><span class="pun" style="color: #666600;">?></span><span class="tag" style="color: #000088;"><add></span><span class="tag" style="color: #000088;"><doc></span><span class="tag" style="color: #000088;"><field</span><span class="atn" style="color: #660066;">name</span><span class="pun" style="color: #666600;">=</span><span class="atv" style="color: #008800;">"id"</span><span class="tag" style="color: #000088;">></span><span class="pln" style="color: #000000;">0000000001</span><span class="tag" style="color: #000088;"></field></span><span class="tag" style="color: #000088;"><field</span><span class="atn" style="color: #660066;">name</span><span class="pun" style="color: #666600;">=</span><span class="atv" style="color: #008800;">"title"</span><span class="tag" style="color: #000088;">></span><span class="pln" style="color: #000000;">titolo1</span><span class="tag" style="color: #000088;"></field></span><span class="tag" style="color: #000088;"><field</span><span class="atn" style="color: #660066;">name</span><span class="pun" style="color: #666600;">=</span><span class="atv" style="color: #008800;">"recordtype"</span><span class="tag" style="color: #000088;">></span><span class="pln" style="color: #000000;">book</span><span class="tag" style="color: #000088;"></field></span><span class="tag" style="color: #000088;"></doc></span><span class="tag" style="color: #000088;"><doc></span><span class="tag" style="color: #000088;"><field</span><span class="atn" style="color: #660066;">name</span><span class="pun" style="color: #666600;">=</span><span class="atv" style="color: #008800;">"id"</span><span class="tag" style="color: #000088;">></span><span class="pln" style="color: #000000;">0000000002</span><span class="tag" style="color: #000088;"></field></span><span class="tag" style="color: #000088;"><field</span><span class="atn" style="color: #660066;">name</span><span class="pun" style="color: #666600;">=</span><span class="atv" style="color: #008800;">"title"</span><span class="tag" style="color: #000088;">></span><span class="pln" style="color: #000000;">titolo2</span><span class="tag" style="color: #000088;"></field></span><span class="tag" style="color: #000088;"><field</span><span class="atn" style="color: #660066;">name</span><span class="pun" style="color: #666600;">=</span><span class="atv" style="color: #008800;">"recordtype"</span><span class="tag" style="color: #000088;">></span><span class="pln" style="color: #000000;">book</span><span class="tag" style="color: #000088;"></field></span><span class="tag" style="color: #000088;"></doc></span><span class="tag" style="color: #000088;"><doc></span><span class="tag" style="color: #000088;"><field</span><span class="atn" style="color: #660066;">name</span><span class="pun" style="color: #666600;">=</span><span class="atv" style="color: #008800;">"id"</span><span class="tag" style="color: #000088;">></span><span class="pln" style="color: #000000;">0000000003</span><span class="tag" style="color: #000088;"></field></span><span class="tag" style="color: #000088;"><field</span><span class="atn" style="color: #660066;">name</span><span class="pun" style="color: #666600;">=</span><span class="atv" style="color: #008800;">"title"</span><span class="tag" style="color: #000088;">></span><span class="pln" style="color: #000000;">titolo3</span><span class="tag" style="color: #000088;"></field></span><span class="tag" style="color: #000088;"><field</span><span class="atn" style="color: #660066;">name</span><span class="pun" style="color: #666600;">=</span><span class="atv" style="color: #008800;">"recordtype"</span><span class="tag" style="color: #000088;">></span><span class="pln" style="color: #000000;">book</span><span class="tag" style="color: #000088;"></field></span><span class="tag" style="color: #000088;"></doc></span><span class="tag" style="color: #000088;"></add></span> |
Per Solr ogni documento è definito come una sequenza di field, ciascuno con il proprio nome e valore. Il file deve rispettare lo schema definito in solr, in caso contrario il file verrà rifiutato durante l’importazione.
A questo punto non ci resta che caricare il file tramite la direttiva
1 |
c:\vufind\import>php import-xsl.php books.xml opac.properties |
Tale direttiva processa il file books.xml applicando le regole definite nel file opac.properties che contiene i parametri per invocare il servizio esposto da solr. La configurazione minimale è la seguente:
1 2 3 4 |
[General] xslt = opac.xsl custom_class[] = VuFind truncate_custom_class = true |
Il parametro xslt indica il file xsl da usare e deve essere disponibile all’interno della directory xsl
1 |
C:\vufind\import\xsl |
A questo punto se abbiamo operato riceveremo come risposta
1 2 3 4 5 |
c:\vufind\import>php import-xsl.php books.xml opac.properties <pre>2014-06-28T11:21:46-04:00 DEBUG: => POST http://localhost:8080/solr/biblio/ update</pre> <pre>2014-06-28T11:21:46-04:00 DEBUG: <= 200 OK</pre> Successfully imported books.xml... |
Buon caricamento dati