Aprendendo XML por meio de um estudo de caso Willie Dresler Leiva São Carlos, 7 de outubro de 1999 • • • • • • • • • • • • • Roteiro Documentos WYSIWYG, HTML e XML Descrição do estudo de caso Passos para criar e apresentar documentos XML Modelo dos objetos para laboratórios de pesquisa Definição de tipo de documentos sobre laboratórios Um documento XML com 2 laboratórios de pesquisa Documento XSL para apresentar o documento XML Modos alternativos para apresentar o documento XML Processando XML com SAX Processando XML com DOM Relacionamentos entre os vários conceitos Editores XML Considerações finais Documento WYSIWYG versus XML XML XSL DTD Limitações de HTML • HTML não permite criar novos elementos • Pouca semântica pode ser extraída de um documento, levando à dificuldade de manutenção e compreensão. A informação é representada em termos de layout • Documentos não são reutilizáveis Vantagens de XML •Criar elementos e estruturas. Ex.: <Titulo> Seminário </Titulo>, em vez de <H1>Seminário</H1> de HTML • Há documento para definição de documentos (DTD) • XML é mais legível e flexível que HTML • Os elementos não influenciam na forma como os documentos são apresentados • XML é mais simples que SGML Estudo de caso • Objetivos: criar um documento XML sobre laboratórios de pesquisa, apresentar esse documento na WWW • Sobre cada laboratório, é importante incluir suas linhas de pesquisa e os professores que nele atuam • Dados gerais sobre cada laboratório: sigla, significado da sigla, departamento, instituto, home-page, foto ou logotipo • Dados sobre as linhas de pesquisa: nome, descrição e tópicos específicos • Dados sobre os professores: nome, nível (titular, adjunto ou associado), endereços eletrônicos, páginas na WWW Como implementar o estudo de caso • Criar um modelo de objetos do domínio, definindo um conjunto de classes que represente a informação armazenada nos documentos XML desse domínio (a literatura sobre XML não inclui esse passo) • Definir o tipo do documento escrevendo uma DTD • Com base na DTD, escrever o(s) documento(s) XML • Definir correspondência entre elementos XML e HTML • A partir dessa correspondência escrever o arquivo XSL • Se quiser, incluir elementos da Cascading Style Sheet Modelo de objetos, em UML Como escrever uma DTD • Uma DTD contém basicamente elementos e atributos • Exemplos de como definir um elemento: • <!ELEMENT Imagem EMPTY> • <!ELEMENT QualquerCoisa ANY> • <!ELEMENT cliente (nome, endereco, cidade)> • <!ELEMENT fruta ( laranja | banana | pera )> • <!ELEMENT pessoa (nome, endereco, telefone*)> • <!ELEMENT empresa (nome, CGC, FAX?)> • <!ELEMENT paragrafo (#PCDATA)> Como descrever atributos na DTD • Exemplos de como definir atributos de um elemento: • <!ATTLIST Telefone DDD CDATA #IMPLIED> • <!ATTLIST Fruta qualidade (Boa|Ruim|Indiferente)> • <!ATTLIST Fruta comestivel #FIXED “SIM”> • <!ATTLIST Aluno NumeroUSP ID #REQUIRED> • <!ATTLIST Chamada Aluno IDREF #REQUIRED> • <!ATTLIST Professor PAE IDREFS #IMPLIED> DTD sobre laboratórios <!-- Este DTD descreve os laboratorios de um Departamento --> <!ELEMENT Laboratories (Laboratory+)> <!-- Nao mostra o texto com espacos em branco adicionais --> <!ATTLIST Laboratories xml:space (default | preserve) 'default'> <!ELEMENT Laboratory (Group, Identification?, Department, Institute, Page?, Picture?, Research*, Teacher+)> <!ELEMENT Group (#PCDATA)> <!ELEMENT Identification (#PCDATA)> <!ELEMENT Department (#PCDATA)> <!ELEMENT Institute (#PCDATA)> <!ELEMENT Page (#PCDATA)> <!ELEMENT Picture EMPTY> <!-- Picture tem um texto alternativo, assim como IMG em HTML --> <!ATTLIST Picture file CDATA #REQUIRED text CDATA #IMPLIED> <!ELEMENT Research (Line, Description?, Topic*)> <!ELEMENT Line (#PCDATA)> <!ELEMENT Description (#PCDATA)> <!ELEMENT Topic (#PCDATA)> <!ELEMENT Teacher (Name, Email*, HomePage*)> <!ATTLIST Teacher level (full | associate | assistant) #IMPLIED> <!ELEMENT Name (#PCDATA)> <!ELEMENT Email (#PCDATA)> <!ELEMENT HomePage (#PCDATA)> Um documento XML de laboratórios <?xml version="1.0" encoding="ISO-8859-1" ?> <!DOCTYPE Laboratories SYSTEM "lab.dtd"> <?xml-stylesheet type="text/xsl" href="lab.xsl"?> <Laboratories> <Laboratory> <Group>LABES</Group> <Identification>Laboratório de Engenharia de Software </Identification> <Department>SCE</Department> <Institute>ICMC</Institute> <Page>http://nt-labes.icmc.sc.usp.br/</Page> <Picture file="labes.jpg" text="LABES photo"/> <Research> <Line> Teste e Validação de Sistemas de Tempo Real/Reativos </Line> <Description>Estudos de estratégias de teste e validação baseados em máquinas de transição de estados como, por exemplo: máquinas de estados finitos(MEFs), statecharts e redes de Petri, integrados a um ambiente de desenvolvimento de software como o Statsim, que apóia a especificação e simulação de statecharts e MEF </Description> </Research> Um documento XML (continuação) <Research> <Line> Estudo Teórico e Aplicação de Critérios de Teste e Validação na Produção de Software </Line> <Description> Estudo teórico e empírico, definição e comparação de critérios de teste e implementação de ferramentas de apoio às atividades de teste na produção de software. Atividades de comparação entre critérios de teste funcional, estrutural e baseados em erros também são conduzidas. Esses aspectos são explorados tanto em nível de teste de unidade como no teste de integração. Adicionalmente, dentro dessa perspectiva, a abordagem do desenvolvimento de software orientado a objeto também está sendo considerada. </Description> </Research> <Research> <Line> Modelagem de Aplicações Hipermídia </Line> <Description>Um modelo para sistemas hipertexto baseado em StateCharts foi inicialmente desenvolvido (HMBS). Ele foi estendido para aplicações multimídia, com ênfase na sincronização. Um protótipo de suporte ao HMBS foi então construído. Essa linha de pesquisa inclui também modelagem conceitual e avaliação de hiperdocumentos, bem como o suporte a aplicativos da WWW. </Description> </Research> <Research> <Line> Reengenharia de Software </Line> <Topic>Engenharia Reversa de Software</Topic> Um documento XML (final) <Topic>FUSION-RE</Topic> <Topic>FUSION-RE/I</Topic> <Topic>Engenharia Progressiva de Software</Topic> </Research> <Research> <Line> Qualidade de Software</Line> <Topic>Desenvolvimento de ferramentas</Topic> <Topic>Validação de técnicas para gestão de projetos de software</Topic> </Research> <Research> <Line>Workflow e Gerenciamento de Documentos </Line> </Research> <Teacher level="full"> <Name>Paulo César Masiero</Name> <Email>[email protected]</Email> <HomePage>http://www.icmc.sc.usp.br/~masiero</HomePage> <HomePage>http://www.icmc.sc.usp.br/staff/masiero.html </HomePage> </Teacher> <Teacher level="assistant"> <Name>J. Carlos Maldonado</Name> <Email>[email protected]</Email> <HomePage>http://www.icmc.sc.usp.br/staff/jcmaldon.html </HomePage> </Teacher> </Laboratory> .... </Laboratories> Convertendo XML em HTML com XSL XSL (2ª parte) XSL (3ª parte) XSL (4ª parte) XSL (5ª parte) Documento XSL (última parte) Document Object Model • DOM fornece um modelo de objetos em árvore • Um parser que implementa DOM cria na memória uma hierarquia de objetos, com base no documento XML Simple API for XML • SAX é muito simples, porque o parser apenas lê o documento XML e dispara alguns eventos, dependendo das tags que encontra no documento XML • A aplicação que usa o parser SAX precisa criar: • um modelo de objetos personalizado para armazenar toda a informação própria de seus documentos XML • um interpretador dos eventos, gerados pelo parser SAX, que crie objetos conforme o modelo acima Comparando DOM e SAX • SAX pode ser rápido se o modelo de objetos for simples. Neste caso, é mais rápido que DOM porque dispensa a criação de um modelo de objetos na forma de árvore. • Para criar um sistema de gerenciamento de informações sobre documentos, ou para lidar com dados que são melhor descritos como uma árvore, DOM é uma solução natural. • Para trabalhar principalmente com dados estruturados, ou gerados pelo computador, SAX pode ser mais conveniente. Exemplos de SAX e DOM Baseado em árvore <TABLE> <TBODY> <TR> <TD>Shady Grove</TD> <TD>Aeolian</TD> </TR> <TR> <TD>Over the River, Charlie</TD> <TD>Dorian</TD> </TR> </TBODY> </TABLE> Documento HTML API DOM API SAX start table start element: tbody start element: tr start element: td characters: Shady Grove end element: td start element: td caracteres: Aeolian end element: td end element: tr Baseado em evento Processando XML com SAX XML e SAX (continuação) XML e SAX (final) Processando XML com DOM XML Notepad XML Editing Environment, Naturally in Java Considerações Finais • Grande vantagem do XML sobre o HTML: separação entre conteúdo e apresentação • Não existe uma especificação final do XSL • XML é simples, XSL nem tanto! • Nenhum browser hoje implementa XLL •Tendência dos principais fabricantes adotarem estas tecnologias Bibliografia • • • • • • • Estudo de caso: http://www.icmc.sc.usp.br/~wdl/xml “XML for the absolute beginner” XSL Developer’s Guide “SAX: the Simple API for XML” Tutorial sobre SAX “Should I use SAX or DOM?” M.G. Pimentel, C.A. Teixeira e C.C. Pinto. "Hiperdocumentos Estruturados na WWW: Teoria e Prática". Anais do XIX Congresso da SBC, JAI, pp. 367-424.