Uma Arquitetura para Acesso e Integração de
Dados em Aplicações Sensíveis ao Contexto
Natália Quirino de Oliveira
Orientador: Prof. Dr. Alvaro Cesar Pereira Barbosa
Mestrado em Informática
Universidade Federal do Espírito Santo
Contexto e motivação

Computação ubíqua

Aplicações sensíveis ao contexto

Automatizar tarefas

Situação do usuário

Situação do ambiente
Contexto e motivação

Integração de dados contextuais

Vários domínios

Projetos DBMware, Infraware, CoDIMS,
Telecardio
Infraware
CoDIMS original

Outras instâncias: CoDIMS-G, MECD

E, neste trabalho, o CoDIMS-CA
Objetivo



Nova instância do CoDIMS (CoDIMS-CA) para
atender aos projetos Infraware e Telecardio
Definição de uma arquitetura para integração
de dados contextuais
Definição de uma estratégia para execução
distribuída de consultas
Overview
Para atingir os objetivos:

Conceitos e Tecnologias

Requisitos

Trabalhos Relacionados
Conceitos e Tecnologias

Framework

Componentes

Wrappers

Metadados

Ontologias

Bancos de dados: ativos, temporais,
espaciais
Requisitos

Acesso e integração de dados

Entrega ativa de dados

Dinamismo das informações

Metadados

Perfil de usuário

Configuração e extensibilidade

Histórico contextual

Prioridade entre consultas
Trabalhos relacionados

Nexus

DBGlobe

Mogatu

MoCA

Awareness
Trabalhos relacionados

Sub-conjuntos de requisitos atendidos
Trabalhos relacionados
Aspectos de entrega
Hipac Snoop Liquid
Linguagem
específica
Eventos compostos
Sim
Sim
Sim
Sim
Não
Sim
Sim
Sim
Distribuição
Não
Não
Sim
Sim
Novos operadores
Não
Sim
Não
Sim
CoDIMS-CA
Arquitetura conceitual
Diagrama de componentes
Diagrama de classes
Diagrama de classes (cont.)
Exemplo de Aplicação: Telemedicina

Monitorar ininterruptamente e remotamente
pacientes que têm doenças crônicas


Isquemia do miocárdio
Integração de eletrocardiograma, outros
sinais vitais, prontuário do paciente
Exemplo de Aplicação: Projeto Telecardio
Exemplo de Aplicação:

Deseja-se monitorar um paciente que se encontra
em casa, com um dispositivo holter que se
comunica uma unidade base local. A unidade base
se comunica com o servidor localizado no hospital

Dados são gerados pelo holter a cada 30 segundos

Monitoramento periódico ou emergências

Integração de dados de prontuário, ECG
(freqûencia cardíaca) e temperatura
Subscrição em formato SQL-Like

SELECT p.idPaciente, p.nome, p.idade,
last 10 e.FC values
FROM paciente p, ecg e, temperatura t
WHEN e.FC onIncrease AND e.FC > 90 AND
t.temperatura onIncrease AND t.temperatura
> 39 AND p.fumante = “sim”
Fontes Utilizadas
Fonte de Dados
Nome
Registros de Pacientes
Prontuário
(idPaciente,nome,idade,
sexo,fumante)
ECG de pacientes
ECG
(idPaciente, FC,
data-hora)
Temperatura
Temperatura de
pacientes
(idPaciente,
temperatura,
data-hora)
Origem dos
dados
Tipo dos
dados
Servidor do
hospital
Relacional
Sensor no
paciente
XML
Sensor no
paciente
TXT
Web services criados


