Tabla de Contenidos
Aplicaciones de los utilitarios CISIS al trabajo con bases MARC 21
Descripción
Los utilitarios CISIS son un conjunto de herramientas que facilitan muchas tareas de análisis y mantenimiento sobre bases de datos CDS/ISIS. El uso generalizado de bases CDS/ISIS en las bibliotecas y centros de documentación de nuestro país, requiere contar con personal informático capacitado en el manejo de estas herramientas. En este curso se presentarán las principales características de los utilitarios CISIS, poniendo énfasis en su uso para resolver problemas frecuentes, particularmente en el trabajo con bases bibliográficas en formato MARC 21.
Duración: 30 hs. (lunes a viernes, 10 a 13 y 15 a 18 hs.)
Lugar: Instituto de Matemática, Universidad Nacional del Sur/CONICET
Contenido
Introducción
- Repaso de las características esenciales de las bases CDS/ISIS: estructura ISO 2709, archivo maestro, archivo invertido, lenguaje de formateo, lenguaje de búsquedas. Documentos:
- The essence of ISIS: an analysis on some of its core characteristics (Egbert de Smet)
- what makes ISIS ISIS ? (GNI)
- CISIS: Conceptos básicos (Bireme, pdf) — Ponerlo online
- Representaciones de una base CDS/ISIS: archivo maestro (MST, XRF), archivo ISO, archivo de texto ID. Comparación: en un ISO, el tag de campo es de 3 caracteres, por lo tanto los campos con tag > 999 se pierden, o mejor dicho se representan con el tag truncado en 3 dígitos.
- Plataformas: DOS vs. Unix. Diferencias en archivo maestro, archivo invertido, iso, archivos de texto (id, actab, uctab, pft). ¿Podemos ver las diferencias en ejemplos sencillos? Herramientas de conversión (crunchmf, crunchif, dos2unix, unix2dos).
- Codificación de caracteres: CP850, Latin1, “ANSI”, “OEM”, Unicode/UTF-8. Mostrar (y entregar) tablas. Comando chcp (DOS). Archivos ACTAB y UCTAB. Gizmos.
- Algunas situaciones en las que se presentan problemas relacionados con la codificación de caracteres:
- visualización de datos
- generación de claves para el diccionario (actab, uctab)
- búsquedas en texto libre con text/show
- ¿búsquedas mediante el diccionario?
En Linux, mx usa en forma predeterminada las tablas actab y uctab para la codificación CP 850. Eso podemos comprobarlo fácilmente intentando mandar al diccionario una palabra acentuada.
echo 'Esta es una muestra de texto con la codificación Windows 1252. Mañana comeré maníes' > sample.CP1252.txt mx seq=sample.CP1252.txt create=sample1252 now mx sample1252 "fst=1 4 v1" mx sample1252 "fst=1 4 v1" actab=ac-ansi.tab mx sample1252 "fst=1 4 v1" actab=ac-ansi.tab uctab=uc-ansi.tab
Script para visualizar las tablas:
cat ac-ansi.tab | tr ' ' '\n' > ac-ansi.lst mx seq=ac-ansi.lst "fst=1 0 v1" fullinv=AC # no necesitamos crear la base cat uc-ansi.tab | tr ' ' '\n' > uc-ansi.lst mx seq=uc-ansi.lst create=UC now -all # no necesitamos diccionario echo '<style>.AC {background: #FFC;} .UC {color: #666;} td {font-family: monospace; border: 1px solid #999; text-align: center; padding: 0.2em 0.3em;}</style>' > table.html echo '<table cellspacing="3"></tr>' >> table.html mx tmp from=33 to=256 "pft=@table.pft" now >> table.html echo '</tr></table>' >> table.html
table.pft
:
proc('d10a10|',replace(f(mfn-1,3,0),' ','0'),'|') if v10 = '128' then '</tr><td colspan="16"></td><tr>'/ fi, if right(f(val(v10)/16.0,1,2),2) = '00' then '</tr><tr>'/ fi, '<td ', if l(['AC']v10) > 0 then 'class="AC"' fi, '>&#',v10,';', if ref(['UC']mfn,v1) <> v10 then ' <span class="UC">&#',ref(['UC']mfn,v1),';</span>', fi, '</td>'/
Esta es la tabla resultante:
Utilitarios CISIS
- General: MX
- Para archivo maestro: MXF0, MXTB, MXCP, MXGW, MSRT, RETAG, CTLMFN, MKXRF, ID2I, I2ID
- Para archivo invertido: IFKEYS, MZ, IFLOAD, IFUPD, MYZ
- Características de los utilitarios versión 5.
Lenguaje de formateo
Repaso general. Ejemplos “interesantes”: ref(), l(), grupos repetibles, cat(), llamadas a formatos externos (@), getenv() y putenv(), proc(), system()
* Capítulo 4: Lenguaje de formateo
- Formatos de visualización
- FST. Técnicas de indización. Testeo de una FST.
Aplicaciones usuales
- Análisis básico con mxf0. Tabla HTML con la información obtenida. Caracteres usualmente mal empleados (grado, acento agudo). Detección de caracteres (text/show, grep) en Windows/Linux. En Ubuntu con UTF-8, hago esto:
i2id biblio > bibima.latin1.id iconv -f latin1 -t utf-8 bibima.latin1.id > bibima.utf8.id grep 'ß' bibima.utf8.id
Alternativamente, en Gnome terminal puedo seleccionar un character encoding adecuado (e.g. Windows 1252), y así ver los datos de la base en forma correcta, e incluso usar text/show sin problemas. Queda pendiente: cómo detectar caracteres de control.
Idea para mostrar los nombres de los campos MARC en la tabla de mxf0:
wget http://www.loc.gov/marc/bibliographic/ecbdlist.html grep '^ \{0,4\}[0-9][0-9][0-9] -' ecbdlist.html | grep -v OBSOLETE | grep -v 'LOCAL]' | sed 's/ (R)/|R/' | sed 's/ (NR)/|NR/' | sed 's/ - /|/' > marc-fields.seq mx seq=marc-fields.seq create=marc-fields now -all mxcp marc-fields clean mx marc-fields "fst=1 0 v1" fullinv=marc-fields
Una vez creada la base marc-fields, se puede usar ref+l para tomar los nombres de los campos e incluirlos en la tabla.
- Generación de listados (mx, mxtb)
- Detección de duplicados en un listado (mx)
- Conteo de registros (?)
- Compresión de archivo maestro (mx)
- Cambios globales (mx)
- Bases estropeadas, registros corruptos. Detección y soluciones.
- Importación de datos desde archivos de texto
- Limpieza (mxcp)
- Métodos para ordenar datos:
- con el diccionario
- msrt
- sort (ms-dos, linux)
Errores/problemas usuales/tips
- no especificar un valor grande para lw
- elección de delimitador en los proc
- no desactivar el modo mpu
- no usar f(.,.,.) para datos numéricos
- tratamiento inapropiado de campos repetibles, al testear una condición o al visualizar
- usar versiones viejas de los utilitarios
- creer que el MFN es inmutable
- perder o alterar datos al exportar en formato ISO
- transferir datos entre plataformas sin previa conversión
- text/show: distingue mayúsculas, sólo informa 1ra ocurrencia. Cómo trata a los caracteres con código > 127.
- las tablas ACTAB y UCTAB (y, por lo tanto, la correcta generación del diccionario) dependen de la codificación empleada
- ¿Qué pasa con los registros borrados al compactar una base?
- orden de aplicación de gizmos
- atajos en formatos: se me ocurren dos ejemplos, el de Claudio para detectar registros sin fecha, y el de Spinak para comprimir varios OR ('A|B|C|D':v1)
MARC 21
- qué es exactamente el formato MARC 21, y qué es un registro MARC 21; documentos básicos
- relación entre AACR2 y MARC 21
- representación de registros MARC en bases CDS/ISIS; convenciones de Catalis, comparación con otras aplicaciones
- iso2709 de isis no es iso 2709 de marc; cómo ir y volver
- el orden de los campos importa
- la maldición de la puntuación
- la codificación MARC-8
- indización de registros MARC:
biblio.fst
- visualización de registros MARC
- subcampos repetibles: problemas y soluciones
- controles de calidad sobre bases MARC
- otras herramientas para manipular registros MARC: MarcEdit
- Estudio de scripts de cierta complejidad, con sus pft asociados:
Script update-opac.sh
,auto.sh
- Ejemplos de migración a MARC 21: ABCI y SeCS. CEPAL?
- Ejercitación sobre bases de datos propias y bases de Catalis.
- ¿Ejercicio con los logs de Catalis o el OPAC?
- Malete/GNI?
Catalis
- Diagrama para visualizar el funcionamiento.
- Remote scripting con iframe oculto.
- ¿Algo sobre manipulación del DOM?
- Problemas por resolver: registros largos, corrupción de registros, codificación de caracteres
OPACMARC
- Bases auxiliares: name, subj, title. Cómo se generan. El script
update-opac.sh
. - Diagrama para visualizar el funcionamiento
Equipamiento y software necesarios
PC para el docente y una PC por alumno. Proyector. Navegador web, utilitarios CISIS, Catalis, OPACMARC.
Notas durante el curso
Grupos repetibles
mx biblio "proc='a999|2|'" "pft=(if iocc=val(v999) then v650/ fi)" mx biblio "proc='a999|2|'" "pft=(if iocc=val(v999[1]) then v650/ fi)"
mx tmp "pft=s('uno','dos','tres').5"
mx biblio "proc=if v245^a.4='The ' and v245*1.1 <> '4' then 'd245a245|',v245.1,'4',v245*2,'|' fi "
Reemplazo del subcampo v82^2:
mx biblio "proc=@campo82.prc" pft=v82
if p(v82^2) then 'd82a82|', replace( v82, s('^2'v82^2), '^221'), '|' fi
isis marc