cours de c++, en français, 2002 - cours 3.4

80
Cours C++ (2002) semaine 3 jour 4

Upload: laurent-buniet

Post on 23-Jan-2018

128 views

Category:

Technology


1 download

TRANSCRIPT

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

Cours C++ (2002)

semaine 3

jour 4

Page 2: Cours de C++, en français, 2002 - Cours 3.4

Cours semaine 3 jour 4 Cours C++ 2

Plan du jour

Présentation de l’univers de XML

XML Namespaces

Transformation de documents XML

XPath

XSL

FO

Réalisation de transformations en C++

Autres standards :

XForms, XML Events, XML Query

Page 3: Cours de C++, en français, 2002 - Cours 3.4

Cours semaine 3 jour 4 Cours C++ 3

Namespaces

Les langages orientés objet, comme C++ ou

Java, possèdent une notion d’espace de

nommage

Cela permet de regrouper des classes en rapport

les unes avec les autres dans un même espace

lorsqu’elles ont des relations fortes

Le principe peut se retrouver en UML avec la

notion de package, qui est la transposition du

namespace avec une notion de bloc insécable

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

Cours semaine 3 jour 4 Cours C++ 4

Namespaces (2)

Un aspect très important des espaces de nommage dans les langages orientés objet est qu’ils permettent de définir plusieurs classes possèdant le même nom

Cela ne pose pas de problème au système tant que les classes sont dans des espaces de nommage différents

Il est possible d’utiliser deux classes de nom identique dans des packages différents dans un même programme (cela est impossible en C)

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

Cours semaine 3 jour 4 Cours C++ 5

Namespaces (3)

XML a de forte relations avec le monde

orienté objet et il est possible d’y retrouver

explicitement la notion d’espace de

nommage

XML namespace

Un namespace sert cependant de manière

détournée par rapport au monde orienté

objet

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

Cours semaine 3 jour 4 Cours C++ 6

Namespaces (4)

L’avantage des espaces de nommage en

XML est qu’il devient possible d’utiliser

plusieurs grammaires dans un même

document

Un document XML peut donc avoir une

grammaire principale pendant que certains ilôts

du document contiennent des informations

respectant une autre grammaire

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

Cours semaine 3 jour 4 Cours C++ 7

Namespaces (5)

Un document avec un seul schéma ou DTD est supposé être dans l’unique espace de nommage

L’usage de plusieurs espaces de nommage doit se faire en précisant au préalable la liste des espaces de nommage

À chaque espace de nommage est associé une URL permettant l’identification de l’espace

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

Cours semaine 3 jour 4 Cours C++ 8

Namespaces (6)

Il est également possible d’inclure des

espaces de nommage dans les DTD

Une grammaire peut alors explicitement faire

appel à une autre grammaire !

Les espaces de nommage peuvent

également être utilisés avec XSL

C’est naturel puisque les espaces de nommage

sont autorisés en XML !

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

Cours semaine 3 jour 4 Cours C++ 9

Namespaces (7)

Un espace de nommage doit être identifié

dans l’entête du document

Un espace de nommage est signalé par

xmlns

Il est possible d’identifier tous les espaces

de nommage ou d’en considérer un comme

l’espace de nommage par défaut

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

Cours semaine 3 jour 4 Cours C++ 10

Namespaces (8)

<H:html xmlns:H="http://www.w3c.org/TR/REC-html40"

xmlns:mine="file:/DTD/lamienne.dtd">

<H:head>

<H:title>un titre HTML</H:title>

</H:head>

<H:body>

<H:p>un paragraphe HTML</H:p>

<mine:p>ma définition du paragraphe</mine:p>

</H:body>

</H:html>

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

Cours semaine 3 jour 4 Cours C++ 11

Namespaces (9)

<html xmlns="http://www.w3c.org/TR/REC-html40"

xmlns:mine="file:/DTD/lamienne.dtd">

<head>

<title>un titre HTML</title>

</head>

<body>

<p>un paragraphe HTML</p>

<mine:p>ma définition du paragraphe</mine:p>

</body>

</html>

L’espace de nommage HTML est devenu l’espace par défaut

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

