• No results found

PRMS Implementation, Assessment and Value

El desarrollo de un traductor de consultas OcAL debe tener en cuenta los siguientes aspectos: 1 El lenguaje de consultas nativo para acceder a una base de acontecimientos implantada

sobre un gestor de bases de datos relacionales. En este caso, el lenguaje seleccionado fue SQL.

Por ejemplo, la base de acontecimientos de Arasis se encuentra implantada sobre un gestor de bases de datos relacionales, concretamente PostgreSQL, por lo que el lenguaje de consultas compatible con el mismo es SQL.

2 La forma en la que se implementó el esquema del Repositorio de Metadatos, la cual hemos explicado en el apartado anterior.

3 La sintaxis y semántica del Lenguaje de Acceso a Acontecimientos (OcAL) particularizada en función de cómo quedaron fijadas las dimensiones abiertas del lenguaje. Recordemos que de ello hemos hablado en el apartado 8.3 de este mismo capítulo.

En los siguientes apartados vamos a presentar la traducción de algunos ejemplos de consultas sobre la base de acontecimientos de Arasis para cada uno de los tipos de consulta del Lenguaje no generalizado de Acceso a Acontecimientos que hemos descrito en el capítulo anterior: (1) Consultas sobre estructuras longitudinales (Longitudinal Structure Queries) y (2) Consultas sobre acontecimientos (Occurrences Queries). Estas consultas han sido traducidas de forma automática con un algoritmo de traducción que se ha implementado en el seno del grupo Nóesis y que se describe en [25]. A través de estos ejemplos se quiere hacer patente la potencia del lenguaje, al comparar las sentencias OcAL y las sentencias SQL generadas.

8.6.1 Traducción de consultas sobre estructuras longitudinales

Durante el proceso de traducción de consultas sobre estructuras longitudinales (Longitudinal Structure Queries) es importante tener presente que la consulta SQL resultante deberá acceder a la vista Lifeline y a la función History, las cuales, debe ser referidas como parte de la cláusula FROM de dicha consulta.

La traducción de una consulta de este tipo resulta en una consulta SQL por cada palabra reservada INITIAL OCCURRENCE o FINAL OCCURRENCE; esto quiere decir que las consultas OcAL con ambas palabras reservadas se traducirían en dos consultas SQL unidas por una cláusula UNION (una correspondiente a la traducción de la consulta SQL derivada del uso de la palabra reservada INITIAL OCCURRENCE y otra correspondiente a la traducción de la consulta derivada del uso de la palabra reservada FINAL OCCURRENCE), mientras que las consultas con sólo una de las cláusulas se traducirían en una única sentencia SQL.

A continuación, se muestra una consulta sobre estructuras longitudinales que permite recuperar el acontecimiento inicial en la línea de vida de una muestra identificada como ‘bloodSample7’. Debajo se muestra la consulta SQL generada aplicando el algoritmo de traducción:

SELECT INITIAL OCCURRENCE OF LIFELINE

RELATED TO OBJECT ‘bloodSample7’ OF TYPE Sample 1 2 3 4 5 6 7 8 SELECT o.* FROM Lifeline o, Sample trwl, OBJECT ob

WHERE o.ID_obje = ‘bloodSample7’ AND ob.ID_sampl = trwl.ID_sampl AND o.ID_obje = ob.ID_obje

AND o.initialDate = (SELECT MIN(initialDate)

FROM Lifeline WHERE ID_object = ‘bloodSample7’) Consulta 8.1 Ejemplo de traducción de consulta OcAL sobre estructuras longitudinales

En este caso, dado que la consulta contiene las palabras reservadas LIFELINE e INITIAL OCCURRENCE, se generan las instrucciones de las líneas 1, 2 y 8 de la consulta SQL. De este modo se selecciona toda la información de la vista Lifeline cuyo valor en el campo initialDate corresponda con el valor mínimo que toma dicho campo en la línea de vida del objeto ‘bloodSample7’.

Además, como en la cláusula RELATED TO aparece el objeto ‘bloodSample7’ (RELATED TO Object), se incluye la línea 5 de la instrucción SQL.

Por último, dado que la consulta OcAL incluye la partícula OF TYPE Sample, como parte de la cláusula RELATED TO, se introducen las instrucciones que podemos ver en las líneas 3, 4, 6 y 7 de la Consulta 8.1.

8.6.2 Traducción de consultas sobre acontecimientos

Durante el proceso de traducción de consultas sobre acontecimientos (Occurrences Queries), el elemento clave es la vista Occurrence; en este caso, la estructura de la consulta SQL resultante del proceso de traducción dependerá de los elementos que hayan sido referidos en las cláusulas SELECT y RELATED TO.

Las consultas OcAL que incluyan la palabra reservada ACTIVE STATE, ya sea como parte de la cláusula SELECT o como parte de la cláusula RELATED TO, se traducen como un conjunto de consultas SQL separadas por la cláusula UNION, mientras que las consultas que no incluyan esta palabra reservada se traducen como una única consulta SQL.

