MiniTutorial TOLOG

Introducción a TOLOG

Tolog es un lenguaje para hacer consultas sobre Topics Maps, de la misma forma que SQL hace consultas sobre una base de datos. Para realizar estas consultas el usuario realiza una petición sobre un Topic Map y Tolog devuelve un conjunto de resultados que hacen verdadera la petición.

La información usada por Tolog consiste en predicados, que son relaciones entre conjuntos de valores. Esto es, como una tabla con todos los conjuntos de valores que hacen cierto el predicado. Y las consultas son hechas a las tablas devolviendo todos los valores que coinciden.

Sintaxis de TOLOG

Un predicado de Tolog es "instance-of" que usado para consultar las relaciones del topic "instance-topic".

Ejemplos de TOLOG(Todos los ejemplos serán con Opera.tlm):

Recupera todos los valores Topic y tipo de Topic de un supuesto Topic-Map:

   instance-of($TOPIC, $TYPE)?

Tolog recuperaría algo como lo siguiente:

    RAI                 Organizacion
    RAI                 Compañía de Televisión
    Teatro-nuovo   Theatre
    ...

Si quisiéramos que Tolog no recuperara todos los topics y solo los que fuesen del tipo "Theatre", sería:

    instance-of($TOPIC, theatre)?
Recuperaría:

    Teatro-nuovo
    Teatro-San Carlo
    ...

Si quisiéramos que Tolog recuperara los tipos del teatro nuevo sería:

    instance-of(teatro-nuovo, $TYPE)?

Recuperaría:

    Theatre
    Organizacion

Esto es porque Theatre es una instancia de Organizacion.

Tolog permite a las asociaciones dinámicas de predicados, para ello las asociaciones de un Topic Map son tratadas como predicados (que como hemos dicho antes representan relaciones). Para ello el nombre del predicado es el nombre de la asociación del Topic Map, indicando en la consulta los roles de los argumentos del predicado (en este caso componer y opera).

Ejemplo de TOLOG:

De esta forma si queremos las Operas de Puccini solo tenemos que realizar la siguiente consulta:

   composed-by(Puccini : composer, $Opera : opera);

Tolog devolvería:

   Madame Buterfly
   Tosca
   Turandot
   ...

Si quisiéramos recuperar con Tolog topics pero que cumplan varios predicados (o que presenten varias relaciones) Tolog nos permite usar el booleano AND (únicamente debemos separar los predicados por "," nunca poner AND). De esta forma solo devolverá los topics que estén presentes en ambas relaciones. Podemos encadenar cuantos predicados deseemos.

Ejemplo de TOLOG:

Recuperar las personas y la ciudad de nacimiento de los nacidos en una ciudad situada en Italia:

    born-in($PERSON : person, $CITY : place),
    located-in($CITY : containee, italy : container)?

En el ejemplo anterior esto nos devolvería las personas y las ciudades. Si unicamente deseamos las personas haríamos uso de la proyección de Tolog. Esta se realiza mediante la clausula "SELECT" y le indica que solo estamos interesados en las variables que acompañan al select. De esta forma podemos reducir el tamaño de la información recuperada.

Ejemplo de TOLOG:

Recuperar las personas nacidas en una ciudad de Italia:

   select $PERSON from
   born-in($PERSON : person, $CITY : place),
   located-in($CITY : containee, italy : container)?

Tolog además proporciona una función de agregación, que devuelve el número de resultados de la consulta. Para ello se utiliza la cláusula count().

Ejemplo de TOLOG:

Queremos saber el compositor y el número de operas que realizó:

    select $A, count($B) from
    composed-by($A : composer, $B : opera)?

Esta consulta realizaría la tabla completa de compositores y opera. Tras esto juntaría a todos los compositores iguales y pondría en B el número de apariciones en la consulta de dicho compositor.

Además Tolog nos permite organizar la información recuperada con la cláusula "ORDER BY" e incluir el límite de resultados con "LIMIT" y el offset con "OFFSET".

Ejemplo de TOLOG:

En el caso anterior es probable que nos interese que se nos muestre primero los compositores más prolíficos, para ello realizaríamos la siguiente consulta:

    select $A, count($B) from
    composed-by($A : composer, $B : opera)
    order by $B desc?

Si solo quisiéramos los 10 primeros haríamos:

    select $A, count($B) from
    composed-by($A : composer, $B : opera)
    order by $B Desc limit 10?

Si solo quisiéramos los 5 primeros, pero a partir del 8:

    select $A, count($B) from
    composed-by($A : composer, $B : opera)
    order by $B Desc limit 5 offset 8?

La cláusula "desc" indica que la ordenación sea descendente, si queremos ascendente utilizaremos "asc". En la cláusula order by pueden aparecer cualquier número de variables separadas por comas (",").

Hasta aquí hemos visto las partes básicas de Tolog, pero Tolog es más potente y tiene más características. Entre ellas:

Utilizar ocurrencias como predicados.

Ejemplo de TOLOG:

Recuperar las personas nacidas en el 24 de marzo de 1867.

    date-of-birth($PERSON, "1867 (24 Mar)")?

La función lógica OR, esta se representa con la cláusula "|".

Ejemplo:

Recuperar las operas cuya premier ha sido en Milan o en un teatro de Milan.

    select $OPERA from
        {premiere($OPERA : opera, milano : place) |
        premiere($OPERA : opera, $THEATRE : place),
        located-in($THEATRE : containee, milano : container) }?

La función lógica NOT, representada mediante la cláusula "not()":

Ejemplo de TOLOG:

Recuperar todas las personas que no han nacido en Italia.

    instance-of($PERSON, person),
    not(born-in($PLACE : place, $PERSON : person),
    located-in($PLACE : containee, italy : container))?

* Importante: Si se hiciera la siguiente consulta devolvería una cantidad enorme de topics, de todas las cosas que no tienen la relación born-in con Italia, no solo personas sino teatros, operas,...

    MAL-> not(born-in(milano : place, $A : person))?

Predicados de comparación, con las cláusulas "=, >, <, >=, <=". únicamente comparan Strings

Ejemplo de TOLOG:

Recuperar las operas cuya premier fue el 22-02-1870:

    premiere-date($OPERA, $DATE),
    $DATE = "1870 (22 Feb)"?

Tolog tiene una mayor potencia que se sale de este minitutorial, para más información consultar el siguiente enlace:
http://www.ontopia.net/omnigator/docs/query/tutorial.html

Recuperación Organización Información Tutorial TOLOG Recuperación Organización Información Tutorial TOLOG [Valid RSS]

Recuperación y organización de la información - Tutorial de TOLOG