Herramientas de usuario

Herramientas del sitio


notas:isismarc-to-catalis

Importación en Catalis de bases de IsisMarc

Ver también: Importación de un lote de registros de LC

Registros de muestra exportados desde IsisMarc

Registros de muestra exportados desde el OPAC de LC

Para que Catalis pueda tomar datos generados por IsisMarc, podemos trabajar directamente a nivel de bases Isis, o mejor aun podemos limitarnos a trabajar con la importación de registros MARC, ya que IsisMarc puede exportar en formato MARC.

La importación de registros MARC a una base Isis es muy simple pues a partir de la versión 5.2 MX puede leer registros MARC en forma directa:

mx iso=marc=registros.mrc isotag1=900 create=registros now -all

Con isotag1 indicamos en qué campos de la base Isis se almacenarán los datos de la cabecera del registro MARC, e.g. isotag1=900 significa que se usarán los campos 905, 906, etc (como hace Catalis).

Los problemas a tener en cuenta son:

  • Codificación de caracteres
  • Sustitución del carácter utilizado como delimitador de subcampos (hex 1F, asc 31) por ^.
  • Modificación del campo 001
  • Campos locales 9xx: ¿cómo tratarlos?

Codificación de caracteres

IsisMarc permite elegir dos tipos de codificaciones al exportar: el default es latin1 (aunque no utiliza explícitamente ese nombre), y está la opción de usar “diacríticos ALA”, que posiblemente significa MARC-8.

Si importamos registros MARC de LC u otras fuentes, deberíamos también tener en cuenta la posibilidad de que éstos vengan con la codificación UTF-8. A su vez, dentro de UTF-8 podemos tener 2 variantes según como se representen los diacríticos: combining diacritics y precomposed characters, ver Combining character en Wikipedia. LC utiliza la segunda opción.

En Catalis estamos restringidos a trabajar con latin1, por lo tanto necesitamos mapeos desde las codificaciones mencionadas arriba hacia latin1. Para esto podemos utilizar iconv o libiconv. Sin embargo, parece que esta herramienta no reconoce la codificación que utiliza combining diacritics. Otras herramientas para estudiar: enca/enconv, unidesc, yaz-iconv.

¿Cómo podemos saber cuál es la codificación del archivo .mrc que queremos importar?

Delimitador de subcampos

Para convertir el carácter hex 1F en ^ podemos utilizar un gizmo con un único registro.

Sustitución de blancos

Catalis utiliza el carácter # para representar los blancos en campos de control (001 al 009), 010, indicadores y cabecera.

Modificación del campo 001

Un requerimiento básico es que el valor del campo 001 en los registros importados no entre en conflicto con los ya existentes en la base de Catalis (si los hubiera).

Alternativas:

  1. asignar nuevos números de control, y eliminar el número de control original de los registros
  2. asignar nuevos números de control, y preservar en algún campo el número de control original de los registros
  3. mantener el número de control original de los registros: esto requiere verificar que no se produzcan conflictos.

La más sencilla es la opción 1.

Existencias

Aparentemente IsisMarc no incluye administración de existencias.

Script

# ==========================================================================
# Script para importar registros MARC 21 en Catalis
# 
# Dos casos particulares que nos interesan:
#   - registros de IsisMarc (latin1 / "diacríticos ala")
#   - registros de LC (marc-8 / utf-8)
#
# uso:
#   import <archivo_marc> <base_de_datos>
#
# ejemplo:
#   import registros.mrc biblio
#
# Validaciones: existencia del archivo y de la base
# Hay que considerar la opción de que la base no exista y sea creada a
# partir del archivo mrc?
# Incluir un undo?
# ==========================================================================
 
# a partir de qué tag se almacenan los datos del leader
LEADER_BASE_TAG_1=1000 # provisorio
LEADER_BASE_TAG_2=900  # definitivo
 
# archivo de registros MARC
MARC_FILE=$1
 
# base donde almacenar los registros importados
TARGET_DB=$2 || 'biblio'
 
# archivo usado como contador para generar el campo 001
COUNTER='cn.txt'
 
