Valid XHTML     Valid CSS2    

Développement Web et représentation de données :

Technologie XML, DTD, XSD et XSL ;

applications à la bureautique et à la bioinformatique

Exercices corrigés, série 3 : sélections XPATH et transformations XSL

                     gilles.hunault "at" univ-angers.fr

 

Table des matières cliquable

  1. Expressions XPATH élémentaires (films)

  2. Expressions XPATH avancées (films)

  3. Expressions XPATH élémentaires (bioinformatique)

  4. Expressions XPATH avancées (bioinformatique)

  5. Compréhension de la transformation vide

  6. Comptages avec XSL (1)

  7. Transformations entre éléments et attributs

  8. Ajouts et modifications d'éléments ou d'attributs

  9. Comptages avec XSL (2)

10. Suppression de la mise en forme XHTML

11. Tris avec XSL

12. Fichiers inclus, sous-programmes et variables en XSL

13. Une transformation à peine plus complexe

14. Questions diverses

 

Il est possible d'afficher toutes les solutions via ?solutions=1.

 

1. Expressions XPATH élémentaires (films)

Pour ce premier exercice, on utilisera le fichier films2.xml qui est une version légèrement modifiée du fichier de P. Rigaux à qui nous avons emprunté certains exercices.

Quelle est la différence entre xmlstarlet el et xmlstarlet el -u ?

