<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <title-group>
        <article-title>Representac¸ a˜o Ontol o´gica de Frameworks de Mapeamento Objeto/Relacional</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Fe´lix Luiz Zanetti</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Camila Zacche de Aguiar</string-name>
          <email>camila.zacche.aguiarg@gmail.com</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>V´ıtor E. Silva Souza</string-name>
          <email>vitorsouza@inf.ufes.br</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>@Entity public class Person</institution>
        </aff>
        <aff id="aff1">
          <label>1</label>
          <institution>Nu ́cleo de Estudos em Modelagem Conceitual e Ontologias (NEMO) Universidade Federal do Espirito Santo, Brasil Av. Fernando Ferrari</institution>
          ,
          <addr-line>514 - Goiabeiras - Vito ́ria, ES - 29075-910</addr-line>
        </aff>
      </contrib-group>
      <abstract>
        <p>The use of object/relational mapping (ORM) frameworks is the stateof-practice in software development, with several ORM frameworks for different object-oriented programming languages. However, to our knowledge, there is no formal definition of the concepts related to these frameworks, which could serve as basis for semantic interoperability tasks (e.g., code migration) or in the definition of architectural smells independently of the chosen framework. In this work, we present ORM-O, a domain reference ontology that aims to identify and represent the semantics of object/relational mapping when such frameworks are used in software development.</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>-</title>
      <p>respondendo a`s questo˜es de competeˆncia levantadas previamente e instanciando
conceitos da ontologia utilizando trechos de co´digo de mapeamento objeto/relacional, usando
um framework ORM bastante popular.</p>
      <p>ORM-O esta´ sendo constru´ıda no escopo de um projeto que visa criar uma rede de
ontologias sobre frameworks de desenvolvimento de software.1 Tais ontologias nos
permitira˜o automatizar tarefas de interoperabilidade semaˆntica, como migrac¸a˜o de co´digo
entre frameworks, ou ainda especificar smells na arquitetura do software de forma
independente de framework ou linguagem, por exemplo. Como prova de conceito,
desenvolvemos uma ferramenta de migrac¸a˜o que converte co´digo de um framework ORM para
outro (em plataformas diferentes), utilizando a ontologia como interlingua.</p>
      <p>As demais sec¸ o˜es deste trabalho esta˜o organizadas da seguinte maneira: a Sec¸ a˜o 2
resume as questo˜es geradas pela impedaˆncia objeto/relacional e sua soluc¸a˜o pelo uso
de frameworks; a Sec¸a˜o 3 introduz as ontologias de refereˆncia utilizadas como base na
construc¸a˜o da ORM-O; a Sec¸ a˜o 4 apresenta a ORM-O; a Sec¸a˜o 5 descreve a avaliac¸ a˜o
da ontologia por meio de verificac¸a˜o e validac¸a˜o; a Sec¸a˜o 6 compara a ORM-O com
trabalhos relacionados; e, por fim, a Sec¸a˜o 7 traz as considerac¸o˜es finais.</p>
    </sec>
    <sec id="sec-2">
      <title>2. Frameworks de Mapeamento Objeto/Relacional</title>
      <p>
        No contexto do desenvolvimento de software, dentre os paradigmas ja´ propostos, o
Orientado a Objetos (OO) e o Relacional sustentam-se ate´ hoje pela eficieˆncia que cada um
apresenta [
        <xref ref-type="bibr" rid="ref23">Teixeira 2017</xref>
        ]. Enquanto o paradigma Relacional provou ser popular para o
desenvolvimento de bancos de dados, o paradigma OO tem sustentado va´rias linguagens
de programac¸a˜o e me´todos de desenvolvimento de software [
        <xref ref-type="bibr" rid="ref14">Ireland et al. 2009</xref>
        ].
      </p>
      <p>
        No paradigma Relacional as informac¸o˜es sa˜o armazenadas na forma de tabelas,
constitu´ıdas por linhas (tuplas) e colunas (atributos) [
        <xref ref-type="bibr" rid="ref5">Date 2004</xref>
        ]. Ale´m disso, tabelas se
relacionam entre si por meio de chaves. Por outro lado, no paradigma OO as informac¸o˜es
sa˜o armazenadas em memo´ria na forma de objetos contendo caracter´ısticas e
comportamentos [
        <xref ref-type="bibr" rid="ref23">Teixeira 2017</xref>
        ], definidos por meio de classes e relacionados por refereˆncias.
      </p>
      <p>
        Comumente, esses paradigmas sa˜o utilizados em conjunto: uma linguagem OO
e´ utilizada na codificac¸a˜o do programa enquanto o armazenamento das informac¸o˜es e´
feito em sistemas de banco de dados relacional. Assim, objetos sa˜o convertidos em tuplas
para serem armazenados em tabelas e consultas sa˜o realizadas no banco de dados para
que os objetos possam ser recuperados. No entanto, o uso combinado e as diferenc¸as
de abstrac¸a˜o, foco e linguagem levam a uma se´rie de problemas [
        <xref ref-type="bibr" rid="ref14">Ireland et al. 2009</xref>
        ],
conhecidos como Impedaˆncia Objeto/Relacional [
        <xref ref-type="bibr" rid="ref2">Bauer and King 2004</xref>
        ].
      </p>
      <p>
        Para auxiliar o desenvolvimento e minimizar problemas, o mapeamento
objeto/relacional e´ delegado a um framework, i.e., conjunto de co´digos que fornece soluc¸a˜o para
algum problema espec´ıfico. O uso de frameworks se tornou estado-da-pra´tica, pois reduz
consideravelmente o tempo de desenvolvimento de um projeto por reutilizar co´digo ja´
desenvolvido, testado e documentado por terceiros [
        <xref ref-type="bibr" rid="ref21">Souza et al. 2009</xref>
        ].
      </p>
      <p>O objetivo e´ que, ao inve´s de fazer manualmente o mapeamento objeto/relacional,
o desenvolvedor utilize um framework ORM (Object/Relational Mapping) que, a partir
1https://nemo.inf.ufes.br/projects/sfwon/
de determinadas configurac¸ o˜es, se encarrega do mapeamento dos objetos para tabelas
e colunas ou a recuperac¸ a˜o dos objetos atrave´s de consultas. Existem diferentes
frameworks ORM para diversas linguagens de programac¸a˜o OO como, por exemplo:
Hibernate (Java), EclipseLink (Java), Django (Python), SQLAlchemy (Python), ODB (C++),
QxOrm (C++), dentre outros.</p>
      <p>Para o uso destes frameworks, e´ necessa´ria a inclusa˜o de bibliotecas, pacotes e
arquivos de configurac¸a˜o, ale´m de adaptac¸o˜es ao co´digo desenvolvido. Os frameworks de
Java obedecem ao padra˜o JPA (Java Persistence API) e utilizam trechos de co´digo
precedidos de @ como anotac¸ o˜es para indicac¸a˜o do comportamento de classes e atributos em
relac¸ a˜o aos frameworks. Em Python os frameworks possuem classes a serem estendidas
ou instanciadas e me´todos a serem utilizados. Em C++ sa˜o utilizados a diretiva pragma
e os templates das bibliotecas dos frameworks.</p>
    </sec>
    <sec id="sec-3">
      <title>3. Fundamentac¸ a˜o Ontolo´ gica</title>
      <p>
        A ORM-O foi constru´ıda com base em duas ontologias preexistentes: a Ontologia de
Sistema de Banco de dados Relacionais (Relational Database System Ontology –
RDBSO) [
        <xref ref-type="bibr" rid="ref6">de Aguiar et al. 2018</xref>
        ], que representa a estrutura do banco de dados relacional,
e a Ontologia de Co´digo Orientado a Objetos (Object-Oriented Code Ontology –
OOCO) [
        <xref ref-type="bibr" rid="ref7">de Aguiar et al. 2019</xref>
        ], que representa os conceitos fundamentais presentes no
co´digofonte orientado a objetos.
      </p>
      <p>A Figura 1 apresenta o fragmento da ontologia OOC-O reutilizado em
ORM</p>
    </sec>
    <sec id="sec-4">
      <title>O. Um Object-Oriented Source Code e´ constitu´ıdo de Physical Modules, que por sua</title>
      <p>vez e´ composto por Classes. Uma Class pode ser uma Extendable Class quando esta´
dispon´ıvel para ser estendida por outras classes, tal como uma classe que assume o papel
de subclasse ao definir uma relac¸ a˜o de heranc¸a com uma superclasse. Uma Class pode
ser composta de Members, tal como Member Variable, varia´vel que pertence a uma
classe. Em particular, quando representa o estado particular de um objeto, trata-se de uma</p>
      <sec id="sec-4-1">
        <title>Instance Variable. Uma Variable pode ser caracterizada por um Value Type.</title>
        <p>
          Figura 1. Fragmento da ontologia OOC-O [
          <xref ref-type="bibr" rid="ref7">de Aguiar et al. 2019</xref>
          ].
        </p>
        <p>A Figura 2 apresenta o fragmento da ontologia RBDS-O reutilizado em
ORM</p>
      </sec>
      <sec id="sec-4-2">
        <title>O. Um Relational Database System tem RDBMS Items para representar os dados de</title>
        <p>acordo com o modelo Relacional na forma de Tables e definir restric¸ o˜es sobre o modelo
na forma de Constraints. Uma Table e´ definida por um Line Type, cujas linhas possuem
um u´nico tipo. Cada Line Type e´ constitu´ıdo de Columns, representando os campos
da tabela. Por sua vez, uma Column e´ especificada por uma Column Constraint, seja</p>
      </sec>
      <sec id="sec-4-3">
        <title>Column Type Constraint para restringir os valores da coluna, Primary Key Constraint</title>
        <p>para definir uma linha u´nica na tabela, ou Foreign Key Constraint para referenciar uma
determinada chave-prima´ria.</p>
        <p>
          Figura 2. Fragmento da ontologia RBDS-O [
          <xref ref-type="bibr" rid="ref6">de Aguiar et al. 2018</xref>
          ].
        </p>
      </sec>
    </sec>
    <sec id="sec-5">
      <title>4. A Ontologia de Frameworks de Mapeamento Objeto/Relacional</title>
      <p>A ORM-O (Object/Relational Mapping Ontology) e´ uma ontologia de refereˆncia no
dom´ınio de frameworks ORM. A ontologia visa identificar e representar os conceitos do
mapeamento objeto/relacional no escopo de co´digo fonte. Sendo assim, considerando o
escopo das aplicac¸ o˜es vislumbradas, como a ferramenta de migrac¸a˜o que converte co´digo
de um framework ORM para outro, os padro˜es de configurac¸ a˜o dos frameworks com o
banco de dados e com o sistema gerenciador de banco de dados na˜o sa˜o cobertos pela
ORM-O.</p>
      <p>
        A ontologia foi constru´ıda aplicando as fases iniciais do me´todo SABiO [
        <xref ref-type="bibr" rid="ref11">Falbo
2014</xref>
        ], a saber: Identificac¸ a˜o do Propo´sito e Levantamento de Requisitos, levando a`
