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

Laurent BUNIET
Laurent BUNIETActing Head of Service Evolution of Financial Applications (EVOFIN) at European Parliament em European Parliament
Cours C++ (2002)
semaine 3
jour 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
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
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)
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
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
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
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 !
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
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>
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
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)
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
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
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
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>
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
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
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 = ‘.’ )
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)
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
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
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
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
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
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()
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 !
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
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
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
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
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
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>
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>
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
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>
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
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>
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>
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>
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
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>
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 !
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>
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
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
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" />
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 !
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
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>
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>
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>
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>
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
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>
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>
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
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 (!)
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 !
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
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
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
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 FilesMSXML 4.0inc
 Modifier la variable d’environnement lib
 Chemin vers les librairies pour VC++
 Rajouter ;C:Program FilesMSXML 4.0lib
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
Cours semaine 3 jour 4 Cours C++ 65
MSXSL (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
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
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
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
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)
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
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
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
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
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
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
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)
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.
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
Cours semaine 3 jour 4 Cours C++ 80
Questions / Remarques
1 de 80

Recomendados

XML Xpath & XSLT por
XML  Xpath & XSLTXML  Xpath & XSLT
XML Xpath & XSLTENSAM Casablanca
1.5K visualizações36 slides
Ateliers numériques du LabexMed : LaTeX appliqué aux SHS por
Ateliers numériques du LabexMed : LaTeX appliqué aux SHSAteliers numériques du LabexMed : LaTeX appliqué aux SHS
Ateliers numériques du LabexMed : LaTeX appliqué aux SHSPhonothèque MMSH
2.3K visualizações26 slides
XML Avancé : DTD, XSD, XPATH, XSLT, XQuery por
XML Avancé : DTD, XSD, XPATH, XSLT, XQueryXML Avancé : DTD, XSD, XPATH, XSLT, XQuery
XML Avancé : DTD, XSD, XPATH, XSLT, XQueryRachid NID SAID
7K visualizações107 slides
Le système d&rsquo;E/S en Java por
Le système d&rsquo;E/S en JavaLe système d&rsquo;E/S en Java
Le système d&rsquo;E/S en JavaKorteby Farouk
954 visualizações54 slides
Ateliers numériques du LabexMed : Zotero et bib latex por
Ateliers numériques du LabexMed : Zotero et bib latexAteliers numériques du LabexMed : Zotero et bib latex
Ateliers numériques du LabexMed : Zotero et bib latexPhonothèque MMSH
1.4K visualizações13 slides
Avec le langage R, prenez de la hauteur dans l’analyse de vos données ! por
Avec le langage R, prenez de la hauteur dans l’analyse de vos données ! Avec le langage R, prenez de la hauteur dans l’analyse de vos données !
Avec le langage R, prenez de la hauteur dans l’analyse de vos données ! Yi YANG
230 visualizações28 slides

Mais conteúdo relacionado

Mais procurados

Language INtegrated Query LINQ por
 Language INtegrated QueryLINQ Language INtegrated QueryLINQ
Language INtegrated Query LINQSaid Sadik
403 visualizações37 slides
Une Introduction à R por
Une Introduction à RUne Introduction à R
Une Introduction à RFrançois Guillem
1.2K visualizações23 slides
Cours partie1 elgarrai zineb por
Cours partie1 elgarrai zinebCours partie1 elgarrai zineb
Cours partie1 elgarrai zinebZineb ELGARRAI
1.1K visualizações43 slides
Entity_framework_db first por
Entity_framework_db firstEntity_framework_db first
Entity_framework_db firstZineb ELGARRAI
272 visualizações6 slides
Theme 9(bis) por
Theme 9(bis)Theme 9(bis)
Theme 9(bis)salmazen
633 visualizações22 slides
Chapitre 4 persistance des donnees por
Chapitre 4  persistance des donneesChapitre 4  persistance des donnees
Chapitre 4 persistance des donneesAmir Souissi
275 visualizações36 slides

Mais procurados(17)

Language INtegrated Query LINQ por Said Sadik
 Language INtegrated QueryLINQ Language INtegrated QueryLINQ
