Sugerencia: subdividir el archivo en porciones más pequeñas:
'd*', /* definir variables, e.g. tipo de registro */ ,@control-leader.prc, /* 905/919, 001, 003, 005, 008 */ /* TO-DO: para que el proceso pueda ser más fácilmente reutilizado, en el 008/18-34 separar completamente los distintos tipos de registro: libros, videos, etc. */ ,@descripcion.prc, /* 020, 245, 246?, 250, 260, 300, 490 */ ,@puntos-acceso.prc, /* 100, 110, 111, 130, 700, 710, 711, 730, 740 */ ,@analisis-tematico.prc, /* 082, 600, 651?, 653 */ ,@datos-locales.prc, /* 859, 980, 991 */
/* -------------------------------------------------------------------------------- * br2marc.proc - Proceso de migración a MARC 21 para la Biblioteca Rivadavia * * Este proceso actúa sobre la base unificada, y luego de la aplicación de un * conjunto de gizmos. * * Uso: * mx bru "proc=@br2marc.pft" * * Requisitos: mx versión 5.2 * * Campos auxiliares empleados: * 9000 * 9001 * 9010 * 9100 * -------------------------------------------------------------------------------- */ /* ---------------------------------------------------------------------------------- * Eliminamos todos los campos del registro original, para así poder crear el nuevo * registro desde cero. * ---------------------------------------------------------------------------------- */ 'd*', /* ---------------------------------------------------------------------------------- * Los registros de videograbaciones requieren un tratamiento diferente. * Usamos un campo auxiliar para poder reconocer estos registros fácilmente. * ---------------------------------------------------------------------------------- */ proc('d9100a9100#', if s(mpu,v65,mpl) : 'VIDEOGRABACION' then 'VIDEO' else 'LIBRO' fi, '#'), /* ----------------------------------------------------------------------- * Campos MARC 905/919 - Datos de la cabecera (campos locales de Catalis) * ----------------------------------------------------------------------- */ '<905>n</905>', /* LDR/05: Estado del registro: nuevo */ '<906>', /* LDR/06: Tipo de registro: 'a' para material impreso, 'g' para videos */ if v9100 = 'VIDEO' then 'g' else 'a' fi, '</906>', '<907>m</907>', /* LDR/07 - Nivel bibliográfico del registro: 'm' para monográfico */ '<908>#</908>', /* LDR/08 - */ '<909>#</909>', /* LDR/09 - */ '<917>z</917>', /* LDR/17 - Nivel de codificación: 'z' */ '<918>u</918>', /* LDR/18 - Reglas de catalogación: 'u' */ '<919>#</919>', /* LDR/19 - */ /* ------------------------------------------ * Campo MARC 001 - Número de control * * Almacenamos el MFN que tiene el registro en la base unificada (no tiene relación * con los MFN de la base original). * ------------------------------------------ */ '<001>',mfn(6),'</001>', /* ------------------------------------------ * Campo MARC 003 - Código MARC de la biblioteca * * El código asignado por LC. * Ver http://www.loc.gov/marc/organizations/org-search-results.php?oid=36589 * ------------------------------------------ */ '<003>', 'AR-BbABR', '</003>', /* ------------------------------------------------------------------------ * Campo MARC 005 - Fecha y hora de última modificación * * Usamos la fecha y hora de la migración. * ------------------------------------------------------------------------ */ '<005>', s(date).8, s(date)*9.6, '.0', '</005>', /* ------------------------------------------ * Campo MARC 008 - Datos codificados * * Este campo se construye con datos procedentes de varios campos del registro original. * ATENCION: el significado de las posiciones 18-34 varía según se trate de libros o videos. * Para encarar estas diferencias, podríamos separar completamente el tratamiento de cada caso, * o bien (como hacemos acá) usar varios 'if-then-else-fi' a lo largo del camino cada vez que * surgen las diferencias. * * CASOS RAROS PARA REVISAR * D:\mig\pruebas>mx br0 gizmo=g_pais gizmo=g_idioma proc=@br2marc.proc "pft=if size(v8)<>40 then mfn,x3,f(size(v8),1,0),c16, v8/ fi" now * 027337 31 070727fr############0#####und|| * 043015 38 070727s1900####F###########0#####und|| * 048823 38 070727s1937####A###########0#####und|| * 094923 31 070727ag#a##########0#####und|| * 117138 44 070727s1esu1817####sp############0#####und|| * 125256 31 070727xx#a##########0#####und|| * 125952 31 070727sp############0#####und|| * 125953 31 070727sp############0#####und|| * ------------------------------------------ */ '<008>', /* ------------------------------------------ * 008/00-05 - Fecha de creación del registro * Usamos la fecha de la migración. * ------------------------------------------ */ mid(date,3,6), /* ------------------------------------------ * 008/06 - Tipo de fechas * 008/07-10 - Fecha 1 * 008/11-14 - Fecha 2 * Nos basamos en el campo FOCAD 45 (Fecha de publicación) y consideramos 3 casos. * ------------------------------------------ */ /* CASO 1: el campo FOCAD 45 posee una fecha completa (4 dígitos), y posiblemente un rango de fechas */ if val(v45*0.4) > 1500 then, /* casos considerados: a) 1956 b) 1956- c) 1956-7 d) 1956-57 e) 1899-900 f) 1956-1957 Los rangos de fechas también pueden aparecer indicados con una barra, p.ej.: 1956/57. */ if v45*4.1 = '-' or v45*4.1 = '/' then /* fechas múltiples */ 'm', /* tipo de fechas: 'm' para múltiples */ v45*0.4, /* fecha 1 */ select size(v45*5) /* fecha 2 */ case 0 : 'uuuu', /* si supiéramos que la publicación continúa, pondríamos '9999' */ case 1 : v45.3, v45*5, case 2 : v45.2, v45*5, case 3 : v45.1, v45*5, case 4 : v45*5, elsecase '####' endsel, else /* fecha simple */ 's', /* tipo de fecha: 's' para fecha única */ v45*0.4, /* fecha 1 */ '####', /* fecha 2 */ fi, /* CASO 2: el campo FOCAD 45 contiene una fecha estimada */ else if v45*3.1 = '-' then, /* casos considerados: a) 195- b) 19-- */ 's', /* fecha única */ replace(v45,'-','u'), /* fecha 1 */ '####', /* fecha 2: no aplicable */ /* CASO 3: el campo FOCAD 45 no contiene una fecha o está ausente */ else if val(v45*0.4) = 0 then, /* casos considerados: a) el campo 45 está presente, pero no contiene ningún dígito > 0 b) el campo 45 está ausente */ 'n', /* fecha desconocida */ 'uuuu', /* fecha 1: desconocida */ '####', /* fecha 2: no aplicable */ fi,fi,fi, /* ------------------------------------------ * 008/15-17 - Lugar de publicación * Campo FOCAD 48 - Código de país (revisar nombre de campo ??) * Sólo usamos la primera ocurrencia del campo FOCAD 48. * NOTA: el código ISO fue previamente convertido al código MARC mediante un gizmo. * ------------------------------------------ */ if p(v48) then if size(v48[1]) = 2 then v48[1],'#', else v48[1].3, fi, else 'xx#', /* 'xx#' para lugar desconocido */ fi, /* Comienzo del bloque de datos dependientes del tipo de material (008/18-34) */ if v9100 = 'LIBRO' then /* ------------------------------------------ * 008/18-21 - Ilustraciones * Campo FOCAD 52, subcampo i * ------------------------------------------ */ if p(v52^i) then 'a###', else '####', fi, else if v9100 = 'VIDEO' then /* ------------------------------------------ * 008/18-20 - Duración * Campo FOCAD ?? * ------------------------------------------ */ '---', /* ------------------------------------------ * 008/21 - Indefinido * ------------------------------------------ */ '|', fi,fi, /* ------------------------------------------ * 008/22 - Audiencia * ------------------------------------------ */ '|', if v9100 = 'LIBRO' then /* ------------------------------------------ * 008/23 - Forma del ítem * ------------------------------------------ */ '|', /* ------------------------------------------ * 008/24-27 Naturaleza del contenido * ------------------------------------------ */ /* Averiguamos si hay algún descriptor 'DICCIONARIO' o 'ENCICLOPEDIA' */ proc('d9000a9000~',(if s(mpu,v65,mpl):'DICCIONARIO' then 'DICC',break, fi),'~'), proc('d9001a9001~',(if s(mpu,v65,mpl):'ENCICLOPEDIA' then 'ENCIC',break, fi),'~'), if v9000 = 'DICC' and v9001 = 'ENCIC' then 'de##', else if v9000 = 'DICC' then 'd###', else if v9001 = 'ENCIC' then 'e###', else '####', fi,fi,fi, else if v9100 = 'VIDEO' then /* ------------------------------------------ * 008/23-27 - Indefinido * ------------------------------------------ */ '####', fi,fi, /* ------------------------------------------ * 008/28 - Publicación gubernamental * ------------------------------------------ */ '|', if v9100 = 'LIBRO' then /* ------------------------------------------ * 008/29 - Publicación de conferencia * ------------------------------------------ */ '|', /* ------------------------------------------ * 008/30 - Festschrift * ------------------------------------------ */ '|', /* ------------------------------------------ * 008/31 - Indice * ------------------------------------------ */ '|', else if v9100 = 'VIDEO' then /* ------------------------------------------ * 008/29 - Forma del ítem * ------------------------------------------ */ '|', /* ------------------------------------------ * 008/30-31 - Indefinido * ------------------------------------------ */ '##', fi,fi, /* ------------------------------------------ * 008/32 - Indefinido * ------------------------------------------ */ '#', if v9100 = 'LIBRO' then /* ------------------------------------------ * 008/33 - Forma literaria * ------------------------------------------ */ '|', /* ------------------------------------------ * 008/34 - Biografía * ------------------------------------------ */ /* Averiguamos si hay algún nro. de clasificación de la forma 92x */ proc('d9000a9000~',(if v60.2='92' and not v60.3='929' then 'BIOG',break, fi),'~'), if s(mpu,v65,mpl) : 'AUTOBIOGRAFIA' then 'a', /* 'a': autobiografía */ else if s(mpu,v65,mpl) : 'BIOGRAFIA' or v9000 = 'BIOG' then 'd', /* 'd': contiene información biográfica */ else '#', /* '#': sin material biográfico */ fi,fi, else if v9100 = 'VIDEO' then /* ------------------------------------------ * 008/33 - Tipo de material visual * ------------------------------------------ */ 'v', /* 'v' para videograbación */ /* ------------------------------------------ * 008/34 - Técnica * ------------------------------------------ */ '|', fi,fi, /* Fin del bloque de datos dependientes del tipo de material (008/18-34) */ /* ------------------------------------------ * 008/35-37 - Idioma * Campo FOCAD 50 - Idioma * NOTA: el valor del campo fue previamente convertido mediante un gizmo. * ------------------------------------------ */ if size(v50[1]) = 3 then v50[1], else 'und', /* 'und' para idioma no determinado */ fi, /* ------------------------------------------ * 008/38 - Registro modificado * ------------------------------------------ */ '|', /* ------------------------------------------ * 008/39 - Fuente de la catalogación * ------------------------------------------ */ '|', '</008>', /* ------------------------------------------------------------ * Campo MARC 020 - ISBN * * Campo FOCAD 10 - ISBN * Campo FOCAD 11 - ISBN (monografía en varios volúmenes) * Sólo estamos considerando ISBN-10. Hay ISBN-13 en la base ??? <-- PENDIENTE * ------------------------------------------------------------ */ if p(v10) or p(v11) then /* Para poder procesar en una sola pasada tanto el campo 10 como el 11, juntamos todos los campos 10 y 11 en un campo auxiliar (9010) */ proc( 'd9010', if p(v10) then ( 'a9010~',v10,'~', ) fi if p(v11) then ( 'a9010~',v11,'~', ) fi, ), /* Y ahora recorremos todas las ocurrencias de este campo auxiliar */ ( /* Creamos un campo auxiliar 9000 con el ISBN normalizado (le quitamos espacios y guiones, lo convertimos a mayúsculas ['x' => 'X'] y lo truncamos en 10 caracteres) */ proc('d9000a9000~', left( replace(replace(s(mpu,v9010,mpl), ' ',''), '-',''), 10 /* trunca en 10 caracteres */ ), '~'), /* 9001: campo auxiliar para validar el número */ /* Ver http://en.wikipedia.org/wiki/International_Standard_Book_Number#Check_digit_in_ISBN-10 */ proc('d9001a9001~', f( ( val(mid(v9000[1],1,1)) * 10 + val(mid(v9000[1],2,1)) * 9 + val(mid(v9000[1],3,1)) * 8 + val(mid(v9000[1],4,1)) * 7 + val(mid(v9000[1],5,1)) * 6 + val(mid(v9000[1],6,1)) * 5 + val(mid(v9000[1],7,1)) * 4 + val(mid(v9000[1],8,1)) * 3 + val(mid(v9000[1],9,1)) * 2 + val(replace(mid(v9000[1],10,2),'X','10')) * 1 ) /11 ,1,5 ), '~'), /* '<9000>',v9000[1],'</9000>','<9001>',v9001[1],'</9001>' */ /* Creamos un campo MARC 020, y decidimos el subcampo a usar según si el número es válido o no */ '<020>', '##', if right(v9001[1],5) = '00000' then /* resto cero => ISBN válido */ '^a', else /* ISBN inválido */ '^z', fi, replace(v9010,'-',''), /* conservamos el valor original del campo, previa eliminación de guiones */ '</020>', ) fi, /* ------------------------------------------ * Campo MARC 041 - Códigos de idioma * * Campo FOCAD 50 - Idioma del documento * Creamos un campo MARC 041 sólo si hay más de una ocurrencia del campo FOCAD 50. * NOTA: Los códigos deben haber sido convertidos previamente de ISO 639-1 (2 letras) * a ISO 639-2 (3 letras). * ------------------------------------------ */ if nocc(v50) > 1 then '<041>', '0#', ( '^a',v50, ) '</041>', fi, /* ------------------------------------------ * Campo MARC 044 - Códigos de país (??verificar nombre) * * Campo FOCAD 48 - Código de país (??verificar nombre) * Creamos un campo MARC 044 sólo si hay más de una ocurrencia del campo FOCAD 48. * ------------------------------------------ */ /* ------------------------------------------ * Campo MARC 082 - Clasificación decimal de Dewey * * Campo FOCAD 60 - Clasificación temática * Campo FOCAD 75 - Signatura topográfica * * Casos: * 1. Campo 60 contiene número Dewey (con o sin prefijo de país) => se preserva * 2. Campo 60 contiene número Dewey con prefijo 'C ' (consulta) => se preserva, eliminando el prefijo * 3. Campo 60 contiene 'JN', 'I-', 'IC' => se omite * 4. No hay campo 60, pero el 1er subcampo del campo 75 contiene un número Dewey => se usa v75^* * El criterio para determinar si un campo 60 o 75 contiene un nro. Dewey es que se cumplan * estas dos condiciones: * - que la función val() devuelva un nro. positivo (esto excluye 'JN', 'IC', 'I-') * - que el campo no contenga un guión (esto excluye nros. Brunet) * ------------------------------------------ */ if val(v60^*) > 0 and not v60^* : '-' then ( '<082>', '0#', '^a',replace(replace(v60,'C ',''),' ',''), '</082>', ), else if val(v75^*) > 0 and not v75^* : '-' then '<082>', '0#', '^a',replace(replace(v75^*,'C ',''),' ',''), '</082>', fi,fi, /* ------------------------------------------ * 09x ?? (juvenil, infantil) * ------------------------------------------ */ /* ---------------------------------------------------------------------------- * Campo MARC 245 - Título y mención de responsabilidad * * Campo FOCAD 24 - Título monográfico * Campo FOCAD 14 - Normas, patentes, etc. * Campo FOCAD 40 - Nombre de la reunión * * Mención de responsabilidad: ¡qué problemita! * ---------------------------------------------------------------------------- */ if p(v24) then '<245>', /* primer indicador */ if a(v28) and a(v29) then '0', /* título como punto de acceso principal */ else '1', /* título como punto de acceso secundario */ fi, /* segundo indicador: caracteres a ignorar */ if `¬L'¬L´¬` : s('¬',v24.2,'¬') then '2', else if '¬La ¬El ¬Le ¬An ¬' : s('¬',v24.3,'¬') then '3', else if '¬Las ¬Los ¬The ¬Les ¬... ¬' : s('¬',v24.4,'¬') then '4', else if '...' = v24.3 then '3', else '0', fi,fi,fi,fi, /* subcampos */ '^a', if v24^* : ': ' then mid(v24^*,1,instr(v24^*,': ')-1), ' :^b', mid(v24^*,instr(v24^*,': ')+2,size(v24^*)) else if v24^* : '; ' then mid(v24^*,1,instr(v24^*,'; ')-1), ' :^b', mid(v24^*,instr(v24^*,'; ')+2,size(v24^*)) else, v24^*, fi,fi, /* mención de responsabilidad */ if p(v24^b) and p(v24^a) then '^c', v24^b, ' ', v24^a, fi, /* subcampo h para videos */ if v9100 = 'VIDEO' then '^h[videograbaci¢n]', /* PENDIENTE: controlar posición del subcampo h */ fi, '</245>', fi, /* ---------------------------------- * Campo MARC 246 - Variantes del título * * Campo FOCAD ?? * ---------------------------------- */ /* ---------------------------------------------------------------------------- * Campo MARC 250 - Mención de edición * * Campo FOCAD 44 - Edición * NOTA: los valores fueron previamente normalizados con un gizmo. * ---------------------------------------------------------------------------- */ if p(v44) then '<250>', '##', '^a',v44, if right(v44,1) <> '.' then '.', fi, /* puntuación final */ '</250>', fi, /* ---------------------------------------------------------------------------- * Campo MARC 260 - Datos de edición: lugar, editor, fecha * * Campo FOCAD 47 - Editor y lugar de edición (R) * Campo FOCAD 45 - Fecha de publicación * * Casos especiales para testeo: * 000744 - p(v45) and a(v47) * 001996 - a(v45) and p(v47) * ?????? - a(v45) and a(v47) * Casos pendientes: * D:\mig\pruebas>mx br0 proc=@br2marc.proc from=96101 pft=mfn,x3,v260/ * 096101 ## :^bCONABIP :^bD.N.I. Documento nacional de identidad * ---------------------------------------------------------------------------- */ if p(v47) or p(v45) then '<260>', '##', /* Editor y lugar */ if p(v47) then if s(mpu,v47,mpl) = 'S.N.T.' then '^a[S.l. :^bs.n.]', else if p(v47^l) then, '^a',replace(v47^l,'s.l.','[S.l.]'), fi, /* el campo FOCAD 47 es repetible */ ( if v47.2 <> '^l' then /* ignoramos ocurrencias que no contienen lugar */ ' :^b', replace(v47^*,'s.e.','[s.n.]'), fi, ) fi, fi, /* Fecha */ if p(v45) then if p(v47) then ',', fi, /* el subcampo c va precedido de una coma */ '^c', /* CASO 1: el campo 45 posee una fecha completa (4 dígitos), y posiblemente un rango de fechas */ if val(v45*0.4) > 1500 then, /* casos considerados: a) 1956 b) 1956- c) 1956-7 d) 1956-57 e) 1899-900 f) 1956-1957 */ v45, /* CASO 2: el campo contiene una fecha estimada */ else if v45*3.1 = '-' then, /* casos considerados: a) 195- b) 19-- */ '[',v45,']', /* CASO 3: el campo no contiene una fecha (esté o no presente el campo 45) */ else if val(v45*0.4) = 0 then, /* casos considerados: a) el campo 45 está presente, pero no contiene ningún dígito > 0 b) el campo 45 está ausente */ if p(v260) or p(v45) then /* no creamos un 260 si el registro original carece de datos de edición (47 y 45 de FOCAD) */ if p(v45) then '[s.f.]', fi, fi, fi,fi,fi, fi, '.', /* puntuación final */ '</260>', fi, /* ------------------------------------------------ * Campo MARC 300 - Descripción física * * Campo FOCAD 52 - Descripción física * * ¿Es necesario hacer correcciones a los datos originales? (p.ej. normalizar valores) * * ATENCION: campo 52 repetido * D:\mig\pruebas>mx br0 "pft=if nocc(v52)>1 then mfn,x3,v52+| --- |/ fi" now * 086280 215 p.^iil. col.^d26,5 cm. --- Polimodal * 096761 Duración 95' --- Versión en inglés con subtítulos en castellano * ------------------------------------------------ */ if p(v52) then '<300>', '##', if v52.1 <> '^' then /* extensión (páginas) */ '^a',v52^*, fi, if p(v52^i) then /* ilustraciones */ /* es correcto dejar este subcampo tal como viene ??? */ if v52.1 <> '^' then ' :', fi, '^b',v52^i, fi, if p(v52^d) then /* dimensiones */ if v52.1 <> '^' or p(v52^i) then ' ;', fi, '^c',v52^d, fi, /* puntuación final ?? */ '</300>', fi, /* ------------------------------------------------ * Campo MARC 490 - Mención de serie * Campo FOCAD 30 - Título (nivel colección) * ------------------------------------------------ */ if p(v30) then ( '<490>', '0#', if v30.1 <> '^' then '^a', fi, v30, '</490>', ) fi, /* Para las notas que provienen del campo 59 (que según el caso enviamos a los campos 500, 505 o 511), podemos elegir entre 2 métodos: 1. recorrer una única vez todas las ocurrencias del campo FOCAD 59, y decidir para cada una de ellas a qué campo MARC debe ir (500, 505, 511) 2. por cada uno de los campos MARC a crear (500, 505, 511), recorrer todas las ocurrencias del campo FOCAD 59, y para cada una de ellas decidir si debe enviarse a este campo MARC Acá estamos usando el método 2. */ /* ------------------------------------------------ * Campo MARC 500 - Nota general * * Campo FOCAD 59 - Notas * Tomamos las notas que no enviamos a campos más específicos (505, 511). * ------------------------------------------------ */ if p(v59) then ( if s(mpu,v59.7,mpl) <> 'ELENCO:' and s(mpu,v59.12,mpl) <> 'INTERPRETES:' and s(mpu,v59.11,mpl) <> 'CONTENIDO: ' then '<500>', '##', '^a',v59 if right(v59,1) <> '.' then '.', fi, /* puntuación final */ '</500>', fi, ) fi, /* ------------------------------------------------ * Campo MARC 504 - Nota de bibliografía * * Campo FOCAD 49 - Número de referencias bibliográficas * Construimos una nota usual ('Incluye referencias bibliográficas.') y le insertamos el número * almacenado en el campo 49. * ------------------------------------------------ */ if val(v49) > 0 then '<504>', '##', '^aIncluye ', f(val(v49),1,0),' referencias bibliogr ficas.', /* ATENCION: codificación del acento */ '</504>', fi, /* ------------------------------------------------------------------------------ * Campo MARC 505 - Nota de contenido con formato * * Campo FOCAD 59 - Notas * Tomamos las notas que comiencen con 'Contenido: '. * No todas estas notas tendrán el formato prescripto por AACR2, pero se las podrá * corregir más tarde. * ------------------------------------------------------------------------------ * ATENCION: en algunos queda esta puntuación final: '.-.' */ if p(v59) then ( if s(mpu,v59.11,mpl) = 'CONTENIDO: ' then '<505>', '##', '^a',replace(replace(v59*11,'.- ',' -- '),'. -',' -- '), /* usamos el separador estándar ' -- ' */ if right(v59,1) <> '.' then '.', fi, /* puntuación final */ '</505>', fi, ) fi, /* ------------------------------------------------------------------------------ * Campo MARC 511 - Nota de elenco * * Campo FOCAD 59 - Notas * Tomamos las notas que comiencen 'Elenco:' o 'Intérpretes:'. * ------------------------------------------------------------------------------ */ if p(v59) then ( if s(mpu,v59.7,mpl) = 'ELENCO:' or s(mpu,v59.12,mpl) = 'INTERPRETES:' then '<511>', '0', /* el OPAC no genera etiqueta 'Elenco' */ '#', '^a',v59 if right(v59,1) <> '.' then '.', fi, /* puntuación final */ '</511>', fi, ) fi, /* ------------------------------------------------ * Campo MARC 520 - Nota de resumen * * Campo FOCAD 69 - Resumen * ------------------------------------------------ */ if p(v69) then '<520>', '##', '^a',v69, if right(v69,1) <> '.' then '.', fi, /* puntuación final */ '</520>', fi, /* -------------------------------------------------------------------------- * Campo MARC 100 - Punto de acceso principal--Nombre personal * Campo MARC 700 - Punto de acceso secundario--Nombre personal * * Campo FOCAD 28 - Autor personal (nivel monográfico) * Campo FOCAD 22 - Autor personal (nivel analítico) * Campo FOCAD 65 - Descriptores * Sólo nombres personales que aparezcan en registros de videograbaciones. * Al usar el criterio de coma-espacio para detectar nombres personales, * estamos omitiendo nombres como 'Aristóteles', que deben detectarse * manualmente. * -------------------------------------------------------------------------- */ if p(v22) then ( if not s(mpu,v24[1],mpl) : s(mpu,v22^*,mpl) then '<700>', if v22^b <> '' then '1', else '0', fi, '#', /* 2do indicador */ '^a',replace(v22,'^b',', '), if right(v22,1) <> '.' then '.', fi, /* puntuación final */ '</700>', fi, ) fi, if v9100 = 'VIDEO' and p(v65) then ( if v65 : ', ' then /* si encontramos coma-espacio suponemos que es un nombre personal */ '<700>', '1', /* 1er indicador */ '#', /* 2do indicador */ '^a',v65, if right(v65,1) <> '.' then '.', fi, /* puntuación final */ '</700>', fi ) fi, /* ---------------------------------------------------------------------- * Campo MARC 110 - Punto de acceso principal--Nombre institucional * Campo MARC 710 - Punto de acceso secundario--Nombre institucional * * Campo FOCAD 23 - Autor institucional (nivel analítico) * Campo FOCAD 29 - Autor institucional (nivel monográfico) * ---------------------------------------------------------------------- */ if p(v23) or p(v29) then /* PENDIENTE */ fi, /* ------------------------------------------------ * Campo MARC 130 - Título uniforme * ------------------------------------------------ */ if p(v27) then '<130>', '0#', '^a',v27, if right(v27,1) <> '.' then '.', fi, /* puntuación final */ '</130>', fi, /* ---------------------------------------------------------------------------------- * Campo MARC 600 - Punto de acceso temático--Nombre personal * * Campo FOCAD 65 - Descriptores * Sólo aquellos que contienen una coma seguida de un espacio (excepto en videos). * Campo FOCAD 22 - Autor personal (nivel analítico) * Si el título (campo 24) contiene el apellido de esta persona. * PENDIENTE: revisar indicadores * ---------------------------------------------------------------------------------- */ if p(v65) then ( if v65 : ', ' and not v9100 = 'VIDEO' then '<600>', '##', '^a',v65, if right(v65,1) <> '.' then '.', fi, /* puntuación final */ '</600>', fi, ), fi, if p(v22) then ( if s(mpu,v24[1],mpl) : s(mpu,v22^*,mpl) then '<600>', '14', '^a',replace(v22,'^b',', '), if right(v22,1) <> '.' then '.', fi, /* puntuación final */ '</600>' fi, ) fi, /* ------------------------------------------------------------------ * Campo MARC 653 - Descriptores (no controlados) * * Campo FOCAD 65 - Descriptores * Campo FOCAD 20 - Título (nivel analítico) * Esto se debe a una sobreutilización del campo 20 en B.R. * Consideramos descriptores a aquellos que están en MAYUSCULAS. * ------------------------------------------------------------------ */ if p(v65) then ( if not v65 : ', ' then '<653>', '##^a',v65, if right(v65,1) <> '.' then '.', fi, /* puntuación final */ '</653>', fi, ), fi, if p(v20) then ( if s(mpu,v20,mpl) = v20 and not v20 : '/' then /* excepciones: MS/DOS, CAD/CAM */ '<653>', '##^a',v20, if right(v20,1) <> '.' then '.', fi, /* puntuación final */ '</653>' fi, ) fi, /* ------------------------------------------------------- * Campo MARC 740 - Títulos relacionados/analíticos (no controlados) * * Campo FOCAD 20 - Título (nivel analítico) * Omitimos aquellos que estén completamente en mayúsculas, pues se trata de descriptores * y deben enviarse al campo MARC 653. * ------------------------------------------------------- */ if p(v20) then ( if s(mpu,v20,mpl) <> v20 or v20 : '/' then /* omitimos los que estén en MAYUSCULAS */ '<740>', /* 1er indicador: caracteres a ignorar */ /* ATENCION: comparar con 2do indicador del campo MARC 245 */ if `¬L'¬L´¬` : s('¬',v20.2,'¬') then '2', else if '¬La ¬El ¬Le ¬An ¬' : s('¬',v20.3,'¬') then '3', else if '¬Las ¬Los ¬The ¬Les ¬... ¬' : s('¬',v20.4,'¬') then '4', else if '...' = v20.3 then '3', else '0', fi,fi,fi,fi, '2', /* 2do indicador: '2' para título analítico */ '^a',v20, '</740>', fi, ) fi, /* ---------------------------------------------------------------------------- * Campo MARC 859 - Existencias (campo local de Catalis) * * Tomamos los datos que fueron almacenados en el campo 200 por el proceso de * unión de familias de registros. * ---------------------------------------------------------------------------- */ /* ---------------------------------------------------------------------------- * Campo MARC 980 - Anotaciones al registro (campo local de Catalis) * * Conservamos los MFN de los registros originales. * ---------------------------------------------------------------------------- */ '<980>', '^oMFN base original: ', '</980>', /* ---------------------------------------------------------------------------- * Campo MARC 991 - Usuario que creó el registro (campo local de Catalis) * * Usamos un identificador para el proceso de migración. * ---------------------------------------------------------------------------- */ '<991>', '_MIG_', '</991>',
migracion