Université de Nice-Sophia Antipolis Jeudi 7 juin Création et Manipulation de documents

Documents pareils
XML par la pratique Bases indispensables, concepts et cas pratiques (3ième édition)

Production de documents avec XSLT. Production de documents p.1/??

Langage HTML (2 partie) <HyperText Markup Language> <tv>lt La Salle Avignon BTS IRIS</tv>

Thierry BOULANGER. par la pratique. Bases indispensables Concepts et cas pratiques XML. 3 ième édition. Nouvelle édition

Master d Informatique Corrigé du partiel novembre 2010

<?xml version="1.0" encoding="iso " standalone="yes"?>

Gestion Électronique de Documents et XML. Master 2 TSM

PIVOT. Pivot/Querier Documentation technique XML/XSD/XSLT

Programmation Web. Madalina Croitoru IUT Montpellier

Note de cours. Introduction à Excel 2007

HTML. Notions générales

Module BDWEB. Maîtrise d informatique Cours 9 - Xquery. Anne Doucet. anne.doucet@lip6.fr

Initiation à html et à la création d'un site web

Document Object Model (DOM)

Projet 2. Gestion des services enseignants CENTRE D ENSEIGNEMENT ET DE RECHERCHE EN INFORMATIQUE. G r o u p e :

BIRT (Business Intelligence and Reporting Tools)

Optimiser pour les appareils mobiles

Introduction aux concepts d ez Publish

Malgré son aspect spartiate, Freeplane offre de nombreuses fonctionnalités en particulier dans le domaine de la diffusion des cartes sur le Web.

LES GRANDES ETAPES DE CREATION D UN WEB DESIGN

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

