Simbiose entre Tecnologias: XML e Java



Documentos relacionados
Programação para Internet I 4. XML. Nuno Miguel Gil Fonseca nuno.fonseca@estgoh.ipc.pt

5a. Aula - XML

XML para transferência de dados Estrutura hierárquica do XML DTDs e XML Schema Consultas de documentos XML: XPath e XQuery Transformação de

XML XML. XML extensible Markup Language HTML. Motivação. W3C: World Wide Web Consortium XML 1.0. Mário Meireles Teixeira DEINF-UFMA

XMLs E INTEGRAÇÃO COM BANCOS DE DADOS

Arquivo de retorno Boleto Bancário Formato XML

Unidade 7: Documentação de Código A Importância dos Comentários Prof. Daniel Caetano

XML - Extensible Markup Language

Programação para Internet I Aulas 10 e 11

Introdução de XML. Dados da Web. Gerência de Dados da Web. A Web representa, nos dias de hoje, um repositório universal de dados, onde:

extensible Markup Language (XML) XML é uma linguagem de anotação. XML utiliza tags para descrever informação.

Extensible Markup Language (XML) Júnio César de Lima Cedric Luiz de Carvalho. Instituto de Informática Universidade Federal de Goiás

Manual para utilização da funcionalidade de importar arquivo XML para prestação de contas

XML e XSL. Ciência da Computação DESENVOLVIMENTO DE APLICAÇÕES PARA WEB. Claudinei Dias prof.claudinei.dias@gmail.com

Modelo para a representação de informações, utilizado por aplicações Web que trabalham com a tecnologia AJAX.

Classes e Objetos em Java. Algoritmos e Programação I. Classes. Classes. Modificadores de Acesso. Classes. Revisão

XML Schema. Um XML schema descreve a estrutura de um documento XML.

Simulado de Linguagem de Programação Java