Language INtegrated Query LINQ
Said Sadik403 visualizações
Une Introduction à R por François Guillem
Une Introduction à RUne Introduction à R
Une Introduction à R
François Guillem1.2K visualizações
Cours partie1 elgarrai zineb por Zineb ELGARRAI
Cours partie1 elgarrai zinebCours partie1 elgarrai zineb
Cours partie1 elgarrai zineb
Zineb ELGARRAI1.1K visualizações
Entity_framework_db first por Zineb ELGARRAI
Entity_framework_db firstEntity_framework_db first
Entity_framework_db first
Zineb ELGARRAI272 visualizações
Theme 9(bis) por salmazen
Theme 9(bis)Theme 9(bis)
Theme 9(bis)
salmazen633 visualizações
Chapitre 4 persistance des donnees por Amir Souissi
Chapitre 4  persistance des donneesChapitre 4  persistance des donnees
Chapitre 4 persistance des donnees
Amir Souissi275 visualizações
Sérialisation, Persistance Et Mapping Objet Relationnel por Khalid ALLILI
Sérialisation, Persistance Et Mapping Objet RelationnelSérialisation, Persistance Et Mapping Objet Relationnel
Sérialisation, Persistance Et Mapping Objet Relationnel
Khalid ALLILI1.1K visualizações
Chapitre 2 classe et objet por Amir Souissi
Chapitre 2   classe et objetChapitre 2   classe et objet
Chapitre 2 classe et objet
Amir Souissi975 visualizações
Open melodie concepts por José Paumard
Open melodie conceptsOpen melodie concepts
Open melodie concepts
José Paumard753 visualizações
10 big data hadoop por Patrick Bury
10 big data hadoop10 big data hadoop
10 big data hadoop
Patrick Bury63 visualizações
Adopte une BDD por Aymeric Brisse
Adopte une BDDAdopte une BDD
Adopte une BDD
Aymeric Brisse582 visualizações
BigData_TP5 : Neo4J por Lilia Sfaxi
BigData_TP5 : Neo4JBigData_TP5 : Neo4J
BigData_TP5 : Neo4J
Lilia Sfaxi26.3K visualizações
Lightweight directory access protocol por Dimitri LEMBOKOLO
Lightweight directory access protocolLightweight directory access protocol
Lightweight directory access protocol
Dimitri LEMBOKOLO987 visualizações
Xml elgarrai 2020 por OmarIz1
Xml elgarrai 2020Xml elgarrai 2020
Xml elgarrai 2020
OmarIz1285 visualizações
Theme 9 por salmazen
Theme 9Theme 9
Theme 9
salmazen556 visualizações
Découvrez OpenRefine: un outil gratuit pour nettoyer, préparer et enrichir vo... por Mathieu Saby
Découvrez OpenRefine: un outil gratuit pour nettoyer, préparer et enrichir vo...Découvrez OpenRefine: un outil gratuit pour nettoyer, préparer et enrichir vo...
Découvrez OpenRefine: un outil gratuit pour nettoyer, préparer et enrichir vo...
Mathieu Saby2.3K visualizações
07 big data sgbd por Patrick Bury
07 big data sgbd07 big data sgbd
07 big data sgbd
Patrick Bury54 visualizações

Similar a Cours de C++, en français, 2002 - Cours 3.4

Exploration et visualisation de fichiers XML avec BaseX por
Exploration et visualisation de fichiers XML avec BaseXExploration et visualisation de fichiers XML avec BaseX
Exploration et visualisation de fichiers XML avec BaseXEmmanuelle Morlock
2.1K visualizações39 slides
Java 8 : Un ch'ti peu de lambda por
Java 8 : Un ch'ti peu de lambdaJava 8 : Un ch'ti peu de lambda
Java 8 : Un ch'ti peu de lambdaCh'ti JUG
5.4K visualizações59 slides
Cours de C++, en français, 2002 - Cours 3.3 por
Cours de C++, en français, 2002 - Cours 3.3Cours de C++, en français, 2002 - Cours 3.3
Cours de C++, en français, 2002 - Cours 3.3Laurent BUNIET
226 visualizações92 slides
NIO 2 por
NIO 2NIO 2
NIO 2Lorraine JUG
1.9K visualizações82 slides
Tp n 3 linux por
Tp n 3 linuxTp n 3 linux
Tp n 3 linuxAmir Souissi
1.4K visualizações6 slides
Modèles de données et langages de description ouverts 5 - 2021-2022 por
Modèles de données et langages de description ouverts   5 - 2021-2022Modèles de données et langages de description ouverts   5 - 2021-2022
Modèles de données et langages de description ouverts 5 - 2021-2022François-Xavier Boffy
98 visualizações37 slides

Similar a Cours de C++, en français, 2002 - Cours 3.4(20)

