92
Cours C++ (2002) semaine 3 jour 3

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

Embed Size (px)

Citation preview

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

Cours C++ (2002)

semaine 3

jour 3

Page 2: Cours de C++, en français, 2002 - Cours 3.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++

Page 3: Cours de C++, en français, 2002 - Cours 3.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)

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

Cours semaine 3 jour 3 Cours C++ 4

Bases de données (2)

Les bases de données hiérarchiques et

réseau sont très difficiles à utiliser

Le parcours d’un ensemble de données se fait

par déplacement de pointeurs dans la structure

de la base de données : passage d’un champ

d’information à un autre

Les programmes, développés avec des langages

procéduraux, sont très difficiles à mettre au

point

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

Cours semaine 3 jour 3 Cours C++ 5

Base de données (3)

1970 : Modèle relationnel (E.F. Codd)

Abandon de la théorie des graphes

Utilisation de la théorie des ensembles

Plus de parcours dans un graphe : utilisation

des opérateurs ensemblistes

jointure, union, division, etc

Très bien adapté aux données généralement

représentées dans une base : données plates

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

Cours semaine 3 jour 3 Cours C++ 6

Base de données (4)

La théorie des ensembles impose cependant

quelques restrictions inexistantes dans le

modèle réseau : les formes normales

permettent de garantir une certaine qualité

du modèle de la base

Existence d’une langage d’accès

«standardisé», SQL, Structured Query

Language

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

Cours semaine 3 jour 3 Cours C++ 7

Représentation de données

Le mode de représentation ensembliste n’est

pas le meilleur dans tous les cas

Bien pour un ensemble de données stables

Un client, un fournisseur ou un mouvement

comptable possèdent toujours un ensemble minimal

d’informations identiques

Beaucoup moins efficace pour des données

possédant une grande variabilité et plusieurs

niveaux d’information

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

Cours semaine 3 jour 3 Cours C++ 8

Représentation de données (2)

Exemple : comment représenter un

document dans une base de données

relationnelle ?

Par un BLOB, Binary Large OBject, ou un

CLOB, Character Large OBject

Par un ensemble de tables successives

Par une table capable de représenter

l’information récursivement

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

Cours semaine 3 jour 3 Cours C++ 9

Données relationnelles BLOB

Un BLOB, ou un CLOB (DCLOB, Double

Byte CLOB pour l’UNICODE) permet de

stocker une information volumineuse

L’information est cependant considérée

comme un gros paquet

L’information est inexploitable : il n’y a pas

moyen d’accéder à une sous partie de celle-

ci, il faut tout traiter d’un bloc

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

Cours semaine 3 jour 3 Cours C++ 10

Tables successives

Différents types d’éléments peuvent être

représentés dans différentes tables

Table DOCUMENT, table CHAPITRE,

PARAGRAPHE, PHRASE, LISTE, POINT,

FIGURE, TABLE_DES_MATIERE, etc, etc !

Le modèle doit être énorme pour permettre une

certaine variabilité

La programmation utilisant une telle base

est complexe ! Beaucoup de « pointeurs »

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

Cours semaine 3 jour 3 Cours C++ 11

Tables relationnelles récursives

Certains systèmes de gestion de bases de

données relationnelles proposent des tables

récursives, par exemple ORACLE

Plusieurs niveaux d’information peuvent être

isolés

Le problème des pointeurs existe encore

Très difficilement utilisable, temps de mis au

point important

Le programme est momifié lorsqu’il fonctionne

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

Cours semaine 3 jour 3 Cours C++ 12

Stockage de documents

Dans les années 70, Goldfarb, Mosher et

Lorie d’IBM étudient le problème du

stockage des documents

Reconnaissance de la variabilité de la taille des

« champs » : introduction de la notion de balise

La taille d’un champ n’est pas connue a priori lors

de la définition du modèle

Sont connus a priori : le contenu du champ (nom

dans le modèle) et le type des données (par exemple

une chaîne de caractères)

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

Cours semaine 3 jour 3 Cours C++ 13

SGML

Parternité officielle : Goldfarb

Définition de SGML, Structured

Generalized Markup Language

Structured : le but est de stocker des documents

fortement structurés

Generalized : SGML est un méta-language

permettant de définir des grammaires

Markup : utilisation des balises

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

Cours semaine 3 jour 3 Cours C++ 14

