Table of Contents

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:

  1. se vean en el diccionario de manera limpia (a lo sumo, con “_” en lugar de “ ”)
  2. 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-