User Tools

Site Tools


crear_una_base_marc_con_registros_de_lc

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

crear_una_base_marc_con_registros_de_lc [26/06/2007 18:19]
127.0.0.1 editor externo
crear_una_base_marc_con_registros_de_lc [05/05/2009 00:00]
Line 1: Line 1:
-====== 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 <​archivo_mrc>​ <​base_isis>​ 
-  ​ 
-  (mostrar salida generada) 
- 
-Para verificar que la base ISIS fue creada correctamente,​ podemos examinarla con mx: 
-  mx <​base_isis>​ 
-  ​ 
-  (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 === 
- 
-<code dos> 
-  @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 
-</​code>​ 
- 
- 
-=== m2i.bat === 
- 
-<code dos> 
-  @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 
-</​code>​ 
- 
-=== m2i.syn === 
-<code dos> 
-  ------------------------------------------------------------- 
-  M2I.BAT 
-  ------------------------------------------------------------- 
-  Convierte un archivo MARC (.mrc) en una base ISIS 
-  ​ 
-  m2i <​mrc_file>​ <​isis_db>​ [oem] 
-  ​ 
-   <​mrc_file> ​ Archivo MARC 
-   <​isis_db> ​  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 
-</​code>​ 
- 
- 
-=== mrc2isis.php === 
-<code php> 
-  <?php 
-  // ============================================================================ 
-  function mrc2isis($marcRecord,​$isisDb) 
-  // input: un registro MARC ISO-2709 
-  // output: el mismo registro, aceptable para isis (ignorando campos locales) 
-  // 
-  // Generamos un unico archivo .txt con el total de los registros, y luego  
-  // usamos id2i para crear la base ISIS. 
-  // ============================================================================ 
-  {  
-  $SUBFIELD_DELIMITER = "​\x1F";​ 
-  ​ 
-  global $text_file; 
-   
-  $leader = substr($marcRecord,​0,​24);​ 
-  $leader = str_replace('​ ','#',​$leader);​ 
-  ​ 
-  $baseAddress = substr($leader,​12,​5);​ 
-  $pos = 12; 
-   
-  // Loop sobre los elementos del directorio 
-  while ($pos+12 < $baseAddress-1) { 
-  $pos += 12; 
-  $directoryEntry = substr($marcRecord,​$pos,​12);​ 
-  $tag = substr($directoryEntry,​0,​3);​ 
-   
-  // Ignoramos los campos locales de LC (9xx, 59x, 012, 09x, 850, 890) 
-  if ( substr($tag,​0,​1) == '​9'​ || substr($tag,​0,​2) == '​59'​ || $tag == '​012'​) continue; 
-   
-  // Extraemos el contenido del campo (indicadores + subcampos) 
-  $fieldLength = substr($directoryEntry,​3,​4);​ 
-  $startPos = substr($directoryEntry,​7,​5);​ 
-  $fieldContent = substr($marcRecord,​ $baseAddress + $startPos, $fieldLength - 1); 
-   
-  // Reemplazamos ' ' por '#'​ en campos de control y en algunos campos de datos 
-  if ( '​00'​ == substr($tag,​0,​2) || '​010'​ == $tag || '​035'​ == $tag ) { 
-  $fieldContent = str_replace('​ ','#',​$fieldContent);​ 
-  } 
-   
-  // Para los campos de datos, cambiamos ' ' por '#'​ en los indicadores 
-  if ( substr($tag,​0,​2) != '​00'​ ) { 
-  $fieldContent = str_replace('​ ','#',​substr($fieldContent,​0,​2)) . substr($fieldContent,​2);​ 
-  } 
-   
-  // Si el campo contiene algún '​^',​ le anteponemos una barra para no confundirlo luego con un delimitador de subcampo 
-  // ATENCION: ¿hay algún otro carácter que debamos modificar? 
-  $fieldContent = str_replace('​^','​\^',​$fieldContent);​ 
-   
-  // Y ahora, entra en escena el '​^',​ delimitador de subcampos de ISIS 
-  $fieldContent = str_replace($SUBFIELD_DELIMITER,'​^',​$fieldContent);​ 
-   
-  // Agregamos una línea al archivo .id 
-  $textLine = '​!v'​ . $tag . '​!'​ . $fieldContent;​ 
-  fputs ($text_file,​$textLine . "​\r\n"​);  ​ 
-  } 
-  ​ 
-  // Datos del leader (no usamos tags > 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 <​marc_file>​ <​isis_db>​ [<​max_records>​]\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";​ 
-  } 
-  ?> 
-</​code>​ 
crear_una_base_marc_con_registros_de_lc.txt · Last modified: 05/05/2009 00:00 (external edit)