Tabla de Contenidos
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:
- asignar nuevos números de control, y eliminar el número de control original de los registros
- asignar nuevos números de control, y preservar en algún campo el número de control original de los registros
- 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