SGML (2)

SGML permet la rédaction de DTDs,

Document Type Definition

Description de langages respectant le

formalisme SGML

Possibilité de transformer un document

SGML grâce à DSSSL, Document Style

Semantics and Specification Language, qui

permet de définir des feuilles de style et

donc de réaliser des transformations

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

Cours semaine 3 jour 3 Cours C++ 15

SGML (3)

Différentes normes existent pour la

représentation de documents

TEI, Text Encoding Initative : pour les

documents plutôt littéraires

DocBook : pour les documents plutôt

techniques

Modèle des tables CALS : pour la

représentation de tables de documents

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

Cours semaine 3 jour 3 Cours C++ 16

SGML (4)

<document>

<nom>cours C++</nom>

<chapitre>XML</chapitre>

<résumé>Ce chapitre présente XML à travers son histoire et ses possibilités. Application à la plate-forme Microsoft Windows

</résumé>

</document>

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

Cours semaine 3 jour 3 Cours C++ 17

SGML (5)

SGML est un langage très lourd à mettre en

œuvre, peu de sociétés peuvent s’offrir

pareil système pour la représentation et le

stockage des données

Mais certains l’utilisent avec bonheur : Boeing

stocke toute sa documentation technique avec

SGML et économise des tonnes de papier

SGML permet de définir des langages

simples comme HTML…

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

Cours semaine 3 jour 3 Cours C++ 18

HTML

HTML, HyperText Markup Language, a révolutionné le monde naissant de l’Internet, de concert avec Mosaic, le premier « navigateur » hypertexte

HTML permet de représenter l’information de manière structurée mais simpliste

Le nombre des balises est très limité

Besoin d’un langage permettant plus de possibilités, avec des balises sémantiques

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

Cours semaine 3 jour 3 Cours C++ 19

XML

La naissance de XML, eXtensible Markup Language, résulte d’un ensemble de constatations

SGML est trop complexe et de nombreux mécanismes peuvent être abandonnés

HTML est très intéressant mais les informations contenues dans de tels documents sont inexploitables de manière automatique

De nombreux types d’information nécessitent un format dédié

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

Cours semaine 3 jour 3 Cours C++ 20

XML (2)

XML correspond principalement à une version allégée de SGML

Certains mécanismes complexes ont été purement et simplement abandonnés

XML sert désormais de base à de nombreux projets, produits et concepts ayant besoin d’une information structurée et hiérarchisée

Le modèle relationnel ne doit pas être oublié pour autant…

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

Cours semaine 3 jour 3 Cours C++ 21

XML (3)

XML est une norme du World Wide Web Consortium

C’est donc un standard et tout ceux qui utilisent ce standard sont censés en respecter scrupuleusement les règles

Le format doit donc pourvoir passer de manière totalement transparente entre plusieurs plate-formes et les résultats doivent être similaires lorsque l’on utilise les outils standards sur XML

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

Cours semaine 3 jour 3 Cours C++ 22

Bref historique XML

Les premiers documents écrits suivant le

standard XML, alors naissant, sont

différents livres religieux (Bible, Coran, …)

et les pièces de Shakespeare

Qui a écrit ces documents ?

Le World Wide Web Consortium a un

groupe de travail (WG) sur XML

Qui le dirige ?

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

Cours semaine 3 jour 3 Cours C++ 23

Les points sur les i

Les deux questions précédentes ont la

même réponse : John Bosak

John Bosak est ingénieur chez Sun !

Si demain Microsoft revendique une

quelconque paternité sur XML, relisez ces

deux transparents !

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

Cours semaine 3 jour 3 Cours C++ 24

XML sur le client

XHTML est une synthèse de HTML et de XML : existence d’un ensemble minimal de balises et possibilité d’extension

Mariage des balises HTML standard, que l’on sait traiter, et de balises supplémentaires, permettant de personnaliser le document

SVG, Scalable Vector Graphic, pour la représentation de données graphiques vectorielles (dessins, cartes) (il existe un viewer chez Adobe)

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

Cours semaine 3 jour 3 Cours C++ 25

XML sur le client (2)

Initiatives particulières pour les formules

mathématiques ou chimiques, la

représentation de la voix pour la synthèse

Initiatives pour des formats de conservation

de préférences utilisateur

Initiatives pour le stockages de gros

documents tels que les livres littéraires ou