definic¸ a˜o de requisitos funcionais e na˜o-funcionais; Captura e Formalizac¸ a˜o da Ontologia,
resultando em sua representac¸ a˜o em um modelo gra´fico e registrando de forma objetiva a
conceituac¸a˜o do dom´ınio; e Implementac¸a˜o, com o uso da linguagem operacional OWL.
      </p>
      <p>Como requisitos funcionais, foram levantadas as seguintes questo˜es de
competeˆncia (QCs): CQ01: Que classes sa˜o mapeadas para o banco de dados? CQ02: Como
os relacionamentos entre classes sa˜o mapeados para o banco de dados? CQ03: Que
atributos de uma dada classe sa˜o mapeados para o banco de dados? CQ04: Que atributos
de uma dada classe sa˜o mapeados para chave prima´ria no banco de dados? CQ05: Que
atributos de uma dada classe sa˜o mapeados para chave estrangeira no banco de dados?
CQ06: Como os relacionamentos de heranc¸a entre classes sa˜o mapeados para o banco de
dados?</p>
      <p>
        Durante a captura e formalizac¸a˜o, a ORM-O foi representada em
OntoUML [
        <xref ref-type="bibr" rid="ref12">Guizzardi 2005</xref>
        ] para ana´lise ontolo´gica a` luz da ontologia de fundamentac¸ a˜o
UFO [
        <xref ref-type="bibr" rid="ref13">Guizzardi and Wagner 2004</xref>
        ]. Ale´m disso, para garantir a compreensa˜o consensual
do dom´ınio, os conceitos foram definidos em um diciona´rio de termos e mapeados para os
conceitos de cada linguagem de programac¸a˜o com o uso dos frameworks selecionados.2
2O diciona´rio de termos pode ser visto na especificac¸a˜o completa da ontologia, dispon´ıvel online em:
https://nemo.inf.ufes.br/projects/sfwon/.
      </p>
      <p>
        A captura da ontologia foi apoiada por um processo de aquisic¸a˜o de conhecimento
que utilizou documentac¸a˜o de frameworks em treˆs diferentes linguagens que utilizam o
paradigma orientado a objeto: Java Persistence API (
        <xref ref-type="bibr" rid="ref15">JPA) [JPA 2019</xref>
        ], que e´ o padra˜o
de implementac¸ a˜o de frameworks para Java, como o Hibernate;
        <xref ref-type="bibr" rid="ref9">Django [Django 2019</xref>
        ] e
        <xref ref-type="bibr" rid="ref22">SQLAlchemy [SQLAlchemy 2019</xref>
        ] em Python; e
        <xref ref-type="bibr" rid="ref19">QxORM [QxOrm 2019</xref>
        ] e
        <xref ref-type="bibr" rid="ref16">ODB [ODB
2019</xref>
        ] em C++. A escolha dos frameworks para cada linguagem foi feita com base na
popularidade de cada um no site Stack Overflow,3 um site de perguntas e respostas
amplamente conhecido e utilizado pela comunidade de desenvolvedores. De forma similar, as
linguagens tambe´m foram escolhidas devido a` sua popularida
        <xref ref-type="bibr" rid="ref7">de [de Aguiar et al. 2019</xref>
        ].
      </p>
      <p>Com a finalidade de facilitar o entendimento e a apresentac¸a˜o, a ORM-O foi