Exploration et visualisation de fichiers XML avec BaseX por Emmanuelle Morlock
Exploration et visualisation de fichiers XML avec BaseXExploration et visualisation de fichiers XML avec BaseX
Exploration et visualisation de fichiers XML avec BaseX
Emmanuelle Morlock2.1K visualizações
Java 8 : Un ch'ti peu de lambda por Ch'ti JUG
Java 8 : Un ch'ti peu de lambdaJava 8 : Un ch'ti peu de lambda
Java 8 : Un ch'ti peu de lambda
Ch'ti JUG5.4K visualizações
Cours de C++, en français, 2002 - Cours 3.3 por Laurent BUNIET
Cours de C++, en français, 2002 - Cours 3.3Cours de C++, en français, 2002 - Cours 3.3
Cours de C++, en français, 2002 - Cours 3.3
Laurent BUNIET226 visualizações
NIO 2 por Lorraine JUG
NIO 2NIO 2
NIO 2
Lorraine JUG1.9K visualizações
Tp n 3 linux por Amir Souissi
Tp n 3 linuxTp n 3 linux
Tp n 3 linux
Amir Souissi1.4K visualizações
Modèles de données et langages de description ouverts 5 - 2021-2022 por François-Xavier Boffy
Modèles de données et langages de description ouverts   5 - 2021-2022Modèles de données et langages de description ouverts   5 - 2021-2022
Modèles de données et langages de description ouverts 5 - 2021-2022
François-Xavier Boffy98 visualizações
11-Cours de Géniel Logiciel por lauraty3204
11-Cours de Géniel Logiciel11-Cours de Géniel Logiciel
11-Cours de Géniel Logiciel
lauraty3204170 visualizações
Modèles de données et langages de description ouverts 2021-2022 - 2 por François-Xavier Boffy
Modèles de données et langages de description ouverts   2021-2022 - 2Modèles de données et langages de description ouverts   2021-2022 - 2
Modèles de données et langages de description ouverts 2021-2022 - 2
François-Xavier Boffy103 visualizações
Nettoyer et transformer ses données avec Openrefine : partie 2 por Mathieu Saby
Nettoyer et transformer ses données avec Openrefine : partie 2Nettoyer et transformer ses données avec Openrefine : partie 2
Nettoyer et transformer ses données avec Openrefine : partie 2
Mathieu Saby1.9K visualizações
Standards et outils XML por Equipex Biblissima
Standards et outils XMLStandards et outils XML
Standards et outils XML
Equipex Biblissima1.1K visualizações
"Input/Ouput, 16 ans après" à Devoxx France 2012 por Jean-Michel Doudoux
"Input/Ouput, 16 ans après" à Devoxx France 2012"Input/Ouput, 16 ans après" à Devoxx France 2012
"Input/Ouput, 16 ans après" à Devoxx France 2012
Jean-Michel Doudoux581 visualizações
R FOR DATA ANALYSIS_DATAFRAMES1.pptx por AbdoulayeWakhabDIOP
R FOR DATA ANALYSIS_DATAFRAMES1.pptxR FOR DATA ANALYSIS_DATAFRAMES1.pptx
R FOR DATA ANALYSIS_DATAFRAMES1.pptx
AbdoulayeWakhabDIOP20 visualizações
xml_bd_ouahdikrid.ppt por LeilaAmrane
xml_bd_ouahdikrid.pptxml_bd_ouahdikrid.ppt
xml_bd_ouahdikrid.ppt
LeilaAmrane13 visualizações
Cmd dos sous windows por Selman Dridi
Cmd dos sous windowsCmd dos sous windows
Cmd dos sous windows
Selman Dridi616 visualizações
PHP #6 : mysql por Jean Michel
PHP #6 : mysqlPHP #6 : mysql
PHP #6 : mysql
Jean Michel1.3K visualizações
Introduction à Python por Abdoulaye Dieng
Introduction à PythonIntroduction à Python
Introduction à Python
Abdoulaye Dieng2K visualizações
Modèles de données et langages de description ouverts 2021-2022 - 3 por François-Xavier Boffy
Modèles de données et langages de description ouverts   2021-2022 - 3Modèles de données et langages de description ouverts   2021-2022 - 3
Modèles de données et langages de description ouverts 2021-2022 - 3
François-Xavier Boffy84 visualizações
Introduction à scala por SOAT
Introduction à scalaIntroduction à scala
Introduction à scala
SOAT2.7K visualizações
Openmelodie nouvelles fonctionnalités por José Paumard
Openmelodie nouvelles fonctionnalitésOpenmelodie nouvelles fonctionnalités
Openmelodie nouvelles fonctionnalités
José Paumard518 visualizações

Mais de Laurent BUNIET

