Prof. Dr. Cláudio Baptista

Slides:



Advertisements
Apresentações semelhantes
|Introdução a Java para programadores Telis. Jogo de Dados simples O jogo é jogado por dois jogadores. Cada jogador faz sua jogada (lança um dado), e.
Advertisements

TIPOS ABSTRATOS DE DADOS
I/O Carlos Bazilio Depto de Ciência e Tecnologia
Sistemas distribuídos
Sockets Marco Antonio – marcoreis.net Arquiteto de Software Dezembro/2007.
Entrada e Saída Marco Antonio Arquiteto de Software Dezembro/2007.
Capítulo 1 Introdução.
Profa. Rudson apostilas.wikidot.com/hipermidia
XML – eXtensible Markup Language
Tecnologias XML e Aplicações
Gerenciamento de Dados XML
April 05 Prof. Ismael H. F. Santos - 1 Módulo II XML Processing: XSLT, SAX e DOM Prof. Ismael H F Santos.
Walfredo Cirne walfredo.dsc.ufpb.br
Walfredo Cirne Threads Walfredo Cirne
Erros A Evitar Redundância de Programação public void insere( Priorizavel obj ) throws listaVaziaException; Lançamento de exceções.
9 Controle de fluxo Seqüenciadores. Jumps. Escapes. Exceções.
Tecnologia para Web JavaScript
WebWork e JSP Keven andrade
Estrutura de Dados em Java
Tópicos avançados em internet B Carlos Oberdan Rolim Ciência da Computação.
Concorrência em Java Threads em Java.
Introdução a linguagem Python
JAVA Linguagem Ambiente de Desenvolvimento
Universidade de São Paulo Instituto de Ciências Matemáticas e de Computação Departamento de Computação e Estatística Servidor de Documentos XML Usando.
Tópicos avançados em internet B Carlos Oberdan Rolim Ciência da Computação.
Segundo Trabalho Prático de GTI Resolução. Exercício 1 Escreva as expressões regulares correspondentes a cada uma das seguintes situações: Aceitar um.
Quarto Trabalho Prático de GTI
Rodrigo Cristiano Silva
Chamada Remota de Procedimentos
Desenvolvimento de Aplicações CORBA
Conceitos de J2EE para a WEB
1 Mobilidade de Código com μcode Projeto Giga Alexandre Lages
Professor: Márcio Amador
Orientação a Objetos e Java Graduação em Ciência da Computação
T. D. S. I. PARA WEB Prof. Emmanuel Nolêto. Java RMI.
Pilhas Profa. Nádia Félix.
Concorrência e thread Petrônio Júnior(pglj) Márcio Neves(mmn2)
Tratamento de Exceções
Java Kickstart, day 2 Semelhanças com linguagem C.
Universidade do Estado do Rio de Janeiro Instituto de Matemática e Estatística XML: Extensible Markup Language EquipeEquipe: Adriana Cristina de Oliveira.
Coleções, Genéricos, Threads Marco Antonio. Collection Principais métodos da interface Collection.
Classes Abstratas e Interface
Exceções Suzana Fragoso (smpf) Adaptado do material de Guilherme Carvalho (gvc)
Exceções Profa. Patrícia A. Jaques Alterada por Leandro Tonietto abr-15.
Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -
Herança e Arquitetura em camadas
XML – Extensible Markup Language [Introdução] Renata Pontin de Mattos Fortes SCE-225 Hipermídia 2°Semestre 2003 Material elaborado por Lisandra Cazassa.
Certificação Marco Antonio. Introdução A compreensão desse capítulo é muito importante pois trata de um assunto essencial em qualquer linguagem de programação,
Produção de Sites Unidade 9 – XML Prof.: Henrique Santos.
Aglets.
Copyright 1998, Departamento de Informática da UFPE. Todos os direitos reservados sob a legislação em vigor. Variáveis e métodos estáticos, Passagem de.
The Petri Net Markup Language (PNML) Wellington João da Silva Mestrado Ciência da Computação.
Copyright 2000, Departamento de Informática, UFPE. Todos os direitos reservados sob a legislação em vigor. Orientação a Objetos e Java.
XML Prof. Dr. Fernando Gauthier INE/UFSC. XML XML (Extensible Markup Language) é uma linguagem para marcar documentos que contêm informações estruturadas.
XML Namespaces XML Namespaces provê um método para evitar conflito de nomes de elementos.
XML – Extensible Markup Language [Sintaxe] Renata Pontin de Mattos Fortes SCE-225 Hipermídia 2°Semestre 2003 Material elaborado por Lisandra Cazassa Fumagalli.
XML: Conceitos, Tecnologias e Aplicações Vânia Maria Ponte Vidal
Java e XML Eduardo Aranha. Slogans de Java e de XML Java – “Portabilidade de Código” XML – “Portabilidade de Dados” Java e XML – “Portabilidade de Código.
SQL SERVER XML Guia Essencial para Programação com XML no SQL Server.
Feapa Prof Osiel Marlon Disciplina: Engenharia de Software 2009 Curso: Sistemas de Informação.
Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota
Student Tech Clubs Desenvolvimento WEB Antonio Ladeia Graduando em Tecnologia em Análise e Desenvolvimento de Sistemas Instituto Federal da Bahia Introdução.
RMI Java Remote Method Invocation em Java. Introdução Java Remote Method Invocation (Java RMI) permite desenvolver sistemas distribuídos baseados em Java.
Integração de dados Bernadette, Ceça, Luciano, Haroldo, Guilherme. Orientadora: Ana Carolina Salgado Universidade Federal de Pernambuco Pós-Graduação em.
Desenvolvimento WEB II Continuação AJAX Professora: Kelly de Paula Cunha.
Desenvolvimento WEB II Professora: Kelly de Paula Cunha Apresentação baseada no material didático elaborado pelo Prof. Pasteur Ottoni de Miranda Junior.
Laboratório de Computação Aula 06 e 07 – Implementação de classes Prof. Fábio Dias
Rhizome. Roteiro Definição Metas Características Arquitetura Tecnologias envolvidas Referências.
ProgramaçãoConcorrente Glêdson Elias
API XML ● API baseadas em árvore – Mapeameto do documento XML em estrutura de árvore interna – Aplicação navega nessa árvore – Document Object Model (DOM)
Transcrição da apresentação:

