Migración de SeCS a MARC21

El siguiente script (un pft para mx) permite convertir la base TITLE del SeCS a formato MARC 21. Aún quedan detalles por arreglar.

Estoy seguro de que se le han hecho mejoras a este script, pero no han sido copiadas aquí. Además, deberíamos subirlo a un repositorio de código abierto. --- Fernando Gómez 2009/05/05 18:34
/* Migración de SeCS a MARC 21 */ /* FG, mayo 2006 */ /* Eliminamos todos los campos */ 'd*', /* Leader */ 'a905|n|', 'a906|a|', 'a907|s|', 'a908|#|', 'a909|#|', 'a917|#|', 'a918|#|', 'a919|#|', /* Nro. de control */ 'a001|',v30,'|', /* Fecha última modificación */ 'a005|',s(date).8, s(date)*9.6, '.0','|', 'a008{', /* 00-05 */ '000000', /* 06-14 */ if v304 > // then 'd',v301.4,v304.4, else 'c',v301.4,'####', fi, /* 15-17 pais */ '|||' /* ref(['pais']l(['pais']v310),v2) */ /* tabla para mapear códigos de país */ /* 18 freq */ select v380 /* TO-DO: añadir los códigos que faltan */ case 'A' : 'a', /* annual */ case 'B' : 'b', /* bimonthly (según MARC: Includes 6, 7, or 8 numbers a year.) */ case 'E' : 'e', /* biweekly */ case 'F' : 'f', /* semiannual */ case 'G' : 'g', /* biennial */ case 'K' : '#', /* No determinable frequency (Frequency is intentionally irregular.) */ case 'M' : 'm', /* monthly (según MARC: Includes 9, 10, 11, or 12 numbers a year.) */ case 'Q' : 'q', /* quarterly */ case 'S' : 's', /* semimonthly */ case 'T' : 't', /* three times a year */ case 'Z' : 'z', /* other */ endsel, /* 19 regularidad */ '|', /* 20 indef. */ '#', /* 21 tipo de R.C. */ 'p', /* p: periodical */ /* 22 forma del original */ '#', /* 23 forma del ítem */ '#', /* 24 Nature of entire work */ '#', /* 25-27 Nature of contents */ '####', /* 28 Publ. gubernamental */ '#', /* 29 Publ. de conferencia */ '0', /* 30-32 indef. */ '###', /* 33 Alfabeto original */ v340, /* pasar a minúscula */ /* 34 Entry convention */ '0', /* 35-37 idioma */ '|||', /*ref(['idioma']l(['idioma']v350[1]),v2)*/ /* tabla para mapear idiomas */ /* 38-39 */ '||', '{', /* 022 - ISSN */ if p(v400) then ( 'a022|##^a',v400,'|', ) fi, /* 210 - título abreviado */ if p(v150) then 'a210|0#^a',v150,'|', fi, /*041 - otros idiomas */ /* 110/710 - puntos de acceso */ /* 245 - título */ 'a245|0', if '~The ~Les ~Las ~Los ~' : v100.4 then '4' else '0', fi, /* TO-DO: L'Analyse */ '^a',v100, " :^b"v110, " =^b"v230, ".^n"v120, /* nro. de sección/parte */ ".^p"v130, /* título de sección/parte */ " /^c"v140+|, |, /* el v140 es correcto como mención de responsabilidad? */ '.|', /*246 - variantes de título */ if p(v240) then ( 'a246|3#^a',v240,'|', /* TO-DO: títulos paralelos (230) */ ) fi, /* publicación */ 'a260|##', '^a',v490, ' :^b', v480, if a(v480) then v140+|, |, fi, /* TO-DO: hay casos donde el editor está implícito, e.g. Rendiconti del Circolo Matematico di Palermo */ ',^c', v301, '-',v304, " "n304, '.', /* TO-DO: usar sólo años (a veces hay meses, e.g. Bulletin of mathematical biophysics) */ '|', /* 310 - frecuencia actual */ /* ¿cuándo usamos "frecuencia varía"? */ /* TO-DO: ¿si no es ninguno de esos casos? */ 'a310|##^a', select v380 case 'A' : 'Anual', case 'B' : 'Bimestral', case 'E' : 'Quincenal', /* ¿diferencia con S-bimensual? */ case 'F' : 'Semestral', case 'G' : 'Bienal', case 'K' : 'Irregular', case 'M' : 'Mensual', case 'Q' : 'Trimestral', case 'S' : 'Bimensual', case 'T' : 'Cuatrimestral', case 'Z' : //, /* otras frecuencias */ endsel, '.', '|', /*362 - fechas/designación secuencial */ 'a362|0#^a', "Vol. "v302, if p(v302) and p(v303) then ', ' fi, "no. "v303, " ("v301")", if p(v304) or p(v305) or p(v306) then ' - ', "Vol. "v305, if p(v305) and p(v306) then ', ' fi, "no. "v306, " ("v304").", else '- .', fi, '|', /* 610 168 174 620 31 31 650 1 2 670 1 1 680 4 7 710 134 135 720 16 20 770 5 8 780 4 4 790 4 4 */ /* 780 - título anterior */ if p(v610) then 'a780|00^t',replace(v610,'^i','^w'),'|', /* continuación */ fi if p(v620) then 'a780|01^t',replace(v620,'^i','^w'),'|', /* continuación parcial */ fi if p(v650) then 'a780|05^t',replace(v650,'^i','^w'),'|', /* absorbió */ fi if p(v660) then 'a780|06^t',replace(v660,'^i','^w'),'|', /* absorbió en parte */ fi if p(v670) then 'a780|07^t',replace(v670,'^i','^w'),'|', /* subdivisión de */ fi if p(v680) then 'a780|04^t',replace(v680,'^i','^w'),'|', /* fusión de ... con ... */ /* TO-DO: generar un 580 */ fi /* 785 - título siguiente */ if p(v710) then 'a785|00^t',replace(v710,'^i','^w'),'|', /* continuado por */ fi if p(v720) then 'a785|01^t',replace(v720,'^i','^w'),'|', /* continuado en parte */ fi if p(v750) then 'a785|04^t',replace(v750,'^i','^w'),'|', /* absorbido por */ fi if p(v760) then 'a785|05^t',replace(v760,'^i','^w'),'|', /* absorbido en parte por */ fi if p(v770) then 'a785|06^t',replace(v770,'^i','^w'),'|', /* subdividido */ /* TO-DO: generar un 580 */ fi if p(v780) then 'a785|17^t',replace(v780,'^i','^w'),'|', /* fusionado con */ /* TO-DO: generar un 580 */ fi if p(v790) then 'a785|17^t',replace(v790,'^i','^w'),'|', /* para formar */ /* TO-DO: generar un 580 */ fi if p(v780) and p(v790) then 'a580|##^aFusionado con ',v780,' para formar ',v790,'.|', fi, /* 856 - URL */ if v900^w : 'http' then 'a856|4#^yAcceso online^u',v900^w,'|', /* TO-DO: revisar texto del link. ¿Puede haber más de una URL por registro de SeCS? */ fi, /* 866 - existencias */ if p(v98) then 'a866|#0^a',v98,'|', fi,