Cours de C++, en français, 2002 - Cours 3.3
-
Upload
laurent-buniet -
Category
Technology
-
view
119 -
download
2
Transcript of Cours de C++, en français, 2002 - Cours 3.3
Cours C++ (2002)
semaine 3
jour 3
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++
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)
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
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
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
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
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
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
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 »
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
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)
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
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
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
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>
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…
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
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é
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…
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
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 ?
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 !
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)
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
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
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
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
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
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
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
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
Cours semaine 3 jour 3 Cours C++ 33
Documents XML (2)
Document non valide :
<document>
<a>Avalue
<b>Bvalue
</a>
</b>
</document>
Cours semaine 3 jour 3 Cours C++ 34
Documents XML (3)
Document valide :
<document>
<a>Avalue
</a>
<b>Bvalue
</b>
</document>
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
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
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
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
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
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
…
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
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é>
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
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
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>
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>
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
Cours semaine 3 jour 3 Cours C++ 48
Utilisation de XML (11)
document
XMLnouveau document
(format XML ou
autre)
feuille de style
XSL
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é>
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
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>
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 !
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 &
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
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
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)
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)
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
…
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
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
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)>
]>
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
>
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>
…
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>
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
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
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)
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
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
Cours semaine 3 jour 3 Cours C++ 70
Exercices
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
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
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
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
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
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
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
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
Cours semaine 3 jour 3 Cours C++ 79
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
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
Cours semaine 3 jour 3 Cours C++ 82
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
Cours semaine 3 jour 3 Cours C++ 84
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>
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
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
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
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
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)
Cours semaine 3 jour 3 Cours C++ 91
SAX2DOM (5)
Cours semaine 3 jour 3 Cours C++ 92
Questions / Remarques