User Tools

Site Tools


diccionario_de_opacmarc

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

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}}
diccionario_de_opacmarc.txt · Last modified: 12/05/2009 00:00 (external edit)