xml100_7
-
Upload
robson-mamede -
Category
Documents
-
view
2 -
download
1
description
Transcript of xml100_7
1
Helder da Rochawww.argonavis.com.br
<xml:sax.dom />
XML: uma introdução prática
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
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)
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.)
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§ ...
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
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
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 + ">");}
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
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)
11
DOM: Hierarquia
DocumentFragment
Document
CharacterDataText
Comment
CDATASection
Attr
Element
DocumentType
Notation
Entity
EntityReference
ProcessingInstruction
NodeNodeList
NamedNodeMap
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
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")
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>
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>
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