A continuación, se muestra una consulta sobre acontecimientos que permite seleccionar un conjunto de objetos de tipo Sample (muestra), afectados por la ejecución del protocolo identificado como ‘sampleAliquotingProtocoloExecution002’ de tipo SampleAliquotingProtocolExecution en caso de que esta se haya realizado a lo largo del año 2016. Debajo de ella se muestra la consulta SQL generada aplicando el algoritmo de traducción:

SELECT OBJECT OF TYPE Sample

RELATED TO PROTOCOL EXECUTION ‘sampleAliquotingProtocolExecution002’ OF TYPE SampleAliquotingProtocolExecution BETWEEN ‘01/01/2016’ AND ‘31/12/2016’ 1 2 3 4 5 6 7 8 9 10 SELECT o.ID_obje FROM Occurrence o, Sample ts1, OBJECT ob, SampleAliquotingProtocolExecution trw1 WHERE o.ID_obje = ob.ID_obje

AND ob.ID_sampl = ts1.ID_sampl AND o.ID_prot_exec = trw1.ID_prot_exec

AND o.ID_prot_exec = ‘sampleAliquotingProtocolExecution002’ AND o.initialDate >= ‘01/01/2016’ AND o.finalDate <= ‘31/12/2016’ Consulta 8.2 Ejemplo de traducción de consulta OcAL sobre acontecimientos

Como tercer ejemplo, mostramos una consulta sobre acontecimientos que incluye la palabra reservada ACTIVE STATE; concretamente, esta consulta posibilita seleccionar los estados activos a los que se ha llegado por ejecuciones de protocolo realizadas por el ejecutor identificado como ‘laboratoryAssistant001’:

SELECT ACTIVE STATE

RELATED TO PERFORMER ‘laboratoryAssistant001’ 1

2

SELECT s.ID_obje_stat

3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

WHERE s.ID_obje_stat = e.ID_obje_stat AND e.ID_obje_stat = o.ID_obje_stat

AND o.ID_prot_exec = pe.ID_prot_exec AND pe.ID_prot_perf = ‘laboratoryAssistant001’ …

UNION

SELECT t.ID_prev_obje_stat

FROM Occurrence o, FreeRack s, FreeRack2UsedRack t, RackRegistered e, ProtocolExecution pe

WHERE s.ID_obje_stat = t.ID_obje_stat AND t.ID_obje_stat = e.ID_obje_stat AND e.ID_obje_stat = o.ID_obje_stat

AND o.ID_prot_exec = pe.ID_prot_exec AND pe.ID_prot_perf = ‘laboratoryAssistant001’ UNION

SELECT t.ID_obje_stat

FROM Occurrence o, UsedRack s, FreeRack2UsedRack t, RackCompleted e, ProtocolExecution pe

WHERE s.ID_obje_stat = t.ID_obje_stat AND t.ID_obje_stat = e.ID_obje_stat AND e.ID_obje_stat = o.ID_obje_stat

AND o.ID_prot_exec = pe.ID_prot_exec AND pe.ID_prot_perf = ‘laboratoryAssistant001’ …

Consulta 8.3 Ejemplo de traducción de consulta OcAL con la palabra reservada ACTIVE STATE

Como hemos podido observar, el resultado de la traducción de consultas OcAL que incluyen la palabra reservada ACTIVE STATE consiste en un conjunto de consultas SQL relacionadas a través de la cláusula UNION.

Antes de continuar, recordemos que, entre los diferentes tipos de estado activo que pueden asociarse con un ejecutor, están aquellos que desencadenan un cambio en los datos y aquellos que desencadenan un cambio de estado, los cuales corresponden con los tipos de efecto representados respectivamente por las clases DataChangeType y StateChangeType del metamodelo. Estos conceptos han sido presentados en el apartado 6.8.

La traducción de consultas sobre acontecimientos que incluyen la palabra reservada ACTIVE STATE transcurre de la siguiente forma:

1 Se genera una consulta SQL diferente por cada tipo de estado activo con el objetivo de poder seleccionar aquellos estados activos de cada tipo con los que el ejecutor está relacionado.

2 Se relaciona cada una de las consultas obtenidas a través de la cláusula SQL UNION. En la Consulta 8.3, la tabla TemperatureChangeRack almacena información de un tipo de estado activo que desencadena un cambio en los datos (líneas de la 1 a 4), mientras que las tablas FreeRack y UsedRack representan a tipos de estado activo que desencadenan cambios de estado y actúan respectivamente como estados origen y destino de la transición FreeRack2UsedRack que se desencadena (líneas de la 7 a la 12, y de la 14 a la 19). En relación a esto, es importante señalar que estas tablas corresponden con las registradas en el repositorio de metadatos cuyo esquema se ha representado en la Figura 8.1. También es importante señalar que la consulta SQL que hemos mostrado es un extracto de la que se obtendría realmente la cual referiría a todas las tablas que almacenan información de cada uno de los tipos de estado activo contemplados en el sistema.