techniques : eBook et DocBook

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

Cours semaine 3 jour 3 Cours C++ 26

XML sur le serveur

XML est un excellent outil pour l’échange

de données

Pour l’EDI : XML/EDI qui rend les messages

EDI lisibles…

Entre applications (la suite de l’EDI) :

messages XML dans SOAP, ebXML

Entre sites web : ICE, Internet Content

Exchange pour la syndication de sites

Registres XML : UDDI, ebXML

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

Cours semaine 3 jour 3 Cours C++ 27

XML dans les bases de données

XML permet de mettre en œuvre des bases

de données hiérarchiques qui sont une

solution aux problèmes rencontrés dans la

définition de bases de données objet

La mise en correspondance entre un objet

(C++, Java, etc) et une structure XML peut être

faite facilement : la définition du/des objets doit

respecter la grammaire de la structure XML

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

Cours semaine 3 jour 3 Cours C++ 28

XML dans les BDD (2)

Il existe d’ores et déjà des produits permettants de

stocker des documents XML dans une base de

données

Disponibilité (sur plate-forme Microsoft) de la base

Excelon

www.odi.com, www.exceloncorp.com

Disponibilité d’EntireX

Adabas, la plus ancienne base de données hiérarchique encore

existante peut également traiter les documents XML

www.softwareag.com

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

Cours semaine 3 jour 3 Cours C++ 29

Utilisation de XML

À la différence de SGML, XML peut être

mis en œuvre à l’aide de nombreux

frameworks disponibles gratuitement et

parfois Open Source

Microsoft

Apache (sources Java et C++) : regroupement

des initiatives de Sun et d’IBM

Oracle

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

Cours semaine 3 jour 3 Cours C++ 30

Normes XML complémentaires

Un avantage de XML est l’existence de

normes dérivées pour son exploitation

XSL, XML Stylesheet Language, un dérivé de

DSSSL, permet de transformer un document

XPath, permet de définir l’adresse d’un élément

dans un document

XPointer, XLink, XML Base, permettent de

spécifier différents types de liens dans ou entre

des documents XML

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

Cours semaine 3 jour 3 Cours C++ 31

Normes XML (2)

La définition de grammaires peut être faite

de plusieurs manières

Une DTD, Document Type Definition, héritée

de SGML

Les DTD sont écrites dans un langage qui leur est

propre : les outils de traitement de XML ne peuvent

pas être utilisés dans ce cas

Un schéma XML, norme de définition de

grammaire XML en XML introduisant des

notions de types

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

Cours semaine 3 jour 3 Cours C++ 32

Documents XML

Un document XML possède deux niveaux

de validité

Un document peut être bien formé (well-

formed) : il respecte les contraintes générales

imposées aux documents XML

Un document peut être valide : il est bien formé

et il respecte une certaine grammaire

Analyse d’un document XML en validant sa

structure par une DTD ou un schéma

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

Cours semaine 3 jour 3 Cours C++ 33

Documents XML (2)

Document non valide :

<document>

<a>Avalue

<b>Bvalue

</a>

</b>

</document>

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

Cours semaine 3 jour 3 Cours C++ 34

Documents XML (3)

Document valide :

<document>

<a>Avalue

</a>

<b>Bvalue

</b>

</document>

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

Cours semaine 3 jour 3 Cours C++ 35

Documents XML (4)

L’exploitation des documents XML se fait

de deux manières

DOM, Document Object Model

Le document XML est totalement chargé en

mémoire et chacun de ses éléments est représenté

par l’instance d’un objet

SAX : Simple API for XML

Le document XML n’est pas chargé en mémoire, il

est lu sur disque en parallèle à la gestion d’une pile

de balises ouvertes

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

Cours semaine 3 jour 3 Cours C++ 36

Documents XML (5)

DOM n’est pas efficace pour le traitement à

la volée de documents

DOM est intéressant lorsque plusieurs

transformations/traitements successifs

doivent être effectués

SAX est très pratique pour les traitements

légers ou avec des systèmes informatiques

manquant de puissance

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

Cours semaine 3 jour 3 Cours C++ 37

Documents XML (6)

DOM utilise la récursion pour modéliser un

document (schéma simplifié):

ExpressionTerminale Element

Node NodeList

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

Cours semaine 3 jour 3 Cours C++ 38

Utilisation de XML