subdividida em 3 partes: ORM-O Classes and Relationships, que trata do mapeamento
individual das classes e suas relac¸ o˜es com outras classes; ORM-O Inheritance, que trata
do mapeamento de heranc¸a e ORM-O Variable, que trata do mapeamento de varia´veis
(atributos). A Figura 3 apresenta a composic¸a˜o da ORM-O. A seguir, sera˜o apresentadas
as treˆs sub-ontologias de ORM-O.</p>
      <p>Figura 3. Composi c¸a˜ o da ORM-O e sua associa c¸a˜ o com OOC-O e RBDS-O.</p>
      <sec id="sec-5-1">
        <title>4.1. ORM-O Classes and Relationships</title>
        <p>A Figura 4 apresenta os conceitos da ORM-O relativos ao mapeamento objeto/relacional
de classes e suas poss´ıveis relac¸o˜es. Dado que classes sa˜o mapeadas para tabelas, os
conceitos Class (OOC-O) e Table (RDBS-O) sa˜o aqui reutilizados.</p>
        <p>Figura 4. Ontologia de Mapeamento O/R: Classes e Relacionamentos.</p>
        <p>O conceito Entity Class, que e´ uma especializac¸ a˜o de Class, adve´m da
representac¸a˜o de uma classe que sera´ efetivamente mapeada para o banco de dados. Tal
conceito se faz necessa´rio visto que, em um c o´digo-fonte, nem todas as classes tera˜o suas
instaˆncias armazenadas no banco de dados.</p>
        <p>A formalizac¸a˜o do mapeamento de uma Entity Class para o banco de dados e´
feita pela definic¸a˜o do conceito Class Mapping, que por sua vez esta´ associado a uma
Entity Table. Esta u´ ltima e´ uma especializac¸a˜o de Table para representar tabelas que
armazenam tuplas que representam instaˆncias de classes. Uma Entity Class pode ainda
estar diretamente relacionada com uma Entity Table, indicando assim que determinadas
caracter´ısticas suas, como o nome por exemplo, sa˜o determinadas pela instaˆncia de Entity
Class ligada nessa relac¸a˜o.</p>
        <p>O relacionamento entre as classes e´ mapeado para as tabelas por meio do conceito
Relationship Mapping. Esse conceito possui quatro diferentes especializac¸ o˜es:
relacionamento de um para um (One To One), um para muitos (One To Many), muitos para
um (Many To One) e muitos para muitos (Many to Many). Os conceitos One To Many</p>
      </sec>
    </sec>
    <sec id="sec-6">
      <title>Relationship Mapping e Many To Many Relationship Mapping esta˜o associados a</title>
      <p>uma especializac¸ a˜o de Table: a Relationship Association Table, que e´ responsa´vel pelo
armazenamento de chaves que relacionam as tuplas de cada tabela.</p>
      <p>Ainda a respeito de Relationship Mapping, e´ poss´ıvel que uma instaˆncia desse