Prof. Dr. Cláudio Baptista XML API: DOM e SAX Prof. Dr. Cláudio Baptista baptista@dsc.ufcg.edu.br http://www.lsi.dsc.ufcg.edu.br

Processamento de docs XML Um arquivo XML é um arquivo de texto Portanto, a manipulação de XML pode ser feita através da leitura deste texto Entretanto, existem APIs que facilitam este acesso a um doc XML

Parser XML O parser tem a função de verificar se um doc XML está sintaticamente correto; ou bem-formado O parser deve parar o processamento caso o documento não esteja bem-formado (uma exceção é lançada)

Parser XML Lê o doc XML Verifica se é bem-formado Opcionalmente, Valida com um DTD ou XMLSchema Fornece uma API que facilita a manipulação do doc XML via aplicação

Processadores XML Três tipos de API para XML parsing: SAX (Simple API to XML): baseada em eventos DOM (Document Object Model): objetos/árvore JDOM (Java Documet Object Model): Objetos/árvores

Processadores XML Há parsers para várias plataformas e ambientes de software Parsers baseados em SAX são mais rápidos Parsers baseados em DOM são mais versáteis, pois criam uma versão em memória do documento inteiro Validação tende a ser mais lenta do que verificação

DOM W3C standard recommendation Constrói árvore na memória para documentos XML Um DOM Document é uma coleção de nodes organizada numa hierarquia DOM provê uma API que permite o programador adicionar, editar, mover, ou remover nodes em qualquer ponto da árvore DOM-based parsers fazem o “parsing” destas estruturas. Existe em várias linguagens (Java, C, C++, Python, Perl, etc.) www.w3.org/DOM/ java.sun.com/webservices/docs/1.0/tutorial/doc/JAXPDOM.html

