SlideShare une entreprise Scribd logo
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
XML
nouveau 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 &lt; (lower than)
 & peut s’écrire &amp;
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 &Agrave;
 É peut s’écrire &Eacute;
 ü peut s’écrire &uuml;
 Les entités XML peuvent également être
décrites avec leur code Unicode
 Exemple &#38;
 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 .Debugtest.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
.Debugtest1.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

Contenu connexe

Similaire à Cours de C++, en français, 2002 - Cours 3.3

Presentation dublincore l3
Presentation dublincore l3Presentation dublincore l3
Presentation dublincore l3DublinCore2b
 
La technologie net par karim kalti
La technologie net par karim kalti La technologie net par karim kalti
La technologie net par karim kalti
Imen Naés
 
Cours de C++, en français, 2002 - Cours 3.4
Cours de C++, en français, 2002 - Cours 3.4Cours de C++, en français, 2002 - Cours 3.4
Cours de C++, en français, 2002 - Cours 3.4
Laurent BUNIET
 
1 introduction
1 introduction1 introduction
1 introduction
said ousguine
 
Cours de C++, en français, 2002 - Cours 1.4
Cours de C++, en français, 2002 - Cours 1.4Cours de C++, en français, 2002 - Cours 1.4
Cours de C++, en français, 2002 - Cours 1.4
Laurent BUNIET
 
Cours de C++, en français, 2002 - Cours 3.2
Cours de C++, en français, 2002 - Cours 3.2Cours de C++, en français, 2002 - Cours 3.2
Cours de C++, en français, 2002 - Cours 3.2
Laurent BUNIET
 
Semantic Information Systems
Semantic Information SystemsSemantic Information Systems
Semantic Information Systems
Serge Garlatti
 
Semantic Information Systems
Semantic Information SystemsSemantic Information Systems
Semantic Information Systems
Serge Garlatti
 
Semantic Information Systems
Semantic Information SystemsSemantic Information Systems
Semantic Information Systems
Serge Garlatti
 
A Brief History of Database Management (SQL, NoSQL, NewSQL)
A Brief History of Database Management (SQL, NoSQL, NewSQL)A Brief History of Database Management (SQL, NoSQL, NewSQL)
A Brief History of Database Management (SQL, NoSQL, NewSQL)
Abdelkader OUARED
 
Modèles de données et langages de description ouverts 2021-2022 - 1
Modèles de données et langages de description ouverts   2021-2022 - 1Modèles de données et langages de description ouverts   2021-2022 - 1
Modèles de données et langages de description ouverts 2021-2022 - 1
François-Xavier Boffy
 
Entity_framework_db first
Entity_framework_db firstEntity_framework_db first
Entity_framework_db first
Zineb ELGARRAI
 
Metadonnees et SID
Metadonnees et SIDMetadonnees et SID
Metadonnees et SID
Sylvie Dalbin
 
7. information modelling
7. information modelling7. information modelling
7. information modelling
sugogo
 
Les catalogues sur le Web
Les catalogues sur le WebLes catalogues sur le Web
Les catalogues sur le Web
Figoblog
 
Cyxlm formation-xml-synthese (1)
Cyxlm formation-xml-synthese (1)Cyxlm formation-xml-synthese (1)
Cyxlm formation-xml-synthese (1)CERTyou Formation
 
Cyxlm formation-xml-synthese
Cyxlm formation-xml-syntheseCyxlm formation-xml-synthese
Cyxlm formation-xml-syntheseCERTyou Formation
 
Cours partie1 elgarrai zineb
Cours partie1 elgarrai zinebCours partie1 elgarrai zineb
Cours partie1 elgarrai zineb
Zineb ELGARRAI
 
Calames - presentation à l'ecole des chartes
Calames - presentation à l'ecole des chartesCalames - presentation à l'ecole des chartes
Calames - presentation à l'ecole des chartes
Y. Nicolas
 
Globekid NeoDoc Presentation Bookcamp
Globekid NeoDoc Presentation BookcampGlobekid NeoDoc Presentation Bookcamp
Globekid NeoDoc Presentation Bookcamp
guest41b263
 

Similaire à Cours de C++, en français, 2002 - Cours 3.3 (20)

Presentation dublincore l3
Presentation dublincore l3Presentation dublincore l3
Presentation dublincore l3
 
La technologie net par karim kalti
La technologie net par karim kalti La technologie net par karim kalti
La technologie net par karim kalti
 
Cours de C++, en français, 2002 - Cours 3.4
Cours de C++, en français, 2002 - Cours 3.4Cours de C++, en français, 2002 - Cours 3.4
Cours de C++, en français, 2002 - Cours 3.4
 
1 introduction
1 introduction1 introduction
1 introduction
 