XML peut être utilisé pour créer des objets

à partir de données structurées

Sérialisation puis reconstitution

Création d’un document à partir d’une table

existante

Transformation de documents XML pour

affichage/présentation à l’utilisateur

Transformation vers HTML ou PDF par

exemple

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

Cours semaine 3 jour 3 Cours C++ 39

Utilisation de XML (2)

Exemple (théorique) de récupération de

données à partir d’une table dans une base

de données

Création d’un petit document XML sans

grammaire

Transformation vers HTML

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

Cours semaine 3 jour 3 Cours C++ 40

Utilisation de XML (3)

Table EMPLOYÉ

NOM PRÉNOM RUE VILLE PAYS

Samme Pierre-Benoit Route de Luxembourg Sandweiler Luxembourg

Dupont Jean Rue du lac Sandweiler Luxembourg

Durand Jacques Route des cimes Luxembourg Luxembourg

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

Cours semaine 3 jour 3 Cours C++ 41

Utilisation de XML (4)

Création d’un fichier XML à partir de la

table ?

Le nom de la table devient le nom de l’élément

racine

Les noms des champs deviennent les noms des

différents éléments du document

Les valeurs d’un tuple sont les valeurs des

éléments identifiés

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

Cours semaine 3 jour 3 Cours C++ 42

Utilisation de XML (5)

<employé>

<nom>Samme</nom>

<prénom>Pierre-Benoit</prénom>

<rue>Route de Luxembourg</rue>

<ville>Sandweiler</ville>

<pays>Luxembourg</pays>

</employé>

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

Cours semaine 3 jour 3 Cours C++ 43

Utilisation de XML (6)

La repésentation « orientée objet » utilise un

graphe

employé

nom

Samme

prénom

Pierre-Benoît

rue

Route de

Luxembourg

ville

Sandweiler

pays

Luxembourg

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

Cours semaine 3 jour 3 Cours C++ 44

Utilisation de XML (7)

Pour transformer un document XML, il faut

utiliser une (ou plusieurs) feuille de style

XSL

Dans la feuille de style, chaque élément doit

être identifié si l’on souhaite y appliquer une

tranformation

Les éléments omis ne seront pas pris en compte

Une feuille de style est constituée d’un

ensemble de points d’entrée XPath

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

Cours semaine 3 jour 3 Cours C++ 45

Utilisation de XML (8)

<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">

<xsl:template match="/">

<html>

<header>

<title>document XML d’un employé transformé en HTML</title>

</header>

<body>

<xsl:apply-templates>

</body>

</html>

</xsl:template>

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

Cours semaine 3 jour 3 Cours C++ 46

Utilisation de XML (9)

<xsl:template match="employé">

<b>NOM : </b><xsl:value-of select="nom" /><br />

<b>PRÉNOM : </b><xsl:value-of select="prénom" /><br />

<b>RUE : </b><xsl:value-of select="rue" /><br />

<b>VILLE : </b><xsl:value-of select="ville" /><br />

<xsl:apply-templates>

</xsl:template>

<xsl:template match="pays">

<b>PAYS : </b><xsl:value-of select="nom" /><br />

</xsl:template>

</xsl:stylesheet>

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

Cours semaine 3 jour 3 Cours C++ 47

Utilisation de XML (10)

Posséder un document XML et une feuille de style XSL traitant ses éléments permet de transformer un document XML en XML (avec une autre grammaire) ou autre chose

Pour une transformation vers un format papier, comme PDF mais pas comme HTML, il faut utiliser les FO, formatting objects, de XSL pour introduire la notion de rupture de page

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

Cours semaine 3 jour 3 Cours C++ 48

Utilisation de XML (11)

document

XMLnouveau document

(format XML ou

autre)

feuille de style

XSL

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

Cours semaine 3 jour 3 Cours C++ 49

Syntaxe de XML

XML possède une syntaxe héritée de celle

de SGML

XML possède des balises

employé

Ces balises sont généralement utilisées par

paires

Balise ouvrante et balise fermante

<employé> et </employé>

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

Cours semaine 3 jour 3 Cours C++ 50

Syntaxe de XML (2)

XML possède des éléments

Les éléments sont entourés (nichés) entre une

balise ouvrante et une balise fermante

Les éléments vides peuvent être décrits avec

une version abrégée

<balise></balise > peut s’écrire < balise />

