DOM (Document Object Model) e SAX (Simple API for XML)

Janeiro 2017


O XML define apenas a estrutura do documento, o que permite, por um lado, definir separadamente a apresentação deste documento e, por outro, recuperar os dados presentes no documento, para utilizá-los.

No entanto, a recuperação dos dados encapsulados no documento requer uma ferramenta chamada analisador sintático (em inglês parser) para percorrer o documento e extrair as informações que ele contém.

O que chamamos de analisador ?

O analisador sintático (parser) é uma ferramenta de software para percorrer um documento e extrair informações dele. No caso do XML (chamado de analisador XML), o analisador gera uma estrutura hierárquica com os dados contidos no documento XML.

Existem dois tipos de analisador XML:


Os analisadores que validam, os (validating) que verificam se um documento XML está de acordo com a sua DTD.

Os analisadores que não validam (non-validating) se contentam em verificar se o documento XML está bem formado (ou seja, se está respeitando a sintaxe XML básica).

Os analisadores XML também são divididos de acordo com a abordagem que eles utilizam para processar o documento. Atualmente, existem dois tipos de abordagem:


Os API que usam uma abordagem hierárquica: os analisadores usando esta técnica constroem uma estrutura hierárquica com objetos que representam os elementos do documento, e cujos métodos permitem o acesso direto às propriedades. O principal API que utiliza essa abordagem é o DOM (Document Object Model)

Os API baseados em um modo de evento para reagir a eventos (como o início de um elemento, o fim de um elemento) e retornar o resultado para o aplicativo, usando este API. SAX (Simple API for XML é a principal interface que utiliza a aparência de um evento. Assim, tendemos a associar a abordagem hierárquica com o DOM e a abordagem baseada em eventos com o SAX.

Introdução ao DOM

DOM (Document Object Model, traduzir Modelo de Objeto do Documentos) é uma especificação do W3C (World Wide Web Consortium) que define a estrutura de um documento na forma de uma hierarquia de objetos, a fim de simplificar o acesso aos elementos do documento. Mais precisamente, o DOM é uma linguagem padrão de interface (API, Application Programming Interface), independente de qualquer plataforma e de qualquer linguagem, permitindo que um aplicativo percorra a estrutura do documento e atue dinamicamente sobre ele. Assim, o Javascript e o ECMAScript usam o DOM para navegar em um documento HTML, ajudando, por exemplo, a recuperar o conteúdo de um formulário, modificá-lo, etc.

O DOM consiste em duas especificações:


A especificação DOM level 1 (DOM nível 1) separando-se em duas categorias:

Core DOM level 1: A especificação para os documentos em geral (incluindo o XML).

HTML DOM level 1: A especificação que retém apenas os métodos aplicáveis ao HTML.


A especificação < gras>DOM level 2</gras> adiciona novas funcionalidades, tais como a inclusão de folhas de estilo CSS na hierarquia de objetos.

Introdução ao SAX

O SAX é um API baseado em um modelo de evento, o que significa que o SAX desencadeia eventos durante a análise do documento XML. Um aplicativo utilizando SAX geralmente implementa gerenciadores de eventos, permitindo que ele realize operações de acordo com o tipo de elemento encontrado.

Veja o documento XML seguinte:

<pessoa>
<sobrenome>Pereira</sobrenome>
<nome>Antonio</nome>
</pessoa>


Uma interface de eventos, como o API SAX gera eventos a partir da leitura do documento acima. Os eventos gerados serão:

start document
start element: pessoa
start element: sobrenome
characters: Pereira
end element: sobrenome
start element: nome
characters: Antonio
end element: nome
end element: pessoa
end document


Assim, um aplicativo baseado no SAX pode gerar apenas os elementos que ele precisa, sem ter que construir uma estrutura na memória com o documento inteiro.

O API SAX define as seguintes interfaces:


DocumentHandler com métodos que retornam eventos relativos ao documento:

startDocument() que retorna um evento ligado à abertura do documento.

startElement() que retorna um evento ligado ao encontro de um novo elemento.

characters() que retorna os caracteres encontrados.

endElement() que retorna um evento ligado ao fim de um elemento.

endDocument() que retorna um evento ligado ao fechamento do documento.

ErrorHandler com métodos que retornam eventos relativos aos erros ou às advertências.

DTDHandler retorna eventos relativos à leitura da DTD do documento XML.

  • EntityResolver retorna um URL quando um URI ( Uniform Resource Identifier) é encontrado.

Comparações entre o DOM e o SAX

Os analisadores que usam a interface DOM sofrem porque este API impõe a construção de uma árvore, com todos os elementos do documento na memória, seja qual for o aplicativo. Assim, para os documentos de grandes dimensões (cujo tamanho é próximo à quantidade de memória da máquina) o DOM torna-se insuficiente. Além disso, o uso do DOM se torna lento, esta é a razão do padrão DOM ser, geralmente, pouco respeitado, pois cada editor o implementa de acordo com suas necessidades, provocando o aparecimento de muitos parsers usando interfaces proprietárias... . Assim, cada vez mais os aplicativos se voltam para aplicativos de eventos, como o SAX, para processar apenas o necessário.

Tradução feita por Lucia Maurity y Nouira

Veja também

Publicado por pintuda. Última modificação: 3 de fevereiro de 2015 às 10:18 por ninha25.
Este documento, intitulado 'DOM (Document Object Model) e SAX (Simple API for XML)', está disponível sob a licença Creative Commons. Você pode copiar e/ou modificar o conteúdo desta página com base nas condições estipuladas pela licença. Não se esqueça de creditar o CCM (br.ccm.net) ao utilizar este artigo.