Difference between revisions of "Formatos de salida que integran la información de bases de datos relacionadas"
Line 14: | Line 14: | ||
donde se pueden colocar los recursos compartidos entre todas las bases de datos''' | donde se pueden colocar los recursos compartidos entre todas las bases de datos''' | ||
− | {| style="margin-top: | + | {| style="margin-top:25px; width:100%; margin-bottom:2px;padding: 10px 10px 10px 10px;" |
|style="background-repeat:no-repeat; background-position:-40px -15px; width:100%; border:2px solid #B9C7D7; vertical-align:top;text-align:left; -moz-border-radius: 10px; -webkit-border-radius: 10px; border-radius:10px;"| | |style="background-repeat:no-repeat; background-position:-40px -15px; width:100%; border:2px solid #B9C7D7; vertical-align:top;text-align:left; -moz-border-radius: 10px; -webkit-border-radius: 10px; border-radius:10px;"| | ||
'''<font color=darkred>Teoría</font>''': (ver: [http://bvsmodelo.bvsalud.org/download/cisis/CISIS-LinguagemFormato4-es.pdf Manual del lenguaje de formatos del CISIS] | '''<font color=darkred>Teoría</font>''': (ver: [http://bvsmodelo.bvsalud.org/download/cisis/CISIS-LinguagemFormato4-es.pdf Manual del lenguaje de formatos del CISIS] | ||
Line 56: | Line 56: | ||
'''<font color=darkred>Fin de la teoría</font>''' | '''<font color=darkred>Fin de la teoría</font>''' | ||
|} | |} | ||
+ | |||
+ | Combinando la función L con la función REF podemos hacer búsquedas de registros relacionados utilizando expresiones de búsqueda | ||
+ | REF([base-de-datos] L([archivo invertido],expresion),Formato de despliegue) | ||
+ | donde, | ||
+ | |||
+ | '''base-de-datos''': base de datos relacionada | ||
+ | |||
+ | '''archivo invertido''': archivo invertido relacionado | ||
+ | |||
+ | '''expresion''': expresión de búsqueda a aplicar sobre el archivo invertido relacionado | ||
+ | |||
+ | '''formato de despliegue''': formato a aplicar sobre el primer registro recuperado desde la base de datos relacionada | ||
+ | |||
+ | Ahora bien, según establece la teoría, la '''función L recupera solo el mfn del primer registro localizado a través de la expresión de búsqueda suministrada''', y en la relación entre la base bibliográfica y sus copias tenemos que un registro bibliográfico puede '''relacionarse con varios registros en la base de datos de copias'''. | ||
+ | |||
+ | |||
+ | Ante esta situación, '''ABCD generó su propia forma de acceso a las relaciones de este tipo''', incluyendo en la pft, como '''preliteral incondicional''', el siguiente comando: | ||
+ | /'$$REF:Base_de_datos, Formato, Expresion de búsqueda'/ | ||
+ | donde: | ||
+ | |||
+ | |||
+ | '''Base_de_datos''': Nombre de la base de datos a relacionar, | ||
+ | '''Formato''': Formato a aplicar sobre los registros relacionados | ||
+ | '''Expresion de búsqueda''': Expresión de búsqueda a aplicar sobre Base_de_datos para obtener los registros relacionados | ||
+ | |||
+ | |||
+ | ABCD analizará la salida obtenida al recuperar el registro bibliográfico y al encontrar la cadena '''$$REF:''' revisará el resto de la línea para: | ||
+ | |||
+ | * aplicar la expresión de búsqueda sobre la base de datos a relacionar | ||
+ | * obtener los registros localizados y aplicarles el formato suministrado | ||
+ | * presentar el resultado como parte de la salida del registro bibliográfico | ||
+ | |||
+ | |||
+ | La expresión mencionada ('''$$REF:''') debe suministrarse tal y como se detalla, ya que los valores separados con '''coma''' son elementos clave para la ejecución del proceso de relación en sustitución del REF normal que provee el lenguaje de formatos del CISIS. Por ello, si insertamos en nuestro formato de despliegue | ||
+ | <pre> if npost(['copies'],'CN_biblo_'v2)>0 then | ||
+ | '<p><dd><dd><dd> | ||
+ | <table border=1> | ||
+ | <tr> | ||
+ | <td colspan=6 bgcolor=#ffffff><b>Total ejemplares</b>:' | ||
+ | f(npost(['copies'],'CN_biblo_'v2),1,0) | ||
+ | '</td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <th>No. control</th> | ||
+ | <th>Inventario</th> | ||
+ | <th>Situación</th> | ||
+ | <th>Biblioteca princ.</th> | ||
+ | <th>No. copia</th> | ||
+ | <th>Disp.préstamo</th>'/ | ||
+ | /'$$REF:copies,inven,CN_biblo_'v2/ | ||
+ | '</tr> | ||
+ | </table>' | ||
+ | fi,</pre> | ||
+ | |||
+ | En el despliegue del registro bibliográfico obtendremos la información de las copias a través de la lectura de la base de datos copies y aplicando el formato '''inven.pft''' sobre los registros recuperados. | ||
+ | |||
+ | |||
+ | El formato inven.pft debe existir en la carpeta pfts de la base de datos copias (tomando en cuenta el lenguaje activo) y como se está accediendo desde de la base de datos bibliográfica (biblo), debe estar incorporado en el archivo '''biblo.par''' o en el archivo '''syspar.par''' al igual que el camino de acceso hacia la base de datos copies: | ||
+ | inven.pft=%path_database%copies/pfts/es/inven.pft | ||
+ | copies.*=%path_database%copies/data/copies.* | ||
+ | inven.pft tiene el siguiente detalle: | ||
+ | |||
+ | <pre> '<tr> | ||
+ | <td valign=top bgcolor=#ffffff><font face=arial size=2>'v1 | ||
+ | if a(v1) then ' ' fi, | ||
+ | '</td>'/ | ||
+ | '<td valign=top bgcolor=#ffffff><font face=arial size=2>'v30 | ||
+ | if a(v30) then ' ' fi,'</td>'/ | ||
+ | '<td valign=top bgcolor=#ffffff><font face=arial size=2>' | ||
+ | if p(v200) then | |v200^a,| |v200^b,fi | ||
+ | if a(v200) then ' ' fi, | ||
+ | '</td>'/ | ||
+ | '<td valign=top bgcolor=#ffffff><font face=arial size=2>' | ||
+ | v35 | ||
+ | if a(v35) then ' ' fi, | ||
+ | '</td>'/ | ||
+ | '<td valign=top bgcolor=#ffffff><font face=arial size=2>' | ||
+ | v63 | ||
+ | if a(v63) then ' ' fi, | ||
+ | '</td>'/ | ||
+ | ,e1:=val(v30), | ||
+ | if npost(['loanobjects'],'CN_'v10'_'v1)=0 then | ||
+ | '<td align=center bgcolor=#ffffff> </td>' | ||
+ | else | ||
+ | ref(['loanobjects']l(['loanobjects'],'CN_'v10'_'v1), | ||
+ | (if p(v959) and val(v959^i)=e1 then proc('a9999~1~'), | ||
+ | '<td align=center bgcolor=#ffffff><font face=arial size=2>' | ||
+ | v959^o | ||
+ | '</td>' | ||
+ | fi/) | ||
+ | if a(v9999) then '<td align=center bgcolor=#ffffff> </td>' fi | ||
+ | ) | ||
+ | fi |
Revision as of 14:42, 24 November 2013
A través de un campo de relación (número de control), es posible crear una estructura que relacione registros provenientes de varias bases de datos. Este es el esquema adoptado por ABCD para la relación entre un registro bibliográfico y sus copias, las copias con su disponibilidad en préstamo y los usuarios y sus transacciones (ver el esquema de las Relaciones entre bases de datos en los procesos de gestión de ABCD).
Para desarrollar nuestro ejemplo, supongamos que deseamos obtener este tipo de salida: 700px|centro|link=|border En forma esquematica la relación entre el catálogo, sus copias y las copias habilitadas para préstamo, es la siguiente: centro|link=|border
Esto significa, que un registro en el catálogo bibliográfico puede tener muchos registros en el archivo de copias y a su vez un solo registro en el archivo de copias hablitadas para préstamo. Por lo cual, para producir nuestra salida, desde la base de datos bibliográfica tenemos que hacer una lectura de los registros relacionados en copias y también una lectura de los registros habilitados para préstamo. Todo esto utilizando el número de control de la copia que representa el campo de relación entre las distintas estructuras.
- Como desde la base de datos bibliográfica (biblo en nuestro ejemplo) queremos acceder las bases copies y loanobjects tenemos que agregar en biblo.par los caminos de acceso a las bases que vamos a relacionar:
copies.*=%path_database%copies/data/copies.* loanobjects.*=%path_database%loanobjects/data/loanobjects.*
Esto también puede solucionarse definiendo en la carpeta par el archivo syspar.par donde se pueden colocar los recursos compartidos entre todas las bases de datos
Teoría: (ver: Manual del lenguaje de formatos del CISIS La función que provee el lenguaje de formateo de Isis para relacionar bases de datos es la siguiente: ref(mfn, format) ref([master file]mfn, format) ref(<expr>,<format>) ref([<format dbname>]<expr>,<format>) Definición: Ejecuta <format> en el registro seleccionado mediante <expr>. Si se indica <format dbname> se puede referenciar a otra (o la misma) base de datos Ejemplos: ref(l(v3),v1/,v2/,v3/), if ref(['account']l(['user']v2),v4)='active' then |Name: |v10/, fi, (if p(v99) then ref([v99]1,v30/), fi), La función REF expresada en la forma: ref(mfn, format) ref([master file]mfn, format) Relaciona bases de datos utilizando el MFN como campo de relación, es decir, accede el registro relacionado a través de su MFN. Para extender el alcance de las relaciones entre registros, también se provee la opción de definir una relación utilizando las claves de la lista invertida. Esta forma de relación equivale a:
La función 'L permite localizar registros a través de la lista invertida l(key) l([inverted file],key) l(<format key>) l([<format ifname>]<format key>) Definición Regresa el MFN del primer posting (si lo hubiera) usando la clave generada por el formato <format key> para buscar en el archivo invertido actual. Puede también buscar en otro archivo invertido cuyo nombre se indica mediante el formato <format ifname>. Ejemplo: if l(v15)<> 0 then |Term: |v15, fi, Fin de la teoría |
Combinando la función L con la función REF podemos hacer búsquedas de registros relacionados utilizando expresiones de búsqueda
REF([base-de-datos] L([archivo invertido],expresion),Formato de despliegue)
donde,
base-de-datos: base de datos relacionada
archivo invertido: archivo invertido relacionado
expresion: expresión de búsqueda a aplicar sobre el archivo invertido relacionado
formato de despliegue: formato a aplicar sobre el primer registro recuperado desde la base de datos relacionada
Ahora bien, según establece la teoría, la función L recupera solo el mfn del primer registro localizado a través de la expresión de búsqueda suministrada, y en la relación entre la base bibliográfica y sus copias tenemos que un registro bibliográfico puede relacionarse con varios registros en la base de datos de copias.
Ante esta situación, ABCD generó su propia forma de acceso a las relaciones de este tipo, incluyendo en la pft, como preliteral incondicional, el siguiente comando:
/'$$REF:Base_de_datos, Formato, Expresion de búsqueda'/
donde:
Base_de_datos: Nombre de la base de datos a relacionar,
Formato: Formato a aplicar sobre los registros relacionados
Expresion de búsqueda: Expresión de búsqueda a aplicar sobre Base_de_datos para obtener los registros relacionados
ABCD analizará la salida obtenida al recuperar el registro bibliográfico y al encontrar la cadena $$REF: revisará el resto de la línea para:
- aplicar la expresión de búsqueda sobre la base de datos a relacionar
- obtener los registros localizados y aplicarles el formato suministrado
- presentar el resultado como parte de la salida del registro bibliográfico
La expresión mencionada ($$REF:) debe suministrarse tal y como se detalla, ya que los valores separados con coma son elementos clave para la ejecución del proceso de relación en sustitución del REF normal que provee el lenguaje de formatos del CISIS. Por ello, si insertamos en nuestro formato de despliegue
if npost(['copies'],'CN_biblo_'v2)>0 then '<p><dd><dd><dd> <table border=1> <tr> <td colspan=6 bgcolor=#ffffff><b>Total ejemplares</b>:' f(npost(['copies'],'CN_biblo_'v2),1,0) '</td> </tr> <tr> <th>No. control</th> <th>Inventario</th> <th>Situación</th> <th>Biblioteca princ.</th> <th>No. copia</th> <th>Disp.préstamo</th>'/ /'$$REF:copies,inven,CN_biblo_'v2/ '</tr> </table>' fi,
En el despliegue del registro bibliográfico obtendremos la información de las copias a través de la lectura de la base de datos copies y aplicando el formato inven.pft sobre los registros recuperados.
El formato inven.pft debe existir en la carpeta pfts de la base de datos copias (tomando en cuenta el lenguaje activo) y como se está accediendo desde de la base de datos bibliográfica (biblo), debe estar incorporado en el archivo biblo.par o en el archivo syspar.par al igual que el camino de acceso hacia la base de datos copies:
inven.pft=%path_database%copies/pfts/es/inven.pft copies.*=%path_database%copies/data/copies.*
inven.pft tiene el siguiente detalle:
'<tr> <td valign=top bgcolor=#ffffff>'v1 if a(v1) then ' ' fi, '</td>'/ '<td valign=top bgcolor=#ffffff>'v30 if a(v30) then ' ' fi,'</td>'/ '<td valign=top bgcolor=#ffffff>' if p(v200) then | |v200^a,| |v200^b,fi if a(v200) then ' ' fi, '</td>'/ '<td valign=top bgcolor=#ffffff>' v35 if a(v35) then ' ' fi, '</td>'/ '<td valign=top bgcolor=#ffffff>' v63 if a(v63) then ' ' fi, '</td>'/ ,e1:=val(v30), if npost(['loanobjects'],'CN_'v10'_'v1)=0 then '<td align=center bgcolor=#ffffff> </td>' else ref(['loanobjects']l(['loanobjects'],'CN_'v10'_'v1), (if p(v959) and val(v959^i)=e1 then proc('a9999~1~'), '<td align=center bgcolor=#ffffff>' v959^o '</td>' fi/) if a(v9999) then '<td align=center bgcolor=#ffffff> </td>' fi ) fi