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-