xml100_7

16
1 Helder da Rocha www.argonavis.com.br <xml:sax.dom /> XML: uma introdução prática

description

xml100_7

Transcript of xml100_7

Page 1: xml100_7

1

Helder da Rochawww.argonavis.com.br

<xml:sax.dom />

XML: uma introdução prática

Page 2: xml100_7

2

Programação com XML

§ Há duas APIs padrão para manipular (interpretar, gerar, extrair dados e tratar eventos) arquivos XML:§ Document Object Model (DOM)§ Simple API for XML (SAX)

§ As duas APIs servem a finalidades diferentes.§ SAX é mais simples. Oferece métodos que respondem a

eventos produzidos durante a leitura do documento§ Notifica quando um elemento abre, quando fecha, etc.

§ DOM vai além e monta uma estrutura hierárquica de objetos, em forma de árvore, que permite a navegação na estrutura do documento§ Propriedades dos objetos podem ser manipuladas

Page 3: xml100_7

3

SAX ou DOM?

§ SAX§ Gasta menos memória§ Mais simples – menos recursos disponíveis§ Ideal para aplicações simples que não precisam manipular

com toda a árvore de objetos§ DOM§ Em grandes documentos e hierarquias profundas exige

mais recursos§ Fornece funções que permitem ter muito controle sobre

os dados§ É a única opção para manipulação no cliente

§ APIs disponíveis em várias linguagens§ Java, VB, C, JavaScript (apenas DOM)

Page 4: xml100_7

4

DOM

§ Document Object Model§ Objetivo: oferecer uma interface de programação

uniforme, independente de plataforma e linguagem, para aplicações que manipulam XML§ OMG IDL

§ Serve para§ criar um novo documento XML§ navegar na árvore XML§ modificar, remover ou adicionar nós (elementos,

atributos, texto, comentários, PIs, etc.)

Page 5: xml100_7

5

SAX

§ Simple API for XML§ Baseada em eventos§ Dispara eventos durante processamento do

documento§ eventos podem ser capturados por ouvintes cadastrados§ ações podem ser tomadas em cada situação

§ Exemplos de eventos§ inicio e fim do documento§ início e fim do elemento (pode-se descobrir qual)§ nó de caractere§ nó de comentário§ ...

Page 6: xml100_7

6

SAX vs. DOM

§ Não são concorrentes§ DOM é ideal para manipular a árvore XML

recursivamente§ SAX é ideal para ler o documento seqüencialmente§ DOM requer carga de todo o documento: consome mais

memória§ SAX não "lembra" de tarefas realizadas: não serve para

validar referências cruzadas§ Nos processadores Crimson e Xerces, SAX é usada

para montar a árvore DOM

Page 7: xml100_7

7

SAX: operações

§ Se um processador SAX receber o documento ...<carta>

<mensagem id="1">Bom dia!</mensagem>

</carta>

§ ... ele irá disparar a seguinte seqüência de eventos:startDocument()

startElement("carta", [])

startElement("mensagem", [Attribute("id","1")])

characters("Bom dia!")

endElement("mensagem")

endElement("carta")

endDocument()

§ Programador deve implementar um objeto "ouvinte" para capturar os eventos e extrair as informações desejadas

Page 8: xml100_7

8

SAX: exemplo em Java (trecho)

public void characters(char[] ch, int start, int length) {for (int i = start; i < length; i++) {

System.out.println(ch[i]);}

}

public void startElement(String uri, String localName, String qName, Attributes att) {

System.out.print("<" + qName);for (int i = 0; i < att.getLength(); i++) {

System.out.print(" " + att.getQName(i) + "='" + att.getValue(i) + "'");

}System.out.println(">");

}

public void endElement(String uri, String localName, String qName) {

System.out.println("</" + qName + ">");}

Page 9: xml100_7

9

DOM: operações

§ Leitura§ Passo 1: carregar o documento e identificar os tokens§ Passo 2: identificar elementos e outros nós (pode usar SAX)§ Passo 3: montar a árvore (pode ser feito durante o passo 2)

§ Alteração§ Localiza o nó de referência§ Remove, altera, muda posição, cria nó antes ou depois.

§ Criação§ Cria raiz; cria elemento raiz; cria elementos filho e

atributos; cria nós de texto§ Monta árvore: coloca atributos em elementos, coloca nós

