Des corrections, exemples pour les différents exercices sur les DTD, XPath, XSLT, SAX, etc.
 
Sommaire

Modélisation et documents XML

Éléments de correction pour les exercices de modélisation.

 

Les articles

 

Les brèves

 

Le championnat de football

 

Les acteurs de cinéma

 

Les films de cinéma

 

Les bandes dessinées de Florent

 

La CDthèque

 
Sommaire

Requêtes XPath

Éléments de correction pour les exercices sur XPath.

 

Les articles

  1. /
    
    ou pour l'élément racine :
    
    /child::*
    /*
    
  2. /descendant::node()
    //node()
    
    ou à partir de l'élément racine :
    
    /child::*/descendant::node()
    /*//node()
    
  3. /descendant::*/attribute::*
    //@*
    
  4. /descendant::text()
    //text()
    
  5. /descendant::processing-instruction()
    //processing-instruction()
    
  6. /descendant::processing-instruction('xml-stylesheet')
    //processing-instruction('xml-stylesheet')
    
  7. /descendant::p/child::text()
    //p/text()
    
  8. /descendant::p[child::important]
    //p[important]
    
  9. /descendant::référence[attribute::code='siteMarc']
    //référence[@code='siteMarc']
    
  10. /descendant::*/child::auteur[position()=2]
    //*/auteur[2]
    
    /descendant::auteur[count(preceding::auteur)=1]
    //auteur[count(preceding::auteur)=1]
    
    /descendant::auteur[(preceding::auteur) and not(preceding::auteur/preceding::auteur)]
    //auteur[(preceding::auteur) and not(preceding::auteur/preceding::auteur)]
    
 

