buto name identifica o nome do elemento;
• DomainSynonymous: identifica o domínio dos sinônimos a serem armazenados; • Word: armazena um termo raiz de um conjuntos de sinônimos de um domínio; • SynWord: armazena sinônimos de um determinado termo raiz.
A Figura 4.8 ilustra o domain dictionary metamodel com suas classes e relacio- namentos.
Figura 4.8: Metamodelo de dicionário de domínio.
4.5 Algoritmo para database model matching
Esta seção detalha o algoritmo que será aplicado para obter um modelo con- tendo elementos correspondidos entre dois database models. Para isso, um operador Match é proposto com a finalidade de implementar o algoritmo de database model mat- ching.
Conforme visto na seção 2.2, onde foi descrita uma abordagem para model matching, o database matching metamodel foi criado para suportar tanto o match baseado
4.5 Algoritmo para database model matching 81 em esquema quanto o match baseado em instância. Assim, elementos serão avaliados levando em consideração a similaridade de string, bem como, a similaridade por valor atribuído a elementos dos database models.
O algoritmo de database model matching foi implementado nesta pesquisa através do operador Match. O operador Match retorna o mapeamento entre elementos de dois database models. Em [55] é definido mapeamento como um conjunto de elemen- tos de correspondência que indica que determinados elementos do esquemas S1 são
mapeados para determinados elementos de um esquema S2.
O operador Match foi definido baseado no trabalho de D. Lopes [33], que utiliza o operador para determinar correspondência entre metamodelos para gerar definição de transformação de modelo com Atlas Transforation Language - ATL [23]. O operador Match proposto nesta pesquisa foi adaptado para tratar correspondên- cia de modelos ao invés de metamodelos como definido originalmente em [33]. O operador Match(M1(S1)/Ms, M2(S2)/Ms) é responsável por retornar um mapeamento
CM1!M2/Mc entre dois database models.
Dado um database model M1do sistema S1, que está conforme database model
metamodel Ms e um database model M2 do sistema S2, que está conforme database model
metamodel Ms. O operador Match retorna o mapeamento CM1!M2/Mc, que está con-
forme ao metamodelo Mc. O mapeamento CM1!M2/Mc corresponde a classe MatchDB
do database matching metamodel apresentado na Figura 4.6.
O mapeamento CM1!M2/Mcpode ser definido como: CM1!M2/Mc ◆ {M1\
M2}, onde \ retorna elementos de M1 e M2 que são iguais ou similares. Elementos
similares são elementos onde existe uma relação entre eles, mas essa relação não pode ser bem definida [6]. Por exemplo, um schema S1 possui uma entidade Paciente com o
atributo name para identificar o paciente. Enquanto que no schema S2 também existe
uma entidade Paciente, mas a identificação do paciente é composta de primeiroNome e ultimoNome. Assim, temos similaridade entre S1.Paciente.nome ⇠= (S2.primeiroNome,
S2.ultimoNome).
Os conjuntos M1, M2e CM1!M2/Mc podem ser definidos como:
• M1 = {e1i, f1j | 0 < i n and 0 < j m}, onde e1i são entidades, f1j são
atributos. As variáveis n e m são a quantidade de entidades e atributos de M1
4.5 Algoritmo para database model matching 82 • M2 = {e2x, f2y | 0 < x n0 and 0 < y m0}, onde e2x são entidades, f2y são
atributos. As variáveis n0 e m0 são a quantidade de entidades e atributos de M 2
respectivamente;
• CM1!M2/Mc= {c1, c2,..., cp}, que constitui o conjunto de elementos corresponden-
tes de M1e M2, onde ci = {e1i, e2x} _ {f1j, f2y} _ {f1j, e2x}. Assim, ci pode ser um
match de entidade para entidades ou atributo para atributo ou então atributo para entidade.
Além da definição dos conjuntos M1, M2 e CM1!M2/Mc é necessário ainda,
considerar alguns cenários que devem ser observados na busca por correspondência entre database models, como o grau de correspondência entre elementos dos esquemas. Com relação ao grau, a correspondência entre elementos dos modelos pode ter a se- guinte classificação:
• Match total: todos os atributos do par de entidade (e1i, e2x) possuem correspon-
dência;
• Match parcial: parte dos atributos do par de entidade (e1i, e2x) possuem corres-
pondência.
O grau de correspondência entre elementos dos esquemas é uma medida importante para definir se entidades sofrerão merging, pois esta medida determina o quanto entidades são similares. O especialista de domínio deve configurar o valor limite para o grau de correspondência. Com relação aos cenários, a busca por corres- pondência pode considerar:
• Cenário 1: o par de entidades (e1i, e2x) correspondem em nome e atributos, po-
dendo ser um match total ou parcial;
• Cenário 2: o par de entidades (e1i, e2x) correspondem apenas pelo nome das enti-
dades, isto é, as entidades (e1i, e2x) possuem nomes similares, mas não possuem
nenhum atributo correspondente. Neste cenário, as entidades não são similares; • Cenário 3: o par de entidades (e1i, e2x) não possuem nomes correspondentes, mas
todos seus atributos são similares. Neste cenário, as entidades são similares pela correspondência de seus atributos, podendo ser um match total ou parcial;
4.5 Algoritmo para database model matching 83 • Cenário 4: pode ter uma correspondência de atributo com entidade, isto é, pode haver a situação em que um ou mais atributos de uma entidade do esquema S1
corresponda uma entidade do esquema S2. A Figura 4.9 ilustra este cenário, onde Pessoa.ocupacao ⇠=Ocupacao.
Figura 4.9: Exemplo dematching entre atributo e entidade.
Com os conjuntos M1, M2 e CM1!M2/Mc e com os cenários para busca de
correspondência entre dois modelos definidos, o algoritmo de database model matching entre dois database models é apresentado e segue os seguintes passos:
1. Criar MatchDB: instanciar o database matching metamodel para iniciar uma corres- pondência;
2. Selecionar todas as entidades e1i de M1e e2x de M2;
3. Para cada par {e1i, e2x} aplicar a função simString(e1i, e2x, < method >) que re-
torna se as entidades possuem nomes iguais ou similares; (a) Se retornar verdade, então,
i. Para cada par {f1i, f2x}
A. Verificar se atributos são similares (aplicar a função simString) calcu- lando percentual de atributos iguais ou similares.
ii. Caso percentual seja maior que um valor limite, incluir entidade em MatchDB;
4.5 Algoritmo para database model matching 84 (b) Retornando falso, verificar se entidades são iguais ou similares pelo seus atributos, calculando percentual de atributos iguais ou similares como no item (a) e incluindo em MatchDB quando for maior que valor limite;
(c) Entidade não sendo iguais ou similares nem pelo item (a) e nem pelo item (b) não são incluídas em MatchDB.
4. Comparar atributos com entidades. Para cada par {f1j, e2x} aplicar a função si-
mAttributeToEntity(f1j, e2x)que compara se um attribute de e1ié representado por
uma entidade e2x. Retornando verdade, incluir f1j e e2x em MatcDB.
A função simString(e1i, e2x, < method >)retorna o grau de similaridade en-
tre duas strings. O valor retornado pode variar entre [0..1], onde o retorno sendo 1 as strings são consideradas iguais. Um valor limite deve se definido para que as string sejam consideradas similares. O parâmetro < method > determina a métrica de simi- laridade de string aplicada. A função simString(e1i, e2x, < method >)fornece a possibi-
lidade conforme as seguintes métricas:
• Levenshtein distance [45]: considera o número mínimo de inserções, substituições e exclusões para tornar duas string iguais. Assim, quanto menor o número de operações para tornar uma string em outra, mais provável que elas sejam iguais; • N-Gram distance [64]: leva em consideração a contagem de número de ocorrência de q-grams (partes de uma string) entre duas strings. Quanto maior a quantidade de q-grams comuns, mais provável que as string sejam iguais;
• Jaro Winkler [13]: considera o número de caracteres comuns e suas posições para determinar a igualdade de duas string.
Foi utilizada a Application Programming Interface (API) Java Apache Lucene, disponibilizada pela Apache Software Foundation [2], com a implementação das métricas de similaridade de string. A função simString usa também um dicionário de sinônimos para determinar similaridade de string. Entre os metamodelos propostos neste traba- lho, está o metamodelo de dicionário de domínio. Este metamodelo tem a finalidade de criar um modelo, conforme metamodelo dicionário de domínio (veja seção 4.4), com um dicionário específico de um domínio.