Quelle est la différence entre /* et //* ? Utilisez xmllint en mode "shell" pour le montrer.

Donner le titre de tous les films puis le nom de tous les artistes (metteurs en scène et acteurs).

Que signifie /FILMSETARTISTES/FILMS/FILM[@Annee=1990]/TITRE ? Trouvez une expression XPATH plus concise qui fournit le même résultat.

Donnez les titres des films avec Bruce Willis.

Dans Reservoir dogs, quel personnage (élément INTITULE) joue Harvey Keitel ?

Quel metteur en scène correspond à la référence 3 ?

Solution :  

 

2. Expressions XPATH avancées (films)

On utilise toujours films2.xml et xmllint en mode shell pour cet exercice. Donner la liste de toutes les références aux metteurs en scène puis donner la liste des noms des metteurs en scène référencés.

Peut-on facilement afficher le nom et les prénoms des metteurs en scène ? De façon lisible ? Enfin, donner la liste des noms des metteurs en scène distincts triée par ordre alphabétique.

Solution :  

 

3. Expressions XPATH élémentaires (bioinformatique)

Pour cet exercice, on utilise les fichiers 424143.gbx.xml (NCBI) et P14602.xml (UNIPROT) qui correspondent à la protéine AAA18335 vue à la série d'exercices numéro 1.

Sachant qu'au NCBI les identifiants sont les contenus texte des éléments GBSeqid, lister tous les identifiants liés à la protéine. Comment n'afficher que l'identifiant GenInfo, c'est-à-dire celui qui commence par gi| ? On utilisera astucieusement xmlstarlet puis xmllint pour trouver les identifiants avant d'écrire une expression XPATH qui affiche les identifiants complets puis une transformation XSL qui n'affiche que la valeur du gi, soit ici bien sûr 424143.

Solution :  

 

4. Expressions XPATH avancées (bioinformatique)

4.1 Valeur de CDD

Donner une transformation XSL qui permet d'obtenir la valeur du CDD pour une protéine du NCBI obtenue par efetch sachant qu'il s'agit du contenu texte de Object-id_id lorsque qu'on est dans un élément Dbtag dont le sous-élément Dbtag_db vaut 'CDD'. On utilisera le fichier 158513197.xml qui correspond à la protéine A1VFJ3 soit l'URL efetch...id=158513197. On devra trouver 111833 comme valeur de CDD (Conserved Domain Database). On pourra consulter 158513197_elts.txt qui est la sortie de xmlstarlet el -u 158513197.xml et 158513197_elts_Object-id_id.txt qui est la sortie de xmlstarlet el -u 158513197.xml | grep Object-id_id.

On essaiera de fournir plusieurs solutions, dont une qui utilise //Seq-feat_dbxref, une qui utilise //Object-id_id et une qui utilise //Dbtag.

4.2 Valeur de PFAM

Sur le site d'Uniprot, un fichier XML complet pour une protéine contient «quelque part» une indication de PFAM (Protein FAMilies). Rechercher cette valeur de PFAM pour la protéine X68357 soit le fichier P14602.xml dont les éléments sont listés dans P14602_elts.txt et les éléments avec attributs dans P14602_attrs.txt. On essaiera aussi de fournir plusieurs solutions. On devra trouver http://pfam.xfam.org/family/PF00011.

Solution :  

 

5. Compréhension de la transformation vide

Expliquer ce que fait la transformation vide sur les fichiers serv00.xml, serv01.xml... serv05.xml de la série 1 d'exercices, puis pour les fichiers pers01.xml, pers02.xml... pers04.xml de la série 1 d'exercices et enfin pour les fichiers fasta01.xml à fasta05.xml.

Solution :  

 

6. Comptages avec XSL (1)

Dans films2.xml, combien y a-t-il de films ? Et d'artistes ? Et de metteurs en scène ?

On écrira une transformation XSL qui affichera ces résultats en mode texte et qu'on exécutera avec xmlstarlet.

Solution :  

 

7. Transformations entre éléments et attributs

Ecrire la transformation s2vers3.xsl qui transforme serv02.xml en serv03.xml, c'est-à-dire qui transforme les éléments en attributs. Ecrire ensuite la transformation inverse s3vers2.xsl qui transforme serv03.xml en serv02.xml, c'est-à-dire qui transforme les attributs en éléments.

Solution :  

 

8. Ajouts et modifications d'éléments ou d'attributs

Ecrire des transformations ajouteAge qui calculent et ajoutent l'age aux personnes dont on connait la date de naissance. On ajoutera un élément age lorsque la ddn est un élément, un attribut age si la ddn est un attribut. Effectuez ensuite les transformations inverses, à savoir mettre un attribut quand on a un élément et réciproquement.

Effectuez des transformations similaires pour ajouter la longueur d'une séquence Fasta pour les fichiers bioinformatiques.

Nous avions vu dans la série 2 d'exercices qu'un attribut tout numérique ne pouvait pas servir d'ID et donc d'IDREF non plus. Ecrire une transformation ajouteArt qui modifie les attributs id et idref des éléments MES (metteurs en scène) et ARTISTES de films2.xml par l'ajout de "art". Ainsi au lieu de <MES idref="3"></MES> et <ARTISTE id="51">, on devra avoir : <MES idref="art3"></MES> et <ARTISTE id="art51">.

Solution :  

 

9. Comptages avec XSL (2)

On reprend ici l'exercice 6 avec les comptages de personnes dans les films en XSL. Dans films2.xml, combien y a-t-il de films ? Et d'artistes ? Et de metteurs en scène ?

On écrira une transformation XSL qui affichera ces résultats en mode texte et qu'on exécutera avec xmlstarlet. On affichera également la liste des seuls metteurs en scène avec nom et prénom, le nom étant écrit en majuscules.

Que faut-il modifier pour trier la liste des metteurs en scène par ordre alphabétique ?

Solution :  

 

10. Suppression de la mise en forme XHTML

Expliquez ce que font chacune des transformations suivantes et ce qu'on obtient si on les applique au fichier serv00.xml :

services01.xsl       services02.xsl       services03.xsl       services04.xsl       services05.xsl       

Ecrire une transformation nohtml.xsl qui ne garde que les contenus-textes de la partie <body> d'une page XHTML valide. On pourra utiliser page.html qui devra être transformé en page.txt.

Solution :  

 

11. Tris avec XSL

Afficher tous les films de films2.xml par ordre alphabétique dans un fichier texte.

Afficher tous les films et leur date de sortie de films2.xml dans une page XHTML "presque" valide. On triera par date de sortie décroissante et, en cas d'ex-aequo, par ordre alphabétique, comme par exemple pour l'année 1990.

Afficher tous les artistes de films2.xml qui ont joué dans au moins un film dans une page XHTML valide au sens 1.0 strict avec un encodage ISO-8859-1. On fournira leur nom, leur prénom, le nombre de films où ils ont joué et on triera par nom puis par prénom en cas d'égalité. Rappel : certains artistes sont des metteurs en scène qui ne jouent pas tous dans des films.

Solution :  

 

12. Fichiers inclus, sous-programmes et variables en XSL

Reprendre la transformation films_lst_3d.xsl : on mettra sdl, debutPage et finPage dans le fichier stdWeb.xsl. Le titre de la page, rapellé dans un <h1> en haut de page sera bien sûr passé en paramètre.

Ecrire une transformation XSL qui produit un tableau XHTML des films (en ignorant les roles et le résumé ; on mettra le titre en dernière colonne) et un tableau XHTML des artistes, avec une table des matières en haut de page, comme dans la page fa.html. Pour que ce soit plus facile à lire, on définira les fichiers tabFilms.xsl et tabArtistes.xsl. On modifiera stdWeb.xsl pour que la redite du titre en <h1> en haut de page soit facultative.

Attention : certains films n'ont pas de GENRE et certains artistes n'ont pas de ANNEENAISS.

Solution :  

 

13. Une transformation à peine plus complexe

On voudrait transférer films2.xml dans une base de données FA (Films et Artistes), sans les roles ni le résumé. On dispose des instructions MySql suivantes pour recréer les tables de la base (fichier fa.mysql) :


     # on suppose que la base "fa" a déjà été créée
     
     USE fa ;
     
     ###################################################################
     #
     # les films
     #
     ###################################################################
     
     DROP   TABLE IF EXISTS films ;
     
     CREATE TABLE films (
     
       idFilm INT(5)      NOT NULL ,
       annee  INT(4)      NOT NULL ,
       genre  VARCHAR(10) NOT NULL ,
       pays   VARCHAR(20) NOT NULL ,
       mes    INT(5)      NOT NULL ,
       titre  VARCHAR(80) NOT NULL ,
     
       PRIMARY KEY ( idFilm)
     
     ) ; # fin pour films
     
     ###################################################################
     #
     # les artistes
     #
     ###################################################################
     
     DROP   TABLE IF EXISTS artistes ;
     
     CREATE TABLE artistes (
     
       idArtiste   INT(5)      NOT NULL ,
       artnom      VARCHAR(30) NOT NULL ,
       artprenom   VARCHAR(30) NOT NULL ,
       anneenaiss  INT(4)      NOT NULL ,
     
       PRIMARY KEY ( idArtiste)
     
     ) ; # fin pour artistes
     
     # pour test :
     
     ## INSERT INTO films    (idFilm, annee, genre, pays, mes, titre)  VALUES (1,1958,"Drame","USA",3,"Vertigo") ;
     ## INSERT INTO artistes (idArtiste, artnom, artprenom,anneenaiss) VALUES (6,"Cameron","James",1954)         ;
     
     

Ecrire une transformation XSL qui remplit la base.

Attention  là encore au fait que certains films n'ont pas de GENRE et que certains artistes n'ont pas de ANNEENAISS.

Et pour finir, reprendre l'exercice qui produit les deux tableaux XHTML stricts (fa.html) et rajouter un lien vers le metteur en scène sous la date de parution. On générera des id pour chacun des metteurs en scène.

Solution :  

 

14. Questions diverses

Quelles sont les différences entre XSLT 1 et XSLT 2 ?

Solution :  

 

Archive des données, programmes et scripts.

 

Code-source php de cette page ; code javascript utilisé. Retour à la page principale du cours.

 

 

retour gH    Retour à la page principale de   (gH)