DOM Manipulação XML com Java Java XML Pack Xerces – Apache XML Parser java.sun.com/xml/downloads/javaxmlpack.html Xerces – Apache XML Parser Antigo IBM/XML4J Suporta além de Java 1 e 2, C++, Perl dentre outros.

DOM Roadmap Um Parser analiza um arquivo XML para criar um DOM document que é composto de nodes que podem ser elementos, atributos, textos,ou outros tipos de node que fazem parte de um (ou mais) Namespace(s) que podem ser acessados via métodos da DOM API

Evolução do DOM Level 0 - Foi a primeira recomendação que permitia Web browsers identificar e manipular elementos numa página Level 1- inclui suporte a XML e HTML Level 2- permite o uso de Namespaces, provê API mais sofisticada com eventos e CSS Level 3- suporte avançado a Namespaces, eventos de User interface, DTD, XML Schema, Xpath, XSLT

Exemplo <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE ORDERS SYSTEM "orders.dtd"> <orders> <order> <customerid limit="1000">12341</customerid> <status>pending</status> <item instock="Y" itemid="SA15"> <name>Silver Show Saddle, 16 inch</name> <price>825.00</price> <qty>1</qty> </item> <item instock="N" itemid="C49"> <name>Premium Cinch</name> <price>49.00</price> </order> <customerid limit="150">251222</customerid> <item instock="Y" itemid="WB78"> <name>Winter Blanket (78 inch)</name> <price>20</price> <qty>10</qty> </orders>

Exemplo (cont)

DOMParser DOMParser estende XMLParser Métodos importantes void parse(InputSource source) Executa o parsing em source void parse(java.lang.String systemId) Executa o parsing sobre o arquivo identificado por systemId Document getDocument() Retorna o documento

Interface Node Corresponde a um nó na árvore DOM Node pode ser usado para referenciar: Elementos Atributos Texto Comentários Seções CDATA Entidades Documentos inteiros PI

Tipos básicos de nodes Document Element Attribute Text

DOM Introdução DOM tree Cada node representa um elemento, atributo, etc. <?xml version = "1.0"?> <message from = ”Ana" to = ”Marta"> <body>Oi Marta!</body> </message> Node criado para elemento message Elemento message tem element child node: elemento body Elemento body tem text child node: “Oi Marta!" Atributos from e to também têm nodes na árvore

Implementações de DOM DOM-based parsers Microsoft msxml Sun Microsystem JAXP

DOM: classes e interfaces.

Alguns métodos de Document

Métodos Node

Navegação de um Node

Manipulação de um Node

Alguns tipos de node

Métodos de Element

Parsing um arquivo XML num documento Processo em 3 passos 1. Criar o DocumentBuilderFactory. Este objeto criará o DocumentBuilder. 2. Criar o DocumentBuilder. O DocumentBuilder fará o atual parsing criar o objeto Document. 3. Fazer o parsing do arquivo para criar o objeto Document.

