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:
La conversión ' ' ⇒ '_' impide que se cumpla la condición 2.
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
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-
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-