Upload
laurent-buniet
View
130
Download
1
Embed Size (px)
Citation preview
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
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 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
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