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:
^.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?
Para convertir el carácter hex 1F en ^ podemos utilizar un gizmo con un único registro.
Catalis utiliza el carácter # para representar los blancos en campos de control (001 al 009), 010, indicadores y cabecera.
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:
La más sencilla es la opción 1.
Aparentemente IsisMarc no incluye administración de existencias.
# ========================================================================== # 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