Un document XML n’a qu’un seul élément

racine

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

Cours semaine 3 jour 3 Cours C++ 51

Syntaxe de XML (3)

Les éléments XML peuvent posséder des

attributs

Les attributs sont une alternative à la

représentation d’information, ils évitent de

créer des sous-éléments

<balise nom="balise" position="24"> …

</balise>

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

Cours semaine 3 jour 3 Cours C++ 52

Syntaxe de XML (4)

En XML, il est possible d’inclure des

chaînes de caractères qui ne seront pas

interprétées : character data

<![CDATA[ … ]]>

Ceci permet de mettre des fausses balises

<![CDATA[ <texte> du texte </texte> ]]> et la

balise texte n’est pas interprétée

<![CDATA[ </texte> du texte <texte> ]]> marche

aussi !

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

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;

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

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

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

Cours semaine 3 jour 3 Cours C++ 55

Grammaires pour XML

Une grammaire d’un document définit l’ensemble des possibilités pour écrire un document respectant la grammaire

Tient compte du fait que certains éléments sont optionnels

Tient compte du fait que d’autres peuvent avoir plusieurs occurrences

Il est possible de considérer ces grammaires comme l’équivalent d’un schéma de base de données relationnelle

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

Cours semaine 3 jour 3 Cours C++ 56

DTD

Une DTD, Document Type Definition, est une manière d’exprimer une grammaire

XML a repris les DTD qui ont tout d’abord été mises en œuvre par SGML, sous la même forme

La définition d’une DTD correspond à une suite d’expressions régulières du type de celles utilisées dans les compilateurs pour la définition de la syntaxe d’un langage (BNF)

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

Cours semaine 3 jour 3 Cours C++ 57

DTD (2)

Un ELEMENT permet de définir un élément de la grammaire

Son nom correspond à la valeur qui se trouve dans les balises ouvrantes et fermantes

Sa définition correspond aux différents sous-éléments ou données finales qui le constituent

#PCDATA est un indicateur signalant qu’un élément ne contiendra que du texte (attention : aucune balise ne devra se trouver dans ce texte sauf si CDATA)

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

Cours semaine 3 jour 3 Cours C++ 58

DTD (3)

La liste des attributs doit également être

définie :

CDATA représente ici une chaîne de caractères

ID représente une clé

IDREF représente une clé externe (foreign key)

IDREFS une liste d’IDREF

Il est possible de faire des énumérations

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

Cours semaine 3 jour 3 Cours C++ 59

DTD (4)

Les attributs peuvent également avoir une

quantification

#REQUIRED lorsqu’il est obligatoire

#IMPLIED lorsqu’il est optionnel

Une valeur si on peut en donner une par défaut

valeur #FIXED si elle est fixe

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

Cours semaine 3 jour 3 Cours C++ 60

DTD (5)

Cet ensemble de règles de rédaction d’une

DTD permet de produire des documents

assez peu lisibles

Plus la DTD est grosse (ce qui est vite le

cas…) et plus l’utilisation d’outils

graphiques d’édition de DTD devient

nécessaire

La remarque est aussi vraie pour les gros

documents XML

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

Cours semaine 3 jour 3 Cours C++ 61

DTD (6)