Cours de C++, en français, 2002 - Cours 3.5 por
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.5Laurent BUNIET
237 visualizações36 slides
Cours de C++, en français, 2002 - Cours 3.2 por
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.2Laurent BUNIET
192 visualizações102 slides
Cours de C++, en français, 2002 - Cours 3.1 por
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.1Laurent BUNIET
277 visualizações94 slides
Cours de C++, en français, 2002 - Cours 2.5 por
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.5Laurent BUNIET
293 visualizações86 slides
Cours de C++, en français, 2002 - Cours 2.4 por
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.4Laurent BUNIET
87 visualizações78 slides
Cours de C++, en français, 2002 - Cours 2.3 por
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.3Laurent BUNIET
213 visualizações90 slides

Mais de Laurent BUNIET(14)

Cours de C++, en français, 2002 - Cours 3.5 por Laurent BUNIET
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 BUNIET237 visualizações
Cours de C++, en français, 2002 - Cours 3.2 por Laurent BUNIET
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 BUNIET192 visualizações
Cours de C++, en français, 2002 - Cours 3.1 por Laurent BUNIET
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 BUNIET277 visualizações
Cours de C++, en français, 2002 - Cours 2.5 por Laurent BUNIET
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 BUNIET293 visualizações
Cours de C++, en français, 2002 - Cours 2.4 por Laurent BUNIET
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 BUNIET87 visualizações
Cours de C++, en français, 2002 - Cours 2.3 por Laurent BUNIET
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 BUNIET213 visualizações
Cours de C++, en français, 2002 - Cours 2.2 por Laurent BUNIET
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 BUNIET111 visualizações
Cours de C++, en français, 2002 - Cours 2.1 por Laurent BUNIET
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 BUNIET118 visualizações
Cours de C++, en français, 2002 - Cours 1.5 por Laurent BUNIET
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 BUNIET117 visualizações
Cours de C++, en français, 2002 - Cours 1.4 por Laurent BUNIET
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 BUNIET87 visualizações
Cours de C++, en français, 2002 - Cours 1.3 por Laurent BUNIET
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 BUNIET65 visualizações
Cours de C++, en français, 2002 - Cours 1.2 por Laurent BUNIET
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 BUNIET162 visualizações
Cours de C++, en français, 2002 - Cours 1.1 por Laurent BUNIET
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 BUNIET173 visualizações
Cours de C++, en français, 2002 - Plan por Laurent BUNIET
Cours de C++, en français, 2002 - PlanCours de C++, en français, 2002 - Plan
Cours de C++, en français, 2002 - Plan
Laurent BUNIET114 visualizações

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

  • 2. 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
  • 3. 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
  • 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)
  • 5. 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
  • 6. 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
  • 7. 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
  • 8. 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 !
  • 9. 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
  • 10. 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>
  • 11. 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
  • 12. 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)
  • 13. 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
  • 14. 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
  • 15. 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
  • 16. 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>
  • 17. 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
  • 18. 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
  • 19. 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 = ‘.’ )
  • 20. 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)
  • 21. 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
  • 22. 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
  • 23. 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
  • 24. 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
  • 25. 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
  • 26. 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()
  • 27. 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 !
  • 28. 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
  • 29. 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
  • 30. 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
  • 31. 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
  • 32. 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
  • 33. 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>
  • 34. 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>
  • 35. 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
  • 36. 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>
  • 37. 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
  • 38. 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>
  • 39. 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>
  • 40. 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>
  • 41. 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
  • 42. 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>
  • 43. 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 !
  • 44. 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>
  • 45. 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
  • 46. 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
  • 47. 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" />
  • 48. 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 !
  • 49. 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
  • 50. 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>
  • 51. 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>
  • 52. 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>
  • 53. 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>
  • 54. 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
  • 55. 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>
  • 56. 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>
  • 57. 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
  • 58. 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 (!)
  • 59. 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 !
  • 60. 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
  • 61. 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
  • 62. 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
  • 63. 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 FilesMSXML 4.0inc  Modifier la variable d’environnement lib  Chemin vers les librairies pour VC++  Rajouter ;C:Program FilesMSXML 4.0lib
  • 64. 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
  • 65. Cours semaine 3 jour 4 Cours C++ 65 MSXSL (4)
  • 66. 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
  • 67. 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
  • 68. 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
  • 69. 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
  • 70. 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)
  • 71. 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
  • 72. 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
  • 73. 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
  • 74. 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
  • 75. 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
  • 76. 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
  • 77. 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)
  • 78. 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.
  • 79. 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
  • 80. Cours semaine 3 jour 4 Cours C++ 80 Questions / Remarques