====== Notas sobre biblio.fst y la generación del diccionario en OPACMARC ====== En ''update_db.py'' tenemos este comando: mx biblio gizmo=DICTGIZ fst=@BIBLIO.FST actab=AC-ANSI.TAB uctab=UC-ANSI.TAB stw=@BIBLIO.STW fullinv=biblio En primer lugar, el contenido de (ciertos campos de) la base es modificado mediante el gizmo DICTGIZ: ' :' => ' ;' => ' /' => '"' => ',' => '.' => ' ' => '_' '(' => '[' ')' => ']' '+' => '_PLUS_' '*' => '_STAR_' '\' => "'" => '_' Algunas de estas conversiones se ocupan de descartar puntuación, con el objetivo de generar claves compactas y así aprovechar mejor los escasos 30 caracteres disponibles para cada clave. ATENCIÓN: la limitación a 30 caracteres corresponde a los utilitarios cisis tradicionales (10/30); la versión 16/60 liberada en 2007 eleva el límite a 60 caracteres. Otras conversiones se ocupan de evitar la presencia de caracteres que tienen un significado especial en la sintaxis de expresiones de búsqueda, y que por lo tanto podrían interferir en las búsquedas. Estos cambios sólo afectan a las claves que se generan usando la técnica 0 (línea completa). Sin embargo, el efecto se extiende más allá de lo deseado (títulos y otros puntos de acceso), y llega a afectar p.ej. a las **signaturas topográficas**: 517.4 => 5174 Con respecto a las ST, queremos que: - se vean en el diccionario de manera limpia (a lo sumo, con "_" en lugar de " ") - estén ordenadas en el diccionario de manera correcta. "Correcta" significa: que se ajusta al criterio usado por los catalogadores, y que coincide con el orden definido para el archivo maestro usando location_sort.pft. Esto último nos interesa muy especialmente, pues para poder hacer un browse del catálogo por ST nos basamos en el diccionario de biblio. La conversión ' ' => '_' impide que se cumpla la condición 2. ==== Aplicación de un gizmo a un conjunto de tags ==== La sintaxis de mx permite limitar la aplicación del gizmo a un conjunto de tags; sin embargo en este caso, donde la cantidad de tags donde queremos aplicar el gizmo es grande, sería más práctico poder indicar los tags a los cuales *no* se desea aplicar el gizmo. mx biblio gizmo=DICTGIZ,100,110,111,130,245,246,440,600,610,611,630,650,700,710,711,730,740,800,810,811,830 Al usar más de 16 tags sale un error: segmentation fault Para evitar este problema, podemos aplicar el gizmo a tags específicos, pero en más de una pasada: mx biblio gizmo=DICTGIZ,100,110,111,130,700,710,711,730 create=biblio1 mx biblio1 gizmo=DICTGIZ,245,246,740,600,610,611,630,650 create=biblio O más breve aun: mx biblio gizmo=DICTGIZ,100,110,111,130,700,710,711,730,800,810,811,830 gizmo=DICTGIZ,245,246,440,740,600,610,611,630,650 PARA PROBAR: mx biblio gizmo=DICTGIZ,100/130,700/730,800/830 ===== Cómo se envía al diccionario el campo 100 ===== TAG: 9100 TÉCNICA: 0 FORMATO: if p(v100) then proc( 'd1000', 'a1000¦',replace(v100*3,'^','¦a1000¦'),'¦','a1000¦##¦', ), (, if v1000 = '##' then / else if 'abcdq' : v1000.1 then '~'v1000*1, else if '9' = v1000.1 then /'_NAME_',v1000*1/ fi,fi,fi, ), fi, EJEMPLO: Campo 100: "1#^aEkeland, I.^q(Ivar),^d1944-" Campo 1000 (4 occ): "aEkeland, I.", "q(Ivar),", "d1944-", "##" Al recorrer las occ de v1000, se genera esto: ~Ekeland, I.~(Ivar),~1944- (con salto de línea al final) que con el efecto del gizmo DICTGIZ y la conversión a mayúsculas nos da: ~EKELAND_I~[IVAR]~1944- ===== Cómo se envía al diccionario el campo 700 (repetible) ===== TAG: 9100 TÉCNICA: 0 FORMATO: if p(v700) then proc( 'd1000', (, 'a1000¦',replace(v700*3,'^','¦a1000¦'),'¦','a1000¦##¦', ) ), (, if v1000 = '##' then / else if 'abcdq' : v1000.1 then '~'v1000*1, else if '9' = v1000.1 then /'_NAME_',v1000*1/ fi,fi,fi ), fi, EJEMPLO: Campo 700 (2 occ): 1#^aMatzeu, M.^q(Michele)^4edt 1#^aVignoli, Alfonso,^d1940-^4edt Campo 1000 (8 occ): aMatzeu, M. q(Michele) 4edt ## aVignoli, Alfonso, d1940- 4edt ## Salida (nótese la omisión del subcampo $4): ~Matzeu, M.~(Michele) ~Vignoli, Alfonso,~1940- O sea, ~MATZEU_M~(MICHELE) ~VIGNOLI_ALFONSO~1940- {{tag>opacmarc desarrollo}}