UNIVERSIDADE FEDERAL DE SANTA CATARINA CENTRO TECNOLÓGICO DEPARTAMENTO DE INFORMÁTICA E ESTATÍSTICA SISTEMAS DE INFORMAÇÃO Resumo do Trabalho de Conclusão de Curso Entitulado Um Tradutor de Esquemas Relacionais em XML para Esquemas SQL de Autoria de Alisson Giovanni Rosa Aluno: Renato Sulzbach Orientador: Ronaldo dos Santos Mello 1
No contexto do trabalho, o foco foram dados que representam esquemas relacionais. Muitas ferramentas de projeto de bancos de dados relacionais persistem o resultado do desenvolvimento, ou seja, o esquema relacional, em formato XML. É o caso de ferramentas comerciais como a ERWIN [ERC07] e a Rational Rose [IBM07]; ou gratuitas, como DBDesigner [DBD07] e a brasileira brmodelo [CHC05], desenvolvida no GBD/UFSC. Porém, cada ferramenta segue um esquema proprietário para a disposição destas informações no arquivo XML. Isto torna extremamente caro o trabalho de extrair o esquema relacional destes arquivos XML (na intenção de gerar o modelo físico para um SGBD específico), na impossibilidade de se ter acesso à ferramenta que criou este arquivo XML. Assim sendo, o trabalho teve por objetivo criar uma ferramenta de apoio ao mapeamento e extração de esquemas relacionais especificados em arquivos XML, bem como a geração dos comandos SQL para criação das tabelas componentes do esquema físico do banco de dados. A finalidade do trabalho foi permitir um mapeamento flexível de esquemas relacionais representados em XML, ou seja, um método de mapeamento que seja executado diretamente sobre um arquivo XML. Uma possível solução para o problema (adotada no trabalho) é a utilização da linguagem XSLT, que tem como finalidade transformar documentos XML em outros documentos XML ou outros documentos texto [W3C99b], em substituição aos processadores de anotações propostos em outras ferramentas. XSLT pode ser utilizada tanto para realizar as transformações nos arquivos XML de entrada (segundo as regras de mapeamento definidas pelo usuário) em um arquivo XML semanticamente compreensível para a fase de geração do SQL de criação de tabelas, quanto na geração do script SQL, que é a saída da ferramenta. Tal solução evita a necessidade de construir um processador de anotações fixas (associadas a um esquema XML) e torna a ferramenta mais aberta, uma vez que XSLT já possui processadores disponíveis livremente, como é o caso dos projetos Saxon [SXO07] e Xalan [AXA07]. No intuito de facilitar, e ao mesmo tempo assegurar a corretude da tradução do esquema relacional para o comando SQL, a transformação do arquivo XML de entrada se dá em duas fases. O objetivo da primeira fase é gerar, a partir do arquivo de entrada, um arquivo XML em conformidade com um arquivo XML Schema que descreve a BNF [BNF96] do comando SQL Create Table. Na segunda fase, com base neste arquivo intermediário, é gerado o script SQL de criação das tabelas. Uma vez estando o arquivo XML intermediário de acordo com o arquivo XML Schema que descreve a BNF do comando SQL Create Table, garante se que a sintaxe do comando SQL resultante está correta. Tanto na primeira como na segunda fase, as transformações são especificadas utilizando a linguagem XSLT. 2
Fundamentação Teórica: BNF: A forma de Backus Naur (também conhecido como BNF, o formalismo de Backus Naur, forma normal Backus, ou forma de Panini Backus) é uma meta sintaxe usada para expressar gramáticas livres de contexto, isto é, um modo formal de descrever linguagens [BNF96]. A BNF é amplamente usada como notação para as gramáticas de linguagens de programação, conjuntos de instruções e protocolos de comunicação, e também como notação para representar partes de gramáticas de linguagens naturais. A maioria dos livrostexto para teoria de linguagem de programação e/ou semântica documenta linguagens em BNF. Uma especificação BNF é um conjunto de regras de derivação, escritas na forma: <simbolo> : = <expressão> onde <simbolo> é um não terminal e <expressão> consiste em sequências de símbolos e/ou sequências separadas pela barra vertical (' '), indicando uma escolha. Esta notação indica as possibilidades de substituição para o símbolo na esquerda da expressão. Símbolos que nunca aparecem no lado esquerdo são ditos terminais [BNF96]. XML: XML (extensible Markup Language) define um conjunto de regras (você também pode encará las como convenções ou diretrizes) para projetar formatos de texto que permitam estruturar seus dados [W3C99a]. XML não é uma linguagem de programação e você não precisa ser um programador para usá la ou aprendê la. XML torna simples para o computador gerar e ler dados, e garantir que sua estrutura não seja ambígua. Entretanto, enquanto HTML especifica o que cada marcador e atributo significam e geralmente como seu conteúdo aparece em um navegador, XML usa os marcadores apenas para delimitar conteúdos de dados, deixando a interpretação destes dados completamente à cargo da aplicação que os lê [W3C99a]. Programas que produzem planilhas, listas de endereços e outros dados estruturados, freqüentemente gravam estes dados em disco utilizando um formato binário ou textual. Uma vantagem do formato textual é que ele permite ao usuário ver os dados sem usar o programa que os produziu, ou seja, você pode ler um formato textual com o seu editor de textos favorito. Além disso, um documento textual XML não ocupa demasiado espaço, podendo ser facilmente transferido entre pessoas e aplicações [W3C99a]. Por estes motivos, cresce o numero de aplicativos que persistem seus dados em XML e um destes usos é justamente a persistência de esquemas relacionais, que é o foco deste trabalho. 3
XML Schema: XML Schema é um documento XML que descreve o esquema de um ou mais documentos XML [W3C99c]. O propósito de um documento XML Schema é definir a estrutura de um XML, possibilitando a validação de documentos de dados XML através de programas denominados parsers XML. Um documento XML Schema define basicamente: Os elementos que podem aparecer em um documento XML; Os atributos de elementos; A hierarquia permitida de elementos, ou seja, quais elementos são elementos filhos de outros; A ordem na qual os elementos filhos aparecem em uma hierarquia; A quantidade mínima e máxima de elementos filhos em uma hierarquia (cardinalidade); Se um elemento deve ser vazio ou pode incluir texto puro; Os tipos de dados dos elementos simples (que não possuem uma hierarquia de elementos); Os valores padrão e valores fixos para elementos e atributos. XSLT Extensible Stylesheet Transformations: XSLT é uma linguagem para transformar documentos XML em outros documentos XML ou documentos texto em outros formatos [W3C99b]. A XSLT está contida na XSL, que é a linguagem de folhas de estilo (stylesheets) para XML. Além da XSLT, a XSL inclui um vocabulário XML para especificar formatação. A XSL especifica a estilização de um documento XML, podendo utilizar a XSLT para descrever como o documento é transformado em outro documento XML que usa este vocabulário de estilização. Uma transformação expressa em XSLT descreve regras para transformar uma estrutura XML hierárquica fonte (árvore fonte) em uma árvore resultado. A transformação é obtida associando se padrões com gabaritos. Um padrão é confrontado com elementos na árvore fonte. Um gabarito é instanciado para criar parte da árvore resultado. A árvore resultado é gerada separadamente da árvore fonte, podendo ser completamente diferente da estrutura da árvore fonte. Na construção da árvore resultado, os elementos da árvore fonte podem ser filtrados e reordenados, com a possibilidade de adicionar ainda outras estruturas arbitrárias. 4
SQL DDL: SQL é uma linguagem que foi inicialmente concebida para a consulta a BDs relacionais [ISO03]. Atualmente, ela apresenta diversas funcionalidades no que diz respeito à definição e manipulação destes BDs. A SQL se divide em subconjuntos de comandos: Data Definition Language (DDL) (Linguagem de Definição de Dados). A SQL DDL fornece comandos para definição e modificação de esquemas de relação, remoção de relações e criação de índices. Os principais comandos que fazem parte da DDL são: CREATE, ALTER, DROP; Data Manipulation Language (DML) (Linguagem de Manipulação de Dados). A SQL DML inclui uma linguagem de consulta baseada na álgebra relacional e no cálculo relacional. Ela compreende também comandos para inserir, remover e modificar informações em um banco de dados. Os comandos básicos da DML são: SELECT, INSERT, UPDATE e DELETE; Data Control Language (Linguagem de Controle de Dados). Conjunto de comandos que faz o cadastramento de usuários e determina seu nível de privilégio para os objetos do BD. Os principais comandos são: GRANT e REVOKE; Transaction control (Controle de Transações). A SQL inclui comandos para especificação do início e fim das transações. Diversas implementações permitem o isolamento explícito de dados para o controle de concorrência. Os comandos principais são COMMIT, ROLLBACK e SAVEPOINT. SAX SAX (Simple API for XML) é um analisador baseado em eventos o analisador lê um fluxo de entrada XML e, no caso de eventos, o analisador chama métodos ou rotinas com nomes semelhantes no programa host, que poderão tomar a ação apropriada. SAX não é um padrão do W3C, mas o resultado de um desenvolvimento conjunto dos membros do grupo XML DEV [XDE07]. Há diversos analisadores SAX para diferentes linguagens de programação, como Java, C++, Perl e Delphi. DOM: DOM (Document Object Model) é uma interface de programação de aplicação completa para documentos XML [W3C99d]. Essa interface permite não apenas navegar dentro de documentos XML, mas também obter, acrescentar, modificar ou excluir elementos e conteúdo. Como já foi comentado anteriormente, dados XML são definidos através de elementos, que por sua vez podem ser compostos de outros elementos. Arquivos XML, por apresentarem este tipo de estrutura, podem ser representados em forma de uma arvore. Os métodos disponibilizados pelo DOM permitem manipular os nodos desta árvore. 5
Trabalhos Relacionados X Database: Este trabalho propõe um sistema chamado X Database. A base deste sistema é um arquivo XML Schema que descreve o esquema lógico dos dados a serem trocados. Inicialmente, o sistema analisa a sintaxe do XML Schema e gera a base de dados relacional. A partir daí, processa a decomposição em tuplas de tabelas de arquivos XML válidos de acordo com o XML Schema. De forma contrária, ele também realiza a composição de arquivos XML a partir de dados extraídos da base relacional, como pode ser visto na Figura 8 [VAR04]. ShreX: ShreX é um sistema para decomposição e carga de documentos XML em BDs relacionais. No ShreX, o mapeamento é definido por anotações em arquivos XML Schema que indicam quais elementos e atributos devem ser armazenados no BD relacional. O processador de anotações executa o parsing do arquivo XML Schema com as anotações, verifica a validade do mapeamento e cria o esquema relacional correspondente. Esta informação de mapeamento é guardada em um repositório de mapeamento [AME04]. Trabalho de Boshernitsan: O trabalho de Boshernitsan apresenta um formato de troca, baseado em XML, entre as ferramentas componentes de um framework denominado Harmonia [MAR00]. O formato de troca modela a representação de um programa no Harmonia através de uma árvore sintática. O parser é dado por uma especificação declarativa da gramática da linguagem. A arvore sintática produzida pelo parser é, na verdade, uma arvore de parsing cuja forma é ditada pela mesma especificação da gramática. O framework Harmonia usa duas técnicas para abstrair gramáticas: uma variante da notação EBNF para expressar seqüências e nãoterminais opcionais, e a tecnologia GLR de parsing que trata de forma transparente a ambigüidade, incluindo lookahead sintático ilimitado [MAR00]. 6
O Tradutor Proposto No trabalho foi proposto um tradutor de uma especificação XML de um esquema relacional em um conjunto de comandos SQL que permitissem a geração deste esquema em um SGBD relacional. Para tanto, ele recebe como entrada um arquivo XML cujo conteúdo é uma especificação de um esquema relacional e um arquivo XML Schema contendo o esquema do comando SQL Create Table. A gramática formal da XML é apresentada na especificação XML do W3C pelo uso de notação na forma estendida de Backus Naur, a EBNF (Extended Backus Naur Form) [BNF96]. Da mesma forma, o padrão SQL 92 também está especificado pelo uso da notação BNF pela Organização Internacional para Padronização (International Organization for Standardization ISO) no padrão ISO/IEC 9075:1992. Existem programas que transformam automaticamente um conjunto de regras BNF/EBNF em um parser, tornando a BNF/EBNF uma opção bastante eficiente para representação de sintaxe de linguagens. Além disto, a geração de código utilizando a definição formal da linguagem é a garantia de que o resultado final é uma expressão válida naquela linguagem. Por isso, utiliza se como ponto de partida para a geração do código SQL um arquivo XML Schema que contenha a definição do comando Create Table diretamente da especificação em BNF contida no padrão ISO/IEC 9075:1992 da ISO. Assim sendo, é necessário transformar o arquivo XML de entrada em um arquivo XML compatível com tal XML Schema. A partir deste novo arquivo compatível, a geração do código SQL se torna automática e totalmente livre de erros de sintaxe. 7