Événements d'analyse XML avec sax

Le mot événement

Sommaire

évoque toutes sortes d'images. Pour une nonprogrammer, un événement est juste "quelque chose qui se passe." Si vous avez l'habitude de traiter avec des fenêtres et des cadres de Java, alors vous pensez probablement d'un événement comme un événement qui se réveille un morceau de code. Par exemple, la souris d'un utilisateur clique ou frappe réveille le code qui définit une option et affiche une boîte OK. Le clic ou frappe lui-même est appelé un événement car il arrive indépendamment du programme en cours d'exécution. Seul l'utilisateur sait quand il ou elle devra appuyer sur ce bouton. Et lorsque le bouton se pressé, une partie du programme Java se réveille juste et traite de la situation. Ce scénario est appelé programmation événementielle.

Programmation événementielle

Programmes SAX sont event-driven. Par exemple, vous mettre au lit pour dormir une bonne nuit. Vous atteignez plus de régler votre réveil, puis installer, fermez les yeux, et de devenir inconscient pendant un certain nombre d'heures. Ensuite, un événement important se produit: Une certaine heure de la journée arrive. Lorsque l'événement a lieu, le réveil va dans son mode "réveil" - et fait un bruit terrible pour vous remuer de votre sommeil réparateur.

Voici un autre scénario. Vous êtes un cadre très occupé et vous serez pendant plusieurs heures, mais vous ne voulez pas manquer une affaire importante. Avant de quitter le bureau, vous dites à votre assistant, "Appelez-moi si quelque chose d'important est en place." L'émission de cette commande est semblable à réglage de l'horloge d'alarme. Vous dites votre assistant (votre réveil) pour vous réveiller si un événement a lieu. Faire cette demande à votre assistant (ou à votre réveil) est appelée inscription. Dans les deux cas, vous vous inscrire à un service de réveil. Après vous être inscrit, vous pouvez poursuivre votre non-activité de détente, ignorant tout véritable entreprise jusqu'à ce qu'un événement se produit. Alors . . .

Ding Dong. Votre téléphone cellulaire est hurle à vous. "Bonjour?"

"Bonjour. Ceci est votre assistant. Je dois les chiffres de ventes pour le premier trimestre. Ils sont 1 million, 4 millions et 2 millions."




"Voyons voir. Cela fait un total de 7 millions," dites-vous. «Je vais le noter sur mon PalmPilot. Merci." Vous raccrochez.

Plusieurs minutes plus tard, vous obtenez un autre appel. "Le président de Big Bucks, Inc., veut fermer cette affaire. Ils parlent de 10 millions de dollars."

"Hmm," vous répondez. "Ça va apporter notre year-to-date revenus jusqu'à 17 megabucks. Je vais conserver cette information dans mon tableur. Merci de votre appel."

Chacun de ces interactions est connu comme un rappeler. Plus tôt dans la journée, lorsque vous avez enregistré votre souhait avec l'assistant, vous avez demandé un rappel. Ensuite, chaque fois qu'un événement se produit, l'assistant fait un rappel pour vous informer sur l'événement. En termes de programmation Java, l'assistant appelle une de vos nombreuses méthodes (l'un de vos sous-programmes Java).

L'essence de la programmation événementielle

Programmation événementielle comporte trois parties:

  • Inscription: Vous enregistrez votre souhait d'être informé chaque fois qu'un événement se produit. Vous enregistrez ce souhait avec un autre morceau de code - un autre objet, généralement quelque chose que vous avez importé (comme un morceau de code qui fait partie de l'API de quelqu'un d'autre). Cet objet montres puis, dans les coulisses, pour la survenance de l'événement que vous avez spécifié.
  • Survenance de l'événement: Un événement particulier se produit.
  • Rappeler: L'autre morceau de code effectue un rappel. Un de vos méthodes est appelée.

Deux types de code

La distinction entre actif code et passif code est utile:

  • Code actif a une méthode principale. Code actif, une fois qu'il commence à courir, prend le devant de la scène. Code actif contient le thread d'exécution qui contrôle l'ensemble du jeu de balle.
  • Code passive se trouve juste là, attendant d'être appelés. Une classe Dice passive ne fait rien jusqu'à ce qu'un autre code appelle Dice.roll ().

Maintenant, vous pensez peut-être que le code passive est tout ce que vous avez besoin pour la programmation événementielle, mais il est pas. Pour la gestion des événements, vous avez besoin de cette étape de l'inscription. Le code passive commence par se faire enregistré avec un autre morceau de code.

Pour raffermir cette notion d'enregistrement, penser à un exemple du monde à l'écran de souris, les fenêtres et les boutons. Vous créez une fenêtre ou un cadre. Vous voulez que votre cadre pour répondre aux clics de souris, de sorte que vous émettez la commande suivante:

button.addMouseListener (this);

Cette commande enregistre votre cadre avec le bouton. La commande dit, en effet, Chaque fois qu'un événement de souris se produit, appelez l'une des méthodes de manipulation de la souris de l'ossature. Plus tard, lorsque l'utilisateur clique sur la souris, le cadre reçoit un rappel. L'ordinateur appelle la méthode mouseClicked du cadre.

Des événements SAX

Bien sûr, SAX est event-driven, mais cela ne signifie pas qu'un programme SAX attend clics de souris. Au lieu de cela, le code de SAX suit le modèle registre-événement-rappel décrit dans les dernières plusieurs paragraphes. Chaque programme SAX a deux pièces indispensables de code:

  • Un morceau de code que vous écrivez - appelé maître. (Votre gestionnaire peut étendre une classe DefaultHandler pré-écrit.)
    Le gestionnaire est comme l'exécutif millions de dollars dans la section précédente.
  • Un morceau de code que vous normalement ne pas écrire - la analyseur. L'analyseur joue un rôle comme celui de l'assistant de l'exécutif. L'API Java 1.4 a un analyseur intégré. Vous créez un exemple de cet analyseur, puis vous enregistrez votre gestionnaire à cette instance de l'analyseur. En effet, vous dites l'instance de rappeler votre gestionnaire chaque fois qu'un événement a lieu.

Tout avoir à faire avec XML est nouveau, et est toujours dans un état de flux. Pour cette raison, la terminologie est patché ensemble à certains égards particuliers. Tout en développant version SAX 2, certains techniciens avaient un festival make-up-nouveaux-noms. Ce qui est généralement appelé un «analyseur» est incarnée dans une interface Java nommée XMLReader. Il y avait une classe nommée org.xml.sax.Parser, mais la classe a obtenu obsolète (ce qui signifie que vous devez gratter le fond de votre chaussure). Pour rendre les choses un peu plus compliqué, il ya encore un autre outil d'analyse, javax.xml.parsers.SAXParser. Vous utilisez cette SAXParser de vous faire un XMLReader. Avec un peu de chance, vous deviendrez rapidement habitués à cette terminologie alambiquée. Pour l'instant, rappelez-vous que ce qui est appelé un «analyseur» est généralement une instance de XMLReader.

Le scénario registre-et-rappel est ce qui rend SAX event-driven. Maintenant, la chose drôle est, un événement SAX est pas tangible. Un événement SAX ne sera pas vous rappeler une touche ou un clic de bouton. Dans SAX, l'analyseur scanne un document XML de haut en bas. Chaque fois que l'analyseur rencontre quelque chose d'intéressant, l'analyseur se envoie un événement et appelle le gestionnaire. Ensuite, il revient au gestionnaire de faire quelque chose à propos de cette rencontre intéressante.


» » » » Événements d'analyse XML avec sax