conceito seja associada a outra, do mesmo conceito, representando assim um
relacionamento bidirecional.</p>
      <sec id="sec-6-1">
        <title>4.2. ORM-O Inheritance</title>
        <p>Os conceitos de mapeamento de heranc¸a capturados e formalizados pela ORM-O esta˜o
apresentados na Figura 5. Assim como a Entity Class especializa Class, os conceitos
Subclass e Superclass foram especializados respectivamente em Entity Subclass e
Entity Superclass. Ambos esta˜o associados ao Inheritance Mapping.</p>
        <p>Figura 5. Ontologia de Mapeamento O/R: Heran c¸a.</p>
        <p>
          Em mapeamento objeto/relacional, existem treˆs diferentes estrate´gias de
mapeamento de heranc¸a [
          <xref ref-type="bibr" rid="ref1">Ambler 2010</xref>
          ]: Single Table, onde existe uma u´nica tabela para toda
a hierarquia; Table per Class, onde cada classe envolvida na hierarquia, seja ela ma˜e ou
filha, e´ mapeada para uma tabela diferente no banco de dados; e Table per Concrete Class,
onde cada classe concreta da hierarquia possui sua tabela e nela sa˜o inclu´ıdas colunas para
armazenamento de atributos herdados das classes ma˜es. Sendo assim, especializamos o
conceito Inheritance Mapping de treˆs maneiras: Single Table Inheritance Mapping,
Table per Concrete Class Inheritance Mapping e Table per Class Inheritance
Mapping. Os dois primeiros esta˜o associados a` Multiple Entities Table, uma especializac¸ a˜o
de Entity Table que representa uma tabela do banco de dados relacional que armazena
uma ou mais classes diferentes.
        </p>
        <p>Table per Class Inheritance Mapping esta´ associado a` Single Entity Table, que
representa uma tabela do banco de dados que possui informac¸ o˜es de uma u´nica classe.
Analogamente, ha´ a possibilidade de Table per Concrete Class estar associado a uma
Single Entity Table caso a classe ma˜e da hierarquia seja concreta, portando ha´ uma
associac¸a˜o entre esses dois conceitos.</p>
      </sec>
      <sec id="sec-6-2">
        <title>4.3. ORM-O Variable</title>
        <p>O mapeamento de varia´veis por meio de frameworks ORM tem seus conceitos
representados na Figura 6. No diagrama e´ poss´ıvel observar o conceito de Variable Mapping,
que associa um Mapped Variable, que e´ uma especializac¸a˜o de Instance Variable que
representa uma varia´vel que deve ser mapeada, a uma Column. Por sua vez, a
possibilidade ou na˜o de mapeamento de valores nulos a colunas do banco de dados e´ representada
pelo conceito Nullability que caracteriza uma Mapped Variable.</p>
        <p>Figura 6. Ontologia de Mapeamento O/R: Varia´ vel.</p>
        <p>Ja´ uma chave prima´ria e´ formalizada com a especializac¸a˜o de Mapped
Variable em Mapped Primary Key e seu mapeamento e´ feito por Primary Key Mapping,
uma especializac¸a˜o de Variable Mapping, que associa ao conceito Primary Key
Column, especializac¸a˜o de Column. Analogamente, Mapped Foreign Key, que e´ uma
especializac¸a˜o de Mapped Variable para representar o conceito de chave estrangeira,
tem seu mapeamento representado por uma especializac¸a˜o de Variable Mapping
formalizada por Foreign Key Mapping.</p>
      </sec>
    </sec>
    <sec id="sec-7">
      <title>5. Avaliac¸a˜ o</title>
      <p>
        A avaliac¸a˜o da ORM-O foi realizada por meio de atividades de verificac¸a˜o e validac¸ a˜o,
seguindo o me´todo SABiO [
        <xref ref-type="bibr" rid="ref11">Falbo 2014</xref>
        ]. A verificac¸a˜o foi feita por meio da identificac¸a˜o
