====== Crear una base MARC con registros de LC ====== Describiremos aquí un procedimiento para generar una base de datos [[ISIS]] en formato [[MARC]], a partir de registros bajados del catálogo de la [[Library of Congress]] (LC). Este procedimiento fue diseñado cuando surgió la necesidad de poder contar con diversas bases de prueba, durante el proceso de desarrollo y testeo de Catalis y OpacMarc. También resultó útil más adelante, cuando algunos bibliotecarios que no contaban con bases MARC propias necesitaron acceder a un demo del OPAC que pudiera resultar atractivo a su comunidad de usuarios. Las herramientas que se describen fueron desarrolladas y testeadas en **Windows**; queda pendiente su conversión a Linux (un ejercicio sencillo). ==== Obtención de los registros ==== === Herramientas necesarias === * Navegador web. **ATENCION**: debido a una falla en el software usado por LC (que se describe en [[http://catalog.loc.gov/help/lcknownprob.htm|esta página]], bajo el título "Problem 7. Unable to save MARC records with newer browser versions"), no nos ha sido posible acceder a registros MARC usando Mozilla y sus derivados (Netscape, Firefox). No ha habido problemas con IE 5.x, IE 6, Opera 7.54. === Pasos === - Ingresar al [[http://catalog.loc.gov|catálogo de LC]]. - Escribir una expresión de búsqueda que permita recuperar los registros deseados; típicamente uno quiere registros de material sobre un cierto tema, o de uno o varios autores. **Atención**: es importante restringir la búsqueda por fecha de publicación, debido a los cambios producidos en las reglas de catalogación a lo largo del tiempo. También puede ser útil aplicar restricciones por tipo de material (libros, grabaciones sonoras, etc.), por país de publicación, o por idioma. (incluir imágenes) - Seleccionar un número elevado de resultados por página (explicar problemas) - Ejecutar la búsqueda, y reformularla en caso de que los registros recuperados no se ajusten a las expectativas. - Para cada página de resultados, repetir estos pasos (incluir imagen): - Elegir "All (this page)" - Elegir "MARC" - Presionar el botón "..." - Una vez recibida la página con los registros MARC (imagen aquí), hay que grabarla en el disco: - Ver > Código fuente - Archivo > Guardar como... - Nombre del archivo: - Alternativamente, se puede usar este otro método: - Edición > Seleccionar todo - Edición > Copiar - Pegar el contenido en un archivo de texto - Mediante el botón Atrás (Back), regresar a la página de resultados, y avanzar a la siguiente (imagen). - Si los registros MARC fueron guardados en archivos separados, es necesario juntarlos en un único archivo: ==== Generación de la base ISIS ==== === Herramientas necesarias === * [[PHP]] (sólo como utilitario de línea de comandos; no se requiere un servidor web) * [[Utilitarios CISIS]]: mx, msrt, id2i * Scripts: [[#m2i.bat|m2i.bat]], [[#lc2i.bat|lc2i.bat]], [[#mrc2isis.php|mrc2isis.php]] === Pasos === - Ejecutar el script que genera la base ISIS a partir del archivo ''.mrc''. Debemos ejecutarlo en el directorio donde están los restantes scripts (m2i.bat, mrc2isis.php). lc2i (mostrar salida generada) Para verificar que la base ISIS fue creada correctamente, podemos examinarla con mx: mx (mostrar salida generada) Comentarios: * Cómo se mapean los campos del registro [[ISO 2709]] a la base ISIS * Campos que se descartan ==== Archivos utilizados ==== === lc2i.bat === @echo off ::======================================================================== ::LC2I.BAT :: ::Generación de una base Isis a partir de registros MARC (archivos *.mrc) ::bajados de LC. :: ::Requiere: mx, msrt, m2i.bat :: ::(c) Fernando Gómez, INMABB, abril de 2003 ::======================================================================== if "%1"=="" goto SYNTAX if "%2"=="" goto SYNTAX echo. echo Eliminamos una posible versión anterior de la base mx seq=nul create=%21 now -all echo. echo Llamamos a m2i.bat para cada archivo .mrc que queremos incorporar a la base call m2i.bat %1 %21 echo. echo Eliminamos registros duplicados, en base al campo 001 msrt %21 12 v1 mx %21 "proc=if v1=ref(mfn-1,v1) then 'd*' fi" iso=%2.iso now -all mx iso=%2.iso create=%2 now -all echo. echo Eliminamos algunos campos (ATENCION: tener en cuenta otros más [ver con mxf0]) mx %2 proc='d35d42' copy=%2 now -all echo. echo Actualizamos campos 001 y 005 mx %2 proc='d1a1~',mfn(6),'~' proc='d5a5~',s(date).8,s(date)*9.6,'.0~' proc='s' copy=%2 now -all echo. echo Próximos pasos: generar archivo invertido, aplicar el gizmo, renombrar archivos echo y copiar los archivos al servidor. echo. goto END :SYNTAX echo. echo Uso: lc2i mrc_file isis_db_name echo. echo Ejemplo: lc2i "f:\mrc-files\test1.mrc" "bases\test1" echo. :END === m2i.bat === @echo off ::=========================================================== ::M2I.BAT -- Incorporación de registros MARC en una base ISIS :: ::Requiere: mrc2isis.php, id2i, mx :: ::(c) Fernando Gomez, INMABB, 2003 ::=========================================================== set PHP_DIR=D:\php\cli if "%1"=="" goto SYNTAX if "%2"=="" goto SYNTAX echo. echo Conversión .mrc a .id %PHP_DIR%\php -q mrc2isis.php %1 %2 echo. echo Conversión .id a isis id2i marcfile.id create=%2 tell=100 ::Default: la dejamos como vino (ANSI?) if not "%3"=="oem" goto END echo. echo Conversión ansi a oem set CIPAR=c:\httpd\bases\opacmarc\opac.cip mx %2 gizmo=ANSI2OEM copy=%2 -all now goto END :SYNTAX type %0.syn echo. echo. :END === m2i.syn === ------------------------------------------------------------- M2I.BAT ------------------------------------------------------------- Convierte un archivo MARC (.mrc) en una base ISIS m2i [oem] Archivo MARC Base ISIS a crear oem Pasar los registros a la codificaci¢n OEM (por defecto, no son modificados, suponiendo que est n en ANSI) Ejemplo: m2i \mrc-files\loc\music.mrc music === mrc2isis.php === 999 porque se perderían al pasar a un .iso) $textLine = '!v905!' . substr($leader,5,1) . "\r\n"; $textLine .= '!v906!' . substr($leader,6,1) . "\r\n"; $textLine .= '!v907!' . substr($leader,7,1) . "\r\n"; $textLine .= '!v908!' . substr($leader,8,1) . "\r\n"; $textLine .= '!v909!' . substr($leader,9,1) . "\r\n"; $textLine .= '!v917!' . substr($leader,17,1) . "\r\n"; $textLine .= '!v918!' . substr($leader,18,1) . "\r\n"; $textLine .= '!v919!' . substr($leader,19,1) . "\r\n"; fputs ($text_file,$textLine . "\r\n"); } // ==================================================================== // MAIN SECTION // ==================================================================== if ( $argc < 3 || in_array($argv[1], array('--help', '-help', '-h', '-?')) ) { echo "--------------------------------------\n"; echo strtoupper($argv[0])."\n"; echo "--------------------------------------\n"; echo "Uso:\n"; echo " m2i []\n\n"; echo "Tip: para procesar un lote de archivos *.mrc, ejecute primero\n"; echo " copy /b *.mrc allmrc\n\n"; } else { set_time_limit(0); // maximum execution time = unlimited $mrc_file_name = $argv[1]; $isisDb = $argv[2]; $maxCount = $argv[3]; if ( $maxCount == 0 ) $maxCount=1000000; // Archivo de texto para la salida $text_file_name = 'marcfile.id'; unlink($text_file_name); // borramos archivo $text_file = fopen($text_file_name, 'w'); $mrc_file = fopen($mrc_file_name, 'rb'); // b - binary safe echo 'Procesando: ' . $mrc_file_name . "\r\n"; while ( !feof($mrc_file) and $count < $maxCount ) { $recSize = fread($mrc_file,5); if ( $recSize == 0 ) continue; /* Para evitar problemas al final */ $count += 1; if ($count % 10 == 0) { echo '# ' . $count . "\t" . $recSize . "\n"; } $marcRecord = $recSize . fread($mrc_file,$recSize-5); fputs ($text_file, '!ID ' . $count . "\r\n"); // Procesamos el registro mrc2isis($marcRecord,$isisDb); } fclose($mrc_file); fclose($text_file); echo 'Total records: ' . $count . "\n"; } ?> {{tag>marc isis}}