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
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