Parsing Eventos XML com SAX

A palavra evento

evoca todos os tipos de imagens. Para uma nonprogrammer, um evento é apenas "algo que acontece." Se você está acostumado a lidar com janelas e quadros em Java, então você provavelmente pensar de um evento como uma ocorrência que acorda um pedaço de código. Por exemplo, clique do mouse do usuário ou keystroke acorda o código que define uma opção e exibe uma caixa de OK. O clique ou keystroke em si é chamado de evento porque acontece independentemente do programa em execução. Somente o usuário sabe quando ele ou ela vai pressionar esse botão. E quando o botão fica pressionado, alguma parte do programa Java simplesmente acorda e lida com a situação. Este cenário é chamado programação orientada a eventos.

programação orientada a eventos

programas SAX são event-driven. Por exemplo, você ir para a cama para uma boa noite de sono. Você chegar a mais para definir o seu despertador e, em seguida, estabelecer-se, fechar os olhos e ficar inconsciente por um número de horas. Em seguida, um evento importante acontece: um determinado momento do dia chega. Quando o evento ocorre, o despertador vai para o seu modo de "wake up" - e faz um barulho terrível a agitar-lo fora de seu sono repousante.

Aqui está outro cenário. Você é um executivo ocupado e você vai ficar de fora por várias horas, mas você não quer perder nenhum negócio importante. Antes de deixar o escritório, você dizer ao seu assistente, "Chame-me se alguma coisa importante vem à tona." A emissão deste modo é semelhante a configurar o despertador. Você está dizendo seu assistente (o seu despertador) para acordá-lo se um evento ocorre. Fazendo este pedido para o seu assistente (ou para o seu despertador) é chamado inscrição. Em qualquer cenário, você registrar-se com um serviço de despertar. Depois de ter registrado, você pode prosseguir a sua não-atividade de lazer, ignorando todos os negócios real até algum evento acontece. Então . . .

Toque Toque. Seu telefone celular está gritando para você. "Olá?"

"Olá. Este é o seu assistente. Eu tenho os números de vendas para o primeiro trimestre. Eles são 1.000.000, 4.000.000 e 2.000.000."

"Vamos ver. Isso é um total de 7 milhões", você diz. "Vou observar isso no meu PalmPilot. Obrigado." Você desliga.

Vários momentos depois, você recebe outra chamada. "O presidente do Big Bucks, Inc., quer fechar o negócio. Eles estão falando de 10 milhões de dólares."

"Hmm", você responde. "Isso vai trazer a nossa year-to-date de receita até 17 megabucks. Vou guardar essa informação no meu aplicativo de planilha. Obrigado por ligar."

Cada uma destas interacções é conhecido como um ligue de volta. No começo do dia, quando se registou o seu desejo com o assistente, que solicitou um callback. Então, sempre que um evento ocorre, o assistente faz uma chamada de retorno para notificá-lo sobre o evento. Em termos de programação Java, o assistente chama um de seus muitos métodos (um de seus subprogramas Java).

A essência da programação orientada a eventos

programação orientada a eventos tem três partes:

  • Registro: Registar o seu desejo de ser notificado sempre que ocorre um evento. Você registrar esse desejo com outro pedaço de código - outro objeto, geralmente algo que você importou (como um pedaço de código que é parte do de outra pessoa API). Esse objeto, em seguida, relógios, por trás dos bastidores, para a ocorrência do evento especificado.
  • ocorrência do evento: Um evento específico acontecer.
  • Ligue de volta: O outro pedaço de código executa uma chamada de retorno. Um de seus métodos é chamado.

Dois tipos de código

A distinção entre ativo e código passiva código é útil:

  • código ativo tem um método principal. código ativo, uma vez que ele começa a correr, toma o centro do palco. código ativo contém o segmento de execução que controla o jogo totalmente.
  • Código passivo apenas se senta lá, esperando para ser chamado. Uma classe Dice passivo não faz nada até que algum outro código chama Dice.roll ().

Agora, você pode pensar que o código passiva é tudo que você precisa para a programação orientada a eventos, mas não é. Para o tratamento de eventos, você precisa esta etapa de registro. O código passiva começa por se registrado com algum outro pedaço de código.

Para firmar essa noção de registo, pensar em um exemplo do mundo na tela de ratos, janelas e botões. Você cria uma janela ou quadro. Você quer que seu quadro para responder a cliques do mouse, para que emita o seguinte comando:

button.addMouseListener (this);

Este comando registra seu quadro com o botão. O comando diz, com efeito, Sempre que um evento de mouse acontece, chamar um dos métodos de manipulação do rato do quadro. Mais tarde, quando o usuário clica o mouse, o quadro recebe uma chamada de retorno. O computador chama o método mouseClicked do quadro.

eventos SAX

Claro, SAX é orientada a eventos, mas isso não significa que um programa SAX espera por cliques do mouse. Em vez disso, o código SAX segue o modelo de registo de eventos-callback descrito nos últimos parágrafos. Cada programa SAX tem duas peças indispensáveis ​​do código:

  • Um pedaço de código que você escreve - o chamado treinador. (O seu manipulador pode estender uma classe DefaultHandler pré-escrita.)
  • O manipulador é como o executivo de milhões de dólares na seção anterior.
  • Um pedaço de código que você normalmente não escrever - o analisador. O analisador desempenha um papel como o de assistente do executivo. O Java 1.4 API tem um analisador embutido. Você cria uma instância deste analisador, em seguida, você registrar seu manipulador com essa instância do analisador. Com efeito, você diga a instância para chamar de volta seu manipulador sempre que um evento ocorre.

Nada tendo a ver com o XML é novo, e ainda está em um estado de fluxo. Devido a isso, a terminologia é corrigida em conjunto, em alguns aspectos peculiares. Ao desenvolver SAX versão 2, alguns techies teve um festival de make-up-novos nomes. O que é normalmente chamado de "parser" é incorporada em uma interface Java XMLReader nomeado. Costumava haver uma classe chamada org.xml.sax.Parser, mas a classe tem obsoleto (O que significa que você deve raspar-lo na parte inferior do seu sapato). Para tornar as coisas um pouco mais complicado, ainda há uma outra ferramenta de análise, javax.xml.parsers.SAXParser. Você usa este SAXParser para se fazer um XMLReader. Com alguma sorte, você vai rapidamente se acostumar a esta terminologia complicada. Por enquanto, lembre-se de que o que é chamado de "parser" é geralmente uma instância de XMLReader.

O cenário registo-and-callback é o que faz SAX-evento dirigido. Agora, o engraçado é que, um evento SAX não é tangível. Um evento SAX não vai lembrar de uma tecla ou um clique de botão. Em SAX, o analisador verifica um documento XML a partir de cima para baixo. Sempre que o analisador encontrar algo interessante, o analisador dispara um evento e chama o manipulador. Então, cabe ao manipulador de fazer algo sobre esse encontro interessante.

menu