Keli Cristina Manini Susane Schmidt Uma Ferramenta para Geração de Esquemas XML a partir de Documentos XML Florianópolis - SC 2006
Keli Cristina Manini Susane Schmidt Uma Ferramenta para Geração de Esquemas XML a partir de Documentos XML Trabalho apresentado como requisito para graduação em Bacharelado em Ciências da Computação Orientador: Ronaldo S. Mello Universidade Federal de Santa Catarina - UFSC Departamento de Informática e Estatística - INE Florianópolis - SC 2006
Sumário Lista de Figuras 1 Introdução p. 4 2 XML - extensible Markup Language p. 6 3 Esquemas p. 9 3.1 DTD - Document Type Description.................... p. 9 3.2 XML Schema................................ p. 11 4 Trabalhos Relacionados p. 13 4.1 XTRACT: Um sistema para extração de DTDs a partir de documentos XML..................................... p. 13 4.2 DataGuides: Enabling Query Formulation and Optimization in Semistructed Databases.............................. p. 14 4.3 Extração de esquemas de dados XML: Uma Abordagem de Gramática de Inferência................................. p. 15 5 Conclusão p. 19 Anexo A -- Codigos p. 20 Referências p. 21
Lista de Figuras 1 Estrutura XML............................... p. 8 2 Exemplo do documento XML com DTD................. p. 8 3 Estrutura XML............................... p. 8 4 Sintaxe e exemplo de uma declaração de atributo............ p. 10 5 Sintaxe e exemplo de uma declaração de entidade............ p. 11 6 Elemento Simples de XML Schema.................... p. 11 7 Exemplo Elemento Complexo de XML Schema.............. p. 12 8 Exemplo Elemento Complexo de XML Schema.............. p. 12 9 Exemplo documento XML Campeonato Europel de Futebol...... p. 16 10 Exemplo XML Schema Campeonato Europel de Futebol........ p. 17
4 1 Introdução XML (Extensible Markup Language) emergiu como um novo padrão para troca e manipulação de documentos estruturados. (1) Este fato ocorreu devido a grande quantidade de vantagens que este padrão de linguagem representa. O formato XML é alto-descritivo; documentos XML formam coleções de elementos aninhados hierarquicamente; a estrutura interna destes documentos pode ser padronizada em esquemas que auxiliam na organização, clareza e utilização destes. Por estes e demais motivos a sociedade de bancos de dados tem investido cada vez mais no estudo de XML e novas técnicas e ferramentas vem sendo desenvolvidas. A especificação de um esquema torna-se importante pois permite a integração e validação de dados XML baseados no seu esquema. A partir desta especificação é possível verificar a equivalência dos dados, e então unir documentos com o mesmo conteúdo gerando arquivos mais completos e corretos. Outra vantagem é que a existência de um esquema facilitará o mapeamento de dados XML para um esquema relacional e também tornará eficiente a formulação, otimização e o planejamento de queries. Apesar de ser muito importante, a maioria dos documentos XML ainda não possui um esquema acompanhando, e mesmo que o possuírem, é provável que os esquemas não sejam idênticos.este fator levou-nos a pensar numa ferramenta que pudesse solucionar, mesmo que parcialmente, este problema, já que a integração de dados tornou-se fundamental devido a grande quantidade de dados que circulam na Web atualmente. Algumas ferramentas já foram desenvolvidas no sentido de tentar sanar o problema anteriormente mencionado. Porém, elas geram o esquema a partir de um único documento XML. O nosso objetivo é implementar um software que possibilite ao usuário entrar com vários documentos de mesma autoria e a partir disto gerar um esquema único e completo. No entanto, um dos maiores problemas na formação de um esquema está relacionado a alcançar um esquema que consiga ser completo e compacto, já que estas são características indiretamente proporcionais: tendem a ser ou muito volumosas ou não são intuitivas. (2)
5 Encontrar um esquema que consiga balancear estas duas características é mais um dos problemas que tentaremos solucionar.
6 2 XML - extensible Markup Language XML, padrão popular do consórcio W3C, surgiu como o novo padrão para troca, representação e manipulação de documentos estruturados (1). Como o próprio nome diz, é uma linguagem de marcação, com formato aberto, isto é, o próprio desenvolvedor cria os elementos que serão utilizados para construir o documento (3). Pela sua versatilidade e capacidade de extensão, XML é, na verdade, uma meta-linguagem que serve de definição de novas linguagens de marcação. (4) Um documento XML é onde são definidos os dados XML (5). Estes documentos XML formam uma coleção de elementos aninhados hierarquicamente (1) com instruções especiais, chamadas tags que servem de delimitadores de informação. (5). O conceito de tags é também utilizado na linguagem HTML.Apesar das semelhanças apresentadas nessas duas linguagens, existem diferenças fundamentais. Uma delas é em relação ao uso das tags, que apresentam-se pré-definidas em um documento HTML, enquanto possui valor semântico na linguagem XML. Outra diferença importante está relacionada com a função específica de cada linguagem. Enquanto a função da linguagem HTML está dividida entre estruturar o documento e disponibilizá-lo no navegador, XML preocupa-se com a estruturação da informação.(3) Cada documento XML possui uma estrutura lógica e física. A estrutura física permite componentes de documentos chamados entidades, que podem ser nomeadas ou armazenadas separadamente. (4) A estrutura lógica é composta de declarações, elementos, comentários, enfim, tudo o que estiver indicado no documento através de marcação.(6) A figura 1 mostra um pouco da estrutura de um documento XML. A característica que determina o esqueleto de documento XML está ligada à noção de esquema, que pode opcionalmente acompanhar um documento XML. (2) Um esquema tem como função descrever a estrutura interna de um documento XML.Existem dois tipos de esquemas: DTD (representado na figura 2) e XML Schema(figura 3.
7 <note> <date>2006-08-01</date> <to>professor</to> <from>keli e Susane</from> <heading>note</heading> <body>n~ao esqueça de dar uma boa nota!</body> </note> Figura 1: Estrutura XML <?xml version- 1.0?> <!DOCTYPE note [ <!ELEMENT note (to, from, heading, body)> <!ELEMENT to (#PCDATA)> <!ELEMENT from (#PCDATA)> <!ELEMENT heading (#PCDATA)> <!ELEMENT body (#PCDATA)> ]> <note> <to>professor</to> <from>keli e Susane</from> <heading>lembrete</heading> <body>n~ao esqueça de dar uma boa nota!</body> </note> Figura 2: Exemplo do documento XML com DTD COLOCAR EXEMPLO DE XML SCHEMA <to>professor</to> <from>keli e Susane</from> <heading>lembrete</heading> <body>n~ao esqueça de dar uma boa nota!</body> </note> Figura 3: Estrutura XML
8 3 Esquemas Esquemas são a forma como um documento XML pode ser estruturado. Através do uso destas estruturas diferentes desenvolvedores podem interagir integrando duas ou mais coleções heterogenias de dados no formato XML, isso devido ao fato de diferentes documentos poderem possuir o mesmo esquema. Ferramentas que unam dois ou mais arquivos XML vem sendo estudadas por pesquisadores e desenvolvedores a declaração de esquemas torna-se uma maneira organizada e eficiente para que possa haver a fusão de tais documentos. Atualmente existem alguns tipos diferentes de esquemas para XML: DSD, Schematron, DTD e XML Schema. Os dois últimos são os esquemas mais utilizados pela comunidade, por isso esses possuíram prioridade em nossos estudos. 3.1 DTD - Document Type Description A ferramenta DTD é um conjunto de regras que define as instruções que serão enviadas ao analisador sintático para o documento que está para ser analisado.(3)essas regras definem o tipo dos elementos que podem ser usados e definem a hierarquia e granularidade do texto. (4) Um DTD possui a capacidade de definir o conteúdo de um elemento no formato de expressões regulares (1). Projetado inicialmente para gerenciamento de aplicações (2), DTD permite a validação de documentos XML, torna eficiente o armazenamento de dados XML, já que facilita a integração de dados através do esquema, a formulação, otimização e processamento de consultas sobre documentos XML. (2) Um DTD é composto por declarações. Cada declaração está de acordo com o formato de marcação <!... > e é classificado pelos tipos: ELEMENT (definição de elementos), ATTLIST (definição de atributos), ENTITY (definição de entidades) e NOTATION (definição de tipos de dados). Essas declarações são agrupadas juntas dentro de um
9 DTD.(4) Os elementos constroem os blocos principais. Eles podem conter texto, outros elementos, ou estarem vazios.(7) Na declaração do elemento é possível também declarar a quantidade de ocorrências do mesmo elemento: Uma única ocorrência: <!ELEMENT element-name (child-name)> Mínimo de uma ocorrência: : <!ELEMENT element-name (child-name+)> Zero ou mais ocorrências: <!ELEMENT element-name (child-name*)> Zero ou nenhuma ocorrência: <!ELEMENT element-name (child-name?)> Um ou outro contexto: <! ELEMENT element-name(child name1 child name2) > Já os atributos contêm informações extras sobre os elementos. Estão sempre localizados dentro de uma tag de um elemento e vem sempre aos pares (nome/valor), como pode ser observado na figura 4. (7) O primeiro parâmetro na declaração será o nome seguido do tipo do atributo que pode variar dentro das seguintes possibilidades: CDATA, NMTOKEN, NMTOKENS, ENTITY, ENTITIES, ID, IDREF, IDREFS, notatione name group. (4) O parâmetro final é o valor que especifica o valor que será atribuído ao texto quando o autor do documento não entra com o valor. (4) Os valores que podem ser usados são: #REQUIRED(o valor do atributo deve estar incluso no elemento), #IMPLIED (O atributo não precisa estar incluso) e #FIXED (O valor do atributo é fixo).(7) <!ATTLIST element-name attribute-name attribute-type defaul-value> Exemplo: DTD: <!ATTLIST pagamento type (cheque dinheiro) dinheiro > XML: <pagamento type= cheque > ou <pagamento type= dinheiro > Figura 4: Sintaxe e exemplo de uma declaração de atributo As entidades, 5 são variáveis usadas para definir textos comuns. Uma entidade é utilizada para evitar a repetição de textos similares. Isto reduzirá a carga de trabalho, fará com que apareçam menos erros e facilitará o entendimento da estrutura DTD. (4) A notação identifica tipos binários externos específicos e passa a informação para a aplicação.
10 <!ENTITY entity-name entity-value > Exemplo: DTD: <!ENTITY livro-name Código da Vinci > <!ENTITY autor Dan Brown > XML: <livro>&livro-name;&autor;</livro> Figura 5: Sintaxe e exemplo de uma declaração de entidade 3.2 XML Schema O esquema XML SCHEMA foi aprovado pela W3C em 16 de março de 2001. Surgiu para ser o sucessor de esquemas DTDs por isso possuí todas as funcionalidades deste e ainda características específicas que o fazem superior. A intenção (proposta) de um XML SCHEMA é definir a construção de blocos de um documento XML(6). Diferente de DTDs, este tipo de esquema é estruturado seguindo o mesmo formato sintático de XML esse fato possibilita a utilização de processadores XML para fazer a validação dos esquemas escritos em XML SCHEMA (3), bem como a manipulação de um SCHEMA com XML DOM (6). Duas outras importantes características ausentes nos DTDs e presentes neste esquema são a possibilidade de estender documentos para futuras adições e a capacidade de suportar namespaces. Para que tais características fossem possíveis os componentes sintáticos de SCHEMA apresentam algumas peculiaridades que o fazem mais complexo e ao mesmo tempo mais poderoso do que os demais esquemas existentes. Os elementos declarados em XML SCHEMA podem ser do tipo simples ou complexo. Os primeiros são os elementos formados somente por texto como podemos observar na figura 6. O segundo tipo são aqueles que possuem outros elementos aninhados dentro de sua estrutura e/ou atributos que determinam o comportamento dos dados inseridos no documento, exemplo na figura 7. <xs:element name= firstname type= xs:string > Figura 6: Elemento Simples de XML Schema Algumas das principais vantagens de XML SCHEMA ocorrem por causa da declaração de atributos. Devido à existência destes é possível definição de diferentes classes de dados (String, Decimal, Integer, Boolean, Date e Time). Outra contribuição importante é a possibilidade de criar restrições semelhantes as utilizadas em modelos relacionais tais como: conteúdo, tamanho, valor, etc.
11 <xs: element name = employee > <xs:complextype> <xs:sequence> <xs:element name= firstname type= xs:string /> < xs:element name= lastname type= xs:string > </xs:sequence > </xs:complextype> </xs:element> Figura 7: Exemplo Elemento Complexo de XML Schema A figura 8 é um exemplo de um XML Schema com todas as características presentes nestes esquemas: elementos complexos, restrições, atributos, namespace, dentre outras. <?xml version= 1.0 encoding= ISO-8859-1 > <xs:schema xmlns:xs= http://www.w3.org/2001/xmlschema elementformdefault= qualified <xs: element name = persons > <xs:complextype> <xs:sequence> <xs:element name= person maxoccurs= unbounded > <xs:complextype> <xs:sequence> < xs:element name= full_name type= xs:string /> < xs:element name= child_name type= xs:string minoccurs= 0 maxoccurs= 5 /> </xs:sequence> </xs:complextype> </xs:element> </xs:sequence > </xs:complextype> </xs:element> </xs:schema> Figura 8: Exemplo Elemento Complexo de XML Schema
12 4 Trabalhos Relacionados A partir dos estudos realizados com base nos trabalhos relacionados a seguir, será escolhido as melhores e mais eficientes técnicas, e estas poderão ser adaptadas para o desenvolvimento da ferramenta desejada. 4.1 XTRACT: Um sistema para extração de DTDs a partir de documentos XML Este trabalho busca encontrar o DTD perfeito, combinando precisão e intuição, através de uma seqüência de passos que envolvem a procura de padrões nas seqüências de entrada (2), seguindo de uma fatoração dos possíveis candidatos gerados no passo anterior e concluindo com a aplicação do princípio da Descrição do Tamanho Mínimo. No primeiro passo, chamado de generalização, será empregado algoritmos heurísticos para encontrar padrões em cada seqüência de entrada e então substituí-las por expressões regulares apropriadas para produzir candidatos mais gerais. O principal objetivo deste passo é introduzir metacaracteres (, +,?,...) para produzir sub-expressões que gerem os padrões observados nas seqüências de entrada.(2) Isto é realizado através da descoberta de freqüências e de ocorrências próximas de subseqüências e símbolos em cada seqüência de entrada.(2) Por exemplo, se tivermos como entrada a seqüência abababcababc, este passo vai verificar que o a seqüência ab utilizado dois campos e substituirá por expressão A1. Como resultado teremos A1cA1c, e finalmente será substituído pelo termo ((ab) c) O segundo passo, conhecido como Fatoração, herda os candidatos a DTD obtidos no passo anterior e tenta torná-los mais concisos através da aplicação de técnicas adaptadas apropriadamente da literatura de otimização lógica.(2) A fatoração é usada para tentar obter DTD de menor tamanho e conseqüentemente, melhor qualidade. Supondo que temos como entrada a seqüência I = ab, abab, ac, ad, bc, bd.bbd, bbbbe e o módulo da generalização gerou o seguinte resultado: G = I (ab), (a b), b d, b e. Através da
13 fatoração teremos F = G (a b)(c d), b (d e) e então, isto será passado para o próximo passo que é responsável por definir qual, entre todas as opções geradas, será o DTD ótimo. No terceiro e mais importante passo será aplicado o princípio da Descrição do tamanho Mínimo. Este mecanismo irá classificar cada candidato a DTD com base no custo atribuído a cada DTD. Este custo dependerá do tamanho da teoria, em bits, que será o responsável para encontrar um DTD conciso, e do tamanho dos dados, em bits, que definirá a precisão do candidato.(2) Por exemplo, considerando a entrada I = ab, abab, ababab e considerando que entre os resultados encontrados estejam (1) ab abab ababab e (2) (ab). No cálculo do custo do resultado (1) teremos 17, sendo 14 para codificar o DTD (quantidade de caracteres) +3 para codificar a seqüência de entrada (1 caracter para cada posição de entrada). Já no cálculo do resultado (2) foi obtido 8, sendo 5 para a codificação do DTD e 3 para codificação da seqüência de entrada (necessário para especificar o número de repetições do termo ab para cada seqüência). (2) Neste caso, o DTD escolhido seria o número 2, pois ele conseguiu captar um DTD que consegue abranger toda a seqüência de entrada e, ao mesmo tempo, é compacto. Segundo o artigo, os resultados obtidos na utilização deste sistema são satisfatórios, já que sempre consegue encontrar um DTD ótimo ou muito próximo disto. Porém, ainda não foram feitos estudos para ampliar o sistema para captação de um XML Schema, que é, atualmente, o esquema recomendado pela W3C. 4.2 DataGuides: Enabling Query Formulation and Optimization in Semistructed Databases O DataGuide foi introduzido para aproveitar os benefícios de um esquema. Os Data- Guides são um sumário estrutural de banco de dados semi-estruturados concisos e exatos, que agem como esquemas dinâmicos. Gerados a partir de um banco de dados, são utilizados para formulação de queries, armazenamento de informação e também possilitam a otimização das queries.(8) Este artigo baseia-se no Object Exchange Model (OEM). Em OEM, cada objeto contém um objeto identificador e um valor, que pode ser atômico ou complexo. Também baseia-se na Linguagem de Lore, criada na Universidade de Stanford, e na conversão de autômatos finitos não-determinísticos (AFND) para autômatos finitos determinísticos(afd). DataGuides descrevem um caminho único rotulado com exatamente uma fonte, sem levar em conta o número de vezes que o DataGuides aparecesse na fonte. Para garantir
14 exatidão, foi especificado que o DataGuide não codificaria o caminho que não aparece na fonte e para garantir conveniência, o DataGuides deve ser um OEM para que possa armazenar e acessar o DataGuides usando as mesmas tecnologias disponíveis para processar o OEM. (8) 4.3 Extração de esquemas de dados XML: Uma Abordagem de Gramática de Inferência O artigo de Boris Chidlovskii enfatiza a importância de se possuir uma definição de esquema para documentos XML e propõe uma alternativa para a extração deste esquema através do relacionamento sintático de documentos XML com linguagens Livre de Contexto, ou melhor, uma extensão dessas linguagens. Através de métodos desenvolvidos para este tipo de gramática e também para as regulares foi possível criar um algoritmo baseado em Gramáticas Livre de Contexto de Inferência para realizar a extração do XML SCHEMA de documentos XML. O autor defende seu ponto de vista alegando que dados XML são equivalentes a um exemplo estruturado na teoria da Inferência Gramatical. No algoritmo sugerido por este trabalho primeiramente o documento XML é mapeado para um formato de uma linguagem livre de contexto. Posteriormente métodos de comparação seguidos de métodos de fatoração e consecutivos merges de elementos mapeados possibilitam a obtenção de uma estrutura ainda no formato de gramática que finalmente será uma aproximação do esquema do documento XML. O algoritmo pode ser descrito através dos seguintes passos: 1) Representar documentos XML como um conjunto estruturado de dados; 2) Induzir uma gramática livre de contexto estendida (G) para o documento XML em questão (I); 2.1) Criar o conjunto inicial de não terminais N; 2.2) Fundir os elementos não-terminais de N que possuem conteúdo e contexto similares; 2.3) Determinar tipos de dados para os terminais em G; 3) Transformar o resultado da Gramática Livre de Contexto Estendida G em uma definição XML SCHEMA S.
15 Para melhor entendimento do algoritmo será demonstrado, através de um exemplo, os resultados obtidos a cada passo, possibilitando assim uma melhor visualização da idéia do autor do artigo. A figura 9 possuí um documento XML que contem informações sobre clubes do futebol europeu e sua situação dentro dos campeonatos que já disputaram. <teams> <team><name>juventus</name> <ChLeague> <year>1999</year><result>semi-final</result> <year>1997</year><result>final</result>...//5 success in total </ChLeague> <UEFA> <year>1995</year><result>final</result>... // 7 success in total </UEFA> </team> <team><name>manchester United</name> <ChLeague> <year>1999</year><result>winner</result>... // 4 success in total </ChLeague> </team>... // 46 teams in total </teams> Figura 9: Exemplo documento XML Campeonato Europel de Futebol A figura 10 mostra como seria o correto XML Schema correspondente ao arquivo dos clubes de futebol europeus. A figura 9 representa o primeiro passo do algoritmo. A seguir é necessário que se faça o mapeamento dos elementos presentes no documento XML para a GLCE G. A correspondente GLCE é dada por G = (T,N,D,&,Start) onde T={teams, team, name,...}, N = {Start, TeamType, ListType}, D = {String, PositiveInteger}, and & contem a seguinte regra de produção: Start -> teams:teamstype TeamsType -> (team:teamtype) [0:500] TeamType -> name:string (ChLeague:ListType) [0:1] (UEPA: ListType) [0:1] ListType -> (year:positiveinteger result:string) [1:100] O próximo passo do algoritmo é a geração do conjunto inicial de não terminais. Para melhor visualização o autor associou o tipo genérico Any para os elementos simples e um rótulo para cada elemento complexo do documento XML. Logo o resultado do passo 2.1 do algoritmo é:
<element name = teams > <complextype> <element name = team type = TeamType maxoccurs = 500 /> </complextype> <complextype name = TeamType > <element name = name type = String /> <element name = ChLeague type = ListType minoccurs = 0 maxoccurs = 1 / <element name = UEFA type = ListType minoccurs = 0 maxoccurs = 1 /> </complextype> <complextype name= ListType > <group minoccurs = 1 maxoccurs= 100 > <element name = year type = PositiveInteger /> <element name = result type = String /></group> </complextype> </element> 16 Figura 10: Exemplo XML Schema Campeonato Europel de Futebol Start -> team:a1 team: A2 team: A3... (46 teams in total) A1 -> name: Any ChLeague: A47 UEFA: A48 A2 -> name: Any ChLeague: A49 A3 -> name: Any... A47 -> year: Any result: Any... // (7 year-result pairs in total) A48 -> year: Any result: Any... // (5 pairs) A49 -> year: Any result: Any... // (4 pairs)... Após obtidos os não terminais é necessário fazer a fusão entre os elementos similares. O primeiro não terminal a receber a sofrer a fusão é o Start, pois suas produções possuem ambigüidade com o terminal team. O resultado da fusão continha termos ambíguos com terminais ChLeague, portanto foram fundidos os não-terminais A47 e A49. Estas fusões geraram o seguinte conjunto de produções: Start -> team:a1 team:a1 team:a1... (46 teams in total) A1 -> name: Any ChLeague: A47 UEFA: A48 A1 -> name: Any ChLeague: A47 A1 -> name: Any A47 -> year: Any result: Any... // (7 pairs) A48 -> year: Any result: Any... // (5 pairs)
17 A47... -> year: Any result: Any... // (4 pairs) Observa-se neste resultado que os não-terminais A47 e A48 estão repetindo os pares de elementos year e result, por isso serão fundidos. O resultado obtido após as fusões é uma Gramática Livre de Contexto com os não-terminais que geram diferentes produções. Start -> (team:a1) [46] A1 -> name: Any ChLeague: A47 UEFA: A47 name: Any ChLeague: A47... A47 -> (year: Any result: Any) [7] year: Any result: Any)[5]... Como último passo do algoritmo referente a produção da gramática que servirá de base para a obtenção do XML Schema são analisadas as produções e através de métodos ( ainda não estudados a fundo) é obtido a seguinte gramática: Start -> (team: A1) [46] A1 -> name: String (ChLeague: A4) [0:1] (UEFA:A4) [0:1] A4 -> (year: UnsignedShort result: String) [0:8]
5 Conclusão 18
ANEXO A -- Codigos 19
20 Referências 1 CHILDLOVSKII, B. Schema extraction from xml data: A grammatical inference approach. 2 GAROFALAKIS, M. et al. Xtract: A system for extracting document type descriptors from xml documents. 3 JR., J. R. T. XML Schema. [S.l.]: Visual Books Ltda, 2002. 4 BRADLEY, N. The xml schema companion. 2003. 5 FRANTZ, A. P. Um processo de conversão de xml schemas para um conceito conceitual. 6 W3C. World Wide Web Consortium. Acesso em 10/2006. Disponível em: <www.w3c.org>. 7 W3SCHOOL. w3cschool.com. Acesso em 10/2006. Disponível em: <www.w3cschool-.com>. 8 GOLDMAN, R.; WIDOM, J. Dataguides: Enabling query formulation and optimization in semistructed databases.