Exemplo de aplicação básica import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import java.io.File; import org.w3c.dom.Document; public class OrderProcessor { public static void main (String args[]) { File docFile = new File("orders.xml"); Document doc = null; try { DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); doc = db.parse(docFile); } catch (Exception e) { System.out.print("Problem parsing the file."); }

Ex de aplicação básica import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import java.io.File; import org.w3c.dom.Document; import org.w3c.dom.Element; public class OrderProcessor { ... System.exit(1); } //Passo 1: obtém o elemento raiz (root) Element root = doc.getDocumentElement(); System.out.println("The root element is " + root.getNodeName());

Ex de aplicação básica - Obtendo um node filho ... import org.w3c.dom.NodeList; //PASSO 1: obtém o elemento raiz(root) Element root = doc.getDocumentElement(); System.out.println("The root element is "+root.getNodeName()); //PASSO 2: obtém os filhos (children) NodeList children = root.getChildNodes(); System.out.println("There are "+children.getLength()+" nodes in this document."); }

Usando getFirstChild() e getNextSibling() ... import org.w3c.dom.Node; //PASSO 3: processando os filhos (children) for (Node child = root.getFirstChild(); child != null; child = child.getNextSibling()) { System.out.println(child.getNodeName()+" = "+child.getNodeValue()); }

Múltiplos filhos ... public class OrderProcessor { private static void stepThrough (Node start) { System.out.println(start.getNodeName()+" = "+start.getNodeValue()); for (Node child = start.getFirstChild(); child != null;child = child.getNextSibling()) stepThrough(child); } public static void main (String args[]) { File docFile = new File("orders.xml"); System.out.println("There are "+children.getLength() +" nodes in this document."); //PASSO 4: fazendo recursividade stepThrough(root);

Resultado:

Manipulando Atributos ... import org.w3c.dom.NamedNodeMap; private static void stepThroughAll (Node start) { System.out.println(start.getNodeName()+" = "+start.getNodeValue()); if (start.getNodeType() == start.ELEMENT_NODE) NamedNodeMap startAttr = start.getAttributes(); for (int i = 0; i < startAttr.getLength(); i++) { Node attr = startAttr.item(i); System.out.println(" Attribute: "+ attr.getNodeName() +" = "+attr.getNodeValue()); } for (Node child = start.getFirstChild(); child != null; child = child.getNextSibling()) stepThroughAll(child);

Manipulando Atributos

Edição de documentos XML Existem métodos para adicionar nodes, remover nodes, mudar valores de nodes Consulte a API!

SAX Simple API for XML Outro método para acessar o conteúdo de documentos XML. Desenvolvido por membros da XML-DEV mailing-list (não é da W3C) Usa um modelo baseado em eventos Notificações (eventos) ocorrem à medida em que o documento é analizado (“parsed”)

SAX-based Parsers SAX-based parsers Disponíveis em várias LPs: e.g., Java, Python, C++, etc.

Eventos SAX parser Invoca certos métodos quando eventos ocorrem Programadores devem fazer overriding destes métodos para processar os dados

Métodos invocados pelo SAX parser

Como SAX funciona? Dado o documento XML abaixo: <?xml version="1.0"?> <samples> <server>UNIX</server> <monitor>color</monitor> </samples> SAX gera os seguintes EVENTOS: Start document Start element (samples) Characters (white space) Start element (server) Characters (UNIX) End element (server) Start element (monitor) Characters (color) End element (monitor) End element (samples)

Como SAX funciona? Processamento em SAX envolve os seguintes passos 1. Criar um event handler 2. Criar o SAX parser 3. Associar o event handler ao parser criado 4. Fazer o parsing do documento, enviando cada evento ao event handler.

Exemplo: Uma pesquisa de opinião <?xml version="1.0"?> <surveys> <response username="bob"> <question subject="appearance">A</question> <question subject="communication">B</question> <question subject="ship">A</question> <question subject="inside">D</question> <question subject="implant">B</question> </response> <response username="sue"> <question subject="appearance">C</question> <question subject="communication">A</question> <question subject="implant">A</question> <response username="carol"> <question subject="communication">C</question> <question subject="implant">C</question> </surveys> Exemplo: Uma pesquisa de opinião

Criando um event handler import org.xml.sax.helpers.DefaultHandler; public class SurveyReader extends DefaultHandler { public SurveyReader() { System.out.println("Object Created."); } public void showEvent(String name) { System.out.println("Hello, "+name+"!"); public static void main (String args[]) { SurveyReader reader = new SurveyReader(); reader.showEvent(”Nick");

Criando o SAX parser public class SurveyReader extends DefaultHandler // Exemplo usando JAXP import org.xml.sax.helpers.DefaultHandler; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.xml.sax.XMLReader; public class SurveyReader extends DefaultHandler { public SurveyReader() { } public static void main (String args[]) { XMLReader xmlReader = null; try { SAXParserFactory spfactory = SAXParserFactory.newInstance(); SAXParser saxParser = spfactory.newSAXParser(); xmlReader = saxParser.getXMLReader(); } catch (Exception e) { System.err.println(e); System.exit(1); Criando o SAX parser

Associando o event handler ao parser ... xmlReader = saxParser.getXMLReader(); xmlReader.setContentHandler(new SurveyReader()); } catch (Exception e) {

Parsing os dados ... import org.xml.sax.InputSource; xmlReader = saxParser.getXMLReader(); xmlReader.setContentHandler(new SurveyReader()); InputSource source = new InputSource("surveys.xml"); xmlReader.parse(source); } catch (Exception e) { Pronto! Falta apenas definir os eventos ...

Criando um ErrorHandler ... import org.xml.sax.SAXParseException; public class SurveyReader extends DefaultHandler { public SurveyReader() { } public void error (SAXParseException e) { System.out.println("Error parsing the file: "+e.getMessage()); public void warning (SAXParseException e) { System.out.println("Problem parsing the file: "+e.getMessage()); public void fatalError (SAXParseException e) { System.out.println("Cannot continue."); System.exit(1); public static void main (String args[]) { ...

Associando o ErrorHandler ... xmlReader.setContentHandler(new SurveyReader()); xmlReader.setErrorHandler(new SurveyReader()); InputSource source = new InputSource("surveys.xml");

Eventos: startDocument() ... import org.xml.sax.SAXException; public class SurveyReader extends DefaultHandler { public void fatalError (SAXParseException e) { System.out.println("Error parsing " + "the file: "+e.getMessage()); System.out.println("Cannot continue."); System.exit(1); } public void startDocument() throws SAXException { System.out.println("Tallying survey results..."); public static void main (String args[]) {

Eventos: startElement() ... import org.xml.sax.Attributes; public class SurveyReader extends DefaultHandler { public void startDocument() throws SAXException { System.out.println("Tallying survey results..."); } public void startElement( String namespaceURI, String localName, String qName, Attributes atts) System.out.print("Start element: "); System.out.println(localName); public static void main (String args[]) { …

startElement(): pegando atributos ... public void startElement( String namespaceURI, String localName, String qName, Attributes atts) throws SAXException { System.out.print("Start element: "); System.out.println(localName); for (int att = 0; att < atts.getLength(); att++) { String attName = atts.getLocalName(att); System.out.println(" " + attName + ": " + atts.getValue(attName)); }

Obtendo Dados: characters() … // ch inclui o documento inteiro public void characters(char[] ch, int start, int length) throws SAXException { if (thisElement == "question") { printIndent(4); System.out.print(thisQuestion + ": "); System.out.println(new String(ch, start, length)); } ...

Obtendo Dados: characters()

Obtendo Dados: characters() (completo) ... public void printIndent(int indentSize) { for (int s = 0; s < indentSize; s++) { System.out.print(" "); } String thisQuestion = ""; String thisElement = ""; public void startElement( String namespaceURI, String localName, String qName, Attributes atts) throws SAXException { if (localName == "response") { System.out.println("User: " + atts.getValue("username")); } else if (localName == "question") { thisQuestion = atts.getValue("subject"); thisElement = localName; public void endElement( String namespaceURI, String localName, String qName) throws SAXException { thisQuestion = ""; thisElement = ""; } public void characters(char[] ch, int start, int length) if (thisElement == "question") { printIndent(4); System.out.print(thisQuestion + ": "); System.out.println(new String(ch, start, length)); ...

SAX versus DOM DOM Modelo baseado em árvore armazena o documento inteiro numa hierarquia de document nodes Dados são acessados rapidamente Provê facilidades para adicionar e remover nodes SAX Invoca métodos quando markup (tag) é encontrada Maior performance do que DOM Menos overhead de memória do que DOM Tipicamente usado para ler documentos (não para modificá-los)

JDOM – Java DOM http://www.jdom.org Interface OO específica para Java baseada em DOM Vantagens: As mesmas de DOM Interface OO muito mais rica que DOM Desvantagens Mesmas do DOM Limitado à Java

Toolkits XML Java XML Spy JAXP (java.sun.com/xml/jaxp/faq.html) Dom4j (www.dom4j.org) .NET (parte do .NET framework) XML Spy www.xmlspy.com

XSL - eXtensible Stylesheet Language