<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
  "/usr/share/xml/docbook/schema/dtd/4.4/docbookx.dtd">
<article>
  <articleinfo>
    <title>TD-7 : XPath et XSLT</title>
    <author>
      <firstname>Benoît Valiron</firstname>
      <surname>Jean-Baptiste Faddoul</surname>
    </author>
  </articleinfo>


  <sect1>
  <title>XPath</title>
  <subtitle>(Voir le document 1 feuille jointe)</subtitle>
    <para>
      Dans le document XML, donnez des expressions XPath déterminant
      <orderedlist>
        <listitem>
          <para>
            les éléments acteur ;
          </para>
        </listitem>
        <listitem>
          <para>
            le nombre d'acteur décrit dans le document XML ;
          </para>
        </listitem>
        <listitem>
          <para>
            tous les noeuds "film"
          </para>
        </listitem>
        <listitem>
          <para>
            la liste des films nommés dans la biographie de Hilary Swant
          </para>
        </listitem>
        <listitem>
          <para>
            le premier noeud fils du premier noeud acteur ;
          </para>
        </listitem>
        <listitem>
          <para>
            le premier noeud fils du deuxième noeud acteur ;
          </para>
        </listitem>
        <listitem>
          <para>
            les deux premiers éléments fils de chaque acteur ;
          </para>
        </listitem>
        <listitem>
          <para>
            le dernier élément fils de chaque acteur ;
          </para>
        </listitem>
        <listitem>
          <para>
            l'acteur dont l'identifiant est clint ;
          </para>
        </listitem>
        <listitem>
          <para>
            l'acteur dont le prénom est Clint ;
          </para>
        </listitem>
        <listitem>
          <para>
            les noms des acteurs dont la biographie contient
            exactement deux paragraphes ;
          </para>
        </listitem>
      </orderedlist>
    </para>
  </sect1>

  <sect1>
    <title>XPath, encore</title>
    <subtitle>(Voir le document 2 feuille jointe)</subtitle>
    <para>
      Dans le document XML, donnez des expressions XPath déterminant
    <orderedlist>
      <listitem>
        <para>
          le nombre de films disponibles ;
        </para>
      </listitem>
      <listitem>
        <para>
          les acteurs du deuxième film ;
        </para>
      </listitem>
      <listitem>
        <para>
          les titres des films dont la fiche est en anglais ;
        </para>
      </listitem>
      <listitem>
        <para>
          le nom du personnage dont l'identifiant est lukemonfils ;
        </para>
      </listitem>
      <listitem>
        <para>
          le titre des films sortis en 1981 ;
        </para>
      </listitem>
      <listitem>
        <para>
          le nombre de références faites au personnage dont
          l'identifiant est indy ;
        </para>
      </listitem>
      <listitem>
        <para>
          les films sans acteur ;
        </para>
      </listitem>
      <listitem>
        <para>
          les films avec plusieurs réalisateurs ;
        </para>
      </listitem>
      <listitem>
        <para>
          les titres des films dont le synopsis contient le mot believe.
        </para>
      </listitem>
    </orderedlist>
    </para>
  </sect1>

    <sect1>
      <title>XSLT</title>
      <subtitle>(Document 2, encore)</subtitle>

    <para>
      Ecrire avec une feuille XSLT:
            <programlisting><![CDATA[Sylvester Stallone joue rocky
Talia Shire joue adrian
...

un pour chaque acteur.]]></programlisting>
    </para>
    
    <para>
      Que fait (et comment resoudre le probleme) :
      <programlisting><![CDATA[<stylesheet version="1.0" 
            xmlns="http://www.w3.org/1999/XSL/Transform">
  <template match="/films/film/casting/acteur">
      <value-of select="text()" /> joue <value-of select="@id" />
    <text>
</text>
  
  </template>

</stylesheet>]]></programlisting>
    </para>
    
    <para>
      Construire un document XML sous la forme suivante :
      <programlisting><![CDATA[<liste>
  <film>
    <acteur>NOM_ACTEUR</acteur>
    <titre>NOM_DU_FILM</titre>
  </film>
  <film>
    <acteur>NOM_ACTEUR</acteur>
    <titre>NOM_DU_FILM</titre>
  </film>
  ...
</liste>]]></programlisting>
    </para>

    <para>
      Que fait la feuille de style suivante ?
      <programlisting><![CDATA[<stylesheet version="1.0" 
            xmlns="http://www.w3.org/1999/XSL/Transform">
  <template match="/films/film">
  
  <for-each select="synopsis/*|synopsis/text()">
    <if test="@ref">
      <variable name="x" select="@ref" />
      <value-of select="../../casting/acteur[@id=$x]/@personnage" />
    </if>
    <value-of select="." />
    
  </for-each>
  
  </template>
</stylesheet>]]></programlisting>
    </para>

  </sect1>


</article>