# dónde encontrar mx
PATH=~/campi/cisis-5.2:$PATH
export PATH
#echo $PATH
 
# tenemos que asegurarnos de estar usando mx 5.x (al menos)
mx what > mxversion
mx seq=mxversion count=1 "pft=if v1 : 'CISIS Interface v5.' then 'OK' fi" now > versionOK
# TO-DO: exit con mensaje de error si mx es viejo
 
clear
 
# creamos una base isis a partir del registro MARC
# BUG: la posición 09 del leader no se almacena!! (informar a Spinak/Bireme)
mx iso=marc=$MARC_FILE isotag1=$LEADER_BASE_TAG_1 create=basemarc now -all
 
# eliminamos del registro importado algunos campos locales que utiliza Catalis
# TO-DO: esta lista es completa?
mx basemarc "proc='d905 d906 d907 d908 d909 d917 d918 d919'" copy=basemarc now -all
 
# traemos los datos del leader a los campos 9xx
mx basemarc "proc='d1005d1006d1007d1008d1009d1017d1018d1019','a905|',v1005,'|a906|',v1006,'|a907|',v1007,'|a908|',v1008,'|a909|',v1009,'|a917|',v1017,'|a918|',v1018,'|a919|',v1019,'|'" copy=basemarc now -all
 
# sustituir delimitadores de subcampos: hex 1F => ^
mx basemarc gizmo=delimsubcampo copy=basemarc now -all 
 
# cambiamos la codificación, si la original no es latin1
# TO-DO: cómo averiguamos cuál es la codificación original de los registros?
# TO-DO: usamos un gizmo? cómo nos aseguramos de estar usando el gizmo correcto?
#mx basemarc gizmo=ansel2latin1 copy=basemarc now -all
 
# sustitución de blancos en campos de datos
mx basemarc "proc=@blancos.pft" copy=basemarc now -all
 
# sustitución de blancos en indicadores
i2id basemarc > basemarc.id
mx seq=basemarc.id create=basemarc-campos now -all  # OJO: que no separe en campos accidentalmente
mx basemarc-campos "proc='d1a1|',v1.6,replace(v1*6.2,' ','#'),v1*8,'|'" copy=basemarc-campos now -all
mx basemarc-campos lw=2000 "pft=v1/" now > basemarc-campos.id
id2i basemarc-campos.id create=basemarc-catalis
 
# ajuste del campo 001 (REVISAR rellenado con ceros)
mx basemarc-catalis "proc='d001a001|',right(s('000000',f(mfn + val(cat('$COUNTER')),1,0)),6),'|'" copy=basemarc-catalis now -all
# actualización del contador
mx basemarc-catalis "pft=right(s('000000',f(maxmfn + val(cat('$COUNTER')) - 1,1,0)),6)" count=1 now > $COUNTER
 
# agregamos los registros a la base destino 
mx basemarc-catalis append=$TARGET_DB now -all
 
# TO-DO: generar (o actualizar) el archivo invertido
'd001 d006 d007 d008 d010',
'd905 d906 d907 d908 d917 d918 d919',

/* sustitución de blancos en campos de datos */

'a001|',replace(v001,' ','#'),'|',

if p(v006) then
    ( 'a006|',replace(v006,' ','#'),'|', ),
fi,

if p(v007) then
    ( 'a007|',replace(v007,' ','#'),'|', ),
fi,

'a008|',replace(v008,' ','#'),'|',

if p(v010) then
    'a010|',replace(v010,' ','#'),'|',
fi,


/* sustitución de blancos en datos de la cabecera */

'a905|',replace(v905,' ','#'),'|',
'a906|',replace(v906,' ','#'),'|',
'a907|',replace(v907,' ','#'),'|',
'a908|',replace(v908,' ','#'),'|',
'a909|',replace(v909,' ','#'),'|',   /* ATENCION: viene vacío en registros de IsisMarc */
'a917|',replace(v917,' ','#'),'|',
'a918|',replace(v918,' ','#'),'|',
'a919|',replace(v919,' ','#'),'|',

catalis isismarc importacion

notas/isismarc-to-catalis.txt · Última modificación: por 127.0.0.1