A seguinte distribuição foi utilizada no estudo
de caso
Enfoque na distribuição das fontes de dados
Árvore de execução de consultas
Conjunto resultado
Plano de Execução de Consultas
<operator execution-step ="1"><Scan table="Temperatura">
<column name="idPaciente" /> <column name=“temperatura"/>
<constraint leftArg=”temperatura” operation=”bigger” rightArg=”39”/>
<constraint OnIncrease column name=“temperatura"/>
<consumer id="3"/> </scan> </operator>
<operator execution-step ="2"> <Scan table=”ECG”>
<column name="idPaciente" /> <column name="FC"/>
<constraint leftArg=”FC” operation=”bigger” rightArg=”90”/>
<constraint OnIncrease column name="FC"/>
<consumer id="3"/> </scan> </operator>
<operator execution-step ="3"> <And left-producer="1" right-producer="2">
<constraint leftArg="idPaciente" operation="equals" rightArg="idPaciente"/><consumer
id="5"/></And></operator>
<operator execution-step ="4"> <Scan table="Prontuario">
<column name="idPaciente” /> <column name=“idade "/><column name="nome "/>
<constraint leftArg=”fumante” operation=”equals” rightArg=”sim” />
<consumer id=”5”/> </scan></operator>
<operator execution-step="5"> <Join left-producer="3" right-producer="4">
<constraint leftArg="idPaciente" operation="equals" rightArg="idPaciente"/>
</ join></operator>
Gerente de tarefas
Histórico de
eventos
Processador de
consultas
Fabrica de MECs
MEC
Metadados
OP
aoAumentar
Fabrica de agentes
OP and
OP
aoAumentar
Agente
OP Join
Agente
OP scan
Fumante = “sim”
FC > 90
Temp > 39
WrapperECG
Temp = 40
Frequencia
Frequencia= =9165
WrapperMédico
Conjuntos resultado

Resultset do operador Scan: Temperatura
<Resultset xmlns="">
<tupla xmlns="" idPaciente="00001" temperatura=“40"/>
<tupla xmlns="" idPaciente="00002" temperatura=“40"/></Resultset>
Resultset do operador Scan: frequência cardíaca
<Resultset xmlns="">
<tupla xmlns="" idPaciente="00001" FC="92" />
<tupla xmlns="" idPaciente="00003" FC="93" />
</Resultset>
Resultset do operador And:
<Resultset xmlns="">
<tupla xmlns="" idPaciente="00001" FC="92“ temperatura=“40”/></Resultset>
Resultset do operador Scan: paciente
<Resultset xmlns="">
<tupla xmlns="" idPaciente="00001“ nome=“Fulano da Silva” idade="52" sexo=”masculino”
fumante="sim” /> </Resultset>
Resultset do operador Join:
<Resultset xmlns="">
<tupla xmlns="" id_paciente="00001" temperatura=“40" FC=”92” idade="52” sexo=”masculino”
fumante="sim /></Resultset>
Implementação

JDOM

SAX

Tomcat

NetBeans

PostgreSQL
Conclusão


Avanços na popularização de dispositivos
Computação ubíqua, sistemas sensíveis ao
contexto: maior interação com os usuários

Necessidade de arquiteturas apropriadas

Nova instância do CoDIMS, o CoDIMS-CA
Contribuições


Lista de requisitos para integração de dados contextuais
Máquina de execução de consultas distribuida para
entrega ativa de dados

Fábricas e distribuição de agentes e operadores

Arquitetura configurável e flexível

Definição de esquemas XML

Implementação do protótipo


Reutilização do framework CoDIMS
Publicações
Requisitos atendidos

Acesso e integração de dados

Entrega ativa de dados

Dinamismo das informações

Metadados

Perfil de usuário

Configuração e extensibilidade

Histórico contextual

Prioridade entre consultas
Requisitos não atendidos

Contexto espaço-temporal

Linguagens específicas

Modificações na ACID

Mobilidade
Comparação com outras arquiteturas

Distinções na detecção de eventos e
processamento de consultas

Estratégia de execução de consulta

Adição de novos componentes
Trabalhos futuros

Otimização dinâmica de consultas

Estatísticas e gerenciamento de fontes

Desenvolvimento de wrappers (imagens médicas,
GPS)