Cours de C++, en français, 2002 - Cours 1.4
Cours de C++, en français, 2002 - Cours 1.4Cours de C++, en français, 2002 - Cours 1.4
Cours de C++, en français, 2002 - Cours 1.4
 
Cours de C++, en français, 2002 - Cours 3.2
Cours de C++, en français, 2002 - Cours 3.2Cours de C++, en français, 2002 - Cours 3.2
Cours de C++, en français, 2002 - Cours 3.2
 
Semantic Information Systems
Semantic Information SystemsSemantic Information Systems
Semantic Information Systems
 
Semantic Information Systems
Semantic Information SystemsSemantic Information Systems
Semantic Information Systems
 
Semantic Information Systems
Semantic Information SystemsSemantic Information Systems
Semantic Information Systems
 
A Brief History of Database Management (SQL, NoSQL, NewSQL)
A Brief History of Database Management (SQL, NoSQL, NewSQL)A Brief History of Database Management (SQL, NoSQL, NewSQL)
A Brief History of Database Management (SQL, NoSQL, NewSQL)
 
Modèles de données et langages de description ouverts 2021-2022 - 1
Modèles de données et langages de description ouverts   2021-2022 - 1Modèles de données et langages de description ouverts   2021-2022 - 1
Modèles de données et langages de description ouverts 2021-2022 - 1
 
Entity_framework_db first
Entity_framework_db firstEntity_framework_db first
Entity_framework_db first
 
Metadonnees et SID
Metadonnees et SIDMetadonnees et SID
Metadonnees et SID
 
7. information modelling
7. information modelling7. information modelling
7. information modelling
 
Les catalogues sur le Web
Les catalogues sur le WebLes catalogues sur le Web
Les catalogues sur le Web
 
Cyxlm formation-xml-synthese (1)
Cyxlm formation-xml-synthese (1)Cyxlm formation-xml-synthese (1)
Cyxlm formation-xml-synthese (1)
 
Cyxlm formation-xml-synthese
Cyxlm formation-xml-syntheseCyxlm formation-xml-synthese
Cyxlm formation-xml-synthese
 
Cours partie1 elgarrai zineb
Cours partie1 elgarrai zinebCours partie1 elgarrai zineb
Cours partie1 elgarrai zineb
 
Calames - presentation à l'ecole des chartes
Calames - presentation à l'ecole des chartesCalames - presentation à l'ecole des chartes
Calames - presentation à l'ecole des chartes
 
Globekid NeoDoc Presentation Bookcamp
Globekid NeoDoc Presentation BookcampGlobekid NeoDoc Presentation Bookcamp
Globekid NeoDoc Presentation Bookcamp
 

Plus de Laurent BUNIET

Cours de C++, en français, 2002 - Cours 3.5
Cours de C++, en français, 2002 - Cours 3.5Cours de C++, en français, 2002 - Cours 3.5
Cours de C++, en français, 2002 - Cours 3.5
Laurent BUNIET
 
Cours de C++, en français, 2002 - Cours 3.1
Cours de C++, en français, 2002 - Cours 3.1Cours de C++, en français, 2002 - Cours 3.1
Cours de C++, en français, 2002 - Cours 3.1
Laurent BUNIET
 
Cours de C++, en français, 2002 - Cours 2.5
Cours de C++, en français, 2002 - Cours 2.5Cours de C++, en français, 2002 - Cours 2.5
Cours de C++, en français, 2002 - Cours 2.5
Laurent BUNIET
 
Cours de C++, en français, 2002 - Cours 2.4
Cours de C++, en français, 2002 - Cours 2.4Cours de C++, en français, 2002 - Cours 2.4
Cours de C++, en français, 2002 - Cours 2.4
Laurent BUNIET
 
Cours de C++, en français, 2002 - Cours 2.3
Cours de C++, en français, 2002 - Cours 2.3Cours de C++, en français, 2002 - Cours 2.3
Cours de C++, en français, 2002 - Cours 2.3
Laurent BUNIET
 
Cours de C++, en français, 2002 - Cours 2.2
Cours de C++, en français, 2002 - Cours 2.2Cours de C++, en français, 2002 - Cours 2.2
Cours de C++, en français, 2002 - Cours 2.2
Laurent BUNIET
 
Cours de C++, en français, 2002 - Cours 2.1
Cours de C++, en français, 2002 - Cours 2.1Cours de C++, en français, 2002 - Cours 2.1
Cours de C++, en français, 2002 - Cours 2.1
Laurent BUNIET
 
Cours de C++, en français, 2002 - Cours 1.5
Cours de C++, en français, 2002 - Cours 1.5Cours de C++, en français, 2002 - Cours 1.5
Cours de C++, en français, 2002 - Cours 1.5
Laurent BUNIET
 
