2. 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++
3. 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)
4. 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
5. 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
6. 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
7. 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
8. 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
9. 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
10. 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 »
11. 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
12. 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)
13. 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
14. 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
15. 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
16. 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>
17. 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…
18. 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
19. 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é
20. 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…
21. 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
22. 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 ?
23. 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 !
24. 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)
25. 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
26. 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
27. 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
28. 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
29. 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
30. 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
31. 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
32. 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
33. Cours semaine 3 jour 3 Cours C++ 33
Documents XML (2)
Document non valide :
<document>
<a>Avalue
<b>Bvalue
</a>
</b>
</document>
34. Cours semaine 3 jour 3 Cours C++ 34
Documents XML (3)
Document valide :
<document>
<a>Avalue
</a>
<b>Bvalue
</b>
</document>
35. 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
36. 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
37. 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
38. 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
39. 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
40. 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
…
41. 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
42. 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é>
43. 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
44. 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
45. 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>
46. 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>
47. 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
48. Cours semaine 3 jour 3 Cours C++ 48
Utilisation de XML (11)
document
XML
nouveau document
(format XML ou
autre)
feuille de style
XSL
49. 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é>
50. 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
51. 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>
52. 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 !
53. 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 &
54. 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
55. 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
56. 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)
57. 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)
58. 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
…
59. 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
60. 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
61. 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)>
]>
62. 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
>
63. 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>
…
64. 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>
65. 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
66. 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
67. 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)
68. 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
69. 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
71. 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
72. 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
73. 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
74. 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 .Debugtest.xml
Compilez, linkez et exécutez
75. Cours semaine 3 jour 3 Cours C++ 75
SAX2Jumpstart (5)
Allez voir le contenu du fichier test.xml
Dans Project > Settings > Debug, mettez
.Debugtest1.xml dans Program Argument
Ouvrez le fichier test1.xml et comparez
76. 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
77. 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
78. 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
80. 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
81. 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
83. 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
85. 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>
86. 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
87. 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
88. 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
89. 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
90. 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)