de texto em elementos, coloca elementos filho em elementos pai, coloca elemento raiz na raiz

Page 10: xml100_7

10

DOM: tipos de dados

§ Coleções: NodeList, NamedNodeMap§ Raiz da hierarquia de nós: Node. Subclasses:§ Attr (atributo)§ CharacterData (classe abstrata)§ Text (nó de texto)§ CDATASection (seção CDATA)§ Comment (comentário)§ Document (documento inteiro)§ DocumentFragment (sub-árvore)§ DocumentType <!DOCTYPE>§ Element (elemento)§ Entity (valor da entidade - conteúdo)§ EntityReference (nome da variável)§ Notation (valor de uma notação)§ ProcessingInstruction (instrução de processamento)

Page 11: xml100_7

11

DOM: Hierarquia

DocumentFragment

Document

CharacterDataText

Comment

CDATASection

Attr

Element

DocumentType

Notation

Entity

EntityReference

ProcessingInstruction

NodeNodeList

NamedNodeMap

Page 12: xml100_7

12

DOM: navegação

§ DOM usa constantes para identificar tipos de nó(nodeType)§ Constante (opcional) Tipo valor

ELEMENT_NODE Element 1

ATTRIBUTE_NODE Attr 2

TEXT_NODE Text 3

CDATA_SECTION_NODE CDATASection 4

ENTITY_REFERENCE_NODE EntityReference 5

ENTITY_NODE Entity 6

PROCESSING_INSTRUCTION_NODE ProcessingInstruction 7

COMMENT_NODE Comment 8DOCUMENT_NODE Document 9

DOCUMENT_TYPE_NODE DocumentType 10

DOCUMENT_FRAGMENT_NODE DocumentFragment 11

NOTATION_NODE Notation 12

Page 13: xml100_7

13

Para usar DOM

§ É preciso obter uma instância do documento (forma de fazer isto depende de processador)§ Internet Explorer ≠ Netscape§ Xerces ≠ JAXP ≠ JDOM ≠ IBM Parser ≠ MSXML

§ IE (data island): <xml id="xdoc"></xml>Código pode manipular referência xdoc e obter raiz

ou

§ Java JAXP§ Criar uma instância a patir de DocumentBuilderFactory

xdoc.async = false; // desabilita threadsxdoc.load("arquivo.xml");document = xdoc; // Este é o elemento raiz

var xdoc = new ActiveXObject("Microsoft.XMLDOM"); xdoc.load("arquivo.xml")

Page 14: xml100_7

14

Ilhas de dados XML (só MSXML)

§ Elemento HTML (Internet Explorer) que possibilita a integração HTML-XML§ Permite embutir em uma página HTML (gerada ou não

dinamicamente) um arquivo XML§ Arquivo pode ainda ser transformado por XSLT no momento da

inclusão e receber formatação CSS§ Sintaxe:

<xml id="identificador">... código XML ..

</xml>

§ O identificador é necessário para possibilitar a manipulação dos dados na página§ O arquivo também pode ser importado

<xml id="identificador" href="arquivo.xml"></xml>

Page 15: xml100_7

15

Ilhas de dados (exemplo) (1)

§ Pode-se inserir XML em HTML da seguinte forma

§ Ou importando de um arquivo externo

Fonte: www.xml101.com

<xml id="note"> <note>

<to>Tove</to> <from>Jani</from> <heading>Reminder</heading> <body>Don't forget me this

weekend!</body> </note>

</xml>

<xml id="note" src="note.xml"> </xml>

Page 16: xml100_7

16

Ilhas de dados (2) - só MSXML

§ Dados em XML podem ser vinculados a valores em tabelas, por exemplo, ou manipulados via JavaScript/VBScript

<html><body> <xml id="cdcat"

src="cd_catalog.xml"></xml> <table border="1"

datasrc="#cdcat"><tr> <td><span datafld="ARTIST"></span></td> <td><span datafld="TITLE"></span></td>

</tr> </table>

</body> </html>

<?xml version="1.0" ?> <CATALOG><CD><TITLE>Empire Burlesque</TITLE> <ARTIST>Bob Dylan</ARTIST>

</CD><CD><TITLE>Hide your heart</TITLE> <ARTIST>Bonnie Tyler</ARTIST>

</CD></CATALOG>

cd_catalog.xml

Fonte: www.xml101.com