Cours de C++, en français, 2002 - Cours 1.3
Cours de C++, en français, 2002 - Cours 1.3Cours de C++, en français, 2002 - Cours 1.3
Cours de C++, en français, 2002 - Cours 1.3
Laurent BUNIET
 
Cours de C++, en français, 2002 - Cours 1.2
Cours de C++, en français, 2002 - Cours 1.2Cours de C++, en français, 2002 - Cours 1.2
Cours de C++, en français, 2002 - Cours 1.2
Laurent BUNIET
 
Cours de C++, en français, 2002 - Cours 1.1
Cours de C++, en français, 2002 - Cours 1.1Cours de C++, en français, 2002 - Cours 1.1
Cours de C++, en français, 2002 - Cours 1.1
Laurent BUNIET
 
Cours de C++, en français, 2002 - Plan
Cours de C++, en français, 2002 - PlanCours de C++, en français, 2002 - Plan
Cours de C++, en français, 2002 - Plan
Laurent BUNIET
 

Plus de Laurent BUNIET (12)

Cours de C++, en français, 2002 - Cours 3.5
Cours de C++, en français, 2002 - Cours 3.5Cours de C++, en français, 2002 - Cours 3.5
Cours de C++, en français, 2002 - Cours 3.5
 
Cours de C++, en français, 2002 - Cours 3.1
Cours de C++, en français, 2002 - Cours 3.1Cours de C++, en français, 2002 - Cours 3.1
Cours de C++, en français, 2002 - Cours 3.1
 
Cours de C++, en français, 2002 - Cours 2.5
Cours de C++, en français, 2002 - Cours 2.5Cours de C++, en français, 2002 - Cours 2.5
Cours de C++, en français, 2002 - Cours 2.5
 
Cours de C++, en français, 2002 - Cours 2.4
Cours de C++, en français, 2002 - Cours 2.4Cours de C++, en français, 2002 - Cours 2.4
Cours de C++, en français, 2002 - Cours 2.4
 
Cours de C++, en français, 2002 - Cours 2.3
Cours de C++, en français, 2002 - Cours 2.3Cours de C++, en français, 2002 - Cours 2.3
Cours de C++, en français, 2002 - Cours 2.3
 
Cours de C++, en français, 2002 - Cours 2.2
Cours de C++, en français, 2002 - Cours 2.2Cours de C++, en français, 2002 - Cours 2.2
Cours de C++, en français, 2002 - Cours 2.2
 
Cours de C++, en français, 2002 - Cours 2.1
Cours de C++, en français, 2002 - Cours 2.1Cours de C++, en français, 2002 - Cours 2.1
Cours de C++, en français, 2002 - Cours 2.1
 
Cours de C++, en français, 2002 - Cours 1.5
Cours de C++, en français, 2002 - Cours 1.5Cours de C++, en français, 2002 - Cours 1.5
Cours de C++, en français, 2002 - Cours 1.5
 
Cours de C++, en français, 2002 - Cours 1.3
Cours de C++, en français, 2002 - Cours 1.3Cours de C++, en français, 2002 - Cours 1.3
Cours de C++, en français, 2002 - Cours 1.3
 
Cours de C++, en français, 2002 - Cours 1.2
Cours de C++, en français, 2002 - Cours 1.2Cours de C++, en français, 2002 - Cours 1.2
Cours de C++, en français, 2002 - Cours 1.2
 
Cours de C++, en français, 2002 - Cours 1.1
Cours de C++, en français, 2002 - Cours 1.1Cours de C++, en français, 2002 - Cours 1.1
Cours de C++, en français, 2002 - Cours 1.1
 
Cours de C++, en français, 2002 - Plan
Cours de C++, en français, 2002 - PlanCours de C++, en français, 2002 - Plan
Cours de C++, en français, 2002 - Plan
 

Cours de C++, en français, 2002 - Cours 3.3

  • 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 &lt; (lower than)  & peut s’écrire &amp;
  • 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 &Agrave;  É peut s’écrire &Eacute;  ü peut s’écrire &uuml;  Les entités XML peuvent également être décrites avec leur code Unicode  Exemple &#38;  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
  • 70. Cours semaine 3 jour 3 Cours C++ 70 Exercices
  • 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
  • 79. Cours semaine 3 jour 3 Cours C++ 79
  • 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
  • 82. Cours semaine 3 jour 3 Cours C++ 82
  • 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
  • 84. Cours semaine 3 jour 3 Cours C++ 84
  • 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)
  • 91. Cours semaine 3 jour 3 Cours C++ 91 SAX2DOM (5)
  • 92. Cours semaine 3 jour 3 Cours C++ 92 Questions / Remarques