User Tools

Site Tools


notas_sobre_malete

Differences

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

Link to this comparison view

notas_sobre_malete [15/05/2009 00:00] (current)
Line 1: Line 1:
 +===== Notas sobre Malete, mayo 2005 =====
  
 +Malete en Linux
 +
 +Obtenemos el archivo malete.1.0.2.tgz en el sitio http://​malete.org.
 +
 +Extraemos su contenido:
 +
 +    tar xzvf malete.1.0.2.tgz
 +
 +    LGPL.txt
 +    Makefile
 +    Mingw.mk
 +    README
 +    Version
 +    doc/.index
 +    doc/CDS.txt
 +    doc/​CharSet.txt
 +    doc/​CmdLine.txt
 +    doc/​Converting.txt
 +    doc/​Diff09.txt
 +    doc/​DownLoad.txt
 +    doc/​FileFormats.txt
 +    doc/IIF.txt
 +    doc/MOM.txt
 +    doc/​MetaData.txt
 +    doc/​MultiProcess.txt
 +    doc/​OverView.txt
 +    doc/​Protocol.txt
 +    doc/​Query.txt
 +    doc/​RecStruct.txt
 +    doc/​Selene.txt
 +    doc/​Status.txt
 +    doc/​TagUse.txt
 +    doc/Tcl.txt
 +    mlt/​Makefile
 +    mlt/cds.c
 +    mlt/cdx.c
 +    mlt/core.h
 +    mlt/db.c
 +    mlt/dbo.c
 +    mlt/hash.c
 +    mlt/iif.c
 +    mlt/​malete.c
 +    mlt/pw.c
 +    mlt/pw.h
 +    mlt/qdx.c
 +    mlt/rdx.c
 +    mlt/run
 +    mlt/srv.c
 +    mlt/sys.c
 +    mlt/tool.h
 +    mlt/uti.c
 +    php/​Isis.php
 +    php/​Isis/​Db.php
 +    php/​Isis/​Http.php
 +    php/​Isis/​Rec.php
 +    php/​Isis/​Server.php
 +    php/​demo.php
 +    php/​killidx.php
 +    php/​killqry.php
 +    php/​unicode.php
 +    test/​cds.m0d
 +    test/​cds.mqt
 +    test/​cds.mrd
 +    test/​unicode.m0d
 +    test/​unicode.mqt
 +    test/​unicode.mrd
 +
 +
 +Vemos que se crean cuatro directorios:​ doc, mlt, php y test.
 +
 +En '​doc'​ encontramos la documentación,​ en forma de archivos de texto con una
 +sintaxis al estilo wiki, a partir de los cuales se genera la versión HTML que está
 +en el sitio web (malete.org).
 +
 +En '​mlt'​ se encuentra el código fuente de Malete (archivos *.c y *.h), y el Makefile.
 +Veamos la descripción de cada archivo:
 +
 +    cds.c malete CDS/ISIS conversion
 +    cdx.c charset collation
 +    core.h full interface of the Malete core
 +    db.c implementation of general db access functions ​ ***?
 +    dbo.c the db object
 +    hash.c the hashtable
 +    iif.c malete IIF(ISO2709/​Z39.2)/​MARC conversion
 +    Makefile ->​ Ver en particular la sección "demos and tests"
 +    malete.c malete main
 +    pw.c Malete patchwork functions
 +    pw.h interface of the Malete patchwork
 +    qdx.c the btree
 +    rdx.c implementation of general db access functions ​ ***?
 +    run run demo server on test/cds (ver código más abajo)
 +    srv.c malete server
 +    sys.c I/O support for the openisis library
 +    tool.h interface of the Malete tools
 +    uti.c utilities
 +
 +Este es el contenido del archivo '​run':​
 +
 +    #!/bin/sh
 +    #
 +    #       run demo server on test/cds
 +    #
 +    #       $Id: run,v 1.1 2005/01/24 18:04:00 kripke Exp $
 +    ​
 +    if [ ! -f ../​test/​cds.mqd ]; then
 +            echo "​loading cds index ..."
 +            ../​bin/​malete qload -vi cds -f../test/ -wa <​../​test/​cds.mqt
 +    fi
 +    ​
 +    if [ x != "​x$TEST"​ ]; then
 +    ../​bin/​malete server -vd cds -f../test/ -w <<EOF
 +    cds.Q   ​${*:​-PLANT WATER}
 +    EOF
 +    fi
 +    ​
 +    ../​bin/​malete server -vd -S cds -f../test/ -w
 +
 +
 +En '​php'​ se encuentran un par de demos y una biblioteca PHP que implementa funciones
 +de lectura, escritura, consulta (query) e indización. Tenemos allí:
 +
 +    demo.php demo for the Isis package
 +    unicode.php unicode demo for the Isis package
 +
 +Dentro del subdirectorio '​Isis'​ están los 4 archivos que constituyen la biblioteca:
 +
 +    Db.php class Isis_Db (This class represents a "​database"​)
 +    Http.php class Isis_Http (This class represents the connection to a HTTP server)
 +    Rec.php class Isis_Rec (An ISIS(/​IIF/​Z39.2/​ISO2709)-style record in pure PHP)
 +    Server.php class Isis_Server (This class represents the connection to an Isis server)
 +
 +
 +Finalmente, tenemos el directorio '​test',​ donde encontramos dos bases de datos: cds
 +(la tradicional base distribuida por Unesco), y unicode (una pequeña base
 +para probar el uso de Unicode en Malete). Cada base de datos está compuesta por
 +tres archivos:
 +
 +    *.m0d malete options (record 0) file (collation y qué más?)
 +    *.mqt malete query terms
 +    *.mrd malete record data
 +
 +Es importante notar que se trata de archivos de *texto*.
 +
 +En el directorio principal está el archivo README, que contiene unas instrucciones
 +para que podamos comenzar a interactuar con Malete:
 +
 +    make -C mlt server
 +    ​
 +    then check out php/​demo.php
 +    or telnet localhost 2042
 +    and type (be careful to use a tab after the Q with queries!):
 +    test.Q
 +    ​
 +    test.Q
 +    ​
 +    test.Q water
 +    ​
 +    test.Q plant water?
 +    ​
 +    test.Q plant + dev$
 +    ​
 +    test.Q
 +
 +
 +Sigamos entonces esas instrucciones,​ y veamos qué sucede. Comenzamos con el
 +comando
 +
 +    make -C mlt server
 +
 +Esto invoca al programa make, y le pasa dos argumentos: la opción '-C mlt' le indica
 +que debe leer el Makefile del directorio mlt, y el target '​server'​ ...?
 +
 +* Qué vemos en la pantalla: ver archivos log-error y log-out
 +
 +El mensaje final es: listening on '​*:​2042'​
 +
 +* Qué nuevos archivos se han creado
 +
 +Nuevo directorio '​bin':​
 +    cds.o  db.o   ​hash.o ​ malete ​   pw.o   ​rdx.o ​ sys.o
 +    cdx.o  dbo.o  iif.o   ​malete.o ​ qdx.o  srv.o  uti.o
 +
 +bin/malete es el ejecutable (279052 bytes)
 +
 +Dentro de mlt, 1 archivo:
 +    spanish.mcx compiled collation file
 +
 +(por qué spanish? por qué dentro de mlt?)
 +
 +Dentro de test, 5 archivos:
 +    test.m0d
 +    test.mrd
 +    test.mrx
 +    test.mqd
 +    test.mqx
 +
 +Esta nueva base, llamada test, es una copia de la base cds que vino con malete. Más
 +precisamente,​ los archivos test.m0d y test.mrd son copia, respectivamente,​ de
 +cds.m0d y cds.mrd, mientras que
 +
 +    test.mqd se genera a partir de cds.mqt (malete qload)
 +    test.mrx se genera a partir de test.mrd (malete dbinfo) ​ ???
 +    test.mqx se genera a partir de test.mqd y test.m0d (malete dbinfo) ​ ???
 +
 +
 +Vamos a ver qué sucede al establecer una conexión vía telnet. Para esto abrimos
 +otra consola:
 +
 +    [fernando@localhost openisis]$ telnet localhost 2042
 +    Trying 127.0.0.1...
 +    Connected to localhost.
 +    Escape character is '​^]'​.
 +
 +El servidor Malete está listo para escuchar nuestros mensajes. Empecemos con "​test.Q",​
 +seguido por un doble enter:
 +
 +    test.Q
 +    ​
 +    #       ​151 ​    ​0 ​      0
 +    -9      1@0
 +    44      Methodology of plant eco-physiology:​ proceedings of the Montpellier Symposium
 +    50      Incl. bibl.
 +    69      Paper on: <plant physiology><​plant transpiration><​measurement and instruments>​
 +    24      Techniques for the measurement of transpiration of individual plants
 +    26              aParis ​ bUnesco c-1965
 +    30              ap. 211-224 ​    ​billus.
 +    70      Magalhaes, A.C.
 +    70      Franco, C.M.
 +    -8      2@336
 +    44      Methodology of plant eco-physiology:​ proceedings of the Montpellier Symposium
 +    50      Incl. bibl.
 +    69      Paper on: <plant evapotranspiration>​
 +    24      <The> Controlled climate in the plant chamber and its influence upon assimilation and transpiration
 +    26              c1965
 +    30              ap. 225-232 ​    ​billus.
 +    70      Bosian, G.
 +
 +[esos son los primeros 2 registros; siguen 18 más]
 +
 +Cuando repetimos el mensaje "​test.Q"​ (seguido, como en todos los casos, por doble
 +enter), obtenemos los siguientes 20 registros de la base test:
 +
 +    test.Q
 +    ​
 +    #       ​131 ​    ​0 ​      0
 +    -8      21@6320
 +    24      <The> Determination of the evaporation from the plant cover and the surface of the soil by relating lysimeter and soil moisture measurements to potential evaporation
 +    26              c1965
 +    30              ap. 461-465 ​    ​billus.
 +    44      Methodology of plant eco-physiology:​ proceedings of the Montpellier Symposium
 +    50      Incl. bibl.
 +    69      Paper on: <​evaporation><​soil moisture><​plant physiology><​plant ecology><​measurement and instruments>​
 +    70      Klausing, O.
 +    -9      22@6741
 +    44      Methodology of plant eco-physiology:​ proceedings of the Montpellier Symposium
 +    50      Incl. bibl.
 +    69      Paper on: <water balance><​water yield><​forests><​plant ecology><​rain><​run-off><​Israel>​
 +    24      Water yields of forest, Maquis and grass covers in semi-arid regions: a literature review
 +    26              c1965
 +    30              ap. 467-477 ​    ​billus.
 +    70      Shachori, A.Y.
 +    70      Michaeli, A.
 +
 +[siguen hasta el registro 40]
 +
 +Al usar una consulta vacía, estamos recuperando todos los registros de la base (véase Protocol.txt)
 +
 +
 +Probemos ahora con "​test.Q water"​ (atención: luego de la Q hay un TAB):
 +
 +    test.Q water
 +    ​
 +    #       ​14 ​     1       0
 +    0       4
 +    0       5
 +    0       10
 +    0       11
 +    0       12
 +    0       13
 +    0       14
 +    0       16
 +    0       22
 +    0       24
 +    0       25
 +    0       43
 +    0       52
 +    0       57
 +
 +Lo que hemos hecho es una búsqueda por el término "​water",​ y lo que vemos es una
 +lista de los 14 record-id (los MFN de cds-isis) correspondientes.
 +
 +Pasemos a la siguiente consulta:
 +
 +    test.Q plant water?
 +    ​
 +    #       ​2 ​      ​2 ​      0
 +    -9      5@1372
 +    44      Methodology of plant eco-physiology:​ proceedings of the Montpellier Symposium
 +    50      Incl. bibl.
 +    69      <plant physiology><​soil moisture><​plant transpiration><​evapotranspiration><​measurement and instruments>​
 +    24      Anti-transpirants as a research tool for the study of the effects of water stress on plant behaviour
 +    26              c1965
 +    30              ap. 269-274 ​    ​billus.
 +    70      Gale, J.
 +    70      Poljakoff-Mayber,​ A.
 +    -8      25@7420
 +    24      <The> Heat, water and carbon dioxide budget of plant cover: methods and measurements
 +    26              c1965
 +    30              ap. 495-512 ​    ​billus.
 +    44      Methodology of plant eco-physiology:​ proceedings of the Montpellier Symposium
 +    50      Incl. bibl.
 +    69      Paper on: <energy balance><​water balance><​carbon dioxide><​plant physiology><​heat transfer><​measurement and instruments>​
 +    70      Baumgartner,​ Albert
 +
 +
 +Hemos realizado la consulta "plant water?",​ y hemos recuperado los registros 5 y 25.
 +Esta consulta consta de dos partes: una búsqueda (plant water) y un filtro (en este
 +caso, vacío).
 +
 +Obtuvimos los registros, y no solamente los identificadores. Véase Protocol.txt:​
 +
 + If no filter is specified (i.e. no '?'​),​ only record ids are returned.
 +
 +
 +
 +Siguiente consulta, de acuerdo con la sugerencia del README:
 +
 +    test.Q ​ plant + dev$
 +    ​
 +    #       ​26 ​     3       0
 +    0       2
 +    0       3
 +    0       5
 +    0       6
 +    0       8
 +    0       21
 +    0       25
 +    0       27
 +    0       86
 +    0       87
 +    0       100
 +    0       111
 +    0       114
 +    0       118
 +    0       124
 +    0       127
 +    0       128
 +    0       130
 +    0       131
 +    0       132
 +
 +Como hay 26 registros y sólo recibimos los identificadores de los primeros 20,
 +enviamos un nuevo mensaje "​test.Q":​
 +
 +    test.Q
 +    ​
 +    #       ​6 ​      ​3 ​      0
 +    0       133
 +    0       134
 +    0       141
 +    0       147
 +    0       149
 +    0       150
 +
 +
 +A todo esto, ¿qué ha estado sucediendo en la consola inicial, aquella donde habíamos
 +puesto en marcha el servidor Malete? Luego del mensaje listening on '​*:​2042',​ apareció
 +todo esto:
 +
 +    listening on '​*:​2042'​
 +    got 8 bytes
 +    got tag -1
 +    detected crlf
 +    got 2 bytes
 +    oStruct '​test.Q'​
 +    facMain '​test'​
 +    oDBo '​Q'​
 +    20 of 0 results off 0
 +    got 8 bytes
 +    got tag -1
 +    detected crlf
 +    got 2 bytes
 +    oStruct '​test.Q'​
 +    oDBo '​Q'​
 +    20 of 0 results off 20
 +    got 14 bytes
 +    got tag -1
 +    detected crlf
 +    got 2 bytes
 +    oStruct '​test.Q water'
 +    oDBo 'Q water'
 +    parsing '​water'​ as search
 +    pos 0 lev 1: w
 +    c0 = "​water"/​0
 +    successfully parsed 5 bytes cost 1
 +    creating 17
 +    keypos 0027
 +    keypos 8010
 +    scb '​2f162c1b2a'​ 15
 +    got 15
 +    20 of 14 results off 0
 +    got 21 bytes
 +    got tag -1
 +    detected crlf
 +    got 2 bytes
 +    oStruct '​test.Q plant water?'​
 +    oDBo 'Q plant water?'​
 +    parsing 'plant water?'​ as search
 +    pos 0 lev 1: p
 +    pos 6 lev 1: w
 +    * on lev 1
 +    pos 6 lev 2: w
 +    pos 11 lev 2: ?
 +    c0 *
 +    c0 = "​plant"/​0
 +    m0 = "​water"/​0
 +    successfully parsed 11 bytes cost 1
 +    creating 4
 +    creating 17
 +    table 2 check 97 108-108 off 1308 35
 +    keypos 001b
 +    keypos 8006
 +    scb '​282216252c'​ 8
 +    got 8
 +    marking 17 + on 4
 +    keypos 0027
 +    keypos 8010
 +    scb '​2f162c1b2a'​ 15
 +    matching res len 15 against flt len 8 cnd 4 set 1 mrk 1 dim 0
 +    marking
 +    marking
 +    marked 2
 +    reducing a->len 8
 +    1st 0 were good
 +    ... to a->len 2
 +    parsing ''​ as filter
 +    c0 null
 +    successfully parsed 0 bytes cost 0
 +    20 of 2 results off 0
 +    got 21 bytes
 +    got tag -1
 +    detected crlf
 +    got 2 bytes
 +    oStruct '​test.Q plant + dev$'
 +    oDBo 'Q plant + dev$'
 +    parsing 'plant + dev$' as search
 +    pos 0 lev 1: p
 +    pos 6 lev 1: +
 +    + on lev 1
 +    pos 8 lev 2: d
 +    c0 +
 +    c0 = "​plant"/​0
 +    c0 % "​dev"/​0
 +    successfully parsed 12 bytes cost 1
 +    creating 2
 +    creating 17
 +    table 2 check 97 108-108 off 1308 35
 +    keypos 001b
 +    keypos 8006
 +    scb '​282216252c'​ 8
 +    got 8
 +    creating 18
 +    keypos 0009
 +    keypos 000a
 +    scb '​1a1b2e1b2227281b1a0218272d252c2a1f1b2b'​ 1
 +    scb '​1a1b2e1b2227281f251d'​ 4
 +    matching res len 4 against flt len 1 cnd 4 set 0 mrk 0 dim 0
 +    merging 1+4 dim 0
 +    copying 3 bs to 3 slots
 +    merged 1+4 brk 0 untouched 4 b 3
 +    scb '​1a1b2e1b2227281f251d0218272d252c2a1f1b2b'​ 8
 +    matching res len 8 against flt len 5 cnd 4 set 0 mrk 0 dim 0
 +    merging 5+5 dim 0
 +    copying 5 bs to 5 slots
 +    merged 5+5 brk 0 untouched 6 b 5
 +    scb '​1a1b2e1b222728241b252c'​ 9
 +    matching res len 9 against flt len 10 cnd 4 set 0 mrk 0 dim 0
 +    merging 10+6 dim 0
 +    merged 10+6 brk 0 untouched 1 b 0
 +    scb '​1a1b2e1b222728241b252c0228221625251f251d'​ 2
 +    matching res len 2 against flt len 16 cnd 4 set 0 mrk 0 dim 0
 +    merging 16+2 dim 0
 +    merged 16+2 brk 0 untouched 5 b 0
 +    scb '​1a1b2e1b222728241b252c022b2c2a162c1b1d1f1b2b'​ 2
 +    matching res len 2 against flt len 18 cnd 4 set 0 mrk 0 dim 0
 +    merging 18+1 dim 0
 +    copying 1 bs to 1 slots
 +    merged 18+1 brk 0 untouched 2 b 1
 +    scb '​1a1b2e1b222728281b241b252c'​ 1
 +    matching res len 1 against flt len 19 cnd 4 set 0 mrk 0 dim 0
 +    merging 19+1 dim 0
 +    merged 19+1 brk 0 untouched 7 b 0
 +    loop ends on key '​1a1b2f'​(3) -1 3
 +    got 20
 +    matching res len 20 against flt len 8 cnd 4 set 0 mrk 0 dim 0
 +    merging 8+20 dim 0
 +    merged 8+20 brk 0 untouched 8 b 0
 +    got 28
 +    20 of 26 results off 0
 +    got 8 bytes
 +    got tag -1
 +    detected crlf
 +    got 2 bytes
 +    oStruct '​test.Q'​
 +    oDBo '​Q'​
 +    20 of 26 results off 20
 +
 +
 +OK. So what?
 +
 +
 +Si reiteramos el mensaje "​test.Q",​ ahora que ya hemos agotado los resultados para la
 +última consulta, obtenemos:
 +
 +    test.Q
 +    ​
 +    #       ​0 ​      ​3 ​      0
 +
 +
 +
 +Repetimos la consulta "plant water",​ esta vez sin el signo de interrogación final:
 +
 +    test.Q ​ plant water
 +    ​
 +    #       ​2 ​      ​4 ​      0
 +    0       5
 +    0       25
 +
 +(en lugar de obtener los 2 registros, como antes, ahora sólo vemos la lista de
 +identificadores).
 +
 +
 +
 +Hagamos entonces un repaso de lo visto hasta aquí.
 +
 +Hemos estado usando un único tipo de mensaje: Q (query message, mensaje de consulta).
 +La forma de este mensaje (para nuestra base test) es:
 +
 +    test.Q[*TAB*query]
 +    ​
 +    test.Q
 +    ​
 +    test.Q query
 +
 +query es una expresión en el lenguaje de consulta de Malete (ver Query.txt).
 +
 +La fila de números que encabeza la respuesta a un mensaje Q tiene el significado
 +siguiente (ver Protocol.txt):​
 +
 +  * número estimado de registros restantes, incluyendo los que acaban de ser leídos
 +  * número de la consulta, por el cual se la puede referenciar
 +  * truncation record id
 +
 +
 +
 +==== Pasemos ahora a la prueba con PHP. ====
 +
 +
 +Para esto, copiamos el directorio '​php'​ a /​var/​www/​html/​openisis/​ (/​var/​www/​html
 +es el DocumentRoot de nuestro servidor Apache). Nos aseguramos de que Apache está
 +funcionando,​ e ingresamos con un navegador a
 +
 +    http://​127.0.0.1/​openisis/​php/​demo.php
 +
 +(el servidor Malete ha seguido funcionando ininterrumpidamente).
 +
 +
 +La página que vemos consta de dos partes: la primera muestra el resultado de
 +diversas manipulaciones sobre registros "​virtuales"​ creados dentro del mismo
 +script php; la segunda (a partir de "​server"​) muestra la interacción con el
 +servidor Malete, usando los mensajes terms (T), query (Q), read (R), write (W) e
 +index (X) sobre registros de la base test.
 +
 +ATENCION: en Protocol.txt dice "The standard messages a database should recognize are",
 +y allí no se menciona '​terms'​!
 +
 +Luego de acceder a esa página, vemos que los archivos test.mrd y test.mqd han
 +sido modificados. El primero, a causa de las operaciones de escritura sobre el
 +registro 42; el segundo a causa de la operación de indización sobre el mismo
 +registro 42.
 +
 +ATENCION: para poder hacer esta comparación,​ deberíamos haber conservado una copia
 +de test.mrd en su estado inicial.
 +Si examinamos el contenido de test.mrd, notaremos que se han agregado dos registros
 +al final. El primero, comienza con el encabezado:
 +
 +    W 42@13953
 +
 +El segundo, es una copia del primero, pero sin el encabezado. Esto corresponde a lo
 +que vemos en la página como "​writing 42" y "​writing 42 as new record"​. Cuando se
 +crea un nuevo registro (con el mismo contenido del registro 42), el registro
 +creado recibe el identificador 152.
 +
 +PREGUNTA: ¿quién es el usuario con permiso de escritura sobre esos archivos? Por lo
 +que se ve, es el usuario que ha ejecutado el servidor Malete.
 +
 +
 +Volvemos por un momento a la consola donde tenemos nuestra sesión de telnet:
 +
 +    test.Q one .. author
 +    ​
 +    #       ​1 ​      ​8 ​     0
 +    0       152
 +
 +El número de consulta ha pasado a 8 -- los números 5, 6, 7 corresponden a las tres
 +consultas realizadas desde demo.php. (Según Protocol.txt,​ "These numbers are per
 +database"​.)
 +
 +
 +[No sé por dónde continuar el análisis de demo.php.]
 +
 +Algunas preguntas:
 +
 +  * cómo sabe el servidor malete que deseamos trabajar con la base test/test?
 +
 +La respuesta parece estar en Makefile:
 +
 +server: $(MALETE) testdb
 +    $(RUN) $(MALETE) server -vd -S test -f../test/
 +
 +  * entonces, ¿cómo hacemos para activar el servidor y poder acceder a más de una base?
 +
 +Respuesta: no lo sé.
 +
 +
 +  * por qué no anda "​test.Q #​n"​ ?
 +
 +
 +==== Cómo importar una base CDS/ISIS ====
 +
 +
 +Paso 1: copio los 8 archivos de la base biblio (mst, xrf, cnt, ifp, l01, l02, n01, n02)
 +en el directorio test.
 +
 +Paso 2: ejecuto malete con la opción cdsimp:
 +
 +    [fernando@localhost openisis]$ bin/malete cdsimp -No850 biblio -ftest/
 +    mrx too short
 +    rec 14 pos 109348 locked
 +    rec 16 pos 107120 locked
 +    rec 17 pos 103668 locked
 +    rec 18 pos 101952 locked
 +    rec 19 pos 104716 locked
 +    rec 21 pos 110112 locked
 +    rec 22 pos 113100 locked
 +    rec 23 pos 102766 locked
 +
 +Malete crea los cuatro archivos biblio.mrx, biblio.mrd, biblio.mqx, biblio.mqd.
 +
 +ATENCION: La opción -No850 se omite cuando la base original tiene la codificación
 +de MS-DOS.
 +
 +
 +Y ahora quiero poder consultar la base biblio mediante malete. ¿Qué hago?
 +
 +
 +----
 +
 +En el directorio mlt hay un archivo ejecutable, '​run'​.
 +
 +    [fernando@localhost openisis]$ cd mlt
 +    [fernando@localhost mlt]$ ./run 
 +    loading cds index ...
 +    using path ../test/cds
 +    reading 435 bytes options from '​../​test/​cds.m0d'​
 +    [...líneas omitidas...]
 +    listening on '​*:​2042'​
 +
 +
 +La base disponible ahora es cds. Probamos el mensaje T (terms):
 +
 +    cds.T ar as
 +    ​
 +    #       0
 +    0       ​4 ​      arab countries
 +    0       ​3 ​      ​arabes
 +    0       ​2 ​      ​architecture
 +    0       ​4 ​      area
 +    0       ​3 ​      areas
 +    0       ​1 ​      arid
 +    0       ​1 ​      ​armaments
 +    0       ​1 ​      arms control
 +    0       ​1 ​      arms sales
 +    0       ​1 ​      art books
 +    0       ​1 ​      art history
 +    0       ​1 ​      ​artistic creation
 +    0       ​1 ​      arts
 +
 +
 +Restringimos los términos al tag 24:
 +
 +    cds.T ar as 24
 +    ​
 +    #       0
 +    0       ​3 ​      ​arabes
 +    0       ​3 ​      area
 +    0       ​3 ​      areas
 +    0       ​1 ​      arid
 +    0       ​1 ​      ​armaments
 +
 +
 +ATENCION: esto parece ser un error:
 +
 +    cds.T area areas
 +    ​
 +    #       0
 +
 +Es decir, no devuelve ningún término, pero de acuerdo con Protocol.txt,​
 +'​T*TAB*from*TAB*to'​
 +Selects terms greater or equal the first parameter and less than the second.
 +(BTW, debiera decir "​greater or equal than"​.)
 +
 +El término '​area'​ es mayor o igual que '​area'​ y menor que '​areas',​ por lo tanto
 +debiera aparecer como resultado.
 +
 +La misma prueba, con otros pares de términos consecutivos,​ da el resultado correcto.
 +Otros fracasos: west/​western,​ model/​models,​ press/​pressure
 +
 +----
 +
 +Ubicar otro archivo donde tenía ya algunas notas sobre Malete 1.0.2 (mail?)
 +
 +----
 +
 +Es posible evitar la sesión de Telnet, usando por ejemplo:
 +
 +    bin/malete server cds -ftest/
 +    ​
 +    bin/malete server biblio -ftest/
 +
 +
 +Este comando permite "​activar"​ más de una base:
 +
 +    bin/malete server biblio -ftest/ cds -ftest/ test -ftest/
 +
 +
 +PREGUNTA: ¿por qué los terms en biblio están en mayúsculas,​ y los de cds y test en
 +minúsculas?​ Encima... T y Q son sensibles a esta diferencia! Curiosamente,​ los
 +términos en cds.mqt (que es de donde son tomados para crear test.mqd) están en
 +mayúsculas.
 +
 +
 +
 +==== Prueba con el script unicode.php ====
 +
 +
 +Ejecutamos el servidor:
 +
 +    bin/malete server -S unicode -ftest/
 +
 +Genera los archivos unicode.mrx,​ unicode.mqd,​ unicode.mqx,​ unicode-demo.mcx.
 +
 +En el archivo /​var/​www/​html/​openisis/​php/​unicode.php tenemos que hacer esta
 +modificación (en forms y links):
 +
 +    /​php/​unicode ​ => unicode.php
 +
 +Este script permite:
 +
 +a) ingresar datos en la base unicode, usando el formulario superior
 +   ​(ciudad,​ país, río).
 +
 +b) realizar búsquedas en la base, usando el formulario inferior, y ver un listado
 +   de todos los registros y de todos los términos del índice.
 +
 +Inicialmente,​ la lista de búsquedas está vacía (lo cual es natural), pero también
 +está vacía la lista de términos... lo cual es extraño, pues el diccionario no está
 +vacío!
 +
 +Comenzamos con una búsqueda: wien -> no produce nada
 +
 +Bien, entonces probemos generando (cargando) el unicode.mqd "a mano":
 +
 +bin/malete qload -vi unicode -ftest/ <​test/​unicode.mqt
 +
 +OK, con eso se resuelve el problema. Entramos a
 +
 +    http://​127.0.0.1/​openisis/​php/​unicode.php?​bitte=terms
 +
 +y nos muestra 40 términos del diccionario. Y cada término es un link que funciona!
 +No entiendo por qué "​Zürich"​ aparece en el índice como "​zuerich",​ "​Köln"​ como
 +"​koeln",​ "​Österreich"​ como "​oesterreich"​.
 +
 +Si buscamos "​zürich"​ o "​zuerich"​ recuperamos el registro 4, correspondiente a Zürich.
 +
 +Si buscamos "​Lódz",​ recupera el registro 9.
 +
 +Si accedemos a
 +
 +    http://​127.0.0.1/​openisis/​php/​unicode.php?​bitte=suchen
 +
 +vemos un listado de los registros presentes en la base (inicialmente 14).
 +
 +Ahora ingresamos un nuevo registro en la base de datos:
 +
 +    Ciudad Juárez / México
 +
 +Así hemos creado el registro 15. Pero ya encontramos un nuevo problema: en lugar de
 +los dos términos (juárez, méxico) que esperábamos encontrar en el diccionario,​
 +aparecen estos cuatro: ju, rez, m, xico.
 +
 +Sin embargo, si creamos un registro con la palabra "​Córdoba",​ el término "​cordoba"​
 +aparece en el diccionario.
 +
 +Esto se explica si estudiamos el archivo unicode.m0d,​ que contiene una línea
 +
 +    4 M o ó
 +
 +(esto es, la "​ó"​ es mapeada a la "​o"​),​ pero nada dice acerca de otras vocales como
 +"​á"​ o "​é"​.
 +
 +Si modificamos el archivo .m0d, debemos volver a cargar el índice (qdump + qload).
 +
 +
 +
 +==== Importación de registros ISO/MARC ====
 +
 +
 +Tomamos un registro MARC (mr.mrc), al que renombramos como mr.iif, y lo ubicamos
 +en el directorio test. Ejecutamos:
 +
 +    bin/malete iifimp mr -ftest/
 +
 +y vemos que se generan los 4 archivos mr.m[rq][dx]. Examinamos mr.mrd y encontramos
 +allí el registro MARC tal como esperábamos,​ y además tenemos un primer campo donde
 +se almacenan los 8 bytes "​importantes"​ del leader:
 +
 +Leader original: 02688cas ​ 2200589 a 4500
 +
 +Leader en mr.mrd:
 +
 +    W 1 cas ​  ​a ​
 +
 +(esto es: c a s blank blank blank a blank, que corresponde a las posiciones 05, 06,
 +07, 08, 09, 17, 18, 19)
 +
 +No es necesario que el archivo marc tenga la extensión .iif:
 +
 +    bin/malete iifimp -Ftest/​mr.mrc mr -ftest/
 +
 +Debe notarse que esto produce una importación (o append) sobre la base mr.
 +
 +Probamos ahora con un archivo que contiene 50 registros MARC:
 +
 +    bin/malete iifimp -Ftest/​bahia-1-50.mrc bahia -ftest/
 +
 +ATENCION: en estas pruebas estamos usando registros MARC de LC (codificación:​ Latin1).
 +Aun así, ya detectamos un problema:
 +
 +    255   aScale 1:​500,​000 c(W 64°30Ž--W 55°30Ž/S 32°00Ž--S 42°00Ž).
 +
 +(Habrá que verificar el registro original.)
 +
 +Probamos ahora con algunos (855) registros de OCLC:
 +
 +    bin/malete iifimp -Ftest/​oclc.mrc oclc -ftest/
 +
 +Y allí aparece el problema de la codificación:​ "​Problemas de geometrâia analâitica"​
 +
 +
 +
 +==== Pruebas con bases que no existen ====
 +
 +El envío de un mensaje a una base que no existe provoca que la base sea creada.
 +Pero si desde otra consola borramos la base, entonces al siguiente mensaje que
 +enviemos la base no será recreada.
 +
 +Otro ejemplo: entro a demo.php, que intenta acceder a la base test; como la base
 +no existe, la crea; pero luego corrijo la situación borrando los archivos creados
 +y reemplazándolos por links simbólicos a la base test. Vuelvo a entrar a demo.php,
 +pero sigue viendo la base vacía que creó un rato antes! Recién luego de reiniciar el
 +servidor malete se corrige la situación.
 +
 +malete dbinfo xxx -> crea la base xxx
 +
 +
 +
 +==== Plan para un tutorial básico de Malete ====
 +
 +  * creo que conviene comenzar por los archivos que componen una base
 +
 +  * aclarar que vamos a "​dialogar"​ a bajo nivel con el servidor malete, para aprender cómo funciona el protocolo. Hacer una  analogía con HTTP (telnet host 80). En la práctica, ese diálogo estará a cargo de las aplicaciones que usemos/​desarrollemos (e.g. Isis.php).
 +
 +  * una sesión sencilla con la base test: mensajes R, Q, T
 +
 +  * estudio del mensaje R
 +
 +  * estudio del mensaje T
 +
 +  * estudio del mensaje Q. Sintaxis de las consultas
 +
 +  * estudio del mensaje W
 +
 +  * estudio del mensaje X
 +
 +  * el archivo .mrd. El concepto de screenshot
 +
 +  * el archivo .m0d. Metadata. Collation
 +
 +  * otras opciones aparte del server:
 +    * cdsimp
 +    * cdsexp
 +    * iifimp - importación de MARC, importación de ISO (isis), leader
 +    * iifexp
 +    * dbinfo
 +    * qdump
 +    * qload
 +    * rdump
 +    * rload
 +
 +  * trabajo con bases múltiples; links simbólicos
 +
 +  * registros incrustados (embedded) ?
 +
 +  * permisos sobre las bases?
 +
 +  * principales diferencias con cds/isis: términos largos en el diccionario;​ reemplazo de isisuc.tab & isisac.tab por .m0d; FST?; archivos que componen una base de datos; lenguaje de búsquedas.
 +
 +  * capacidades,​ limitaciones (tamaños de registros, archivos, claves,...)
 +
 +  * recodificación (Cp850, iso-8859-1, utf-8,...)
 +
 +  * case sensitivity of terms/​queries...?​
 +
 +  * interacción via web: demo.php (crear demos más detallados)
 +
 +  * para investigar: cómo tener herramientas de línea de comando que proporcionen funcionalidad similar a la de los cisis?
 +    * i2id, id2i: no es necesaria (ver mrd)
 +    * mx: gizmo, iso, seq, dict
 +    * msrt
 +    * retag
 +    * etc
 +
 +  * compatibilidad entre plataformas:​ bases "​dos"​ y bases "​linux"​.
 +
 +
 +ATENCION ATENCION [WINDOWS] el servidor no escribe los cambios en la base en forma inmediata.
 +Hago una prueba de escritura desde PHP, y veo que el mrd no se modifica. A continuación bajo el servidor (CTRL+C), y entonces sí aparece el cambio. Pero si necesito trabajar con el archivo mrd (e.g. para hacer un backup), cómo logro que esté al día, sin bajar el servidor?
 +
 +
 +
 +
 +
 +==== Dudas y correcciones para Klaus ====
 +
 +Descripción de archivos en el directorio mlt:
 +  db.c implementation of general db access functions
 +  rdx.c implementation of general db access functions
 +
 +
 +¿Por qué los archivos .mcx se generan en el directorio desde el que se ejecuta el comando malete? Por ejemplo, al ejecutar
 +
 +  bin/malete server -S unicode -ftest/
 +
 +se genera unicode-demo.mcx en el directorio actual. ¿No debiera ir también al directorio test? En CharSet.txt dice que se graba en el directorio actual.
 +
 +
 +Archivo IIF.txt, hablando de generar IIF desde WinIsis: "Make sure, that every field starts with two indicator characters"​ debiera excluir a los campos 00x.
 +
 +Importación de registros MARC con la codificación MARC-8 (e.g., de OCLC).
 +
 +Alguna idea acerca de CQL (Common Query Language)?
 +
 +Alguna posibilidad de implementar una función de proximidad tipo agrep?
 +
 +
 +== CharSet.txt ==
 +
 +  * multibyte entitities => multibyte entities
 +  * completey => completely
 +  * are mapped to first one => are mapped to the first one
 +  * sideeffect => side effect ?
 +  * beginn => begin
 +  * c.f. => cf.
 +  * with it's own tertiary => with its own tertiary
 +  * it's secondary variant => its secondary variant
 +  * it's lowercase equivalent => its lowercase equivalent
 +  * Since Malete support full application controlled indexing => supports
 +  * is the name yo your database => is the name of your database
 +
 +== MetaData.txt ==
 +
 +  * as detailled => as detailed
 +
 +== demo.php ==
 +
 +  * </​br> ​ => <br>
 +
 +CH y LL en español (collation)
 +
 +Si modifico el archivo m0d (tabla de collation), ¿qué debo hacer para generar el mcx correspondiente?​ ¿Borrar el viejo y reiniciar el servidor?
 +
 +Si tengo el servidor andando con una base, y quiero acceder a una segunda base, ¿debo reiniciar el servidor? ¿Inicio otro en otro puerto?
 +
 +No comprendo la diferencia entre A (alias) y M (mapeo) en el archivo m0d, para el caso de las vocales acentuadas. En el ejemplo del CharSet.txt,​ "​A","​á"​ y "​Á"​ aparecen como alias de "​a",​ y "​E",​ "​é",​ "​É"​ aparecen como alias de "​e"​. Pero en unicode.m0d,​ la "​ó"​ aparece *mapeada* a la "​o"​.
 +
 +Klaus: en el menú lateral del sitio web faltan links a algunos documentos.
 +
 +
 +
 +==== Pruebas con Malete 1.0.2 - Domingo 15 de mayo 2005 ====
 +
 +
 +Para que el servidor funcione en Windows:
 +
 +    malete server -S
 +    malete server -S2042
 +
 +Demo:
 +    http://​localhost/​openisis/​php/​demo.php
 +
 +
 +Para poder hacer búsquedas, es necesario crear antes el diccionario
 +para la base test/cds:
 +
 +    ..\malete qload cds <cds.mqt
 +
 +Y en demo.php:
 +
 +    $db = new Isis_Db($fdt,​ '​test/​cds',​ new Isis_Server());​
 +
 +----
 +
 +El archivo Converting.txt dice:
 +
 +    Create a textual representation of the index by
 +    $
 +    malete qdump cds 2>​cds.mqt
 +    $
 +
 +El comando debiera ser: malete qdump cds >cds.mqt
 +
 +----
 +
 +  * Importación de una base tradicional:​
 +
 +    >malete cdsimp biblio
 +
 +  * Info sobre la base:
 +
 +    >malete dbinfo biblio
 +    db biblio path biblio has 205 records
 +    mrx type 0x01: 4 pos + 3 len + 1 fields = 8 bytes
 +    mqd type 0x01: blocksize 1024, 8 byte pointer values, 247 byte uncompressed keys
 +    mqd pointers 0x8b: 3 record id + 2 tag + 3 pos bytes tag first
 +
 +  * Genera versión txt de la base:
 +
 +    >malete rdump biblio > biblio.txt
 +
 +  * Genera versión txt del diccionario:​
 +
 +    >malete qdump biblio >​biblio.mqt
 +
 +  * Importación de un archivo .iso
 +
 +    >malete iifimp test1    (busca un archivo test1.iif)
 +
 +ATENCION: los subcampos aparecen delimitados con '​^',​ y no con TAB.
 +
 +----
 +
 +Probamos detalladamente con G:​\httpd\bases\cds,​ para poder reportar problemas.
 +
 +    malete cdsimp g:​\httpd\bases\cds\cds
 +Genera error:
 +    could not truncate 0: La operaci¾n solicitada no se puede realizar en un archivo
 +    con una secci¾n asignada a usuario abierta.
 + 
 +Crea 4 archivos: cds.m[rq][dx]
 +cds.mrd es el único en "​formato texto"​.
 +En cds.mrd se observan estos cambios:
 +  * delimitador de subcampos: ^ -> TAB
 +  * codificación:​ Cp850 -> Latin 1
 +Sólo aparecen los campos, sin ningún metadato.
 +ATENCION: cds.mrd contiene el texto "​W 24"​ antes del registro 24, y solamente allí sucede ese fenómeno.
 +
 +¿Es necesario que exista un archivo invertido para la base de origen?
 +
 +
 +Versión txt del diccionario:​
 +    G:​\tmp\malete>​malete qdump cds >cds.mqt
 +    mrx older than data     <​--- ERROR?
 +
 +Genera cds.mqt, y escribe cds.mrx
 +
 +
 +Dump del archivo maestro:
 +    G:​\tmp\malete>​malete rdump cds >​cds.dump
 +
 +cds.dump comienza con "​W 1@0"​. Sigue con:
 +    "​W 2@336"​
 +    "​W 3@624"​
 +    ...
 +    "​W 151@57504"​
 +Fuera de eso, es igual a cds.mrd.
 +Delimitador de subcampos: TAB
 +
 +
 +Exportación IIF (ISO):
 +    G:​\tmp\malete>​malete iifexp cds
 +
 +Genera cds.iif, un archivo iso2709 (sin saltos de línea)
 +
 +----
 +
 +cds.m0d (collation) para español, está desactualizado (ch, ll)
 +
 +From CharSet.txt:​
 +"​Creating a collation definition from existing ISISAC.TAB and ISISUC.TAB
 +is a straightforward exercise left to the reader."​
 +
 +
 +
 +{{tag>​malete}}
notas_sobre_malete.txt · Last modified: 15/05/2009 00:00 (external edit)