CREATION D UNE EVALUATION AVEC JADE par Patrick RUER (

GUIDE Excel (version débutante) Version 2013

CRÉER, ROUTER ET GÉRER UNE NEWSLETTER, UN ING

Faculté de Génie Chaire industrielle en infrastructures de communication. La technologie XML. Wajdi Elleuch

TD3 - Facturation avec archivage automatisé

Instructions et spécifications pour la transmission en format XML de déclarations par lots. 30 mai 2015 MODULE 1

Evolution et architecture des systèmes d'information, de l'internet. Impact sur les IDS. IDS2014, Nailloux 26-28/05/2014

Administration du site (Back Office)

SECTION 5 BANQUE DE PROJETS

Module : programmation site Web dynamique Naviguer entre les pages via site map

Master Technologies numériques appliquées à l'histoire Deuxième année

Licence de Biologie, 1ère année. Aide. [Aide 1] Comment utiliser l'explorateur Windows? Comment créer des dossiers?

UNIVERSITE DE TOULON UFR FACULTE DE DROIT REGLEMENT D EXAMEN ANNEE 2012/2017 LICENCE DROIT MENTION DROIT GENERAL

Construction d un Site Internet Dynamique avec Joomla René-Yves Hervé, Ph.D.

OpenText StreamServe Cours Customer Communication Management L essentiel

INTRODUCTION AU CMS MODX

Master CCI. Compétences Complémentaires en Informatique. Livret de l étudiant

Limites finies en un point

3 ème 2 DÉVELOPPEMENT FACTORISATIONS ET IDENTITÉS REMARQUABLES 1/5 1 - Développements

RACCOURCIS CLAVIERS. DEFINITION : Une «combinaison de touches» est un appui simultané sur plusieurs touches.

BES WEBDEVELOPER ACTIVITÉ RÔLE

CERTIFICAT INFORMATIQUE ET INTERNET NIVEAU 1

La mémoire. Un ordinateur. L'octet. Le bit

Projet en nouvelles technologies de l information et de la communication

< Atelier 1 /> Démarrer une application web

BD et XML : Exercices

Convention de Licence Érudit (Open Source)

L'API DOM : Document Object Model

Automatisation de l administration système avec

Débuter avec Excel. Excel

MAÎTRISE DE L ENVIRONNEMENT WINDOWS VISTA

Formation Word/Excel. Présentateur: Christian Desrochers Baccalauréat en informatique Clé Informatique, 15 février 2007

Le produit semi-direct

Démonstration d utilisation De NesmaCom

«Dire et écrire» pour réaliser une composition en travail collaboratif en géographie. Agnès Dullin, lycée J. Racine 20 rue du Rocher, Paris

1 ère Université WEB. Courbevoie Samedi 21 octobre Votre site interactif sur internet.

PROSOP : un système de gestion de bases de données prosopographiques

Systèmes de communications Aastra Poste Aastra Guide de l utilisateur

Théorème du point fixe - Théorème de l inversion locale

Eole - gestion des dictionnaires personnalisés

TP1 : Initiation à l algorithmique (1 séance)

COMMENT REDIGER UN RAPPORT TECHNIQUE?

AC AB. A B C x 1. x + 1. d où. Avec un calcul vu au lycée, on démontre que cette solution admet deux solutions dont une seule nous intéresse : x =

Informatique Générale

Les Bases. Messaoudi Khaled, Boukelal Hanane (Etudiants Informatique ) 2015.

On trouvera sur le site du CCDMD un exemple d album construit avec Cantare. (

Utiliser un CMS: Wordpress

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Correction de l examen de la première session

Réaliser un journal scolaire

Représentation géométrique d un nombre complexe

HTML, CSS, JS et CGI. Elanore Elessar Dimar

Algorithmique et programmation : les bases (VBA) Corrigé

TD séances n 3 et n 4 Répertoires et Fichiers sous Unix

Formulaire pour envoyer un mail

4. SERVICES WEB REST 46

Tous les autres noms de produits ou appellations sont des marques déposées ou des noms commerciaux appartenant à leurs propriétaires respectifs.

Serveur d Applications Web : WebObjects

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Quelques éléments de compilation en C et makefiles

WINDOWS SHAREPOINT SERVICES 2007

GUIDE D UTILISATION DU BACKOFFICE

Systèmes de communications Aastra Poste Aastra Guide de l utilisateur

Document d aide au suivi scolaire

Services bancaires par Internet aux entreprises. Guide pratique pour : Rapports de solde Version

SYSTÈMES D INFORMATIONS

XML, PMML, SOAP. Rapport. EPITA SCIA Promo janvier Julien Lemoine Alexandre Thibault Nicolas Wiest-Million

EXAMEN CRITIQUE D UN DOSSIER TECHNIQUE

Les chaînes de caractères

Premiers Pas en Programmation Objet : les Classes et les Objets

Nouveautés de la version moodle 2.7

Les outils de création de sites web

SII Stage d informatique pour l ingénieur

Expression des contraintes. OCL : Object C o n t r a i n t L a n g u a g e

Les arbres binaires de recherche

Guide d usage pour Word 2007

Algorithmique I. Algorithmique I p.1/??

HMI target Visu / PLC HMI. Pour réaliser une interface homme machine avec PLC control

Validation de la création des groupes ABM et ajout de l utilisateur SASDEMO

Transcription:

Université de Nice-Sophia Antipolis Jeudi 7 juin 2007 Polytech CiP1 Durée: 3h Création et Manipulation de documents (Hélène Renard / Sylvain Schmitz) Travaux Dirigés Séance n o 13 1 Objectifs du TD L objectif de cette séance est de vous familiariser avec xslt et les transformations d un format xml vers un autre. Mise en place Copiez le répertoire ~schmitz/xslt dans CMDocs et placez-vous dedans. 2 Transformations xslt Nous avions vu que les outils de manipulation de chaînes de caractères tels que sed et awk n étaient pas très simples d utilisation pour manipuler des documents xml. En pratique, l adoption d xml pour les formats d échanges de données a crée un besoin pour des outils spécialisés dans son traitement. Les feuilles de style xslt (http://www.w3.org/tr/xslt) comblent en bonne partie ce manque. 2.1 Exemple On souhaite opérer à la traduction du corps d un document xhtml vers le corps d un document OpenDocument et inversement comme suit : <body> <h1>titre</h1> <p>...</p> </body> <text:h text:outline-level="1">titre... Exercice n 1 : Écrivez la traduction de xhtml vers OpenDocument du document exo1.xhtml à l aide de sed. La traduction dans le sens inverse vous paraît-elle aisée? 2.2 Principe de xslt Au lieu de procéder à des remplacements du texte, une transformation xslt opère à des remplacements dans l arbre xml : body office:body office:text h1 p text:h text:p 1

Une feuille xslt est principalement constituée de templates, qui décrivent comment traiter chaque nœud de l arbre xml du document à transformer. La transformation ci-dessus s écrit par exemple à l aide de trois templates, un pour le nœud body, un pour le nœud h1, et un pour le nœud p : <xsl:template match="body"> <xsl:template match="h1"> <text:h text:outline-level="1"> <xsl:template match="p"> Dans les trois cas, chaque fois que l on rencontre un nœud body, h1 ou p, on le transforme et on applique la transformation récursivement avec : si l on avait écrit <xsl:template match="body"> alors le document de sortie ne serait que le fragment xml car les nœuds h1 et p qui sont dans body n auraient pas été visités. 2.3 Une feuille xslt Une feuille de style xslt vraiment minimale ne comprend que <?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/xsl/transform"> </xsl:stylesheet> Cette feuille contient les templates implicites <xsl:template match="* /"> 2

<xsl:template match="text()"> <xsl:value-of select="."/> qui sont appliqués à n importe quel nœud de l arbre xml et se contentent de s appliquer récursivement et de copier le texte sur la sortie. 2.4 Appliquer une feuille xslt En ligne de commande, la commande xsltproc permet d appliquer une feuille xslt feuille.xsl à des fichiers xml : xsltproc feuille.xsl fichiers XML Exercice n 2 : Appliquez la feuille de style minimal.xsl aux fichiers exo1.xhtml et exo2.xhtml. Le traitement est plus long dans le deuxième cas car exo2.xhtml déclare proprement sa dtd, et xsltproc vérifie alors que exo2.xhtml est valide. Comment éviter cette validation? Comment écrire le résultat dans le fichier out.xml? Espaces de nom Exercice n 3 : Le fichier exo3.xsl contient seulement les trois templates vus précédemment. Appliquez-le aux fichiers exo1.xhtml et exo2.xhtml. La feuille exo3.xsl ne fonctionne pas sur exo2.xhtml car les éléments d exo2.xhtml sont tous implicitement dans l espace de nom http://www.w3.org/1999/xhtml. Pour correspondre à un élément du document exo2.xhtml, il faut donc préciser l espace de nom utilisé en ajoutant la déclaration xmlns:xhtml="http://www.w3.org/1999/xhtml" à l élément racine xsl:stylesheet et écrire des templates de la forme : <xsl:template match="xhtml:p"> Le fichier arbre.xsl permet de traiter exo2.xhtml. Sélectionner des nœuds forme Le fichier arbre.xsl contient en particulier un template de la <xsl:template match="xhtml:html"> <office:document-content office:version="1.0"> <xsl:apply-templates select="xhtml:body"/> </office:document-content> où l on sélectionne explicitement le nœud body pour l application récursive des templates par xsl:apply-templates. Exercice n 4 : Comment faire pour ignorer le contenu de l élément head du document exo2.xhtml sans sélectionner explicitement body? 3

3 Aperçu d XPath Les expressions qui permettent de sélectionner à quel(s) nœuds s applique un xsl:template ou un appel récursif xsl:apply-templates sont des expressions XPath (http://www.w3.org/ TR/xpath). Ce standard est assez riche, mais pour une utilistion courante, les quelques éléments qui suivent suffisent. 3.1 Chemins Les chemins XPath fonctionnent un peu comme l adressage dans l arborescence des fichiers, avec «.» pour désigner l élément courant, «/» pour trouver les éléments fils, et «..» pour remonter au père ; le chemin «a//b» trouve tous les éléments b descendants de l élément a. Par exemple, les éléments du fichier exo1.xhtml sont identifiés par les chemins /body/h1 et /body/p depuis la racine «/». À l intérieur d un template, le chemin part depuis le nœud courant. Par exemple, dans <xsl:template match="xhtml:body"> <xsl:apply-templates select="../xhtml:head/xhtml:title"/> <xsl:template match="xhtml:title"> <text:h> on applique récursivement les templates pour le titre du document xhtml, que l on place dans un élément text:h au début du document OpenDocument obtenu. 3.2 Axes Les chemins que nous venons de voir sont en fait des notations abrégées pour les différents axes de recherche : «..» correspond à l axe parent::, «//» à l axe descendant::. Des généralisations de ces axes existent, comme descendant-or-self::, ancestor::, ancestor-or-self::, et ainsi de suite. Enfin, on peut tester l existence d un frère avant ou après l élément atteint par preceding-sibling:: et following-sibling:: respectivement. Ainsi, le chemin preceding-sibling::a/b trouve un élément b fils d un élément a qui précède immédiatement le nœud courant. 3.3 Prédicats Chaque étape d un chemin a/b/c/d peut recevoir un prédicat entre crochets qui doit être satisfait pour que l étape soit validée. Par exemple a[position()=last()-1]/b[../e]/c[@href]/d[@id= foo ] vérifiera que le nœd a est l avant-dernier élément a sous l élément courant, qu il a un fils b avec un élément e pour frère, que ce b a pour fils un nœud c avec un attribut href, et que ce nœud c a un fils d avec un attribut id avec la valeur foo. 4

3.4 Choix multiples L étoile «*» a le sens habituel puisqu elle accepte n importe quel élément. On peut l utiliser par exemple pour trouver tous les éléments a qui suivent l élément courant ou qui sont plus bas par following-sibling::*/descendant-or-self::a De même, «@*» acceptera n importe quel attribut. Enfin, deux chemins différents peuvent être regroupés par un signe, comme dans a/b/c d/b/e. 3.5 Exercices Exercice n 5 : Ajoutez un nouveau template pour le premier élément h1 d un document xhtml à arbre.xsl. Ce template va de plus copier le titre du document xhtml, de telle sorte que l on obtienne le titre <text:h text:outline-level="1">exercice 2 : Titre 1 à partir d exo2.xhtml. Pour écrire «:», vous aurez besoin d écrire du texte sous xslt, ce qui se fait par un élément xsl:text contenant le texte à insérer, donc ici <xsl:text> : </xsl:text> Donnez deux expressions XPath différentes pour faire cet exercice. Exercice n 6 : Complétez l exercice précédent en affichant aussi le nom de l auteur du document du fichier exo6.xhtml en titre de niveau 2 du document OpenDocument obtenu : <text:h text:outline-level="1">exercice 6 : Titre 1 <text:h text:outline-level="2">john Doe L élément xslt qui permet de copier une valeur est xsl:value-of, qui écrit son attribut select (revoyez son utilisation en section 2.3). 4 Aperçu d xslt Le standard xslt est lui aussi très riche, et est encore étendu par le standard exslt qui lui ajoute d autres fonctionnalités. Nous ne verrons qu un aperçu des possibilités offertes par ce langage de transformations, en sus des éléments xsl:template, xsl:apply-templates, xsl:text et xsl:value-of déjà entrevus. 4.1 Éléments et attributs À la place d écrire <xsl:template match="xhtml:h1"> <text:h text:outline-position="1"> on pourrait écrire <xsl:template match="xhtml:h1"> <xsl:element name="text:h"> <xsl:attribute name="text:outline-position">1</xsl:attribute> </xsl:element> 5

L intérêt est de pouvoir manipuler plus facilement les noms de éléments et les valeurs des attributs. Par exemple, on peut alors traduire les titres xhtml en OpenDocument avec un seul template comme le suivant : <xsl:template match="xhtml:h1 xhtml:h2 xhtml:h3 xhtml:h4 xhtml:h5 xhtml:h6"> <text:h> <xsl:attribute name="text:outline-position"> <xsl:value-of select="substring(name(.),2)"/> </xsl:attribute> Inversement, on peut traduire les titres OpenDocument en xhtml par le template <xsl:template match="text:h[@text:outline-level]"> <xsl:element name="xhtml:h{@text:outline-level}"> </xsl:element> 4.2 Énoncés conditionnels À l intérieur d un template, on peut choisir d appliquer une transformation uniquement sous certaines conditions. Dans un élément xsl:choose, l élément xsl:when contient un attribut test et n applique son contenu que si le test est vrai. Le test correspond usuellement à un prédicat XPath, mais peut utiliser des connecteurs logiques not(), and ou or. Par exemple, on peut mettre le paragraphe qui suit immédiatement un titre h1 dans un style particulier par <xsl:template match="xhtml:p"> <xsl:choose> <xsl:when test="preceding-sibling::xhtml:h1"> <xsl:attribute name="text:style-name">pchapeau</xsl:attribute> </xsl:when> </xsl:choose> Le test peut être complété pour tenir compte du cas où il n y a pas d élément h1 dans le document, et dans ce cas considérer comme chapeau le premier paragraphe avec le test (not(//xhtml:h1) and position()=1) or preceding-sibling::xhtml:h1 Si plusieurs possibilités sont possibles, on peut ajouter d autres choix avec d autres éléments xsl:when, et finir sur un xsl:otherwise pour les cas non traités. Quand un seul cas nous intéresse, comme dans l exemple plus haut, il est plus simple d utiliser l élément xsl:if <xsl:template match="xhtml:p"> <xsl:if test="preceding-sibling::xhtml:h1"> <xsl:attribute name="text:style-name">pchapeau</xsl:attribute> </xsl:if> 6

Exercice n 7 : Le fichier exo7.xhtml ne contient pas d élément h1, et notre feuille xslt n affiche plus le titre et le nom de l auteur. Modifiez arbre.xsl pour remédier à ce problème. 5 Mise en pratique Le document exo8.xhtml contient une série de titre de niveaux 1 à 3. Notez que les titres sont proprement ordonnés, sans saut d un titre de niveau 1 à un de niveau 3. De plus, une séquence de titres de niveau inférieur est toujours mise dans un élément div. Exercice n 8 : On souhaite générer un document xhtml qui donne la table des matières d exo8.xhtml. Le résultat souhaité est donné dans le fichier out8.xhtml. Complétez exo8.xsl pour générer la table des matières désirée. 7