das respostas a`s questo˜es de competeˆncia utilizando os conceitos que compo˜em a
ontologia. A Tabela 1 apresenta as respostas das QCs levantadas na Sec¸a˜o 4, mostrando quais
conceitos e relac¸o˜es sa˜o utilizados para responder cada questa˜o.
      </p>
      <p>Tabela 1. Respostas a` s Questo˜ es de Competeˆ ncia.</p>
      <p>ID</p>
      <sec id="sec-7-1">
        <title>Resposta</title>
      </sec>
      <sec id="sec-7-2">
        <title>Entity Class subtype of Class</title>
        <sec id="sec-7-2-1">
          <title>CQ01 Class Mapping mapped by Entity Class</title>
        </sec>
      </sec>
      <sec id="sec-7-3">
        <title>Class Mapping mapped to Entity Table</title>
      </sec>
      <sec id="sec-7-4">
        <title>Entity Table subtype of Table</title>
      </sec>
      <sec id="sec-7-5">
        <title>Instance Variable mediation Relationship Mapping</title>
      </sec>
      <sec id="sec-7-6">
        <title>One To One Relationship Mapping, One To Many Relationship Mapping, Many</title>
        <p>to One Relationship Mapping e Many to Many Relationship Mapping subtype</p>
      </sec>
      <sec id="sec-7-7">
        <title>CQ02 of Relationship Mapping</title>
      </sec>
      <sec id="sec-7-8">
        <title>Entity Table e Relationship Association Table subtype of Table</title>
      </sec>
      <sec id="sec-7-9">
        <title>Many to Many Relationship Mapping mediation Relationship Association Table</title>
      </sec>
      <sec id="sec-7-10">
        <title>One to Many Relationship Mapping mediation Relationship Association Table</title>
      </sec>
      <sec id="sec-7-11">
        <title>Mapped Variable subtype of Instance Variable</title>
      </sec>
      <sec id="sec-7-12">
        <title>CQ03 Mapped Variable mediation Variable Mapping</title>
      </sec>
      <sec id="sec-7-13">
        <title>Variable Mapping mediation Column</title>
      </sec>
      <sec id="sec-7-14">
        <title>Mapped Variable subtype of Instance Variable</title>
        <sec id="sec-7-14-1">
          <title>CQ04 Mapped Primary Key subtype of Mapped Variable</title>
        </sec>
      </sec>
      <sec id="sec-7-15">
        <title>Mapped Primary Key mediation Primary Key Mapping</title>
      </sec>
      <sec id="sec-7-16">
        <title>Primary Key Mapping mediation Primary Key Column</title>
      </sec>
      <sec id="sec-7-17">
        <title>Mapped Variable subtype of Instance Variable</title>
        <sec id="sec-7-17-1">
          <title>CQ05 Mapped Foreign Key subtype of Mapped Variable</title>
        </sec>
      </sec>
      <sec id="sec-7-18">
        <title>Mapped Foreign Key mediation Foreign Key Mapping</title>
      </sec>
      <sec id="sec-7-19">
        <title>Foreign Key Mapping mediation Foreign Key Column</title>
      </sec>
      <sec id="sec-7-20">
        <title>Entity Subclass subtype of Subclass</title>
      </sec>
      <sec id="sec-7-21">
        <title>Entity Subclass mediation Inheritance Mapping</title>
      </sec>
      <sec id="sec-7-22">
        <title>Entity Superclass subtype of Superclass</title>
      </sec>
      <sec id="sec-7-23">
        <title>Entity Superclass mediation Inheritance Mapping</title>
      </sec>
      <sec id="sec-7-24">
        <title>Single Table Inheritance Mapping, Table per Class Inheritance Mapping e Ta</title>
        <p>ble per Concrete Class Inheritance Mapping subtype of Inheritance Mapping</p>
      </sec>
      <sec id="sec-7-25">
        <title>CQ06 Entity Table subtype of Table</title>
      </sec>
    </sec>
    <sec id="sec-8">
      <title>Multiple Entities Table e Single Entity Table subtype of Entity Table</title>
      <sec id="sec-8-1">
        <title>Single Table Inheritance Mapping mediation Multiple Entities Table</title>
        <p>Table per Concrete Class Inheritance Mapping mediation Single Entity Table
Table per Concrete Class Inheritance Mapping mediation Multiple Entities
Table</p>
        <p>Table per Class Inheritance Mapping mediation Single Entity Table</p>
        <p>Para a validac¸a˜o da ORM-O, os conceitos da ontologia foram instanciados com
o framework Hibernate, um dos frameworks analisados na atividade de aquisic¸a˜o do
conhecimento. A Tabela 2 apresenta alguns desses conceitos com o intuito de validar se
a ontologia pode representar situac¸ o˜es reais de mapeamento objeto/relacional. A tabela
de validac¸a˜o completa pode ser consultada no documento de especificac¸a˜o da ontologia,
dispon´ıvel online em: https://nemo.inf.ufes.br/projects/sfwon/.</p>
        <p>Tabela 2. Instaˆ ncias dos conceitos de ORMF-O.</p>
      </sec>
      <sec id="sec-8-2">
        <title>Conceito</title>
        <p>Entity Class &amp;</p>
        <p>Class Mapping
Entity Subclass &amp;
Entity Superclass
A existeˆncia de uma Entity Class (Person) faz com que exista
implicitamente um Class Mapping.
@Entity
public class Student extends Person {...};
A existeˆncia de uma Entity Subclass (Student) faz com que a classe
que ela estende seja uma Entity Superclass (Person).
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public class Person {...}
@Entity
@Table(name="Person")
public class Person {...}
Caso a anotac¸a˜o @Table seja omitida, a Entity Table sera´ a tabela
do banco de dados cujo o nome e´ ideˆntico ao nome da Entity Class.
@Entity
public class Class {
...
@OneToMany(mappedBy="studentClass")
private List&lt;Student&gt; students;
...
}
@Column(name="enrollment_number")
private Long enrollmentNumber;
Qualquer atributo de uma Entity Class que na˜o seja precedido da
anotac¸ a˜o @Transient e´ uma Mapped Variable. A existeˆncia de uma</p>
      </sec>
      <sec id="sec-8-3">
        <title>Mapped Variable implica na existeˆncia de uma Variable Mapping.</title>
        <p>Caso a anotac¸a˜o @Column seja omitida, a Variable Mapping sera´