Tolerância a falhas

Estudos sobre novos componentes (histórico, perfil)

Estudo de grids para integração de dados
contextuais
Agradecimentos



CNPq e FAPES, pelo apoio financeiro
UFES/PPGI, pela oportunidade e
conhecimento recebido
Alunos do PET Engenharia de Computação
(Bruna Colnago e Igor Magri), pelo apoio na
implementação
Uma Arquitetura para Acesso e Integração de
Dados em Aplicações Sensíveis ao Contexto
Natália Quirino de Oliveira
Orientador: Prof. Dr. Alvaro Cesar Pereira Barbosa
Mestrado em Informática
Universidade Federal do Espírito Santo
Subscrição histórico - XML

<?xml version="1.0" ?>

<subscription xmlns="http://www.w3schools.com">

<substype valor="Last-values"></substype>

<appid valor="111"></appid>

<userid valor="222"></userid>

<usergroup valor="333"></usergroup>

<atributos>

<atributo valor="ECG"></atributo>

<atributo valor="pressao"></atributo>

</atributos>

</subscription>
Armazenamento histórico - XML

<?xml version="1.0" encoding="UTF-8"?>

<historico>

<atributo>ECG</atributo>

<tabela>sinaisVitais</tabela>

<inicioArmazenamento>10:02:05</inicioArmazenamento>

<granularidade>00:01:00</granularidade>

<valor>90</valor>

<valor>87</valor>

</historico>
Fonte indisponível - XML










<fonteIndisponivel idFonte=”1234”>
<periodo>
<dataInicio> 2007/03/01 23:42:22
<dataFinal> 2007/03/01 23:51:32
</periodo>
<periodo>
<dataInicio> 2007/02/01 10:40:11
<dataFinal> 2007/02/01 11:20:36
</periodo>
</fonteIndisponivel>
</dataInicio>
</dataFinal>
</dataInicio>
</dataFinal>
Event Report - XML

<eventReport>

<tipo>anomaliaECG</tipo>

<idEvento></idEvento>

</eventoInicial timestamp=10:20:13 evento=”ev1”>

</intermediario timestamp=10:21:42 evento=”ev2”>

</eventoFinal timestamp=10:21:42 evento=”ev4”>

</disparo timestamp=”10:21:59”>

</eventReport>
Perfil

SELECT * FROM medico m

WHERE m.especialidade = “oftamologista”

<perfil>

<coluna nome="bairro" valor="Jardim Camburi" eliminatorio="false" />

<coluna nome="convenio" valor="Casufes" eliminatorio="true" />

</perfil>

SELECT * from medico m

WHERE m.especialidade = “oftamologista” AND m.convenio = “casufes”

ORDER BY m.bairro
Interfaces para Web Services

public interface InterfaceSubscricao {



public void popularSubscricao(String arquivo);}
public interface InterfaceAgente {

public void iniciarMonitoramento();

public void pausarMonitoramento();

public void cancelarMonitoramento();

public void run();}
public interface InterfaceGerenciaFonte {

public void checarTodasFontes();

public void checarFonte(Fonte f);

public void monitorarStatusFontes();

public void alertarDesconexao(Fonte f);}
Interfaces para Web Services (cont.)



public interface InterfacePerfil {

public void popularPerfil(int idUsuario, String arquivo);

public void personalizarConsulta(String arqPerfil, String arqConsulta);

public void consultarPerfil(int idUsuario);}
public interface InterfaceHistorico {

public Vector obterDadosHistoricos(String atributo, String tabela);

public void armazenarHistorico(String atr, String tab, String valor);

public void iniciarArmazenamento(String atributo, String tabela);

public void pausarArmazenamento(String atributo, String tabela);}
public interface InterfaceGerenciaTarefas {

public void checarMaiorPrioridade();

public void adicionarSubscricao(Subscricao s);

public void removerSubscricao(int id);}
Download

Apresentação