RESPOSTA: import java.util.arraylist; import java.util.list; class CarrinhoDeCompras2 { List<Produto> produtos;

Fundamentos da programação Parte - 1

DATA ACCESS OBJECT (DAO)

Vamos falar de Hibernate?

01. [Sebesta, 2000] Defina exceção, manipulador de exceções, levantamento de uma exceção, desativação de uma exceção e exceção incorporada.

Introdução a classes e objetos. Prof. Marcelo Roberto Zorzan

Roteiro. Introdução. Uma Introdução à Programação Orientada a Objetos e JAVA usando NetBeans. Objetos. Princípios da Orientação a Objetos

Tratamento de Exceções

Java RMI. RMI Remote Method Invocation. Chamadas Remotas de Procedimentos (RPC) RPC - Implementação

Tipos, Literais, Operadores

Tipos, Literais, Operadores

Entrada e Saída Exercício. Linguagem Java. Adenilso da Silva Simão 01/09/05

Introdução à orientação a objetos

Computação II - Java - Prova 1 Prof. Adriano Joaquim de Oliveira Cruz /05/13. Questão: Total Pontos: Gráu:

Rui Carneiro, Rui Pereira, Tiago Orfão

Definição da Sintaxe Abstrata de Potigol em XML

Web Services. EclipseSDK/DB2 Construindo/Consumindo Serviços

INF1636 PROGRAMAÇÃO ORIENTADA A OBJETOS

TECNOLOGIA WEB INTRODUÇÃO CONSTRUÇÃO DE PÁGINAS ESTÁTICAS HTML / XHTML

Tratamento de Erros. Sérgio Luiz Ruivace Cerqueira

INF1337 LINGUAGEM DE PROGRAMAÇÃO ORIENTADA A OBJETOS

insfcanceof new public switch transient while byte continue extends for int null

Sistemas de Informação: XML- Java

Módulo 1. Introdução. Programação Orientada a Objetos I Java (Rone Ilídio)

Interfaces POO. Prof. Marcio Delamaro

Coltrane. JColtrane: Parser XML com SAX + Anotações. c o l u n a. Processe arquivos XML sem comprometer memória e a clareza do código

GESTÃO DA CADEIA DE SUPRIMENTOS FORMAS DE TROCA DE INFORMAÇÃO: EDI E XML

Encapsulamento e Métodos (Construtores e Estáticos) João Paulo Q. dos Santos

Linguagem de Programação II Implementação

PLATAFORMA SIGA RIO DAS VELHAS MANUAL DO CÓDIGO FONTE

Orientação a Objetos AULA 09

Lista de Exercícios da disciplina Aplicações de Linguagem de Programação Orientada a objetos

PROGRAMAÇÃO ORIENTADA A OBJETOS. Aula de Revisão para AV1

Manipulação de XML JAXP - DOM

UNIVERSIDADE FEDERAL DE MATO GROSSO DO SUL SISTEMAS DE INFORMAÇÃO - CÂMPUS DE COXIM FUNDAMENTOS EM ORIENTAÇÃO A OBJETOS

<NOME>ABIAS FRANCISCO DE SOUZA</NOME> <CNPJCPF> </CNPJCPF> <NMATRICULA>101264</NMATRICULA>

Linguagem de Programação Orientada a Objeto Abstração - Encapsulamento

Lista 05 Herança. public class PessoaFisica extends Pessoa { private String RG; public PessoaFisica(){ super(); } public String getrg(){ return RG; }

A composição de uma Java Server Pages (Diretivas, Elementos de Script e Objetos Implícitos)

Herança. Universidade Católica de Pernambuco Ciência da Computação. Prof. Márcio Bueno.

Exercícios de Revisão Java Básico

Sabemos que a classe é responsável por definir a estrutura e o comportamento de seus objetos. Portanto, os objetos são instâncias das classes.

Para entender o conceito de objetos em programação devemos fazer uma analogia com o mundo real:

Linguagem de Programação II Implementação

Aula 11: Desvios e Laços

Programação Estruturada e Orientada a Objetos

Linguagem XML (extensible Markup Language)

Strings e Arrays POO

Classes o Objetos. Classes, objetos, métodos e variáveis de instância

Transcrição:

Simbiose entre Tecnologias: XML e Java Marcio H. Zuchini USF - Itatiba mhzuchini@yahoo.com.br Oclair G. Prado Unisal - Americana oclair.prado@am.unisal.br Márcio Henrique Zuchini (Mestre em Engenharia Elétrica - Unicamp) Coordenador do curso de Análise de Sistemas da Universidade São Francisco (USF) Professor das disciplinas de Inteligência Artificial, Tópicos em Redes de Computadores, Algoritmos e Lógica de Programação e Banco de Dados para o curso de Análise de Sistemas e Ciência da Computação da USF. Av. Imperatriz Leopoldina, 390 ap.4 Cep 13073-010 Vila Nova Campinas - SP Tel.: (19) 3212-1889 E-mail: mhzuchini@yahoo.com.br Oclair Gallacini Prado (Mestre em Engenharia Elétrica - Unicamp) Professor das disciplinas Tópicos Especiais em Informática (TEIN), Implementação de Projetos (IMPP) e Lógica e Algoritmos (LOAL) para o curso de Análise de Sistemas na unidade de Americana do Unisal. Rua Uruguaiana, 431 apto 112 Cep 13026-001 Bosque Campinas SP Tel.: (19) 9702-9429 E-mail: oclair.prado@am.unisal.br

Simbiose entre Tecnologias: XML e Java RESUMO Este trabalho apresenta uma visão sobre como duas tecnologias bastante atuais, XML e Java, têm se beneficiado mutuamente e revertido seus bons resultados para a comunidade de usuários de informática. Também é apresentado um exemplo didático e prático para melhor esclarecer os detalhes técnicos aqui apresentados. ABSTRACT This work presents a point of view about how two new technologies, XML and Java, have been helping each other and how this association has been offering its good results to the community of computer users. It is also presented didactic and practical sample to better clarify the technical details showed here. PALAVRAS-CHAVES XML, SGML, DTD, Java 1. INTRODUÇÃO XML [2] vem se tornando cada vez mais um padrão de fato para o armazenamento de informações que não requeiram o uso de um gerenciador de bando de dados. Estamos assistindo à rápida migração das informações gravadas em arquivos em formato texto puro para arquivos bem formatados baseados em XML. Existem vários motivos para esta transição, entre eles podemos destacar que arquivos baseados em XML são muito mais agradáveis aos olhos humanos do que os outros baseados em texto puro, onde não se sabe direito o que cada posição significa. Outro fator importante é a facilidade de uso e abundância de ferramentas livres e muitas vezes, sem custo, para manipulação de arquivos XML. Também podemos mencionar a necessidade de integração entre aplicações como forte impulsionador para a rápida aceitação de XML como um padrão para troca de informações.

Existem bons documentos disponíveis gratuitamente na Internet sobre o uso de XML com a linguagem de programação Java [1]. Um dos mais completos é o que pode ser obtido a partir da SUN [3], mas muitos outros podem ser encontrados usando qualquer ferramenta de busca como Google ou Altavista. Estes documentos discutem este assunto em detalhes e poderão fornecer as informações que não puderem ser apresentadas neste trabalho. Procuramos apresentar aqui um exemplo diferente dos clássicos exemplos sobre Java com XML, que apenas recuperam as informações de um arquivo XML e as apresentam em tela, conforme representado na Figura 1. Isto é interessante para o aprendizado, mas de pouca utilidade para um sistema que precisa utilizar estas informações em diferentes pontos e diferentes momentos de sua execução. Figura 1: Exemplo comum. O objeto Parser apenas lê o arquivo XML e o apresenta em tela. Normalmente, queremos que um programa manipule as informações do arquivo de alguma forma mais elaborada e não que ele simplesmente as apresente em tela. Para isto nem precisamos de um programa

Java, pois XML é bastante intuitivo e pode ser lido diretamente com quase todos os navegadores e com certeza pode ser manipulado por qualquer editor de texto. 2. CONSIDERAÇÕES SOBRE XML XML ou Extensible Markup Language foi finalizado em 1998 pelo World Wide Web Consortium (W3C) e desde então vem sendo adotado com grande velocidade em muitas aplicações em todos os países [4]. XML foi desenvolvido a partir de outra metalinguagem mais antiga e muito genérica, a SGML ou Standard Generalized Markup Language. SGML foi padronizada pela ISO em 1986 como sendo uma linguagem voltada a definição de outras linguagens, ou seja, uma metalinguagem. A partir do SGML foram definidas várias linguagens, entre elas pode-se destacar a HTML e XML que será analisado mais detalhadamente neste trabalho. Assim como SGML, XML também é uma linguagem para definir outras linguagens (metalinguagem) e por isto ela recebe este nome Extensible ou, em Português, Extensível. A linguagem HTML possui todos os seus marcadores (tags) previamente definidos e qualquer alteração requer anos de estudo e validação por comitês internacionais. Como XML nasceu para ser uma metalinguagem e assim poder dar origem a outras linguagens, ela não sofre deste mal. Podem ser definidos novos marcadores a qualquer momento, desde que sejam seguidas algumas regras básicas. Facilmente cria-se uma nova linguagem que pode ser interpretada e apresentada por qualquer navegador da internet e também será de fácil entendimento por uma pessoa que olhe o arquivo usando um editor de texto. Segundo as regras para criar novos marcadores de XML, orienta-se que os marcadores devem sempre aparecer aos pares, com exceção dos marcadores vazios. Um marcador pode conter uma lista de atributos e também pode conter outros marcadores. Sua seqüência de abertura e fechamento, porém, deve ser respeitada como a dos parênteses. Esta idéia de um marcador poder conter outros lembra a estrutura de uma árvore, que é bem conhecida dos programadores por facilitar o tratamento estruturas complexas de

informações. A seguir apresenta-se um exemplo de um marcador com dois atributos que contém outro marcador, este último contém somente um atributo: <marcador1 atributo1= valor1 atributo2= valor2 > <marcador2 atributo1= valor1 > </marcador2> </marcador1> A definição sobre quais marcadores e que atributos podem ser utilizados por um documento XML pode ser registrada em um arquivo de definições de tipo chamado Data Type Definition (DTD) ou em XML Schema [5]. O exemplo deste trabalho usa DTD por ser mais simples e mais freqüentemente utilizado do que XML Schema. 3. UM EXEMPLO DIDÁTICO E PRÁTICO Este exemplo apresenta como um programa Java pode ler as informações gravadas em um arquivo XML e como estas informações podem ser incorporadas em algum objeto para ser manipulado em outras partes e instantes durante a execução do sistema. Um uso mais prático e interessante seria a criação de um objeto, a partir de um arquivo XML contendo as preferências de um usuário, para ser manipulado por outros objetos de um sistema, conforme representado no diagrama da Figura 2.

Figura 2: Exemplo prático. O objeto janela cria um objeto usuário para receber as opções do usuário que estão gravadas em um arquivo XML. Estas informações sobre o usuário devem estar disponíveis em diversos pontos do sistema e por isto elas serão carregadas para o objeto Usuário e poderão ser recuperadas em qualquer outro ponto do sistema e por qualquer outra classe que receba sua referência. As listagens 1, 2 e 3 apresentam os códigos principais das classes envolvidas neste exemplo. Listagem 1 (Usuário.java): Extrato da classe Usuário com seus atributos e com o método de persistência em arquivo XML. public class Usuario { String nome = "Desconhecido"; //Nao identificado String codigo = "0"; //Nao identificado int cordofundo = -1; //Default = branco

int cordafonte = -16777216; //Default = preto gets e sets public void persistir() throws Exception{ try{ String nomearq = getnome(); if(!nomearq.endswith(".xml")){ nomearq = nomearq + ".xml"; PrintWriter fileout = new PrintWriter( new BufferedWriter( new FileWriter( nomearq ))); fileout.println( "<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>" ); fileout.println( "<!DOCTYPE usuario SYSTEM \"usuario.dtd\">" ); fileout.println( "<usuario>" ); fileout.println( " <identif nome=\"" + getnome() + "\"" ); fileout.println( " codigo=\"" + getcodigo() + "\"/>" ); fileout.println( " <preferencias cor_do_fundo=\"" + getcordofundo() + "\"" ); fileout.println( " cor_da_fonte=\"" + getcordafonte() + "\"/>" ); fileout.println( "</usuario>" ); fileout.flush(); fileout.close(); catch(exception e){ throw e ; Esta classe é responsável por gerar os objetos que serão carregados com as opções do usuário para serem utilizados por outros objetos em todo o sistema. Listagem 2 (Janela.java): Extrato da classe Janela com seus atributos e com os métodos mais interessantes para este trabalho. public class Janela extends JFrame {... public Usuario lerpreferencias( String username){ Usuario usu = new Usuario(); if(!username.endswith(".xml")){ username = username + ".xml"; File arq = new File(userName); if(arq.exists()){ Parser parser = new Parser(); parser.parserhandlercreate(username,usu);

return usu; public static void main(string[] args) { String nomeusu; Janela jan = new Janela(); nomeusu = JOptionPane.showInputDialog("Digite seu nome: ","Default"); Usuario novousu=jan.lerpreferencias(nomeusu); novousu.setnome(nomeusu); jan.criarjanela(novousu); jan.setusuref(novousu); jan.show(); Nesta listagem sobre a classe Janela foram deixados somente os métodos main que inicia todo o processamento e o método lerpreferências que é o encarregado de criar o objeto Parser a partir da implementação da SUN do interpretador XML baseado na especificação SAX (Simple API for XML parsing) [3]. Existe outra especificação bastante interessante chamada DOM (Document Object Model) que é bem mais complexa e permite maior controle sobre os arquivos XML mas não será necessária neste exemplo. Listagem 3 (Parser.java): Extrato da classe Parser com os métodos de interesse para este trabalho. public class Parser extends DefaultHandler{ static Usuario usuint; public void parserhandlercreate( String nomearq, Usuario usu ){ usuint = usu; //Associa as estruturas SAXParserFactory spf = SAXParserFactory.newInstance(); spf.setvalidating( true ); spf.setnamespaceaware( true ); XMLReader xmlreader = null; try{ SAXParser saxparser = spf.newsaxparser(); xmlreader = saxparser.getxmlreader(); xmlreader.setcontenthandler( new Parser()); xmlreader.seterrorhandler( new ParserErrorHandler()); xmlreader.parse( nomearq );

catch( Exception e ){ e.printstacktrace(); public void startelement( String namespaceuri, String localname, String rawname, Attributes atts) throws SAXException{ if( localname.equals( "identif" )){ usuint.setnome( atts.getvalue( "nome" )); usuint.setcodigo( atts.getvalue( "codigo" )); if( localname.equals( "preferencias" )){ try{ usuint.setcordofundo( Integer.parseInt(atts.getValue( "cor_do_fundo" ))); catch(exception e){ usuint.setcordofundo(-1); try{ usuint.setcordafonte( Integer.parseInt(atts.getValue( "cor_da_fonte" ))); catch(exception e){ usuint.setcordafonte(-16777216); A listagem com o extrato da classe Parser mostra os dois únicos métodos implementados para nosso exemplo. A implementação da SUN para a especificação SAX possui outros métodos que permitem controlar outros eventos, tais como fim de elemento, início de documento e fim de documento. Eles fornecem grande capacidade para manipulação de arquivos XML. Neste exemplo somente estes dois implementados em nossa classe Parser foram suficientes para ler o arquivo e carregar as informações no objeto Usuário. Para manter o exemplo simples e didático, está sendo usado um arquivo de configuração com as opções de usuário bem modesto, contendo apenas alguns campos, conforme mostrado na Listagem 4. Listagem 4 (jose.xml): Arquivo XML com as preferências de um usuário. <?xml version="1.0" encoding="iso-8859-1"?> <!DOCTYPE usuario SYSTEM "usuario.dtd"> <usuario> <identif nome="jose" codigo="123"/> <preferencias cor_do_fundo="-1" cor_da_fonte="-16777012"/>

</usuario> Mesmo sem ser um profundo conhecedor de XML pode-se entender facilmente quais são as informações relativas ao usuário que se encontram gravadas neste arquivo. Ignorando as duas linhas do início, sobram códigos extremamente intuitivos tais como, identif, nome, código etc. Esta é apenas uma das vantagens do XML, os arquivos gerados são facilmente compreendidos e podem ser alterados sem grandes riscos para as aplicações que os manipulam. Como já exposto na seção anterior, existem algumas maneiras de informar ao Parser sobre as características do arquivo XML a ser lido. Uma das mais comuns é o uso de um arquivo de definições de tipo chamado DTD (document type definition). A Listagem 5 apresenta o DTD usado neste exemplo. Listagem 5 (usuário.dtd): Arquivo DTD contendo as regras de validação do arquivo XML de preferências do usuário. <?xml version="1.0" encoding="iso-8859-1"?> <!ELEMENT usuario (identif+,preferencias+)> <!ELEMENT identif EMPTY> <!ELEMENT preferencias EMPTY> <!ATTLIST identif nome CDATA #REQUIRED codigo CDATA #REQUIRED > <!ATTLIST preferencias cor_do_fundo CDATA "cinza" cor_da_fonte CDATA "preto" > O arquivo DTD deve conter os elementos (tags ou marcadores) que podem ser usados nos arquivos XML a serem manipulados pela aplicação. O arquivo DTD pode conter elementos e listas de atributos destes elementos. Em nosso exemplo criamos o elemento <usuário>, que é a raiz do documento e deve conter

os outros elementos do documento. Também criamos o elemento <identif> que possui os atributos nome e código. Por fim criamos o elemento <preferencia> com os atributos cor_da_fonte e cor_do_fundo. Ainda podemos ver que o elemento <usuario> deve ser finalizado pelo marcador </usuario> e os marcadores <identif> e <preferencia> não precisam ser finalizados pois são qualificados como EMPTY. Os atributos nome e código são do tipo texto e devem ser obrigatoriamente preenchidos enquanto que os atributos cor_do_fundo e cor_da_fonte, que também são do tipo texto não precisam ser preenchidos e assumirão os valore default assinalados a sua direita no DTD. Maiores detalhes podem ser obtidos em [3]. 4. CONCLUSÕES Neste trabalho foi exposto um pouco sobre XML e sobre seu uso com Java, trazendo grandes benefícios para as duas tecnologias e revertendo seus resultados para os usuários de informática. Foi mostrado também um exemplo prático que pode ser repetido por qualquer pessoa que tenha conhecimentos mínimos sobre programação orientada ao objeto. Caso necessário, os códigos fontes completos das classes deste exemplo podem solicitados aos autores pelos respectivos endereços de e-mail. REFERÊNCIAS [1] Sun. http://sun.com. Último aceso em 22/fev/2004. [2] World Wide Web Consortium (W3C). http://www.w3c.org. Último acesso em 22/fev/2004. [3] Tutorial sobre XML. http://java.sun.com/j2ee/1.4/docs/tutorial/doc/index.html. Último acesso em 22/fev/2004. [4] Scientific American. XML and the Second-Generation web. http://www.sciam.com/print_vertion.cfm?articleid=0008c786-9. Último acesso em 09/abr/2003. [5] World Wide Web Consortium (W3C). http://www.w3.org/tr/xmlschema-0 Último acesso em 22/fev/2004.