associada a` Column com nome ideˆntico ao nome da Mapped
Variable.</p>
        <p>Por fim, a ontologia foi utilizada na pra´tica como interlingua em uma ferramenta
de migrac¸ a˜o de c o´digo desenvolvida a partir da ORM-O. A partir de c o´digo Java com
mapeamentos objeto/relacional feitos com uso do framework ORM Hibernate, a
ferramenta gera instaˆncias dos conceitos da ORM-O (em OWL) e, em seguida, e´ capaz de
gerar o c o´digo fonte em Python com uso do framework ORM Django. O leitor
interessado pode experimentar a ferramenta a partir de seu c o´digo-fonte, dispon´ıvel em
https://github.com/nemo-ufes/ORMFConverter.</p>
      </sec>
    </sec>
    <sec id="sec-9">
      <title>6. Trabalhos Relacionados</title>
      <p>
        Ontologias que envolvem os conceitos pertinentes ao dom´ınio de objeto ou dados
relacionais sa˜o fundamentadas a partir de diferentes contextos. Observamos ontologias
elaboradas para publicac¸a˜o automa´tica de dados semaˆnticos a partir de banco de dados [
        <xref ref-type="bibr" rid="ref24">Trinh
et al. 2006</xref>
        ], gerac¸a˜o de banco de dados a partir de ontologia [
        <xref ref-type="bibr" rid="ref8">de Laborda and Conrad
2005</xref>
        ], modelagem
        <xref ref-type="bibr" rid="ref8">de software [Evermann and Wand 2005</xref>
        ] e metodologia de
desenvolvimento de software [
        <xref ref-type="bibr" rid="ref17">Pastor 1992</xref>
        ] apoiados em ontologia de objetos. No entanto, ate´ onde
temos conhecimento, poucas pesquisas se aprofundaram na relac¸a˜o existente entre esses
dom´ınios, explorada nesse artigo como frameworks de linguagem de programac¸a˜o ORM.
      </p>
      <p>
        [
        <xref ref-type="bibr" rid="ref3">Calero et al. 2006</xref>
        ] apresenta uma ontologia para o recurso objeto-relacional do
padra˜o SQL:2003 a fim de clarificar seus elementos e identificar suas inconsisteˆncias. A
ontologia e´ subdividida em DataTypes (conceitos pertinentes a tipo de dados) e
SchemaObjects (conceitos pertinentes ao contexto geral, tabelas, restric¸ o˜es e colunas).
Diferentemente de ORM-O, o modelo e´ representado em UML e regras OCL. Ademais, embora
o propo´sito dessa ontologia seja representar aspectos objeto-relacionais de uma esquema
de banco de dados, a ontologia na˜o explora essa relac¸a˜o entre os dois dom´ınios e apenas
representa os conceitos relacionais na forma de um diagrama de objeto.
      </p>
      <p>
        [
        <xref ref-type="bibr" rid="ref4">Chang et al. 2001</xref>
        ] apresenta a especificac¸ a˜o de um metamodelo sobre data
warehouse. O modelo e´ dividido, entre outros, em Object Model (conceitos base
relacionados a classe e objeto) e Resource (conceitos relacionados a representac¸a˜o
relacional). Diferentemente de ORM-O, o modelo e´ representado em UML e define relac¸o˜es de
especializac¸a˜o entre os dom´ınios de objeto e dados relacionais. Assim, Column e Data
Type do submodelo Relational sa˜o especializac¸o˜es de Attribute e Classifier do submodelo
Object Model, respectivamente. Em ORM-O tais conceitos sa˜o ancorados na
ontologia de fundamentac¸a˜o UFO e relacionados por meio de mapeamentos na linguagem de
programac¸a˜o.
      </p>
      <p>
        No contexto de migrac¸a˜o de co´digo-fonte [
        <xref ref-type="bibr" rid="ref18">Plaisted 2013</xref>
        ], aplicac¸a˜o pra´tica
utilizada como parte da validac¸ a˜o da ORM-O, alguns trabalhos propo˜em o uso de
linguagens intermedia´rias para operacionalizar a migrac¸a˜o. O uso de uma interlingua facilita a
inclusa˜o de novas linguagens na ferramenta, bastando efetuar o mapeamento entre a
linguagem e a interlingua, sem necessidade de mapear a nova linguagem a todas as outras
ja´ inclu´ıdas. Em [
        <xref ref-type="bibr" rid="ref20">Schaub and Malloy 2016</xref>
        ], por exemplo, uma linguagem denominada
iJava foi mapeada para Java, Python e C++, permitindo migrac¸ a˜o de co´digo entre estas
linguagens de programac¸a˜o. Ale´m de incluir os mapeamentos objeto/relacionais, a
conversa˜o feita com base na ORM-O utiliza um modelo conceitual mais bem fundamentado,
construido a partir de um processo de Engenharia de Ontologias.
      </p>
    </sec>
    <sec id="sec-10">
      <title>7. Conclus a˜o</title>
      <p>
        Neste artigo, apresentamos uma ontologia de frameworks de mapeamento
objeto/relacional. A ORM-O foi constru´ıda de acordo com um me´todo de engenharia de ontologias e
baseada em fontes de amplo conhecimento da comunidade de desenvolvimento de
software. Para conceituar o mapeamento objeto/relacional, a ontologia introduz
relacionamentos entre as ontologias de bancos de dados relacionais RBDS-O [
        <xref ref-type="bibr" rid="ref6">de Aguiar et al.
2018</xref>
        ] e de co´digo orientado a objetos OOC-O [
        <xref ref-type="bibr" rid="ref7">de Aguiar et al. 2019</xref>
        ].
      </p>
      <p>As atividades de verificac¸a˜o e validac¸a˜o tiveram resultado positivo alcanc¸ado
atrave´s de respostas que atendiam a`s questo˜es de competeˆncia e apresentando a cobertura
dos conceitos fundamentais em um co´digo de linguagem de programac¸a˜o OO utilizando
um framework ORM bastante popular em Java. Ale´m disso, com o desenvolvimento da
ferramenta de migrac¸ a˜o, foi poss´ıvel utilizar a ontologia na pra´tica, migrando co´digo de
um framework ORM (Hibernate em Java) para outro (Django em Python).</p>
      <p>Por fim, como trabalhos futuros, ha´ a intenc¸a˜o de inclusa˜o de mais frameworks e
