Les outils de base : XPath, XSL, XLink, XForms 2. XSLT 3. XSLFO 4. XLink 5. XForms 6. Conclusion
1. XPath : l'adressage XML XPath Expressions de chemins dans un arbre XML Permet de sélectionner des nœuds par navigation Document XML ? XPath
XPath XML Path Language Expressions de chemins communes à : recommandation W3C pour expressions de chemins acceptée le 16 novembre 1999 version 2 en cours d'élaboration Expressions de chemins communes à : XSL Xpointer (liens) XQuery (queries) Xpath permet de rechercher un élément dans un document d'adresser toute sous partie d'un document XPath
XPath - Parcours d'arbre XPath opère sur l'arbre d'un document <livre auteur = "Hugo"> <titre>Les chatiments</titre> <chapitre> <section>Buonaparte </section> <section>Neige</section> </chapitre> … </livre> racine livre Auteur = "Hugo" chapitre chapitre titre section section Les chatiments Buonaparte Neige XPath
XPath - Expression de chemins Une expression de chemins spécifie une traversée de l'arbre du document : depuis un nœud de départ vers un ensemble de nœuds cibles les cibles constituent la valeur du cheminement Un chemin peut être : absolu commence à la racine /étape1/…/étapeN relatif commence à un nœud courant étape1/…/étapeN XPath
Syntaxe et sémantique Cheminement élémentaire direction::sélecteur[predicat] Directions parent, ancestor, ancestor-or-self child, descendant, descendant-or-self preceding, preceding-sibling following, following-sibling self, attribute, namespace Sélecteur nom de nœud sélectionné (élément ou @attribut) Prédicat [Fonction(nœud) = valeur] XPath
XPath - Exemples Sections d'un chapitre Texte du chapitre 1 section 2 /child::livre/child::chapitre/child::section /livre/chapitre/section Texte du chapitre 1 section 2 /descendant::chapitre[position() = 1] /child::section[position() = 2]/child::text() //chapitre[1]/section[2]/text() XPath
XPath - Synthèse XPath
2. XSLT : la présentation Permet de transformer un document régulier ou irrégulier de XML à XML, XHTML est un cas particulier De XML à présentation (HTML, texte, rtf, pdf, etc.) Un document est un arbre Le processeur XSL parcourt l'arbre et applique les règles de transformations vérifiées (à condition vraie) aux nœuds sélectionnés Un autre arbre est produit en sortie XSLT
Format (XML) pour Word, Excel Publications avec XSL Plusieurs formats de publication d’un même jeu de données Il permet la présentation sur des terminaux variés Format ( PDF) XML Document Browser Netscape/IE (XHTML, DHTML, HTML) XSL Processor Format (XML) pour Word, Excel XSL Stylesheet Format (XML) application e.Commerce format (WML) XSL
Architectures HTML XML Affichage S E R V E U R Programme XML HTML ASP ou JSP S E R V E U R Programme XML HTML Processeur XSL Affichage Fichier XML XML Affichage Traitement Processeur XSL Base de données XSL
Les feuilles de style Une feuille de style XSL est un document XML de racine <xsl:stylesheet> contient une liste de règles de transformation <xsl:template> Chaque règle (<xsl:template>) est définie par: Une condition spécifiant le sous-arbre du document d’entrée auquel elle s’applique Une production spécifiant le résultat de l’application de la règle Utilisation d'un nom de domaine spécifique Le préfixe généralement utilisé est xsl: XSLT
Exemple de document <?xml version="1.0" ?> <Guide> <Restaurant Categorie="**"> <Nom>Le Romantique</Nom> <Adresse> <Ville>Cabourg</Ville> <Dept>Calvados</Dept> </Adresse> </Restaurant> <Restaurant Categorie="***"> <Nom>Les TroisGros</Nom> <Ville>Roanne</Ville> <Dept>Loire</Dept> </Adresse> </Guide> XSLT
Exemple de feuille de style XSL <?xml version="1.0" ?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/xsl"> <xsl:template match="/"> <html><head><B>ESSAI XSL</B></head> <body><xsl:apply-templates/></body></html> </xsl:template> <xsl:template match="Guide"> <H1>BONJOUR LE GROUPE XML</H1> <H2>SUIVEZ LE GUIDE</H2> <xsl:apply-templates /> <xsl:template match="Restaurant"> <P> <I>Restaurant :</I> <xsl:value-of select="Nom"/></P> </xsl:template> </xsl:stylesheet> XSLT
Les règles de production Définition des règles par <xsl:template …> Attributs match: condition de sélection des nœuds sur lesquels la règle s'applique (XPath) name: nom de la règle, pour invocation explicite (en conjonction avec <call-template>) mode: permet d'appliquer à un même élément des règles différentes en fonction du contexte priority: priorité, utilisé en cas de conflit entre deux règles ayant la même condition Exemples <xsl: template match="/"> <xsl: template match="auteur"> XSLT
La génération du résultat Le contenu de l'élément <xsl:template> est la production de la règle Les éléments du namespace xsl sont des instructions qui copient des données du document source dans le résultat Les autres éléments sont inclus tels quels dans le résultat Instructions pour: Parcourir l'arbre du document source Copier le contenu du document source dans le résultat Parcours de l'arbre: <xsl:apply-templates> <xsl:for-each> Copie du contenu du nœud sélectionné <xsl:value-of select= … > XSLT
Résumé des commandes <xsl:template>, définir une règle et son contexte <xsl:apply-templates />, appliquer les transformations aux enfants du nœud courant <xsl:value-of select … />, extrait la valeur d'un élément sélectionné à partir du nœud courant <xsl:for-each>, définir un traitement itératif <xsl:pi>, générer une processing instruction <xsl:element>, générer un élément <xsl:attribute>, générer un attribut <xsl:if>, définir un traitement conditionnel XSLT
Quelques éditeurs XSLT
IBM XSL Editor XML XSLT Rendu XSLT
Bilan XSLT XSLT est un langage très puissant de transformation d'un arbre XML en un autre XSLT permet en particulier de publier des données XML sur le Web par transformation en un document HTML standard XSLT est utilisé : Pour publier des contenus XML Pour transformer des données (EAI, B2B) XSLT
3. XSLFO : le formatage Les Objets de mise en forme sont multiples : <fo:block> utilisé pour les paragraphes, les titres… <fo:display-rule> ligne de séparation <fo:display-graphic> zone rectangulaire contenant graphisme Ils possèdent de nombreuses propriétés Pour un block on peut définir la marge gauche et droite l’espace avant et après le paragraphe la couleur du texte ………... XSLFO
XSLFO : principes Ils sont appliqués à un nœud de l ’arbre résultat Ils sont appelés par l ’espace nominale fo Syntaxe : <xsl:template match="[motif xpath]" > <fo :[objet-de mise en forme] ([propriété-style]="[valeur]")+> [instructions-de-traitement] </fo:[objet de mise-en-forme]> </xsl:template> XSLFO
XSLFO : Exemple Définition de propriétés pour la racine <xsl:template match=‘/’> <fo-display-sequence font-style=‘italic’ start-indent=‘4pt’ end-indent=‘4pt’ font-size=‘18pt’ <xsl:apply-templates/> </fo-display-sequence> </xsl:template La définition d’une propriété en locale est prioritaire devant l’héritage XSLFO
Les outils XSL Processeurs XSLT conformes à la spécification: Apache Group (www.apache.org): Xalan 1.0.1 Oracle XDK (www.oracle.com): XML Parser 2.0.2 James Clark (www.jclark.com): XT Microsoft Internet Explorer 5.0 et plus Netscape 6 supporte XSLT Processeur XSLFO Apache Group : FOP (Formating Object Processor) Génère du PDF http://www.apache.org JFOR (Open Source) Génère du RTF http://www.jfor.org XSL
Bilan XSL XML = SGML léger pour la production de publications web importantes : production d’une source unique en XML ; XSLT = génération automatique de présentations web multiples ; XSLFO = génération automatique sur d’autres supports. Questions ? XSL
4. Autres spécifications XLink = liens externes entre documents XPointer = pointeurs internes à un document XForms = saisie de formulaires avec XML XLink et plus
Xlink et les liens Exprimer des liens entre documents XML pointe sur une URL l'URL peut inclure une partie Xpointer tout élément peut être un lien Différents types de liens simple xlink:type = "simple" étendu xlink:type = "extended" De véritables associations 1-1 en simple, k-n en étendu avec rôles possibles avec comportements possibles XLink et plus
Exemples simples <Annotation xlink:type="simple" href="note1.xml"> 1 </Annotation> <Auteur xlink:type="simple" inline="true" href="http://www.e-xmlmedia.com/~georges/"> Georges Gardarin </Auteur> <Image xlink:type="simple" href="logo.gif"/> Les attributs doivent être définis dans la DTD si le document en possède une XLink et plus
Les liens étendus Associations orientées de M vers N Ressource Locator Permettent de relier des éléments entre eux par des arcs étiquetés et ainsi de composer des graphes étiquetés orientés Éléments ressource et locator définissant les nœuds Éléments arc définissant les liens Ressource <xxx xlink:type="resource" label="..." title="..." role="...">contenu de l'élément</xxx> Locator <xxx xlink:type="locator" label="…" title="…" role="…" href="…" /> Arc <xxx xlink:type="arc" from="…" to="…" show="…" actuate="…" title="…" arcrole="…">contenu</xxx> XLink et plus
Les attributs de XLink xlink:type href title role show actuate label type de lien href référence de l'URL title titre du document cible role rôle du document cible show en place, interne ou nouveau document actuate manuel ou automatique label étiquette des arcs from source de l'arc to cible de l'arc XLink et plus
XPointer Permet de référencer un élément particulier d'un document le document est spécifié par Xlink le Xpointer est ajouté à l'URI séparée par # ou | Pointeur absolue id() : référence un élément d'identifiant donné root() : pointe sur la racine d'un document html() : référence un document HTML Pointeur relatif = XPath child, descendant, ancestor, preceding, following, … Exemple : <vin2 xlink:type="simple" href="http://www.site.fr/ degustation#xptr(/child::degustation/child::vin[2])" XLink et plus
XForms Nouvelle génération de formulaires Web Assemblage de formulaires à partir de schéma Schéma = structure + type Contraintes = Dépendances, expressions et calculs XForms User Interfaces est la partie apparente pour l’utilisateur (présentation) XForms User Interfaces intègre toutes les commandes de XHTML Ajoute en plus des contrôles (tags) spécifiques au niveau présentation. XForms
Saisie des formulaires Génération et contrôle du message XML Contrôle sur le client ou le serveur XForms Model XForms User Interface XForms Submit Protocol <XML> Instance data XForms
5. Conclusion XSL pour transformer et présenter puissant mais complexe problème de performance des processeurs ? Recommandation XSL version 1.0 http://www.w3.org/TR/xsl/ Recommandation XPath version 1.0 http://www.w3.org/TR/xpath Recommandation Xlink version 1.0 http://www.w3.org/TR/xlink Références
EXERCICES ET COMPLEMENTS Modèle des documents en entrée Modèle des documents en sortie Structure d’une feuille de style Mise en œuvre des transformations
Modèle de document en entrée Le document transformé doit être un document XML bien formé Document XML: arbre dont les nœuds sont les éléments et leur contenu (texte) Pour XSL, la racine du document, les attributs, les namespaces, les instructions de traitement et les commentaires sont aussi vus comme des nœuds Types de nœuds traités par XSL: Racine du document (différent de l’élément racine!) Éléments Texte Attributs Namespaces Instructions de traitement Commentaires
Exemple de document XML <?xml version="1.0" encoding="iso-8859-1"?> <?xml-stylesheet href="style1.xsl" type="text/xsl"?> <CATALOGUE> <ARTICLE> <REFERENCE>JT3006</REFERENCE> <PRIX UNIT="FFR" TAX="TTC">1874</PRIX> </ARTICLE> … </CATALOGUE>
<?xml-stylesheet href="style1.xsl" type="text/xsl"?> Arbre correspondant Racine <?xml-stylesheet href="style1.xsl" type="text/xsl"?> Catalogue Article Article Prix Reference Prix="FFR" 1874 JT3006 Les attributs apparaissent comme des fils de l’élément auquel ils s’appliquent Tax="TTC"
Modèle de document en sortie En général, le document produit est un document XML Document complet Fragment de document bien formé La norme prévoit deux autres types de documents produits: Un type HTML, qui permet de transformer le HTML bien formé (ex: <BR/>) en HTML standard (ex: <BR>) Un type texte, qui permet de générer des formats non balisés de type RTF, Postscript, TeX. Le type de format de sortie est contrôlé par l’élément xsl:output
Structure d’une feuille XSL Une feuille de style XSL contient une liste de règles de transformation Chaque règle (template) est définie par: Une condition spécifiant le sous-arbre du document d’entrée auquel elle s’applique Une production spécifiant le résultat de l’application de la règle XSL utilise XML pour décrire les règles de transformation: <xsl:stylesheet> est l’élément racine d’une feuille de style XSL Toutes les instructions XSL sont des éléments du namespace "http://www.w3.org/1999/XSL/Transform" Le préfixe généralement utilisé est xsl
Exemple de feuille de style Style1.xsl <?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="CATALOGUE"> <html> <xsl:apply-templates/> </html> </xsl:template> <xsl:template match="ARTICLE"> <P> </P> </xsl:stylesheet>
Que fait l'exemple? La première règle: La seconde règle: Remplace l'élément racine <CATALOGUE> par l'élément <html> Le contenu de <html> est le résultat de la transformation du contenu de <CATALOGUE> par les autres règles de la feuille de style La seconde règle: Remplace chaque élément <ARTICLE> par un élément <P> Le contenu de <P> est le texte (sans les balises) contenu dans les descendants de l'élément <ARTICLE> (règle par défaut)
Mise en œuvre Trois types de mise en œuvre possible: Transformation statique Transformation dynamique sur le serveur Web Transformation dynamique sur le client Le choix de l'approche dépend: De l'utilisation des documents produits (impression papier, publication Web) Du type de données XML manipulées (statique ou dynamique) Des capacités du serveur Web utilisé Des capacités du client Web utilisé
Architectures HTML S E R V E U R XML Programme Affichage XML XML ASP ou JSP HTML S E R V E U R XML Programme Affichage XML Processeur XSL XML Traitement Affichage XML Fichier Processeur XSL HTML PS PDF WML XML HTML Base de données Affichage Processeur XSL
Transformation statique Les documents XML sont transformés à l'avance: Impression papier Stockage HTML sur un site Web standard Avantages: Pas de problèmes de performance Serveur et client Web standards Inconvénients Impossibilité de gérer des données XML dynamiques Cohérence entre source et résultat
Transformation sur le serveur Les documents XML sont transformés à la demande par le serveur: Publication Web en HTML Échanges inter-application Avantages: Permet de gérer des données XML dynamiques Client Web standard (HTML) Inconvénients: Nécessite un serveur compatible XSL Problèmes de performances sur le serveur
Transformation sur le client Le document XML et la feuille XSL sont transmises par le serveur avant transformation: Publication Web Avantages: Permet de gérer des données dynamiques Serveur Web standard Pas de problèmes de performances sur le serveur Inconvénients: Nécessite un client Web compatible XSL Les données XML ne sont pas filtrées avant envoi
Association document-feuille XSL Transformation statique: Le document XML et la feuille XSL sont deux paramètres du programme de transformation Transformation dynamique: L'association est gérée par une instruction de traitement dans le fichier XML <?xml-stylesheet href="style1.xsl" type="text/xsl"?>
LES RÈGLES XSL Définition d'une règle La génération du résultat L'élément <xsl:apply-template> L'élément <xsl:value-of> L'élément <xsl:for-each>
Définition d'une règle Définition des règles avec <xsl:template>, avec les attributs: match: condition de sélection des nœuds sur lesquels la règle s'applique name: nom de la règle, pour invocation explicite (en conjonction avec <call-template>) mode: permet d'appliquer à un même élément des règles différentes en fonction du contexte priority: priorité, utilisé en cas de conflit entre deux règles ayant la même condition Au moins un des attributs match ou name doit être présent L'attribut match permet de spécifier des expressions complexes XPath pour sélectionner les nœuds
La génération du résultat Le contenu de l'élément <xsl:template> est la production de la règle Les éléments du namespace xsl sont des instructions qui copient des données du document source dans le résultat Les autres éléments sont inclus tels quels dans le résultat Instructions pour: Parcourir l'arbre du document source Copier le contenu du document source dans le résultat Parcours de l'arbre: <xsl:apply-templates> <xsl:for-each> Copie du contenu <xsl:value-of>
L'élément <xsl:apply-templates> L'élément <xsl:apply-templates> permet d'appliquer récursivement les règles aux fils de l'élément sélectionné par la règle courante Il a deux attributs optionnels: select: permet de sélectionner les descendants à traiter mode: permet de sélectionner les règles à appliquer L'attribut select permet de définir des expressions complexes pour sélectionner des nœuds Similaire à l'attribut match de <xsl:template> Expressions XPath
Utilisation du select Style2.xsl <?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html> <xsl:apply-templates/> </html> </xsl:template> <xsl:template match="CATALOGUE"> <body> </body> <xsl:template match="ARTICLE"> <xsl:apply-templates select="LIBELLE"/> </xsl:stylesheet> Style2.xsl
L'élément <xsl:value-of> L'élément <xsl:value-of> calcule la valeur d'une expression et la copie dans le résultat L'expression est évaluée dans le contexte de l'élément courant Il a deux attributs: select: attribut obligatoire spécifiant l'expression XPath à évaluer disable-output-escaping: attribut optionnel gérant la copie des caractères spéciaux (valeur: yes ou no) La valeur d'un nœud est une string, sa valeur exacte dépend du type de nœud: Pour un élément, c'est tout le texte compris entre les balises de début et de fin
Utilisation de <xsl:value-of> <?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html> <xsl:apply-templates/> </html> </xsl:template> <xsl:template match="CATALOGUE"> <body> </body> <xsl:template match="ARTICLE"> <xsl:value-of select="LIBELLE"/> </xsl:stylesheet>
L'élément <xsl:for-each> L'élément <xsl:value-of> ne devrait être appliqué qu'à des expressions retournant un nœud unique: Dans le cas contraire, seule la valeur du premier nœud est retournée L'élément <xsl:for-each> permet d'itérer sur un ensemble d'éléments défini par l'attribut: select: attribut obligatoire permettant de sélectionner les nœuds à traiter Le contenu de l'élément <xsl:for-each> est copié n fois dans le résultat: Les instructions xsl sont traitées comme dans une règle <xsl:for-each> permet de réduire le nombre de règles, dans le cas de documents réguliers
Utilisation de <xsl:for-each> <?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html> <xsl:apply-templates/> </html> </xsl:template> <xsl:template match="CATALOGUE"> <body> <xsl:for-each select="ARTICLE"/> < xsl:value-of select="LIBELLE"/> </xsl:for-each> </body> </xsl:stylesheet> Style3.xsl
La sélection des éléments L'attribut match des éléments <xsl:template> permet de spécifier des conditions complexes pour sélectionner les éléments auxquels appliquer une règle La syntaxe de l'attribut select, utilisée par plusieurs instructions, permet de sélectionner des éléments parmi les descendants de l’élément courant auquel s’applique la règle
Exemples d'expressions para: tout élément para *: tout élément chapter|appendix: tout élément chapter ou appendix olist/item: tout élément item avec un père olist appendix/*/para: tout élément para avec un grand-père appendix appendix//para: tout élément para avec un ancêtre appendix /: le nœud racine text(): tout nœud texte processing-instruction(): toute instruction de traitement node(): tout nœud id("W11"): élément d'ID W11
Exemples avec tests para[1]: tout élément para qui est le premier fils para de son père *[position()=1 and self::para]: idem para[last()=1]: tout élément para qui est le seul fils para de son père items/item[position()>1]: tout élément item qui à un père items et qui n'est pas le premier fils item de son père item[position() mod 2 = 1]: tout élément item qui est un fils item impair @class: tout attribut class @*: tout attribut div[@class="appendix"]//p: tout élément p avec un ancêtre div dont l'attribut class vaut appendix