This shows you the differences between two versions of the page.
— |
diccionario_de_opacmarc [12/05/2009 00:00] (current) |
||
---|---|---|---|
Line 1: | Line 1: | ||
+ | ====== 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}} |