linguagens de programac¸a˜o na ferramenta de conversa˜o, bem como o uso da ORM-O em
outras aplicac¸o˜es pra´ticas na Engenharia de Software como, por exemplo, definic¸a˜o de
smells arquiteturais em modelos de projeto de sistemas que utilizam frameworks ORM.
Pretende-se ainda desenvolver ontologias sobre outros tipos de frameworks, como
controladores frontais (Model-View-Controller — MVC), decoradores, de autenticac¸ a˜o e
autorizac¸a˜o, etc., de modo que tambe´m possam ser beneficiados pelas ferramentas
desenvolvidas neste contexto.</p>
    </sec>
    <sec id="sec-11">
      <title>Acknowledgments</title>
      <p>O NEMO (http://nemo.inf.ufes.br) recebe atualmente apoio das ageˆncias
de fomento CNPq (processos 407235/2017-5 e 433844/2018-3), CAPES (processo
23038.028816/2016-41), e FAPES (processo 69382549/2015).</p>
    </sec>
    <sec id="sec-12">
      <title>Refereˆncias</title>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          <string-name>
            <surname>Ambler</surname>
            ,
            <given-names>S. W.</given-names>
          </string-name>
          (
          <year>2010</year>
          ).
          <article-title>Mapping objects to relational databases</article-title>
          . https://www.ibm. com/developerworks/library/ws-mapping-to-rdb/. Acessado em :
          <fpage>05</fpage>
          -
          <lpage>05</lpage>
          -
          <year>2019</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          <string-name>
            <surname>Bauer</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          and
          <string-name>
            <surname>King</surname>
            ,
            <given-names>G.</given-names>
          </string-name>
          (
          <year>2004</year>
          ).
          <source>Hibernate in Action. Manning</source>
          ,
          <volume>1</volume>
          <fpage>edition</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          <string-name>
            <surname>Calero</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Ruiz</surname>
            ,
            <given-names>F.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Baroni</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          , e
          <string-name>
            <surname>Abreu</surname>
            ,
            <given-names>F. B.</given-names>
          </string-name>
          , and
          <string-name>
            <surname>Piattini</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          (
          <year>2006</year>
          ).
          <article-title>An ontological approach to describe the SQL: 2003 object-relational features</article-title>
          .
          <source>Computer Standards &amp; Interfaces</source>
          ,
          <volume>28</volume>
          (
          <issue>6</issue>
          ):
          <fpage>695</fpage>
          -
          <lpage>713</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          <string-name>
            <surname>Chang</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Iyengar</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          , et al. (
          <year>2001</year>
          ).
          <article-title>Common warehouse metamodel (CWM) specification</article-title>
          . Object Management Group,
          <volume>1</volume>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          <string-name>
            <surname>Date</surname>
            ,
            <given-names>C. J.</given-names>
          </string-name>
          (
          <year>2004</year>
          ).
          <article-title>Introduc¸a˜o a sistemas de bancos de dados</article-title>
          .
          <source>Elsevier Brasil.</source>
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          <string-name>
            <surname>de Aguiar</surname>
            ,
            <given-names>C. Z.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Falbo</surname>
            ,
            <given-names>R. A.</given-names>
          </string-name>
          , and
          <string-name>
            <surname>Souza</surname>
            ,
            <given-names>V. E. S.</given-names>
          </string-name>
          (
          <year>2018</year>
          ).
          <article-title>Ontological Representation of Relational Databases</article-title>
          .
          <source>In Proc. of the 11th Seminar on Ontology Research in Brazil (ONTOBRAS</source>
          <year>2018</year>
          ), pages
          <fpage>140</fpage>
          -
          <lpage>151</lpage>
          , Sa˜o Paulo,
          <string-name>
            <surname>SP</surname>
          </string-name>
          , Brazil. CEUR.
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          <string-name>
            <surname>de Aguiar</surname>
            ,
            <given-names>C. Z.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Falbo</surname>
            ,
            <given-names>R. A.</given-names>
          </string-name>
          , and
          <string-name>
            <surname>Souza</surname>
            ,
            <given-names>V. E. S.</given-names>
          </string-name>
          (
          <year>2019</year>
          ).
          <article-title>OOC-O: a Reference Ontology on Object-Oriented Code</article-title>
          .
          <source>In Proc. of the 38th International Conference on Conceptual Modeling (ER</source>
          <year>2019</year>
          ). (in press).
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          <string-name>
            <surname>de Laborda</surname>
            ,
            <given-names>C. P.</given-names>
          </string-name>
          and
          <string-name>
            <surname>Conrad</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          (
          <year>2005</year>
          ).
          <article-title>Relational. OWL: a data and schema representation format based on OWL</article-title>
          .
          <source>In Proc. of the 2nd Asia-Pacific conference on Conceptual modelling-Volume</source>
          <volume>43</volume>
          , pages
          <fpage>89</fpage>
          -
          <lpage>96</lpage>
          . Australian Computer Society, Inc.
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          <string-name>
            <surname>Django</surname>
          </string-name>
          (
          <year>2019</year>
          ). Django Documentation. https://docs.djangoproject.
          <source>com/ en/2</source>
          .2/. Acessado em :
          <fpage>05</fpage>
          -
          <lpage>05</lpage>
          -
          <year>2019</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          <string-name>
            <surname>Evermann</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          and
          <string-name>
            <surname>Wand</surname>
            ,
            <given-names>Y.</given-names>
          </string-name>
          (
          <year>2005</year>
          ).
          <article-title>Ontology based object-oriented domain modelling: fundamental concepts</article-title>
          .
          <source>Requirements Engineering</source>
          ,
          <volume>10</volume>
          (
          <issue>2</issue>
          ):
          <fpage>146</fpage>
          -
          <lpage>160</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          <string-name>
            <surname>Falbo</surname>
            ,
            <given-names>R. A.</given-names>
          </string-name>
          (
          <year>2014</year>
          ).
          <article-title>SABiO: Systematic Approach for Building Ontologies</article-title>
          .
          <source>In Proc. of the 1st Joint Workshop ONTO</source>
          .
          <article-title>COM / ODISE on Ontologies in Conceptual Modeling and Information Systems Engineering</article-title>
          . CEUR.
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          <string-name>
            <surname>Guizzardi</surname>
            ,
            <given-names>G.</given-names>
          </string-name>
          (
          <year>2005</year>
          ).
          <article-title>Ontological Foundations for Structural Conceptual Models</article-title>
          .
          <source>PhD Thesis</source>
          , University of Twente, The Netherlands.
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          <string-name>
            <surname>Guizzardi</surname>
            ,
            <given-names>G.</given-names>
          </string-name>
          and
          <string-name>
            <surname>Wagner</surname>
            ,
            <given-names>G.</given-names>
          </string-name>
          (
          <year>2004</year>
          ).
          <article-title>A Unified Foundational Ontology and some Applications of it in Business Modeling</article-title>
          .
          <source>In CAiSE Workshops (3)</source>
          , pages
          <fpage>129</fpage>
          -
          <lpage>143</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          <string-name>
            <surname>Ireland</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Bowers</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Newton</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          , and
          <string-name>
            <surname>Waugh</surname>
            ,
            <given-names>K.</given-names>
          </string-name>
          (
          <year>2009</year>
          ).
          <article-title>A classification of objectrelational impedance mismatch</article-title>
          .
          <source>In 2009 First International Conference on Advances in Databases, Knowledge, and Data Applications</source>
          , pages
          <fpage>36</fpage>
          -
          <lpage>43</lpage>
          . IEEE.
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          <string-name>
            <surname>JPA</surname>
          </string-name>
          (
          <year>2019</year>
          ).
          <article-title>Java Persistence API Documentation</article-title>
          . https://download. oracle.com/otn-pub/jcp/persistence-2_
          <fpage>2</fpage>
          -mrel-spec/ JavaPersistence.pdf. Acessado em :
          <fpage>05</fpage>
          -
          <lpage>05</lpage>
          -
          <year>2019</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          <string-name>
            <surname>ODB</surname>
          </string-name>
          (
          <year>2019</year>
          ). ODB Documentation. https://www.codesynthesis.com/ products/odb/doc/manual.xhtml. Acessado em :
          <fpage>05</fpage>
          -
          <lpage>05</lpage>
          -
          <year>2019</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          <string-name>
            <surname>Pastor</surname>
            ,
            <given-names>O.</given-names>
          </string-name>
          (
          <year>1992</year>
          ). Disen˜o y Desarrollo de un Entorno de Produccio´
          <article-title>n Automa´tica de Software basado en el modelo orientado a Objetos</article-title>
          .
          <source>PhD thesis</source>
          , Universitat Polite`cnica de Vale`ncia.
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          <string-name>
            <surname>Plaisted</surname>
            ,
            <given-names>D. A.</given-names>
          </string-name>
          (
          <year>2013</year>
          ).
          <article-title>Source-to-source translation and software engineering</article-title>
          .
          <source>Journal of Software Engineering and Applications</source>
          ,
          <volume>6</volume>
          (
          <issue>04</issue>
          ):
          <fpage>30</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          <string-name>
            <surname>QxOrm</surname>
          </string-name>
          (
          <year>2019</year>
          ).
          <source>QxOrm Documentation</source>
          . https://www.qxorm.com/qxorm_en/ manual.html. Acessado em :
          <fpage>05</fpage>
          -
          <lpage>05</lpage>
          -
          <year>2019</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref20">
        <mixed-citation>
          <string-name>
            <surname>Schaub</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          and
          <string-name>
            <surname>Malloy</surname>
            ,
            <given-names>B. A.</given-names>
          </string-name>
          (
          <year>2016</year>
          ).
          <article-title>The Design and Evaluation of an Interoperable Translation System for Object-Oriented Software Reuse</article-title>
          .
          <source>Journal of Object Technology</source>
          ,
          <volume>15</volume>
          (
          <issue>4</issue>
          ):
          <fpage>1</fpage>
          -
          <lpage>1</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref21">
        <mixed-citation>
          <string-name>
            <surname>Souza</surname>
            ,
            <given-names>V. E. S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Falbo</surname>
            ,
            <given-names>R. A.</given-names>
          </string-name>
          , and
          <string-name>
            <surname>Guizzardi</surname>
            ,
            <given-names>G.</given-names>
          </string-name>
          (
          <year>2009</year>
          ).
          <article-title>Designing Web Information Systems for a Framework-based Construction</article-title>
          . In Halpin, T.,
          <string-name>
            <surname>Proper</surname>
            ,
            <given-names>E.</given-names>
          </string-name>
          , and
          <string-name>
            <surname>Krogstie</surname>
          </string-name>
          , J., editors,
          <source>Innovations in Information Systems Modeling: Methods and Best Practices</source>
          , chapter
          <volume>11</volume>
          , pages
          <fpage>203</fpage>
          -
          <lpage>237</lpage>
          . IGI Global,
          <volume>1</volume>
          <fpage>edition</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref22">
        <mixed-citation>
          <string-name>
            <surname>SQLAlchemy</surname>
          </string-name>
          (
          <year>2019</year>
          ).
          <source>SQLAlchemy Documentation</source>
          . sqlalchemy.org/en/13/. Acessado em :
          <fpage>05</fpage>
          -
          <lpage>05</lpage>
          -
          <year>2019</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref23">
        <mixed-citation>
          <string-name>
            <surname>Teixeira</surname>
            ,
            <given-names>M. H. T. H.</given-names>
          </string-name>
          (
          <year>2017</year>
          ).
          <article-title>Impedaˆncia objeto relacional - O atrito natural entre os dois mundos</article-title>
          .
          <source>Tecnologias em Projec¸a˜o</source>
          ,
          <volume>8</volume>
          (
          <issue>1</issue>
          ):
          <fpage>11</fpage>
          -
          <lpage>19</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref24">
        <mixed-citation>
          <string-name>
            <surname>Trinh</surname>
            ,
            <given-names>Q.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Barker</surname>
            ,
            <given-names>K.</given-names>
          </string-name>
          , and
          <string-name>
            <surname>Alhajj</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          (
          <year>2006</year>
          ).
          <article-title>RDB2ONT: A tool for generating OWL ontologies from relational database systems</article-title>
          .
          <source>In Advanced International Conference on Telecommunications and International Conference on Internet and Web Applications and Services (AICT-ICIW'06)</source>
          , pages
          <fpage>170</fpage>
          -
          <lpage>170</lpage>
          . IEEE.
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>