====== Importación en Catalis de bases de IsisMarc ====== //Ver también: [[notas:importacion_batch]]// {{notas:isismarc.zip|Registros de muestra exportados desde IsisMarc}} {{notas:lc.zip|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 [[http://en.wikipedia.org/wiki/Combining_character|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 [[http://www.gnu.org/software/libiconv/|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 # # 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,' ','#'),'|', {{tag>catalis isismarc importacion}}