<!DOCTYPE company [

<!ELEMENT company ((person|product)*)>

<!ELEMENT person (ssn, name, office, phone?)>

<!ELEMENT ssn (#PCDATA)>

<!ELEMENT name (#PCDATA)>

<!ELEMENT office (#PCDATA)>

<!ELEMENT phone (#PCDATA)>

<!ELEMENT product (pid, name, description?)>

<!ELEMENT pid (#PCDATA)>

<!ELEMENT description (#PCDATA)>

]>

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

Cours semaine 3 jour 3 Cours C++ 62

DTD (7)

<!ELEMENT person (ssn, name, office, phone?)>

<!ATTLIS person age CDATA #REQUIRED

id ID #REQUIRED

manager IDREF #REQUIRED

manages IDREFS #REQUIRED

>

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

Cours semaine 3 jour 3 Cours C++ 63

DTD (8)

<company>

<person age=“25”

id=“p29432”

manager=“p48293”

manages=“p34982 p423234”>

<ssn> 123456789 </ssn>

<name> John </name>

<office> B432 </office>

<phone> 1234 </phone>

</person>

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

Cours semaine 3 jour 3 Cours C++ 64

DTD (9)

<person age=“25”

id=“p48293”

manager=“p48293”

manages=“p29432 p24168”>>

<ssn> 987654321 </ssn>

<name> Jim </name>

<office> B123 </office>

</person>

<product> ... </product>

...

</company>

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

Cours semaine 3 jour 3 Cours C++ 65

Schémas

Les DTD posent un problème, grave : elles ne sont pas écrites en XML

De ce fait, il faut développer des outils ad-hoc pour les traiter

Typiquement : le programme de lecture du fichier XML avec un programme de lecture de fichier de DTD

La différence de représentation impose un effort de développement inutile

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

Cours semaine 3 jour 3 Cours C++ 66

Schémas (2)

Les schémas XML sont une généralisation

des DTD

Ils utilisent une syntaxe XML

Ce sont donc des documents XML et il est

possible de les générer, comme d’autres

Les schémas XML sont assez complexes

mais offrent de nombreuses possibilités

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

Cours semaine 3 jour 3 Cours C++ 67

Schémas (3)

Dans un schéma, il est possible d’utiliser la

notion d’élément, comme dans une DTD,

ou la notion de type, plus proche des

langages de programmation

Il est également possible de créer des types

dérivés

Il ne s’agit pas encore de programmation

orientée objet mais l’idée y est (SOX)

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

Cours semaine 3 jour 3 Cours C++ 68

Schémas (4)

Les types simples sont nombreux :

Types algorithmiques : String, Token, Byte,

unsignedByte, Integer, positiveInteger, Int (qui

est plus large que Integer), unsignedInt, Long,

Short, …

Types spécifiques : Time, dateTime, Duration,

Date

Types techniques : ID, IDREF, IDREFS, listes,

unions, restrictions

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

Cours semaine 3 jour 3 Cours C++ 69

Schémas (5)

Les types peuvent aussi avoir des attributs,

baptisés facettes

Longueur (min, max)

Nombre d’occurrences (min et max, incluxifs

ou exclusifs)

Spécification du nombre de chiffres d’un

nombre (!) : totalDigits, et éventuellement du

nombre de chiffres après la virgule :

fractionDigits

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

Cours semaine 3 jour 3 Cours C++ 70

Exercices

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

Cours semaine 3 jour 3 Cours C++ 71

SAX2Jumpstart

SAX2Jumpstart est une application de

démonstration de Microsoft permettant de

mettre en œuvre le moteur SAX 2 présent

dans le package XML de Microsoft

(MSXML)

Elle permet de voir les différents

mécanismes utilisés dans le cadre de SAX

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

Cours semaine 3 jour 3 Cours C++ 72

SAX2Jumpstart (2)

SAX permet la lecture à la volée de

documents XML

SAX ne crée pas de structures hiérarchiques

mais traite les éléments en fonction des

balises d’ouverture et de fermeture

rencontrées

À chaque balise, un événement est généré

Il faut donc un handler pour traiter les évèments

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

Cours semaine 3 jour 3 Cours C++ 73

SAX2Jumpstart (3)

SAX 2 est la deuxième version de l’API (Application Programming Interface) de SAX

Cette version est totalement sous le contrôle du W3C qui définit les « points d’entrées »

SAX était au départ le travail d’un indépendant désirant avoir un moyen simple de traiter des documents XML

Il a donc supprimer la représentation interne

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

Cours semaine 3 jour 3 Cours C++ 74

SAX2Jumpstart (4)

Décompressez SAX2Jumpstart dans un

répertoire sous votre répertoire général

« My Projects »

Ouvrez le Workspace (.dsw)

Dans Project > Settings > Debug,

remplissez le champ Program Argument

avec .\Debug\test.xml

Compilez, linkez et exécutez

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

Cours semaine 3 jour 3 Cours C++ 75

SAX2Jumpstart (5)

Allez voir le contenu du fichier test.xml

Dans Project > Settings > Debug, mettez

.\Debug\test1.xml dans Program Argument

Ouvrez le fichier test1.xml et comparez

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

Cours semaine 3 jour 3 Cours C++ 76

SAX2Jumpstart (6)

Le fichier test1.xml est une version

légèrement modifiée de test.xml

Pourtant test1.xml ne peut pas être

totalement analysé

Le handler des évènements SAX a généré une

erreur

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

Cours semaine 3 jour 3 Cours C++ 77

SAX2Jumpstart (7)

Le programme CPPSaxSample qui est

fourni utilise les librairies XML de

Microsoft

Tous les traitements se font en utilisant

COM

La fonction main dans CPPSaxSample.cpp

devrait vous en convaincre

L’utilisation généralisée de HRESULT aussi

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

Cours semaine 3 jour 3 Cours C++ 78

SAX2Jumpstart (8)

Le programme principal

Crée une instance de ISAXXMLReader

Crée une instance du ContentHandler (le

handler des messages générés par SAX)

Place le ContentHandler dans le Reader

Charge la source de données

Lance le traitement effectif : le parcours du

fichier XML

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

Cours semaine 3 jour 3 Cours C++ 79

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

Cours semaine 3 jour 3 Cours C++ 80

SAX2Jumpstart (10)

Le SAXContentHandlerImpl de notre projet

ne contient que des méthodes virtuelles

D’autre part, il hérite de ISAXContentHandler

qui est l’interface de Microsoft pour le

SAXContentHandler

Attention (rappel) : il n’y a pas de véritables

interfaces en C++, c’est pour cela que l’on

hérite de l’interface plutôt que de l’implémenter

comme en UML

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

Cours semaine 3 jour 3 Cours C++ 81

SAX2Jumpstart (11)

La véritable implémentation de notre

handler d’évènements SAX se trouve dans

MyContent

MyContent hérite de SAXContentHandlerImpl

MyContent ne redéfinit que trois des fonctions

de SAXContentHandlerImpl

startDocument

startElement

endElement

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

Cours semaine 3 jour 3 Cours C++ 82

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

Cours semaine 3 jour 3 Cours C++ 83

SAX2Jumpstart (13)

Pourquoi la balise de départ <qu> est-elle

rejetée ?

La réponse se trouve dans la méthode

MyContent::StartElement

Cette méthode constitue le message handler des

balises ouvrantes et un test s’y trouve pour

rejeter le document si la balise <qu> est

rencontrée dans un startElement d’un document

XML

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

Cours semaine 3 jour 3 Cours C++ 84

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

Cours semaine 3 jour 3 Cours C++ 85

SAX2Jumpstart (15)

Exercice 1 :

Modifier le programme de manière à accepter

les documents contenant la balise de départ

<qu>

Exercice 2 :

Modifier le programme de manière à rejeter la

balise de départ <PART>

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

Cours semaine 3 jour 3 Cours C++ 86

SAX2Jumpstart (16)

Exercice 3 :

Modifier le programme de manière à accepter

les balises de départ <PART> mais à rejeter les

balises de fin </qu>

Exercice 4 :

Créer un fichier XML avec des balises que vous

aurez définies et assurez vous que le

programme peut en afficher la structure

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

Cours semaine 3 jour 3 Cours C++ 87

SAX2DOM

SAX2DOM est une application de

démonstration de Microsoft permettant de

mettre en œuvre le moteur SAX 2 présent

dans le package XML de Microsoft

(MSXML)

Elle permet de voir les différents

mécanismes utilisés dans le cadre de SAX

et de DOM

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

Cours semaine 3 jour 3 Cours C++ 88

SAX2DOM (2)

Le programme SAX2DOM permet de lire

un fichier XML avec SAX et de créer, au

fur et à mesure, un document DOM

Normalement, une structure DOM est créée

directement à partir d’un fichier XML

Cette application est donc purement

démonstrative

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

Cours semaine 3 jour 3 Cours C++ 89

SAX2DOM (3)

Le programme principal est

SAXToDOM.cpp qui contient

l’initialisation d’une application MFC

SAXToDOMDlg permet de voir

l’initialisation de la fenêtre mais également

l’initialisation des objets COM pour le

traitement SAX et le document DOM

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

Cours semaine 3 jour 3 Cours C++ 90

SAX2DOM (4)

Le fichier MyContentHandler contient le

handler des messages SAX ainsi que les

instructions nécessaires à la création du

DOM

Certains évènements SAX déclenchent la

création d’un nouveau nœud dans la structure

DOM (startElement, endElement)

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

Cours semaine 3 jour 3 Cours C++ 91

SAX2DOM (5)

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

Cours semaine 3 jour 3 Cours C++ 92

Questions / Remarques