Download - Cours de C++, en français, 2002 - Cours 3.3
![Page 1: Cours de C++, en français, 2002 - Cours 3.3](https://reader035.vdocuments.site/reader035/viewer/2022062412/5a66c4677f8b9a3c0e8b51a9/html5/thumbnails/1.jpg)
Cours C++ (2002)
semaine 3
jour 3
![Page 2: Cours de C++, en français, 2002 - Cours 3.3](https://reader035.vdocuments.site/reader035/viewer/2022062412/5a66c4677f8b9a3c0e8b51a9/html5/thumbnails/2.jpg)
Cours semaine 3 jour 3 Cours C++ 2
Plan du jour
Présentation de XML : histoire et évolution
Raison du succès actuel ; lien entre langage
orienté objet, langage de modélisation et
XML
Syntaxe et grammaire
Utilisation d’un fichier XML en C++
![Page 3: Cours de C++, en français, 2002 - Cours 3.3](https://reader035.vdocuments.site/reader035/viewer/2022062412/5a66c4677f8b9a3c0e8b51a9/html5/thumbnails/3.jpg)
Cours semaine 3 jour 3 Cours C++ 3
Bases de données
Durant les années 60, apparition des bases
de données
1961 : Integrated Data Storage, General
Electric
1965-1970 :
Integrated Management System (IBM) : utilisation
du modèle hiérarchique (théorie des graphes
restreinte aux arborescences)
IMS DataBase/DataCom : utilisation du modèle
réseau (théorie des graphes)
![Page 4: Cours de C++, en français, 2002 - Cours 3.3](https://reader035.vdocuments.site/reader035/viewer/2022062412/5a66c4677f8b9a3c0e8b51a9/html5/thumbnails/4.jpg)
Cours semaine 3 jour 3 Cours C++ 4
Bases de données (2)
Les bases de données hiérarchiques et
réseau sont très difficiles à utiliser
Le parcours d’un ensemble de données se fait
par déplacement de pointeurs dans la structure
de la base de données : passage d’un champ
d’information à un autre
Les programmes, développés avec des langages
procéduraux, sont très difficiles à mettre au
point
![Page 5: Cours de C++, en français, 2002 - Cours 3.3](https://reader035.vdocuments.site/reader035/viewer/2022062412/5a66c4677f8b9a3c0e8b51a9/html5/thumbnails/5.jpg)
Cours semaine 3 jour 3 Cours C++ 5
Base de données (3)
1970 : Modèle relationnel (E.F. Codd)
Abandon de la théorie des graphes
Utilisation de la théorie des ensembles
Plus de parcours dans un graphe : utilisation
des opérateurs ensemblistes
jointure, union, division, etc
Très bien adapté aux données généralement
représentées dans une base : données plates
![Page 6: Cours de C++, en français, 2002 - Cours 3.3](https://reader035.vdocuments.site/reader035/viewer/2022062412/5a66c4677f8b9a3c0e8b51a9/html5/thumbnails/6.jpg)
Cours semaine 3 jour 3 Cours C++ 6
Base de données (4)
La théorie des ensembles impose cependant
quelques restrictions inexistantes dans le
modèle réseau : les formes normales
permettent de garantir une certaine qualité
du modèle de la base
Existence d’une langage d’accès
«standardisé», SQL, Structured Query
Language
![Page 7: Cours de C++, en français, 2002 - Cours 3.3](https://reader035.vdocuments.site/reader035/viewer/2022062412/5a66c4677f8b9a3c0e8b51a9/html5/thumbnails/7.jpg)
Cours semaine 3 jour 3 Cours C++ 7
Représentation de données
Le mode de représentation ensembliste n’est
pas le meilleur dans tous les cas
Bien pour un ensemble de données stables
Un client, un fournisseur ou un mouvement
comptable possèdent toujours un ensemble minimal
d’informations identiques
Beaucoup moins efficace pour des données
possédant une grande variabilité et plusieurs
niveaux d’information
![Page 8: Cours de C++, en français, 2002 - Cours 3.3](https://reader035.vdocuments.site/reader035/viewer/2022062412/5a66c4677f8b9a3c0e8b51a9/html5/thumbnails/8.jpg)
Cours semaine 3 jour 3 Cours C++ 8
Représentation de données (2)
Exemple : comment représenter un
document dans une base de données
relationnelle ?
Par un BLOB, Binary Large OBject, ou un
CLOB, Character Large OBject
Par un ensemble de tables successives
Par une table capable de représenter
l’information récursivement
![Page 9: Cours de C++, en français, 2002 - Cours 3.3](https://reader035.vdocuments.site/reader035/viewer/2022062412/5a66c4677f8b9a3c0e8b51a9/html5/thumbnails/9.jpg)
Cours semaine 3 jour 3 Cours C++ 9
Données relationnelles BLOB
Un BLOB, ou un CLOB (DCLOB, Double
Byte CLOB pour l’UNICODE) permet de
stocker une information volumineuse
L’information est cependant considérée
comme un gros paquet
L’information est inexploitable : il n’y a pas
moyen d’accéder à une sous partie de celle-
ci, il faut tout traiter d’un bloc
![Page 10: Cours de C++, en français, 2002 - Cours 3.3](https://reader035.vdocuments.site/reader035/viewer/2022062412/5a66c4677f8b9a3c0e8b51a9/html5/thumbnails/10.jpg)
Cours semaine 3 jour 3 Cours C++ 10
Tables successives
Différents types d’éléments peuvent être
représentés dans différentes tables
Table DOCUMENT, table CHAPITRE,
PARAGRAPHE, PHRASE, LISTE, POINT,
FIGURE, TABLE_DES_MATIERE, etc, etc !
Le modèle doit être énorme pour permettre une
certaine variabilité
La programmation utilisant une telle base
est complexe ! Beaucoup de « pointeurs »
![Page 11: Cours de C++, en français, 2002 - Cours 3.3](https://reader035.vdocuments.site/reader035/viewer/2022062412/5a66c4677f8b9a3c0e8b51a9/html5/thumbnails/11.jpg)
Cours semaine 3 jour 3 Cours C++ 11
Tables relationnelles récursives
Certains systèmes de gestion de bases de
données relationnelles proposent des tables
récursives, par exemple ORACLE
Plusieurs niveaux d’information peuvent être
isolés
Le problème des pointeurs existe encore
Très difficilement utilisable, temps de mis au
point important
Le programme est momifié lorsqu’il fonctionne
![Page 12: Cours de C++, en français, 2002 - Cours 3.3](https://reader035.vdocuments.site/reader035/viewer/2022062412/5a66c4677f8b9a3c0e8b51a9/html5/thumbnails/12.jpg)
Cours semaine 3 jour 3 Cours C++ 12
Stockage de documents
Dans les années 70, Goldfarb, Mosher et
Lorie d’IBM étudient le problème du
stockage des documents
Reconnaissance de la variabilité de la taille des
« champs » : introduction de la notion de balise
La taille d’un champ n’est pas connue a priori lors
de la définition du modèle
Sont connus a priori : le contenu du champ (nom
dans le modèle) et le type des données (par exemple
une chaîne de caractères)
![Page 13: Cours de C++, en français, 2002 - Cours 3.3](https://reader035.vdocuments.site/reader035/viewer/2022062412/5a66c4677f8b9a3c0e8b51a9/html5/thumbnails/13.jpg)
Cours semaine 3 jour 3 Cours C++ 13
SGML
Parternité officielle : Goldfarb
Définition de SGML, Structured
Generalized Markup Language
Structured : le but est de stocker des documents
fortement structurés
Generalized : SGML est un méta-language
permettant de définir des grammaires
Markup : utilisation des balises
![Page 14: Cours de C++, en français, 2002 - Cours 3.3](https://reader035.vdocuments.site/reader035/viewer/2022062412/5a66c4677f8b9a3c0e8b51a9/html5/thumbnails/14.jpg)
Cours semaine 3 jour 3 Cours C++ 14
SGML (2)
SGML permet la rédaction de DTDs,
Document Type Definition
Description de langages respectant le
formalisme SGML
Possibilité de transformer un document
SGML grâce à DSSSL, Document Style
Semantics and Specification Language, qui
permet de définir des feuilles de style et
donc de réaliser des transformations
![Page 15: Cours de C++, en français, 2002 - Cours 3.3](https://reader035.vdocuments.site/reader035/viewer/2022062412/5a66c4677f8b9a3c0e8b51a9/html5/thumbnails/15.jpg)
Cours semaine 3 jour 3 Cours C++ 15
SGML (3)
Différentes normes existent pour la
représentation de documents
TEI, Text Encoding Initative : pour les
documents plutôt littéraires
DocBook : pour les documents plutôt
techniques
Modèle des tables CALS : pour la
représentation de tables de documents
![Page 16: Cours de C++, en français, 2002 - Cours 3.3](https://reader035.vdocuments.site/reader035/viewer/2022062412/5a66c4677f8b9a3c0e8b51a9/html5/thumbnails/16.jpg)
Cours semaine 3 jour 3 Cours C++ 16
SGML (4)
<document>
<nom>cours C++</nom>
<chapitre>XML</chapitre>
<résumé>Ce chapitre présente XML à travers son histoire et ses possibilités. Application à la plate-forme Microsoft Windows
</résumé>
…
</document>
![Page 17: Cours de C++, en français, 2002 - Cours 3.3](https://reader035.vdocuments.site/reader035/viewer/2022062412/5a66c4677f8b9a3c0e8b51a9/html5/thumbnails/17.jpg)
Cours semaine 3 jour 3 Cours C++ 17
SGML (5)
SGML est un langage très lourd à mettre en
œuvre, peu de sociétés peuvent s’offrir
pareil système pour la représentation et le
stockage des données
Mais certains l’utilisent avec bonheur : Boeing
stocke toute sa documentation technique avec
SGML et économise des tonnes de papier
SGML permet de définir des langages
simples comme HTML…
![Page 18: Cours de C++, en français, 2002 - Cours 3.3](https://reader035.vdocuments.site/reader035/viewer/2022062412/5a66c4677f8b9a3c0e8b51a9/html5/thumbnails/18.jpg)
Cours semaine 3 jour 3 Cours C++ 18
HTML
HTML, HyperText Markup Language, a révolutionné le monde naissant de l’Internet, de concert avec Mosaic, le premier « navigateur » hypertexte
HTML permet de représenter l’information de manière structurée mais simpliste
Le nombre des balises est très limité
Besoin d’un langage permettant plus de possibilités, avec des balises sémantiques
![Page 19: Cours de C++, en français, 2002 - Cours 3.3](https://reader035.vdocuments.site/reader035/viewer/2022062412/5a66c4677f8b9a3c0e8b51a9/html5/thumbnails/19.jpg)
Cours semaine 3 jour 3 Cours C++ 19
XML
La naissance de XML, eXtensible Markup Language, résulte d’un ensemble de constatations
SGML est trop complexe et de nombreux mécanismes peuvent être abandonnés
HTML est très intéressant mais les informations contenues dans de tels documents sont inexploitables de manière automatique
De nombreux types d’information nécessitent un format dédié
![Page 20: Cours de C++, en français, 2002 - Cours 3.3](https://reader035.vdocuments.site/reader035/viewer/2022062412/5a66c4677f8b9a3c0e8b51a9/html5/thumbnails/20.jpg)
Cours semaine 3 jour 3 Cours C++ 20
XML (2)
XML correspond principalement à une version allégée de SGML
Certains mécanismes complexes ont été purement et simplement abandonnés
XML sert désormais de base à de nombreux projets, produits et concepts ayant besoin d’une information structurée et hiérarchisée
Le modèle relationnel ne doit pas être oublié pour autant…
![Page 21: Cours de C++, en français, 2002 - Cours 3.3](https://reader035.vdocuments.site/reader035/viewer/2022062412/5a66c4677f8b9a3c0e8b51a9/html5/thumbnails/21.jpg)
Cours semaine 3 jour 3 Cours C++ 21
XML (3)
XML est une norme du World Wide Web Consortium
C’est donc un standard et tout ceux qui utilisent ce standard sont censés en respecter scrupuleusement les règles
Le format doit donc pourvoir passer de manière totalement transparente entre plusieurs plate-formes et les résultats doivent être similaires lorsque l’on utilise les outils standards sur XML
![Page 22: Cours de C++, en français, 2002 - Cours 3.3](https://reader035.vdocuments.site/reader035/viewer/2022062412/5a66c4677f8b9a3c0e8b51a9/html5/thumbnails/22.jpg)
Cours semaine 3 jour 3 Cours C++ 22
Bref historique XML
Les premiers documents écrits suivant le
standard XML, alors naissant, sont
différents livres religieux (Bible, Coran, …)
et les pièces de Shakespeare
Qui a écrit ces documents ?
Le World Wide Web Consortium a un
groupe de travail (WG) sur XML
Qui le dirige ?
![Page 23: Cours de C++, en français, 2002 - Cours 3.3](https://reader035.vdocuments.site/reader035/viewer/2022062412/5a66c4677f8b9a3c0e8b51a9/html5/thumbnails/23.jpg)
Cours semaine 3 jour 3 Cours C++ 23
Les points sur les i
Les deux questions précédentes ont la
même réponse : John Bosak
John Bosak est ingénieur chez Sun !
Si demain Microsoft revendique une
quelconque paternité sur XML, relisez ces
deux transparents !
![Page 24: Cours de C++, en français, 2002 - Cours 3.3](https://reader035.vdocuments.site/reader035/viewer/2022062412/5a66c4677f8b9a3c0e8b51a9/html5/thumbnails/24.jpg)
Cours semaine 3 jour 3 Cours C++ 24
XML sur le client
XHTML est une synthèse de HTML et de XML : existence d’un ensemble minimal de balises et possibilité d’extension
Mariage des balises HTML standard, que l’on sait traiter, et de balises supplémentaires, permettant de personnaliser le document
SVG, Scalable Vector Graphic, pour la représentation de données graphiques vectorielles (dessins, cartes) (il existe un viewer chez Adobe)
![Page 25: Cours de C++, en français, 2002 - Cours 3.3](https://reader035.vdocuments.site/reader035/viewer/2022062412/5a66c4677f8b9a3c0e8b51a9/html5/thumbnails/25.jpg)
Cours semaine 3 jour 3 Cours C++ 25
XML sur le client (2)
Initiatives particulières pour les formules
mathématiques ou chimiques, la
représentation de la voix pour la synthèse
Initiatives pour des formats de conservation
de préférences utilisateur
Initiatives pour le stockages de gros
documents tels que les livres littéraires ou
techniques : eBook et DocBook
![Page 26: Cours de C++, en français, 2002 - Cours 3.3](https://reader035.vdocuments.site/reader035/viewer/2022062412/5a66c4677f8b9a3c0e8b51a9/html5/thumbnails/26.jpg)
Cours semaine 3 jour 3 Cours C++ 26
XML sur le serveur
XML est un excellent outil pour l’échange
de données
Pour l’EDI : XML/EDI qui rend les messages
EDI lisibles…
Entre applications (la suite de l’EDI) :
messages XML dans SOAP, ebXML
Entre sites web : ICE, Internet Content
Exchange pour la syndication de sites
Registres XML : UDDI, ebXML
![Page 27: Cours de C++, en français, 2002 - Cours 3.3](https://reader035.vdocuments.site/reader035/viewer/2022062412/5a66c4677f8b9a3c0e8b51a9/html5/thumbnails/27.jpg)
Cours semaine 3 jour 3 Cours C++ 27
XML dans les bases de données
XML permet de mettre en œuvre des bases
de données hiérarchiques qui sont une
solution aux problèmes rencontrés dans la
définition de bases de données objet
La mise en correspondance entre un objet
(C++, Java, etc) et une structure XML peut être
faite facilement : la définition du/des objets doit
respecter la grammaire de la structure XML
![Page 28: Cours de C++, en français, 2002 - Cours 3.3](https://reader035.vdocuments.site/reader035/viewer/2022062412/5a66c4677f8b9a3c0e8b51a9/html5/thumbnails/28.jpg)
Cours semaine 3 jour 3 Cours C++ 28
XML dans les BDD (2)
Il existe d’ores et déjà des produits permettants de
stocker des documents XML dans une base de
données
Disponibilité (sur plate-forme Microsoft) de la base
Excelon
www.odi.com, www.exceloncorp.com
Disponibilité d’EntireX
Adabas, la plus ancienne base de données hiérarchique encore
existante peut également traiter les documents XML
www.softwareag.com
![Page 29: Cours de C++, en français, 2002 - Cours 3.3](https://reader035.vdocuments.site/reader035/viewer/2022062412/5a66c4677f8b9a3c0e8b51a9/html5/thumbnails/29.jpg)
Cours semaine 3 jour 3 Cours C++ 29
Utilisation de XML
À la différence de SGML, XML peut être
mis en œuvre à l’aide de nombreux
frameworks disponibles gratuitement et
parfois Open Source
Microsoft
Apache (sources Java et C++) : regroupement
des initiatives de Sun et d’IBM
Oracle
![Page 30: Cours de C++, en français, 2002 - Cours 3.3](https://reader035.vdocuments.site/reader035/viewer/2022062412/5a66c4677f8b9a3c0e8b51a9/html5/thumbnails/30.jpg)
Cours semaine 3 jour 3 Cours C++ 30
Normes XML complémentaires
Un avantage de XML est l’existence de
normes dérivées pour son exploitation
XSL, XML Stylesheet Language, un dérivé de
DSSSL, permet de transformer un document
XPath, permet de définir l’adresse d’un élément
dans un document
XPointer, XLink, XML Base, permettent de
spécifier différents types de liens dans ou entre
des documents XML
![Page 31: Cours de C++, en français, 2002 - Cours 3.3](https://reader035.vdocuments.site/reader035/viewer/2022062412/5a66c4677f8b9a3c0e8b51a9/html5/thumbnails/31.jpg)
Cours semaine 3 jour 3 Cours C++ 31
Normes XML (2)
La définition de grammaires peut être faite
de plusieurs manières
Une DTD, Document Type Definition, héritée
de SGML
Les DTD sont écrites dans un langage qui leur est
propre : les outils de traitement de XML ne peuvent
pas être utilisés dans ce cas
Un schéma XML, norme de définition de
grammaire XML en XML introduisant des
notions de types
![Page 32: Cours de C++, en français, 2002 - Cours 3.3](https://reader035.vdocuments.site/reader035/viewer/2022062412/5a66c4677f8b9a3c0e8b51a9/html5/thumbnails/32.jpg)
Cours semaine 3 jour 3 Cours C++ 32
Documents XML
Un document XML possède deux niveaux
de validité
Un document peut être bien formé (well-
formed) : il respecte les contraintes générales
imposées aux documents XML
Un document peut être valide : il est bien formé
et il respecte une certaine grammaire
Analyse d’un document XML en validant sa
structure par une DTD ou un schéma
![Page 33: Cours de C++, en français, 2002 - Cours 3.3](https://reader035.vdocuments.site/reader035/viewer/2022062412/5a66c4677f8b9a3c0e8b51a9/html5/thumbnails/33.jpg)
Cours semaine 3 jour 3 Cours C++ 33
Documents XML (2)
Document non valide :
<document>
<a>Avalue
<b>Bvalue
</a>
</b>
</document>
![Page 34: Cours de C++, en français, 2002 - Cours 3.3](https://reader035.vdocuments.site/reader035/viewer/2022062412/5a66c4677f8b9a3c0e8b51a9/html5/thumbnails/34.jpg)
Cours semaine 3 jour 3 Cours C++ 34
Documents XML (3)
Document valide :
<document>
<a>Avalue
</a>
<b>Bvalue
</b>
</document>
![Page 35: Cours de C++, en français, 2002 - Cours 3.3](https://reader035.vdocuments.site/reader035/viewer/2022062412/5a66c4677f8b9a3c0e8b51a9/html5/thumbnails/35.jpg)
Cours semaine 3 jour 3 Cours C++ 35
Documents XML (4)
L’exploitation des documents XML se fait
de deux manières
DOM, Document Object Model
Le document XML est totalement chargé en
mémoire et chacun de ses éléments est représenté
par l’instance d’un objet
SAX : Simple API for XML
Le document XML n’est pas chargé en mémoire, il
est lu sur disque en parallèle à la gestion d’une pile
de balises ouvertes
![Page 36: Cours de C++, en français, 2002 - Cours 3.3](https://reader035.vdocuments.site/reader035/viewer/2022062412/5a66c4677f8b9a3c0e8b51a9/html5/thumbnails/36.jpg)
Cours semaine 3 jour 3 Cours C++ 36
Documents XML (5)
DOM n’est pas efficace pour le traitement à
la volée de documents
DOM est intéressant lorsque plusieurs
transformations/traitements successifs
doivent être effectués
SAX est très pratique pour les traitements
légers ou avec des systèmes informatiques
manquant de puissance
![Page 37: Cours de C++, en français, 2002 - Cours 3.3](https://reader035.vdocuments.site/reader035/viewer/2022062412/5a66c4677f8b9a3c0e8b51a9/html5/thumbnails/37.jpg)
Cours semaine 3 jour 3 Cours C++ 37
Documents XML (6)
DOM utilise la récursion pour modéliser un
document (schéma simplifié):
ExpressionTerminale Element
Node NodeList
![Page 38: Cours de C++, en français, 2002 - Cours 3.3](https://reader035.vdocuments.site/reader035/viewer/2022062412/5a66c4677f8b9a3c0e8b51a9/html5/thumbnails/38.jpg)
Cours semaine 3 jour 3 Cours C++ 38
Utilisation de XML
XML peut être utilisé pour créer des objets
à partir de données structurées
Sérialisation puis reconstitution
Création d’un document à partir d’une table
existante
Transformation de documents XML pour
affichage/présentation à l’utilisateur
Transformation vers HTML ou PDF par
exemple
![Page 39: Cours de C++, en français, 2002 - Cours 3.3](https://reader035.vdocuments.site/reader035/viewer/2022062412/5a66c4677f8b9a3c0e8b51a9/html5/thumbnails/39.jpg)
Cours semaine 3 jour 3 Cours C++ 39
Utilisation de XML (2)
Exemple (théorique) de récupération de
données à partir d’une table dans une base
de données
Création d’un petit document XML sans
grammaire
Transformation vers HTML
![Page 40: Cours de C++, en français, 2002 - Cours 3.3](https://reader035.vdocuments.site/reader035/viewer/2022062412/5a66c4677f8b9a3c0e8b51a9/html5/thumbnails/40.jpg)
Cours semaine 3 jour 3 Cours C++ 40
Utilisation de XML (3)
Table EMPLOYÉ
NOM PRÉNOM RUE VILLE PAYS
Samme Pierre-Benoit Route de Luxembourg Sandweiler Luxembourg
Dupont Jean Rue du lac Sandweiler Luxembourg
Durand Jacques Route des cimes Luxembourg Luxembourg
…
![Page 41: Cours de C++, en français, 2002 - Cours 3.3](https://reader035.vdocuments.site/reader035/viewer/2022062412/5a66c4677f8b9a3c0e8b51a9/html5/thumbnails/41.jpg)
Cours semaine 3 jour 3 Cours C++ 41
Utilisation de XML (4)
Création d’un fichier XML à partir de la
table ?
Le nom de la table devient le nom de l’élément
racine
Les noms des champs deviennent les noms des
différents éléments du document
Les valeurs d’un tuple sont les valeurs des
éléments identifiés
![Page 42: Cours de C++, en français, 2002 - Cours 3.3](https://reader035.vdocuments.site/reader035/viewer/2022062412/5a66c4677f8b9a3c0e8b51a9/html5/thumbnails/42.jpg)
Cours semaine 3 jour 3 Cours C++ 42
Utilisation de XML (5)
<employé>
<nom>Samme</nom>
<prénom>Pierre-Benoit</prénom>
<rue>Route de Luxembourg</rue>
<ville>Sandweiler</ville>
<pays>Luxembourg</pays>
</employé>
![Page 43: Cours de C++, en français, 2002 - Cours 3.3](https://reader035.vdocuments.site/reader035/viewer/2022062412/5a66c4677f8b9a3c0e8b51a9/html5/thumbnails/43.jpg)
Cours semaine 3 jour 3 Cours C++ 43
Utilisation de XML (6)
La repésentation « orientée objet » utilise un
graphe
employé
nom
Samme
prénom
Pierre-Benoît
rue
Route de
Luxembourg
ville
Sandweiler
pays
Luxembourg
![Page 44: Cours de C++, en français, 2002 - Cours 3.3](https://reader035.vdocuments.site/reader035/viewer/2022062412/5a66c4677f8b9a3c0e8b51a9/html5/thumbnails/44.jpg)
Cours semaine 3 jour 3 Cours C++ 44
Utilisation de XML (7)
Pour transformer un document XML, il faut
utiliser une (ou plusieurs) feuille de style
XSL
Dans la feuille de style, chaque élément doit
être identifié si l’on souhaite y appliquer une
tranformation
Les éléments omis ne seront pas pris en compte
Une feuille de style est constituée d’un
ensemble de points d’entrée XPath
![Page 45: Cours de C++, en français, 2002 - Cours 3.3](https://reader035.vdocuments.site/reader035/viewer/2022062412/5a66c4677f8b9a3c0e8b51a9/html5/thumbnails/45.jpg)
Cours semaine 3 jour 3 Cours C++ 45
Utilisation de XML (8)
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:template match="/">
<html>
<header>
<title>document XML d’un employé transformé en HTML</title>
</header>
<body>
<xsl:apply-templates>
</body>
</html>
</xsl:template>
![Page 46: Cours de C++, en français, 2002 - Cours 3.3](https://reader035.vdocuments.site/reader035/viewer/2022062412/5a66c4677f8b9a3c0e8b51a9/html5/thumbnails/46.jpg)
Cours semaine 3 jour 3 Cours C++ 46
Utilisation de XML (9)
<xsl:template match="employé">
<b>NOM : </b><xsl:value-of select="nom" /><br />
<b>PRÉNOM : </b><xsl:value-of select="prénom" /><br />
<b>RUE : </b><xsl:value-of select="rue" /><br />
<b>VILLE : </b><xsl:value-of select="ville" /><br />
<xsl:apply-templates>
</xsl:template>
<xsl:template match="pays">
<b>PAYS : </b><xsl:value-of select="nom" /><br />
</xsl:template>
…
</xsl:stylesheet>
![Page 47: Cours de C++, en français, 2002 - Cours 3.3](https://reader035.vdocuments.site/reader035/viewer/2022062412/5a66c4677f8b9a3c0e8b51a9/html5/thumbnails/47.jpg)
Cours semaine 3 jour 3 Cours C++ 47
Utilisation de XML (10)
Posséder un document XML et une feuille de style XSL traitant ses éléments permet de transformer un document XML en XML (avec une autre grammaire) ou autre chose
Pour une transformation vers un format papier, comme PDF mais pas comme HTML, il faut utiliser les FO, formatting objects, de XSL pour introduire la notion de rupture de page
![Page 48: Cours de C++, en français, 2002 - Cours 3.3](https://reader035.vdocuments.site/reader035/viewer/2022062412/5a66c4677f8b9a3c0e8b51a9/html5/thumbnails/48.jpg)
Cours semaine 3 jour 3 Cours C++ 48
Utilisation de XML (11)
document
XMLnouveau document
(format XML ou
autre)
feuille de style
XSL
![Page 49: Cours de C++, en français, 2002 - Cours 3.3](https://reader035.vdocuments.site/reader035/viewer/2022062412/5a66c4677f8b9a3c0e8b51a9/html5/thumbnails/49.jpg)
Cours semaine 3 jour 3 Cours C++ 49
Syntaxe de XML
XML possède une syntaxe héritée de celle
de SGML
XML possède des balises
employé
Ces balises sont généralement utilisées par
paires
Balise ouvrante et balise fermante
<employé> et </employé>
![Page 50: Cours de C++, en français, 2002 - Cours 3.3](https://reader035.vdocuments.site/reader035/viewer/2022062412/5a66c4677f8b9a3c0e8b51a9/html5/thumbnails/50.jpg)
Cours semaine 3 jour 3 Cours C++ 50
Syntaxe de XML (2)
XML possède des éléments
Les éléments sont entourés (nichés) entre une
balise ouvrante et une balise fermante
Les éléments vides peuvent être décrits avec
une version abrégée
<balise></balise > peut s’écrire < balise />
Un document XML n’a qu’un seul élément
racine
![Page 51: Cours de C++, en français, 2002 - Cours 3.3](https://reader035.vdocuments.site/reader035/viewer/2022062412/5a66c4677f8b9a3c0e8b51a9/html5/thumbnails/51.jpg)
Cours semaine 3 jour 3 Cours C++ 51
Syntaxe de XML (3)
Les éléments XML peuvent posséder des
attributs
Les attributs sont une alternative à la
représentation d’information, ils évitent de
créer des sous-éléments
<balise nom="balise" position="24"> …
</balise>
![Page 52: Cours de C++, en français, 2002 - Cours 3.3](https://reader035.vdocuments.site/reader035/viewer/2022062412/5a66c4677f8b9a3c0e8b51a9/html5/thumbnails/52.jpg)
Cours semaine 3 jour 3 Cours C++ 52
Syntaxe de XML (4)
En XML, il est possible d’inclure des
chaînes de caractères qui ne seront pas
interprétées : character data
<![CDATA[ … ]]>
Ceci permet de mettre des fausses balises
<![CDATA[ <texte> du texte </texte> ]]> et la
balise texte n’est pas interprétée
<![CDATA[ </texte> du texte <texte> ]]> marche
aussi !
![Page 53: Cours de C++, en français, 2002 - Cours 3.3](https://reader035.vdocuments.site/reader035/viewer/2022062412/5a66c4677f8b9a3c0e8b51a9/html5/thumbnails/53.jpg)
Cours semaine 3 jour 3 Cours C++ 53
Syntaxe de XML (5)
XML possède des entités
Les entités permettent de représenter des
caractères qui seront interprétés par la suite
pour affichage (typiquement)
Les entités de base de XML sont celles de
SGML
< peut s’écrire < (lower than)
& peut s’écrire &
![Page 54: Cours de C++, en français, 2002 - Cours 3.3](https://reader035.vdocuments.site/reader035/viewer/2022062412/5a66c4677f8b9a3c0e8b51a9/html5/thumbnails/54.jpg)
Cours semaine 3 jour 3 Cours C++ 54
Syntaxe de XML (6)
Entités XML (suite)
Tous les caractères européens sont représentés
À peut s’écrire À
É peut s’écrire É
ü peut s’écrire ü
Les entités XML peuvent également être
décrites avec leur code Unicode
Exemple &
Le # marque l’appartenance au codage Unicode
![Page 55: Cours de C++, en français, 2002 - Cours 3.3](https://reader035.vdocuments.site/reader035/viewer/2022062412/5a66c4677f8b9a3c0e8b51a9/html5/thumbnails/55.jpg)
Cours semaine 3 jour 3 Cours C++ 55
Grammaires pour XML
Une grammaire d’un document définit l’ensemble des possibilités pour écrire un document respectant la grammaire
Tient compte du fait que certains éléments sont optionnels
Tient compte du fait que d’autres peuvent avoir plusieurs occurrences
Il est possible de considérer ces grammaires comme l’équivalent d’un schéma de base de données relationnelle
![Page 56: Cours de C++, en français, 2002 - Cours 3.3](https://reader035.vdocuments.site/reader035/viewer/2022062412/5a66c4677f8b9a3c0e8b51a9/html5/thumbnails/56.jpg)
Cours semaine 3 jour 3 Cours C++ 56
DTD
Une DTD, Document Type Definition, est une manière d’exprimer une grammaire
XML a repris les DTD qui ont tout d’abord été mises en œuvre par SGML, sous la même forme
La définition d’une DTD correspond à une suite d’expressions régulières du type de celles utilisées dans les compilateurs pour la définition de la syntaxe d’un langage (BNF)
![Page 57: Cours de C++, en français, 2002 - Cours 3.3](https://reader035.vdocuments.site/reader035/viewer/2022062412/5a66c4677f8b9a3c0e8b51a9/html5/thumbnails/57.jpg)
Cours semaine 3 jour 3 Cours C++ 57
DTD (2)
Un ELEMENT permet de définir un élément de la grammaire
Son nom correspond à la valeur qui se trouve dans les balises ouvrantes et fermantes
Sa définition correspond aux différents sous-éléments ou données finales qui le constituent
#PCDATA est un indicateur signalant qu’un élément ne contiendra que du texte (attention : aucune balise ne devra se trouver dans ce texte sauf si CDATA)
![Page 58: Cours de C++, en français, 2002 - Cours 3.3](https://reader035.vdocuments.site/reader035/viewer/2022062412/5a66c4677f8b9a3c0e8b51a9/html5/thumbnails/58.jpg)
Cours semaine 3 jour 3 Cours C++ 58
DTD (3)
La liste des attributs doit également être
définie :
CDATA représente ici une chaîne de caractères
ID représente une clé
IDREF représente une clé externe (foreign key)
IDREFS une liste d’IDREF
Il est possible de faire des énumérations
…
![Page 59: Cours de C++, en français, 2002 - Cours 3.3](https://reader035.vdocuments.site/reader035/viewer/2022062412/5a66c4677f8b9a3c0e8b51a9/html5/thumbnails/59.jpg)
Cours semaine 3 jour 3 Cours C++ 59
DTD (4)
Les attributs peuvent également avoir une
quantification
#REQUIRED lorsqu’il est obligatoire
#IMPLIED lorsqu’il est optionnel
Une valeur si on peut en donner une par défaut
valeur #FIXED si elle est fixe
![Page 60: Cours de C++, en français, 2002 - Cours 3.3](https://reader035.vdocuments.site/reader035/viewer/2022062412/5a66c4677f8b9a3c0e8b51a9/html5/thumbnails/60.jpg)
Cours semaine 3 jour 3 Cours C++ 60
DTD (5)
Cet ensemble de règles de rédaction d’une
DTD permet de produire des documents
assez peu lisibles
Plus la DTD est grosse (ce qui est vite le
cas…) et plus l’utilisation d’outils
graphiques d’édition de DTD devient
nécessaire
La remarque est aussi vraie pour les gros
documents XML
![Page 61: Cours de C++, en français, 2002 - Cours 3.3](https://reader035.vdocuments.site/reader035/viewer/2022062412/5a66c4677f8b9a3c0e8b51a9/html5/thumbnails/61.jpg)
Cours semaine 3 jour 3 Cours C++ 61
DTD (6)
<!DOCTYPE company [
<!ELEMENT company ((person|product)*)>
<!ELEMENT person (ssn, name, office, phone?)>
<!ELEMENT ssn (#PCDATA)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT office (#PCDATA)>
<!ELEMENT phone (#PCDATA)>
<!ELEMENT product (pid, name, description?)>
<!ELEMENT pid (#PCDATA)>
<!ELEMENT description (#PCDATA)>
]>
![Page 62: Cours de C++, en français, 2002 - Cours 3.3](https://reader035.vdocuments.site/reader035/viewer/2022062412/5a66c4677f8b9a3c0e8b51a9/html5/thumbnails/62.jpg)
Cours semaine 3 jour 3 Cours C++ 62
DTD (7)
<!ELEMENT person (ssn, name, office, phone?)>
<!ATTLIS person age CDATA #REQUIRED
id ID #REQUIRED
manager IDREF #REQUIRED
manages IDREFS #REQUIRED
>
![Page 63: Cours de C++, en français, 2002 - Cours 3.3](https://reader035.vdocuments.site/reader035/viewer/2022062412/5a66c4677f8b9a3c0e8b51a9/html5/thumbnails/63.jpg)
Cours semaine 3 jour 3 Cours C++ 63
DTD (8)
<company>
<person age=“25”
id=“p29432”
manager=“p48293”
manages=“p34982 p423234”>
<ssn> 123456789 </ssn>
<name> John </name>
<office> B432 </office>
<phone> 1234 </phone>
</person>
…
![Page 64: Cours de C++, en français, 2002 - Cours 3.3](https://reader035.vdocuments.site/reader035/viewer/2022062412/5a66c4677f8b9a3c0e8b51a9/html5/thumbnails/64.jpg)
Cours semaine 3 jour 3 Cours C++ 64
DTD (9)
…
<person age=“25”
id=“p48293”
manager=“p48293”
manages=“p29432 p24168”>>
<ssn> 987654321 </ssn>
<name> Jim </name>
<office> B123 </office>
</person>
<product> ... </product>
...
</company>
![Page 65: Cours de C++, en français, 2002 - Cours 3.3](https://reader035.vdocuments.site/reader035/viewer/2022062412/5a66c4677f8b9a3c0e8b51a9/html5/thumbnails/65.jpg)
Cours semaine 3 jour 3 Cours C++ 65
Schémas
Les DTD posent un problème, grave : elles ne sont pas écrites en XML
De ce fait, il faut développer des outils ad-hoc pour les traiter
Typiquement : le programme de lecture du fichier XML avec un programme de lecture de fichier de DTD
La différence de représentation impose un effort de développement inutile
![Page 66: Cours de C++, en français, 2002 - Cours 3.3](https://reader035.vdocuments.site/reader035/viewer/2022062412/5a66c4677f8b9a3c0e8b51a9/html5/thumbnails/66.jpg)
Cours semaine 3 jour 3 Cours C++ 66
Schémas (2)
Les schémas XML sont une généralisation
des DTD
Ils utilisent une syntaxe XML
Ce sont donc des documents XML et il est
possible de les générer, comme d’autres
Les schémas XML sont assez complexes
mais offrent de nombreuses possibilités
![Page 67: Cours de C++, en français, 2002 - Cours 3.3](https://reader035.vdocuments.site/reader035/viewer/2022062412/5a66c4677f8b9a3c0e8b51a9/html5/thumbnails/67.jpg)
Cours semaine 3 jour 3 Cours C++ 67
Schémas (3)
Dans un schéma, il est possible d’utiliser la
notion d’élément, comme dans une DTD,
ou la notion de type, plus proche des
langages de programmation
Il est également possible de créer des types
dérivés
Il ne s’agit pas encore de programmation
orientée objet mais l’idée y est (SOX)
![Page 68: Cours de C++, en français, 2002 - Cours 3.3](https://reader035.vdocuments.site/reader035/viewer/2022062412/5a66c4677f8b9a3c0e8b51a9/html5/thumbnails/68.jpg)
Cours semaine 3 jour 3 Cours C++ 68
Schémas (4)
Les types simples sont nombreux :
Types algorithmiques : String, Token, Byte,
unsignedByte, Integer, positiveInteger, Int (qui
est plus large que Integer), unsignedInt, Long,
Short, …
Types spécifiques : Time, dateTime, Duration,
Date
Types techniques : ID, IDREF, IDREFS, listes,
unions, restrictions
![Page 69: Cours de C++, en français, 2002 - Cours 3.3](https://reader035.vdocuments.site/reader035/viewer/2022062412/5a66c4677f8b9a3c0e8b51a9/html5/thumbnails/69.jpg)
Cours semaine 3 jour 3 Cours C++ 69
Schémas (5)
Les types peuvent aussi avoir des attributs,
baptisés facettes
Longueur (min, max)
Nombre d’occurrences (min et max, incluxifs
ou exclusifs)
Spécification du nombre de chiffres d’un
nombre (!) : totalDigits, et éventuellement du
nombre de chiffres après la virgule :
fractionDigits
![Page 70: Cours de C++, en français, 2002 - Cours 3.3](https://reader035.vdocuments.site/reader035/viewer/2022062412/5a66c4677f8b9a3c0e8b51a9/html5/thumbnails/70.jpg)
Cours semaine 3 jour 3 Cours C++ 70
Exercices
![Page 71: Cours de C++, en français, 2002 - Cours 3.3](https://reader035.vdocuments.site/reader035/viewer/2022062412/5a66c4677f8b9a3c0e8b51a9/html5/thumbnails/71.jpg)
Cours semaine 3 jour 3 Cours C++ 71
SAX2Jumpstart
SAX2Jumpstart est une application de
démonstration de Microsoft permettant de
mettre en œuvre le moteur SAX 2 présent
dans le package XML de Microsoft
(MSXML)
Elle permet de voir les différents
mécanismes utilisés dans le cadre de SAX
![Page 72: Cours de C++, en français, 2002 - Cours 3.3](https://reader035.vdocuments.site/reader035/viewer/2022062412/5a66c4677f8b9a3c0e8b51a9/html5/thumbnails/72.jpg)
Cours semaine 3 jour 3 Cours C++ 72
SAX2Jumpstart (2)
SAX permet la lecture à la volée de
documents XML
SAX ne crée pas de structures hiérarchiques
mais traite les éléments en fonction des
balises d’ouverture et de fermeture
rencontrées
À chaque balise, un événement est généré
Il faut donc un handler pour traiter les évèments
![Page 73: Cours de C++, en français, 2002 - Cours 3.3](https://reader035.vdocuments.site/reader035/viewer/2022062412/5a66c4677f8b9a3c0e8b51a9/html5/thumbnails/73.jpg)
Cours semaine 3 jour 3 Cours C++ 73
SAX2Jumpstart (3)
SAX 2 est la deuxième version de l’API (Application Programming Interface) de SAX
Cette version est totalement sous le contrôle du W3C qui définit les « points d’entrées »
SAX était au départ le travail d’un indépendant désirant avoir un moyen simple de traiter des documents XML
Il a donc supprimer la représentation interne
![Page 74: Cours de C++, en français, 2002 - Cours 3.3](https://reader035.vdocuments.site/reader035/viewer/2022062412/5a66c4677f8b9a3c0e8b51a9/html5/thumbnails/74.jpg)
Cours semaine 3 jour 3 Cours C++ 74
SAX2Jumpstart (4)
Décompressez SAX2Jumpstart dans un
répertoire sous votre répertoire général
« My Projects »
Ouvrez le Workspace (.dsw)
Dans Project > Settings > Debug,
remplissez le champ Program Argument
avec .\Debug\test.xml
Compilez, linkez et exécutez
![Page 75: Cours de C++, en français, 2002 - Cours 3.3](https://reader035.vdocuments.site/reader035/viewer/2022062412/5a66c4677f8b9a3c0e8b51a9/html5/thumbnails/75.jpg)
Cours semaine 3 jour 3 Cours C++ 75
SAX2Jumpstart (5)
Allez voir le contenu du fichier test.xml
Dans Project > Settings > Debug, mettez
.\Debug\test1.xml dans Program Argument
Ouvrez le fichier test1.xml et comparez
![Page 76: Cours de C++, en français, 2002 - Cours 3.3](https://reader035.vdocuments.site/reader035/viewer/2022062412/5a66c4677f8b9a3c0e8b51a9/html5/thumbnails/76.jpg)
Cours semaine 3 jour 3 Cours C++ 76
SAX2Jumpstart (6)
Le fichier test1.xml est une version
légèrement modifiée de test.xml
Pourtant test1.xml ne peut pas être
totalement analysé
Le handler des évènements SAX a généré une
erreur
![Page 77: Cours de C++, en français, 2002 - Cours 3.3](https://reader035.vdocuments.site/reader035/viewer/2022062412/5a66c4677f8b9a3c0e8b51a9/html5/thumbnails/77.jpg)
Cours semaine 3 jour 3 Cours C++ 77
SAX2Jumpstart (7)
Le programme CPPSaxSample qui est
fourni utilise les librairies XML de
Microsoft
Tous les traitements se font en utilisant
COM
La fonction main dans CPPSaxSample.cpp
devrait vous en convaincre
L’utilisation généralisée de HRESULT aussi
![Page 78: Cours de C++, en français, 2002 - Cours 3.3](https://reader035.vdocuments.site/reader035/viewer/2022062412/5a66c4677f8b9a3c0e8b51a9/html5/thumbnails/78.jpg)
Cours semaine 3 jour 3 Cours C++ 78
SAX2Jumpstart (8)
Le programme principal
Crée une instance de ISAXXMLReader
Crée une instance du ContentHandler (le
handler des messages générés par SAX)
Place le ContentHandler dans le Reader
Charge la source de données
Lance le traitement effectif : le parcours du
fichier XML
![Page 79: Cours de C++, en français, 2002 - Cours 3.3](https://reader035.vdocuments.site/reader035/viewer/2022062412/5a66c4677f8b9a3c0e8b51a9/html5/thumbnails/79.jpg)
Cours semaine 3 jour 3 Cours C++ 79
![Page 80: Cours de C++, en français, 2002 - Cours 3.3](https://reader035.vdocuments.site/reader035/viewer/2022062412/5a66c4677f8b9a3c0e8b51a9/html5/thumbnails/80.jpg)
Cours semaine 3 jour 3 Cours C++ 80
SAX2Jumpstart (10)
Le SAXContentHandlerImpl de notre projet
ne contient que des méthodes virtuelles
D’autre part, il hérite de ISAXContentHandler
qui est l’interface de Microsoft pour le
SAXContentHandler
Attention (rappel) : il n’y a pas de véritables
interfaces en C++, c’est pour cela que l’on
hérite de l’interface plutôt que de l’implémenter
comme en UML
![Page 81: Cours de C++, en français, 2002 - Cours 3.3](https://reader035.vdocuments.site/reader035/viewer/2022062412/5a66c4677f8b9a3c0e8b51a9/html5/thumbnails/81.jpg)
Cours semaine 3 jour 3 Cours C++ 81
SAX2Jumpstart (11)
La véritable implémentation de notre
handler d’évènements SAX se trouve dans
MyContent
MyContent hérite de SAXContentHandlerImpl
MyContent ne redéfinit que trois des fonctions
de SAXContentHandlerImpl
startDocument
startElement
endElement
![Page 82: Cours de C++, en français, 2002 - Cours 3.3](https://reader035.vdocuments.site/reader035/viewer/2022062412/5a66c4677f8b9a3c0e8b51a9/html5/thumbnails/82.jpg)
Cours semaine 3 jour 3 Cours C++ 82
![Page 83: Cours de C++, en français, 2002 - Cours 3.3](https://reader035.vdocuments.site/reader035/viewer/2022062412/5a66c4677f8b9a3c0e8b51a9/html5/thumbnails/83.jpg)
Cours semaine 3 jour 3 Cours C++ 83
SAX2Jumpstart (13)
Pourquoi la balise de départ <qu> est-elle
rejetée ?
La réponse se trouve dans la méthode
MyContent::StartElement
Cette méthode constitue le message handler des
balises ouvrantes et un test s’y trouve pour
rejeter le document si la balise <qu> est
rencontrée dans un startElement d’un document
XML
![Page 84: Cours de C++, en français, 2002 - Cours 3.3](https://reader035.vdocuments.site/reader035/viewer/2022062412/5a66c4677f8b9a3c0e8b51a9/html5/thumbnails/84.jpg)
Cours semaine 3 jour 3 Cours C++ 84
![Page 85: Cours de C++, en français, 2002 - Cours 3.3](https://reader035.vdocuments.site/reader035/viewer/2022062412/5a66c4677f8b9a3c0e8b51a9/html5/thumbnails/85.jpg)
Cours semaine 3 jour 3 Cours C++ 85
SAX2Jumpstart (15)
Exercice 1 :
Modifier le programme de manière à accepter
les documents contenant la balise de départ
<qu>
Exercice 2 :
Modifier le programme de manière à rejeter la
balise de départ <PART>
![Page 86: Cours de C++, en français, 2002 - Cours 3.3](https://reader035.vdocuments.site/reader035/viewer/2022062412/5a66c4677f8b9a3c0e8b51a9/html5/thumbnails/86.jpg)
Cours semaine 3 jour 3 Cours C++ 86
SAX2Jumpstart (16)
Exercice 3 :
Modifier le programme de manière à accepter
les balises de départ <PART> mais à rejeter les
balises de fin </qu>
Exercice 4 :
Créer un fichier XML avec des balises que vous
aurez définies et assurez vous que le
programme peut en afficher la structure
![Page 87: Cours de C++, en français, 2002 - Cours 3.3](https://reader035.vdocuments.site/reader035/viewer/2022062412/5a66c4677f8b9a3c0e8b51a9/html5/thumbnails/87.jpg)
Cours semaine 3 jour 3 Cours C++ 87
SAX2DOM
SAX2DOM est une application de
démonstration de Microsoft permettant de
mettre en œuvre le moteur SAX 2 présent
dans le package XML de Microsoft
(MSXML)
Elle permet de voir les différents
mécanismes utilisés dans le cadre de SAX
et de DOM
![Page 88: Cours de C++, en français, 2002 - Cours 3.3](https://reader035.vdocuments.site/reader035/viewer/2022062412/5a66c4677f8b9a3c0e8b51a9/html5/thumbnails/88.jpg)
Cours semaine 3 jour 3 Cours C++ 88
SAX2DOM (2)
Le programme SAX2DOM permet de lire
un fichier XML avec SAX et de créer, au
fur et à mesure, un document DOM
Normalement, une structure DOM est créée
directement à partir d’un fichier XML
Cette application est donc purement
démonstrative
![Page 89: Cours de C++, en français, 2002 - Cours 3.3](https://reader035.vdocuments.site/reader035/viewer/2022062412/5a66c4677f8b9a3c0e8b51a9/html5/thumbnails/89.jpg)
Cours semaine 3 jour 3 Cours C++ 89
SAX2DOM (3)
Le programme principal est
SAXToDOM.cpp qui contient
l’initialisation d’une application MFC
SAXToDOMDlg permet de voir
l’initialisation de la fenêtre mais également
l’initialisation des objets COM pour le
traitement SAX et le document DOM
![Page 90: Cours de C++, en français, 2002 - Cours 3.3](https://reader035.vdocuments.site/reader035/viewer/2022062412/5a66c4677f8b9a3c0e8b51a9/html5/thumbnails/90.jpg)
Cours semaine 3 jour 3 Cours C++ 90
SAX2DOM (4)
Le fichier MyContentHandler contient le
handler des messages SAX ainsi que les
instructions nécessaires à la création du
DOM
Certains évènements SAX déclenchent la
création d’un nouveau nœud dans la structure
DOM (startElement, endElement)
![Page 91: Cours de C++, en français, 2002 - Cours 3.3](https://reader035.vdocuments.site/reader035/viewer/2022062412/5a66c4677f8b9a3c0e8b51a9/html5/thumbnails/91.jpg)
Cours semaine 3 jour 3 Cours C++ 91
SAX2DOM (5)
![Page 92: Cours de C++, en français, 2002 - Cours 3.3](https://reader035.vdocuments.site/reader035/viewer/2022062412/5a66c4677f8b9a3c0e8b51a9/html5/thumbnails/92.jpg)
Cours semaine 3 jour 3 Cours C++ 92
Questions / Remarques