Cours semaine 3 jour 4 Cours C++ 12

XPath

XPath est un langage très largement utilisé

en XML

Entre autres dans XSL

Également avec XPointer, XML Query, etc

Il fournit une syntaxe et une sémantique

permettant d’identifier les adresses (les

emplacements de parties de documents

XML)

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

Cours semaine 3 jour 4 Cours C++ 13

XPath (2)

XPath fournit également un ensemble

d’opérateurs de base permettant de réaliser

des opérations sur les chaînes de caractères,

les nombres ou les variables booléennes

XPath utilise une notation compacte plutôt

qu’une notation façon XML qui est elle

basée sur les éléments

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

Cours semaine 3 jour 4 Cours C++ 14

XPath (3)

XPath permet d’opérer sur la structure logique et abstraite du document, donc ses nœuds, plutôt que sur la syntaxe

XPath utilise une notation ressemblant à celle des URL pour définir une position

XPath voit un document comme un arbre et est donc proche de DOM de ce point de vue

XPath permet de traiter des documents utilisant les namespaces

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

Cours semaine 3 jour 4 Cours C++ 15

XPath (4)

XPath considère le document comme un arbre qui possèderait 7 types de nœuds différents

Nœud racine (1 seul !)

Nœuds élément (1 pour chaque élément)

Nœuds attributs

Nœuds namespace

Nœuds processing instructions

Nœuds commentaires

Nœuds texte

La lecture de l’arbre se fait de haut en bas et de gauche à droite

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

Cours semaine 3 jour 4 Cours C++ 16

XPath (5)

<doc>

<?CR?>

<para>Un <em>premier</em> paragraphe</para>

<para>Un autre paragraphe</para>

</doc>

root

<doc>

<?pi?> <para>

text <em>

text

text text

<para>

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

Cours semaine 3 jour 4 Cours C++ 17

XPath (6)

Les chemins d’emplacement de XPath permettent

de spécifier un ensemble de nœuds

Offrent plus de possibilités qu’avec les ID et IDREF

Il existe des chemins relatifs et des chemins

absolus

De la même manière que sur un système de gestion de

fichiers hiérarchique

Un chemin est composé d’un ou plusieurs pas et

de prédicats optionnels

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

Cours semaine 3 jour 4 Cours C++ 18

XPath (7)

Exemples de chemins

child::para : tous les éléments enfants de type para du nœud courant

child::* : tous les éléments enfants du nœud courant

attribute::nom : sélection d’un attribut du nœud courant dont l’identifiant est nom

ancestor::div : sélection de tous les ancêtres du nœud courant de type div

self::para : sélection du nœud courant s’il est de type para

child::*/child::para : sélection de tous les petits fils de type para

/ : la racine du document

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

Cours semaine 3 jour 4 Cours C++ 19

XPath (8)

XPath possède des axes de parcours

ancestor, ancestor-or-self

attribute (version abbrégée = ‘@’ )

child (axe de parcours par défaut, peut être omis)

