This is an old revision of the document!
ATENCION: estas son unas notas informales tomadas en 2005, mientras aprendía a usar Malete. Aún falta transcribir una parte de ellas. Esto no está organizado como un HOWTO paso a paso para el recién llegado; es más bien una especie de bitácora donde registré los pasos que fui dando. Para generar un documento más útil habrá que reorganizarlo. —Fernando
Vamos a intentar describir paso a paso un primer encuentro con Malete.
Malete puede descargarse desde http://malete.org/Doc/DownLoad, y la versión más reciente (en octubre de 2005) es la 1.0.3. Obtenemos el archivo malete.1.0.3.tgz
, y lo descomprimimos:
tar xzf malete.1.0.3.tgz
Vemos que se crean cuatro directorios:
doc
: aquí se encuentra la documentación; se trata 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 de Malete.
mlt
: aquí se encuentra el código fuente de Malete (archivos *.c
y *.h
), y el Makefile.
php
: aquí tenemos un par de demos y una biblioteca PHP que implementa funciones de lectura, escritura, consulta (query) e indización.
test
: aquí hay 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 una de las bases de datos dentro de test
está compuesta por tres archivos:
*.m0d
: malete options (record 0) file (collation y qué más?)*.mqt
: malete query terms*.mrd
: malete record dataEs importante notar que se trata de archivos de texto.
En el directorio principal está el archivo README
, que contiene unas indicaciones 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
Se trata solamente de una sugerencia inicial, como para comenzar a familiarizarnos con el protocolo de comunicación usado por Malete. Seguiremos esas indicaciones, y veremos 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
…?
Una vez concluida la compilación, el mensaje final es
listening on '*:2042'
(El servidor Malete utiliza por defecto el puerto 2042.)
Como resultado de la ejecución de make, se han creado varios archivos. Hay un nuevo directorio bin
, y de allí nos interesa especialmente el archivo malete
, que es el ejecutable (279.052 bytes en la versión 1.0.3). Dentro del directorio test
han aparecido estos 5 archivos:
Esta nueva base de datos, 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 de cds.m0d
y cds.mrd
, respectivamente, mientras que
test.mqd
se genera a partir de cds.mqt
test.mrx
se genera a partir de test.mrd
test.mqx
se genera a partir de test.mqd
y test.m0d
Tenemos pues nuestro servidor Malete escuchando en el puerto 2042. Vamos a ver qué sucede al establecer una conexión vía telnet. Para esto abrimos otra consola, y en ella:
$ 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
Malete nos responde de esta manera:
# 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]
La línea inicial de la respuesta,
# 151 0 0
indica …
A continuación aparece el primer registro de la base test
:
-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.
Luego el segundo registro:
-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.
y así sucesivamente, hasta llegar al número 20.
Al usar una consulta vacía, estamos recuperando todos los registros de la base (véase Protocol).
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]
Pasemos ahora a una consulta no vacía: “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 encontrados (record-id es equivalente al MFN de cds/isis).
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 (lo que aparece a la derecha del signo ?; en este caso, el filtro es 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.//
El uso del signo '?' hace que el servidor envíe los registros.
Siguiente consulta, de acuerdo con la sugerencia del archivo 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
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).
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]
donde query es una expresión en el lenguaje de consulta de Malete (véase Query).
La fila de números que encabeza la respuesta a un mensaje Q tiene el significado siguiente (véase Protocol):