Les acteurs de cinéma

  1. /child::liste_acteurs/child::acteur
    /liste_acteurs/acteur
    /descendant::acteur
    //acteur
    
  2. count(/child::liste_acteurs/child::acteur)
    count(/liste_acteurs/acteur)
    count(/descendant::acteur)
    count(//acteur)
    
  3. /descendant::comment()
    //comment()
    
  4. /descendant::comment()[position()=2]
    //comment()[2] NON !!!
    
  5. /descendant::acteur[position()=1]/node()[position()=1]
    //acteur[1]/node()[1]
    
  6. /descendant::acteur[position()=2]/node()[position()=1]
    //acteur[2]/node()[1]
    
  7. /descendant::acteur/*[position()=1 or position()=2]
    //acteur/*[position()<=2]
    
  8. /descendant::acteur/*[position()=last()]
    //acteur/*[last()]
    
  9. /descendant::acteur[attribute::id='clint']
    //acteur[@id='clint']
    
  10. /descendant::acteur[child::prenom/text()='Clint']
    //acteur[prenom='Clint']
    
  11. /descendant::acteur/child::biographie/child::p[last()=2]/parent::biographie/parent::acteur/child::nom/text()
    //acteur/biographie/p[last()=2]/../../nom/text()
    /descendant::acteur/child::biographie/child::p[last()=2]/ancestor::acteur/child::nom/text()
    
    /descendant::acteur/child::nom/child::text()[count(ancestor::acteur/child::biographie/child::p)=2]
    //acteur/nom/text()[count(../../biographie/p)=2]
    
 

Le championnat de football

  1. /descendant::JOURNEE[attribute::NUMERO < 8]      
    //JOURNEE[@NUMERO < 8]
    
    /descendant::JOURNEE[attribute::NUMERO=8]/preceding-sibling::JOURNEE 
    //JOURNEE[@NUMERO=8]/preceding-sibling::JOURNEE
    
  2. /descendant::JOURNEE[attribute::NUMERO=4]/child::RENCONTRE
    //JOURNEE[@NUMERO=4]/RENCONTRE
    
  3. /descendant::JOURNEE/child::RENCONTRE[position()=1]
    //JOURNEE/RENCONTRE[1]
    
  4. /descendant::JOURNEE[attribute::NUMERO=10]/child::RENCONTRE[attribute::DOMICILE='Bastia']/attribute::EXTERIEUR | /descendant::JOURNEE[attribute::NUMERO=10]/child::RENCONTRE[attribute::EXTERIEUR='Bastia']/attribute::DOMICILE
    
    //JOURNEE[@NUMERO=10]/RENCONTRE[@DOMICILE='Bastia']/@EXTERIEUR | //JOURNEE[@NUMERO=10]/RENCONTRE[@EXTERIEUR='Bastia']/@DOMICILE
    
  5. /descendant::RENCONTRE[attribute::DOMICILE='Bastia']/attribute::EXTERIEUR | /descendant::RENCONTRE[attribute::EXTERIEUR='Bastia']/attribute::DOMICILE
    //RENCONTRE[@DOMICILE='Bastia']/@EXTERIEUR | //RENCONTRE[@EXTERIEUR='Bastia']/@DOMICILE
    
  6. /descendant::RENCONTRE[attribute::SCORED='-']
    //RENCONTRE[@SCORED='-']
    
  7. /descendant::RENCONTRE[attribute::DOMICILE='Bastia' and attribute::SCORED!='-' and attribute::SCORED=attribute::SCOREE]
    //RENCONTRE[@DOMICILE='Bastia' and @SCORED!='-' and @SCORED=@SCOREE]
    
  8. count(/descendant::RENCONTRE[attribute::SCORED!='-' and attribute::SCORED=attribute::SCOREE])
    count(//RENCONTRE[@SCORED!='-' and @SCORED=@SCOREE])
    
    100.*count(/descendant::RENCONTRE[attribute::SCORED!='-' and attribute::SCORED=attribute::SCOREE]) div count(/descendant::RENCONTRE[attribute::SCORED!='-'])
    100*count(//RENCONTRE[@SCORED!='-' and @SCORED=@SCOREE]) div count(//RENCONTRE[@SCORED!='-'])
    
  9. count(/descendant::RENCONTRE[attribute::SCORED>attribute::SCOREE])
    count(//RENCONTRE[@SCORED>@SCOREE])
    
    100*count(/descendant::RENCONTRE[attribute::SCORED>attribute::SCOREE]) div count(/descendant::RENCONTRE[attribute::SCORED!='-'])
    100*count(//RENCONTRE[@SCORED>@SCOREE]) div count(//RENCONTRE[@SCORED!='-'])
    
  10. count(/descendant::RENCONTRE[attribute::SCORED<attribute::SCOREE])
    count(//RENCONTRE[@SCORED<@SCOREE])
    
    100*count(/descendant::RENCONTRE[attribute::SCORED<attribute::SCOREE]) div count(/descendant::RENCONTRE[attribute::SCORED!='-'])
    100*count(//RENCONTRE[@SCORED<@SCOREE]) div count(//RENCONTRE[@SCORED!='-'])
    
 

Les brèves

Correction fournie par Grégoire Laurence, merci à lui !

  1. //node()
    
  2. //*
    
  3. soit uniquement les href :

    //@href
    

    soit tous les attributs commencant par http :

    //@*[starts-with (.,'http')]
    
  4. count(//breve)
    
  5. //breve/titre/text()
    
  6. //breve[@theme="sport"]
    
  7. //breve[photo]
    
  8. //breve[starts-with(titre/text(),"D")]
    
  9. //breve[contains(texte/text(),"marathon")]
    
  10. //breve[@theme="actu"]/following::*
    
 

Les films

Correction fournie par Grégoire Laurence, merci à lui !

  1. count(//film)
    
  2. //comment()
    
  3. //film[2]//acteur
    
  4. //film[@lang="en"]/titre/text()
    
  5. //acteur[@id="lukemonfils"]/@personnage
    
  6. //film[annee/text()="1981"]/titre/text()
    
  7. count(//perso[@ref="indy"])
    
  8. //film[count(.//acteur)=0]
    
  9. //film[count(realisateur)>1]
    
  10. //film[contains(synopsis,"believe")]/titre/text()
    
 

Les TODO list

  1. //@*
    /attribute-or-self::node()/attribute::node()
    
  2. //comment()
    /descendant-or-self::comment()
    
  3. //text()
    /descendant-or-self::text()
    
  4. //*[@deadline][position()=2]/@deadline
    
  5. //item[1]
    
  6. //todo[.//@level='critic']/title/
    
  7. //todo[not (.//commentaires)]/title 
    
  8. .//@url
    
  9. count(//todo[2]/commentaires/par)
    
  10. //todo[@illustration='sapin.jpg']/title 
    
 

Les bandes dessinées

Correction fournie par Grégoire Laurence, merci à lui !

  1. count(//collection//bd)
    
  2. //bd[not(ancestor::serie)]
    
  3. //titreserie
    

    et si titreserie n'était pas propre aux séries :

    //serie/titreserie
    
  4. count(//serie[titreserie/text()="Lanfeust de Troy"]/bd)
    
  5. //@illustration
    
  6. //bd[illustrateur/@ref=//personne[nom="Larcenet" and prenom="Manu"]/@id]
    

    explication : d'abord on cherche l'identifiant de "Manu Larcenet" //personne[nom="Larcenet" and prenom="Manu"]/@id et ensuite on cherche les bd referençant cet illustrateur ;

    en plus simple :

    //bd[illustrateur/@ref="Larcenet"]
    
  7. //personne[prenom="Riad"]/@id
    
  8. //personne[nom="Larcenet" and prenom="Manu"]/preceding-sibling::*
    

    les autres personnes définies étant des frères de l'élément sélectionné ;

    ou :

    //personne[nom="Larcenet" and prenom="Manu"]/preceding::personne
    
  9. //bd[starts-with(titre,"L")]/sortie/text()
    
  10. //bd[contains(resume,"oiseau")]
    
  11. /descendant-or-self::bd[2]
    

    attention ! différent de //bd[2].

 
Sommaire

Transformations XSLT

Éléments de correction pour les exercices sur le langage XSLT.

 

Les brèves

 

Le championnat de football

 

Les acteurs de cinéma

 

Les films de cinéma

 

Les sujets abordés dans une formation

 

Transformation des TODO list

 

Les sujets abordés dans une formation (épisode 2, le retour)

 

Tourner les tables

  • la feuille XSLT provoquant le retournement des tables : voir, récupérer ;
 

Coloration syntaxique d'un fichier XML

 

Calcul de la fonction factorielle

 

Résolution des tours de Hanoï

 

Tester la conjecture de Syracuse

 
Sommaire

Python et SAX

Éléments de correction pour les exercices SAX en Python.

 

Le championnat de football

 

Les acteurs

 
Sommaire

Python et DOM

Éléments de correction pour les exercices DOM en Python.

 

Extraction de méta-données

Le programme Python/DOM : voir, récupérer.

 

Fonctions utiles

Le programme Python/DOM : voir, récupérer.

Voir aussi...