descendant, descendant-or-self (abbrégé = ‘//’ )

following

preceding

following-sibling, preceding-sibling

namespace

parent (version abbrégée = ‘..’ )

self (version abbrégée = ‘.’ )

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

Cours semaine 3 jour 4 Cours C++ 20

XPath (9)

Le terme sibling représente la fratrie

Un nœud peut avoir de 0 à n frères et il est possible de faire un parcours sur le nœud suivant ou sur le nœud précédent

preceding-sibling et following-sibling pour les frères

preceding et following pour tout ce qui est avant ou après (en prenant le document plat comme référence)

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

Cours semaine 3 jour 4 Cours C++ 21

XPath (10)

<chapitre>

<titre>…<titre>

<para>…</para>

<note>

<para>… </para>

</note>

<para>…</para>

</chapitre>

nœud courant = chapitre

para ou child::para

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

Cours semaine 3 jour 4 Cours C++ 22

XPath (11)

<chapitre>

<titre>…<titre>

<para>…</para>

<note>

<para>… </para>

</note>

<para>…</para>

</chapitre>

nœud courant = chapitre

.//para ou descendant-or-self::node()/child::para

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

Cours semaine 3 jour 4 Cours C++ 23

XPath (12)

XPath réalise des évaluations d’expressions

Les expressions peuvent traiter quatre types

de données

Des ensemble de nœuds

Des valeurs booléennes

Des nombres (valeurs réelles : float)

Des chaînes de caractères

L’évaluation se fait en fonction du contexte

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

Cours semaine 3 jour 4 Cours C++ 24

XPath (13)

Les expressions d’évaluation sont réalisées grâce à

des opérateurs standards

Booléens : and, or, =, !=, <, >, <=, >=

Nombres : +, -, *, /, %

Il existe également des opérations

Filtres : ils sont mentionnés entre [ et ]

position() : teste la position du nœud dans une liste

last() donne le dernier frère d’une liste

count() calcule le nombre d’éléments d’une liste

id() vérifie l’identifiant d’un noeud

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

Cours semaine 3 jour 4 Cours C++ 25

XPath (14)

Opérations (suite)

start-with( string, pattern ), ex : ( . , "Téléco" )

contains( string, pattern )

string-after

string-before

substring

normalize : enlève les blancs inutiles

translate : remplace une chaîne par une autre

concat

string-length

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

Cours semaine 3 jour 4 Cours C++ 26

XPath (15)

Opérations (suite)

number() : transforme une chaîne de caractères

en un nombre

round()

floor()

ceiling()

mod()

name()

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

Cours semaine 3 jour 4 Cours C++ 27

XPath (16)

Exemples XPath

/bib/book[ @price < "60" ]

/bib/book[ author/@age < "25" ]

/bib//*[ name() = book ]

Équivalent à /bib//book !

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

Cours semaine 3 jour 4 Cours C++ 28

XSL

Que peut-on faire avec XPath ?

Des tas de choses !

Entre autres, XPath sert à indiquer des

chemins pour traiter des éléments d’un

document

Le traitement se fait avec XSL

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

Cours semaine 3 jour 4 Cours C++ 29

XSL (2)

XSL est le descendant de DSSSL qui était

associé à SGML

XSL permet de réaliser des transformations

de documents et permet ainsi de séparer le

contenu (le document XML) de la

présentation (le résultat de la transformation

effectuée à l’aide de XSL)

XSL = eXtensible Stylesheet Language

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

Cours semaine 3 jour 4 Cours C++ 30

XSL (3)

XSL est une spécification de documents

Un fichier XSL est aussi un fichier XML

XSL est une grammaire utilisant XML

La transformation utilisant des documents

XSL est appelée XSLT, XSL

Transformation

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

Cours semaine 3 jour 4 Cours C++ 31

XSL (4)

XSL contient 34 éléments différents

Seuls 3 suffisent à faire une feuille de style

stylesheet

template

apply-templates

XSL utilise deux autres normes, celles

présentées précédemment : les espaces de

nommage et XPath

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

Cours semaine 3 jour 4 Cours C++ 32

XSL (5)

La balise stylesheet permet de définir les caractéristiques de la feuille de style

Elle permet également de donner la liste des espaces de nommage utilisés dans la feuille de style

Remarque : il est possible d’associer une ou pluieurs feuilles de style à un document XML avec xml-stylesheet, à placer en entête du document XML

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

Cours semaine 3 jour 4 Cours C++ 33

XSL (6)

Attributs possibles

default-space="preserve"

indent-result="no"

<xsl:stylesheet

xmlns:xsl="http://www.w3.org/1999/XSL/Transform"

xmlns:mine="file:/DTD/lamienne.dtd">

</xsl:stylesheet>

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

Cours semaine 3 jour 4 Cours C++ 34

XSL (7)

Il est possible de ne pas écrire beaucoup de

XSL pour avoir une feuille de style

Il est possible d’importer une ou plusieurs

feuilles de style pour en faire une nouvelle

<xsl:stylesheet …>

<import href="tables.xsl" />

<import href="composants.xsl" />

</xsl:stylesheet>

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

Cours semaine 3 jour 4 Cours C++ 35

XSL (8)

Une feuille de style est composée de blocs

indépendants au niveau de la rédaction

Plus il y en a et plus on traite de cas

Les cas non traités ne sont pas pris en compte

par la transformation

Les cas mentionnés sont des templates

On recherche une expression particulière

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

Cours semaine 3 jour 4 Cours C++ 36

XSL (9)

L’attribut match de l’élément template

spécifie une expression XPath

C’est donc grâce à ces templates que les nœuds

de l’arbre sont parcourus et traités si le cas est

prévu

<xsl:template match="para">

</xsl:template>

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

Cours semaine 3 jour 4 Cours C++ 37

XSL (10)

À l’intérieur d’un template, on donne le

texte qui sera le résultat de la transformation

Il est par exemple possible d’écrire des

fragments de HTML qui seront mis dans le

résultat de la transformation

Il est également possible de lancer un

traitement des autres nœuds se situant en

dessous du nœud courant

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

Cours semaine 3 jour 4 Cours C++ 38

XSL (11)

Apply-templates lance le traitement récursif

du document

La feuille de style est reparcourue pour trouver

des templates qui traitent les enfants

<xsl:template match="para">

<xsl:apply-templates />

</xsl:stylesheet>

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

Cours semaine 3 jour 4 Cours C++ 39

XSL (12)

Il est également possible de raffiner les

templates avec des modes de traitement

<xsl:template match="chapitre/titre">

<xsl:apply-templates select="//chapitre/titre" mode="h3"/>

</xsl:stylesheet>

<xsl:template match="chapitre/titre" mode="h3">

</xsl:stylesheet>

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

Cours semaine 3 jour 4 Cours C++ 40

XSL (13)

Il est enfin possible de faire des appels avec

des paramètres (call-template)<xsl:template match="nom">

<xsl:call-template name="nom2">

<xsl:with-param name="salut">Bonjour <xsl-with-param>

</xsl:call-template>

</xsl:stylesheet>

<xsl:template name="nom2">

<xsl:value-of select="$salut" />

</xsl:stylesheet>

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

Cours semaine 3 jour 4 Cours C++ 41

XSL (14)

XSL ne se limite pas à cela !

Il est possible d’effectuer des opérations sur le

nœuds courant et même sur ses enfants en étant

dans un template

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

Cours semaine 3 jour 4 Cours C++ 42

XSL (15)

value-of permet de convertir le nom du nœud courant (select sur point) en une chaîne de caractères qui est alors affichée dans le reste du texte issu de la transformation

<xsl:template match="para">

<xsl:value-of select="." />

</xsl:stylesheet>

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

Cours semaine 3 jour 4 Cours C++ 43

XSL (16)

Le paramètre du select peut en fait être une

expression XPath

Toute l’arborescence est donc disponible

Remarque : le select peut également servir

lors de l’appel de apply-templates : <xsl:apply-templates select="name[ @type='title']" />

Remarque supplémentaire : dans un même

template, il est possible d’appeler plusieurs fois

apply-templates, même sans paramètres !

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

Cours semaine 3 jour 4 Cours C++ 44

XSL (17)

Il est possible de demander à ce qu’un tri

soit effectué lors de la transformation

(éventuellement avec un select en plus)

<xsl:template match="para">

<xsl:apply-templates>

<xsl:sort />

</xsl:apply-templates>

</xsl:stylesheet>

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

Cours semaine 3 jour 4 Cours C++ 45

XSL (18)

Le sort possède des attributs

order, peut être ascending ou descending

data-type, peut être text (défaut) ou number

case-order, peut être lower-first ou upper-

first

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

Cours semaine 3 jour 4 Cours C++ 46

XSL (19)

Il est possible de demander à ce qu’une numérotation automatique soit réalisée

xsl:number

Les attributs de number permettent de faire varier le niveau de numérotation (un ou plusieurs niveaux), de spécifier un format de numérotation (chiffres ou lettres) ou encore de grouper les éléments numérotés par paquets d’un certain nombre

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

Cours semaine 3 jour 4 Cours C++ 47

XSL (20)

Il est également possible de créer des

variables qui pourront être utilisées pendant

le traitement

<xsl:variable name="couleur">

rouge

<xsl:variable>

<xsl:value-of select="$couleur" />

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

Cours semaine 3 jour 4 Cours C++ 48

XSL (21)

Il est possible de créer des éléments dans le

document, les éléments pouvant être

rattachés à un espace de nommage

<xsl:element namespace="html" name="h3">

<xsl:apply-templates />

</xsl:element>

Peut s’utiliser en conjonction avec les variables

ou les paramètres : puissant !

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

Cours semaine 3 jour 4 Cours C++ 49

XSL (22)

Il est possible d’effectuer des copies

complètes d’une partie de l’arborescence

xsl:copy-of

xsl:copy

Permet de remplacer la création de template où

se trouve une série d’instructions xsl:value-of

xsl:copy est plus flexible que xsl:copy-of

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

Cours semaine 3 jour 4 Cours C++ 50

XSL (23)

Dans les fonctions de copie, il est possible

d’utiliser un ensemble d’attributs qui

servent, d’une certaine manière, de

paramètres<xsl:attribute-set name="couleurs">

<xsl:attribute name="standard">blue</xsl:attribute>

<xsl:attribute name="important">red</xsl:attribute>

</xsl:attribute-set>

<xsl:copy use-attribute-set name="couleurs">

<xsl:apply-templates />

</xsl:copy>

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

Cours semaine 3 jour 4 Cours C++ 51

XSL (24)

Il est également possible de réaliser des

tests

xsl:if permet de réaliser un test simple

Si le test est vérifié, le contenu de l’élément

est évalué

<xsl:if test="position() = 1">

<xsl:attribute name="style">color: red</xsl:attribute>

</xsl:if>

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

Cours semaine 3 jour 4 Cours C++ 52

XSL (25)

Les tests peuvent également être réalisés en

bloc avec xsl:choose

Cela ressemble beaucoup à un switch C !

<xsl:choose>

<xsl:when test="position() = 1">red</xsl:when>

<xsl:when test="position() = 2">blue</xsl:when>

<xsl:otherwise>green</xsl:otherwise>

</xsl:choose>

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

Cours semaine 3 jour 4 Cours C++ 53

XSL (26)

Il est même possible de faire des itérations

Cela permet de réaliser des sortes de

templates sans avoir à spécifier toutes les

navigations XPath ou tous les paramètres

<xsl:for-each select="nom">

Bonjour <xsl:value-of select="." /> !

</xsl:for-each>

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

Cours semaine 3 jour 4 Cours C++ 54

XSL (27)

Après cette présentation de XSL, vous avez peut-être l’impression que XSL est une sorte de langage de programmation

Et c’est vrai !

DSSSL, l’ancêtre, est une norme de transformation inspirée du langage de programmation Scheme

XSL est donc une sorte de langage de programmation fonctionnelle

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

Cours semaine 3 jour 4 Cours C++ 55

XSL (28)

Un exemple de XSL produisant du HTML :

<?xml version="1.0"?>

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

<xsl:template match="/">

<HTML>

<BODY>

<table border="2" bgcolor="yellow">

<xsl:for-each select="records/purchaseOrder">

<tr>

<td><xsl:value-of select="shipTo/name"/></td>

<td><xsl:value-of select="comment"/></td>

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

Cours semaine 3 jour 4 Cours C++ 56

XSL (29)

<xsl:for-each select="items/item">

<td><xsl:value-of select="price"/></td>

</xsl:for-each>

</tr>

</xsl:for-each>

</table>

</BODY>

</HTML>

</xsl:template>

</xsl:stylesheet>

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

Cours semaine 3 jour 4 Cours C++ 57

FO

FO, Formatting Objects, est une sous partie

de XSL

FO est en fait une étape supplémentaire à

XSL

Des instructions FO doivent être générées lors

de la transformation XSL

Une transformation supplémentaire est alors

opérée

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

Cours semaine 3 jour 4 Cours C++ 58

FO (2)

FO permet de récupérer des documents

selon des formats d’impression paginés

PDF

PostScript

PCL

MIF (FrameMaker)

SVG

Java AWT (!)

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

Cours semaine 3 jour 4 Cours C++ 59

FO (3)

Cette étape est rendue nécessaire car les

standards comme SGML ou XML ou encore

HTML ne possèdent pas la notion de page

telle qu’on la trouve dans les documents

papier

Une page HTML n’est pas limité en taille

comme une page papier

Utilisez l’ascenseur de votre navigateur pour

vous en convaincre !

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

Cours semaine 3 jour 4 Cours C++ 60

FO (4)

Pour réintroduire la notion de page, FO est

nécessaire

FO permet de spécifier tout un ensemble de

directives concernant l’impression de

documents papier comme

Les marges

La dimension d’une feuille

etc

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

Cours semaine 3 jour 4 Cours C++ 61

FO (5)

À l’heure actuelle, aucune solution

Microsoft n’est disponible pour FO

Il existe un produit qui s’interface avec

COM mais il est écrit … en Java

La mise à disposition d’outil FO pourrait

amoindrir le juteux marché des logiciels de

production de rapports

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

Cours semaine 3 jour 4 Cours C++ 62

MSXSL

MSXSL est un outil fournit par Microsoft

permettant de réaliser des transformations

XSL

L’outil est disponible précompilé mais il est

également possible d’en obtenir les sources

et de le compiler en dehors de Visual Studio

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

Cours semaine 3 jour 4 Cours C++ 63

MSXSL (2)

Avant de commencer quoique ce soit

Modifier la variable d’environnement include

Chemin vers les fichiers d’include pour VC++

Rajouter ;C:\Program Files\MSXML 4.0\inc

Modifier la variable d’environnement lib

Chemin vers les librairies pour VC++

Rajouter ;C:\Program Files\MSXML 4.0\lib

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

Cours semaine 3 jour 4 Cours C++ 64

MSXSL (3)

Le programme de Microsoft n’utilise pas

Visual C++ mais nmake !

Pas de fichier .dsw (workspace) ou .dsp

(project)

Créer un fichier make.bat dans le répertoire où

se trouve le fichier makefile contenant ces deux

lignes :

nmake clean

pause

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

Cours semaine 3 jour 4 Cours C++ 65

MSXSL (4)

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

Cours semaine 3 jour 4 Cours C++ 66

MSXSL (5)

Le fichier de commande que nous avons

écrit crée une version de debug

Il est aussi possible de créer une version

normale avec la commande

nmake clean cfg=retail

Voir la documentation fournie avec nmake et

msxsl

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

Cours semaine 3 jour 4 Cours C++ 67

MSXSL (6)

Le programme étant compilé, il est possible

de l’utiliser à la ligne de commande

MSXSL birds1.xml birds1.xsl

MSXSL glossar.xml glossar.xsl > glossar.html

MSXSL birds2.xml birds2.xsl | more

MSXSL birds1.xml birds1.xsl > birds1.2.xml

2> err.txt

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

Cours semaine 3 jour 4 Cours C++ 68

MSXSL (7)

Le main du programme se trouve dans

main.cxx

Comme hier pour les exemples XML, il s’agit

d’objets COM

L’initialisation des connexions COM y est faite

Le parsing de la ligne de commande y est fait

L’appel à TransformHelper y est fait

Fichier transfrm.cxx

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

Cours semaine 3 jour 4 Cours C++ 69

MSXSL (8)

Le fichier transfrm.cxx peut servir de base à l’inclusions de transformations XSL dans un programme

Il faut juste faire les bonnes initialisations !

La fonction principale est Transform( MSXMLInfo )

On y crée deux documents DOM, un pour le fichier source et un pour le résultat

On y charge le fichier XSL

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

Cours semaine 3 jour 4 Cours C++ 70

MSXSL (9)

Parmi les exemples qui vous sont fournis se

trouve une version modifiée d’un tutorial

sur FO formaté selon la grammaire

DocBook

Un premier fichier XSL permet de récupérer

une version HTML

Un deuxième fichier XSL permet de récupéré

un fichier FO destiné à être formaté en PDF

(cette étape est impossible dans notre cas)

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

Cours semaine 3 jour 4 Cours C++ 71

MSXSL (10)

Enfin, trois ensembles de test case sont

disponibles

Ils permettent de tester la validité des parser

XML mais surtout de tester la validité de

l’étape de transformation XSL

Ces tests suite ont été écrit par plusieurs

personnes / sociétés / organismes

Ils sont disponibles sur le site du W3C

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

Cours semaine 3 jour 4 Cours C++ 72

MSXSL (11)

Exercice :

Écrivez un document XML avec un ensemble

de tag que vous définirez

Écrivez un document XSL permettant de

transformer votre document en HTML

Faites tourner MSXSL avec vos deux fichiers

en entrée, en créant un fichier HTML en sortie

Visualisez votre résultat dans Internet Explorer

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

Cours semaine 3 jour 4 Cours C++ 73

XForms

XForms se veut la suite des Forms de HTML qui

permettent à un utilisateur d’envoyer des

paramètres à un programme sur un serveur web

Les Forms HTML sont cependant relativement

limitées

Une page par Form (mais possibilité d’avoir plusieurs

Forms par page)

Pas de langage de traitement sur le client (mais

possibilité d’utiliser Javascript ou d’autres)

Envoi des données selon le formatage de HTTP

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

Cours semaine 3 jour 4 Cours C++ 74

XForms (2)

XForms n’est encore pas un standard, juste une proposition, mais ses objectifs sont :

Support de tous les terminaux (PDA, ordinateurs de bureaux et … télévisions)

Interface utilisateur riche

Découplage des données, des traitements et de la présentation

Possibilité de traitements lourds

Amélioration de l’internationalisation

Support pour les données structurées

Support de plusieurs pages par XForm

Possibilité d’interrompre et de reprendre la saisie

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

Cours semaine 3 jour 4 Cours C++ 75

XML Events

XML Events correspond à la mise en œuvre

d’événements au sein de documents XML

Puisque l’on introduit des évènements, on

introduit bien évidemment des handlers

La notion d’événements est introduite dans la

deuxième version du DOM et ainsi, le DOM

possède désormais également des capacités de

SAX

L’exploitation des évènements est cependant différente

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

Cours semaine 3 jour 4 Cours C++ 76

XML Events (2)

Les handlers d’évènements sont gérés à travers un ensemble de classes

Listener : regarde les évènements passer et réalise des actions (il s’agit d’un élément XML)

Handler : c’est un attribut du listener qui renvoie, par hyperlien, à l’action rattachée au listener

Event : pour représenter des évènements

Il peut y avoir des évènements sur la structure mais également des évènements lors de l’interaction avec l’utilisateur

Un event est traité en descendant l’arborescence et en remontant, avec des informations

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

Cours semaine 3 jour 4 Cours C++ 77

XML Query

XML Query (ou XQuery) est une proposition pour

un langage de requête dans les « documents »

XML

Ce langage permettra d’effectuer une recherche et

de trouver une ou un ensemble de réponses

satisfaisant la requête

Il est possible de considéré comme l’équivalent de

SQL pour les documents XML (un de ses ancêtres

s’appelle même XML-QL)

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

Cours semaine 3 jour 4 Cours C++ 78

XML Query (2)

XML Query utilise des template pour la définition

des éléments à trouver et des conditions à remplir

XML Query utilise largement XPath

De nombreux éditeurs de bases de données XML

offre XML Query, même s’il s’agit parfois de

versions anciennes du langage de requête

Mais la version finale de XML Query n’a pas encore un

an d’âge ! Les éditeurs sont en train de mettre leurs

produits à jour.

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

Cours semaine 3 jour 4 Cours C++ 79

XML Query (3)

Exemples :

FOR $x IN document( "bib.xml" )/bib/book

WHERE $x/year > 1995

RETURN $x/title

FOR $p IN distinct( document( "bib.xml" )//publisher )

LET $b := document( "bib.xml" )/book[ publisher = $p ]

WHERE count( $b ) > 100

RETURN $p

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

Cours semaine 3 jour 4 Cours C++ 80

Questions / Remarques