Merge branch 'master' of ssh://git.nguyen.vg/hacks/simpleWebSlides
[hacks/simpleWebSlides.git] / xpi / xpi_04.xhtml
diff --git a/xpi/xpi_04.xhtml b/xpi/xpi_04.xhtml
deleted file mode 100644 (file)
index b436582..0000000
+++ /dev/null
@@ -1,425 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
-          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
->
-<html xmlns="http://www.w3.org/1999/xhtml" >
-  <head>
-    <title>XSLT</title>
-
-    <meta http-equiv="Content-Type"
-          content="text/html; charset=utf-8" />
-    <meta name="copyright"
-          content="Copyright &#169; 2013 Kim Nguyễn" />
-
-    <!-- Load jQuery -->
-    <script src="../jquery-1.9.1.min.js" type="text/javascript" ></script>
-    <!-- Load the library -->
-    <script src="../simpleWebSlides.js" type="text/javascript" ></script>
-
-    <link rel="stylesheet" href="../simpleWebSlides.css" type="text/css"  media="all" />
-    <!-- Load a custom Theme, the class-element marks this style-sheet
-      a "theme" that can be swtiched dynamicaly -->
-    <link class="sws-theme" rel="stylesheet"  title="U-Psud style"  href="../themes/uPsud.css" type="text/css" />
-
-    <!-- Customize some templates and initialize -->
-    <style type="text/css">
-      .xml-tag { color: #00486c; }
-    </style>
-    <script type="text/javascript">
-      <![CDATA[
-      SWS.Config['sws-slide-change'] = SWS.Effects.slideChangeFadeOutIn;
-      SWS.Config['sws-object-deactivate'] =  SWS.Effects.objectDeactivateFadeOut;
-      SWS.Config['sws-object-activate'] = SWS.Effects.objectActivateFadeIn;
-
-      //Ensures that we load SWS at the very end, after MathJax has
-      //been initialized
-
-      $(window).load(function () {
-       $(".inline-xml").each(function(i, elem)
-      {
-      var jelem = $(elem);
-      var code = jelem.html();
-      code = code.replace ("<![CDATA" + "[", "").replace ("]" + "]>", "");
-      code = code.replace (/>/g, ">>>");
-      code = code.replace (/</g, "<span class='xml-tag'>&lt;");
-      code = code.replace (/>>>/g,"&gt;</span>");
-
-      jelem.html(code);
-      });
-  });
-
-      var checkSVG = function (o, i)
-      {
-            if (i >= 10 || SWS.Utils.isUndefined(o) || o == null) return;
-            var svg = o.getSVGDocument();
-            if (svg == null) {
-              setTimeout(function() { checkSVG(o, i+1); }, 200);
-            } else {
-         var alltext = $(svg).find("text");
-         alltext.css("font-family", "DIN");
-         alltext.css("font-size", "70%");
-
-            };
-      };
-      $(window).load(function() {
-      $("embed").ready(function() {
-         setTimeout(function() { 
-         $("embed").each(function(i, o) { checkSVG(this,0);   });
-}, 1000);
-        });
-     });
-      $(window).load(SWS.Presentation.init);
-
-       ]]>
-
-    </script>
-
-  </head>
-  <body>
-    <a href="xpi_03.xhtml" class="sws-previous"/>
-    <div class="sws-slide sws-cover sws-option-nofooter">
-      <h1>XML et Programmation Internet</h1>
-      <h1>Cours 4</h1>
-      <a href="mailto:kn@lri.fr">kn@lri.fr</a>
-    </div>
-    <h1>Namespaces</h1>
-    <div class="sws-slide">
-      <h1>Utilisation des <i>namespaces</i></h1>
-      <p><a>Problème</a> : comment mélanger au sein d'un même document des
-      balises venant de deux DTDs (ou schémas) <a>différentes</a>
-      ?<br/>Exemple : mettre du SVG (images vectorielles) dans
-      du XHTML (page web)</p>
-      <code style="font-size:80%;width:50%;float:left"><![CDATA[
-      <svg width="400" height="180">
-         <rect x="50"
-              y="20"
-              rx="20"
-              ry="20"
-              width="150" height="150"
-               style="fill:red;stroke:black;
-                      stroke-width:5;opacity:0.5" />
-      </svg> 
- ]]>
-      </code>
-      <code style="font-size:80%;width:50%;float:left"><![CDATA[
-      <html>
-       <head><title>Mon image</title></head>
-       <body>
-
-         <h1>Une image</h1>
-         <!-- contenu de l'image -->
-
-       </body>
-      </html>
- ]]>
-      </code>
-      <p>Comment spécifier que certains éléments doivent êtres
-      <a>interprétés</a> ? (par exemple par le navigateur web) et que
-      d'autres font parties des données ?</p>
-    </div>
-    <div class="sws-slide">
-      <h1>L'attribut <tt>xmlns</tt></h1>
-      <p>On peut utiliser un <a>attribut</a> spécial, <tt>xmlns</tt>
-      qui est autorisé dans <a>tous les documents XML</a>
-      sur <a>n'importe quel élément</a>. La valeur de ce dernier est
-      un lien identifiant la DTD et indique tous les descendants de
-      l'élément en question sont valides par rapport à la
-      DTD.<br/>Exemple:
-      </p>
-      <code style="font-size:80%;background:white;"><![CDATA[
-      <html ]]><s>xmlns="http://www.w3.org/1999/xhtml"</s><![CDATA[>
-       <head><title>Mon image</title></head>
-       <body>
-       <h1>Mon image</h1>
-           <svg width="400" height="180" ]]><s>xmlns="http://www.w3.org/2000/svg"</s><![CDATA[>
-             <rect x="50"
-                  y="20"
-                  rx="20"
-                  ry="20"
-                  width="150" height="150"
-                  style="fill:red;stroke:black;
-                         stroke-width:5;opacity:0.5" />
-          </svg>
-     </body>
-     </html>
- ]]>
-      </code>
-
-    </div>
-    <div class="sws-slide">
-      <h1>L'attribut <tt>xmlns</tt></h1>
-      <p>On peut aussi donner <a>un nom</a> à un namespace particulier
-      et réutiliser ce nom dans les balises:</p>
-      <code style="font-size:80%;background:white;"><![CDATA[
-      <html ]]><s>xmlns="http://www.w3.org/1999/xhtml"</s>
-            <a>xmlns:svg="http://www.w3.org/2000/svg"</a><![CDATA[>
-       <head><title>Mon image</title></head>
-       <body>
-       <h1>Mon image</h1>
-           <svg:svg width="400" height="180" 
-             <svg:rect x="50"
-                  y="20"
-                  rx="20"
-                  ry="20"
-                  width="150" height="150"
-                  style="fill:red;stroke:black;
-                         stroke-width:5;opacity:0.5" />
-          </svg:svg>
-     </body>
-     </html>]]> </code>
-<p style="background:white;">en utilisant l'attribut <tt>xmlns:toto="..."</tt> alors toutes la
-  balises de la forme <tt>&lt;toto:nombalise&gt;</tt> appartiennent au
-  namespace <tt>toto</tt>. Il ne faut pas oublier le namespace sur la
-  balise fermante !</p>
-    </div>
-    <div class="sws-slide">
-      <h1>Digression</h1>
-      <p>L'exemple précédent ressemble à ça :</p>
-      <div style="border: 1pt solid gray;margin: 10pt">
-       <h1 style="font-family:Serif;color:black;text-align:left">Mon image</h1>
-             <svg width="400" height="180" xmlns="http://www.w3.org/2000/svg">
-         <rect x="50"
-              y="20"
-              rx="20"
-              ry="20"
-              width="150" height="150"
-               style="fill:red;stroke:black;
-                      stroke-width:5;opacity:0.5" />
-      </svg> 
-      </div>
-    </div>
-    <h1>XSLT, principes</h1>
-    <div class="sws-slide">
-      <h1>XSLT</h1>
-      <p><a>eXtensible Stylesheet Language Transformations</a> : est
-       un langage de transformation de documents XML. Il permet
-       d'extraire (au moyen d'XPath) des nœuds d'un <a>document d'entrée</a>
-       et de les ré-organiser et de les copier dans un <a>document de
-       sortie</a>.
-       Le document de sortie est souvent du XML lui-même mais peut
-       être aussi du texte, du PDF, …
-      </p>
-      <ul>
-       <li>XSLT est standardisé par le W3C</li>
-       <li>Les programmes XSLT sont écrit eux-même en XML</li>
-       <li>Il existe plusieurs versions du standard (1.0, 2.0,
-       3.0). Ce cours fait juste une introduction aux fonctionalités
-       les plus simples (1.0)</li>
-      </ul>
-    </div>
-    <div class="sws-slide">
-      <h1>Un exemple simple</h1>
-      <p>On réutilise un document de recette de cuisine
-      du <a href="xpi_01.xhtml">cours 01</a>. La DTD est:</p>
-<code style="color:black;position:relative;left:10%;"><![CDATA[<!ELEMENT recette (title,ingredients,duree,etapes)>
-<!ATTLIST recette difficulte (facile|normal|difficile) #REQUIRED>
-<!ELEMENT title #PCDATA >
-<!ELEMENT ingredients (ingredient+) >
-<!ELEMENT duree #PCDATA >
-<!ELEMENT etapes (e*) >
-<!ELEMENT ingredient #PCDATA>
-<!ELEMENT e #PCDATA>
-<!ATTLIST e num CDATA>
-]]></code>
-    </div>
-    <div class="sws-slide">
-      <h1>Un exemple simple (suite)</h1>
-      <p>Un document valide par rapport à la DTD est le suivant</p>
-    <code style="color:black;font-size:80%;position:relative;left:10%;"><![CDATA[
-<!DOCTYPE recette SYSTEM "recette.dtd">
-<recette difficulte="facile">
-<title>Tiramisú</title>
-<ingredients>
-  <ingredient>mascarpone</ingredient>
-  <ingredient>oeufs</ingredient>
-  <ingredient>sucre</ingredient>
-  <ingredient>café</ingredient>
-  <ingredient>biscuits</ingredient>
-</ingredients>
-<duree>2h</duree>
-<etapes>
-  <e num="1">Séparer les blancs des jaunes</e>
-  <e num="2">…</e>
-  …
-</etapes>
-</recette>
-]]></code>  
-    </div>
-<div class="sws-slide">
-      <h1>Un exemple simple (suite)</h1>
-      <p>On va extraire des informations du document et en faire une
-      page web :</p>
-<code style="color:black;font-size:80%;position:relative;"><![CDATA[  <xsl:stylesheet version="1.0"
-   xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-   <xsl:template match="/">
-     <html>
-       <head>
-          <title>Ingrédients du ]]><u>&lt;xsl:value-of select="descendant::title" /&gt;</u><![CDATA[ </title>
-       </head>
-       <body>
-        <h1>Ingrédients du ]]><u>&lt;xsl:value-of select="descendant::title" /&gt;</u><![CDATA[ </h1>
-        <ul>
-          ]]><u>&lt;xsl:for-each select="descendant::ingredient"&gt;</u><![CDATA[
-            <li> ]]><u>&lt;xsl:value-of select="child::text()" /&gt;</u><![CDATA[ </li>
-          ]]><u>&lt;/xsl:for-each&gt;</u><![CDATA[
-        </ul>
-       </body>
-     </html>
-   </xsl:template>
-  </xsl:stylesheet>
-]]></code>
-</div>
-<div class="sws-slide">
-<h1>Comment exécuter un programme XSLT</h1>
-<ul>
-  <li>En utilisant un moteur XSLT comment le
-  programme <tt>xsltproc</tt> </li>
-  <li>En référençant la feuille de style et en ouvrant le document XML
-  avec Firefox :
-    <code>
-    <![CDATA[<!-- fichier recette.xml -->]]>
-    <u>&lt;?xml-stylesheet type="text/xsl" href="prog.xsl"?&gt;</u><![CDATA[
-    <recette difficulte="facile">
-       <title>Tiramisú</title>
-        <ingredients>
-        ...]]></code>
-  </li>
-  <li>En Java grace à la classe <tt>Transformer</tt> du package <tt>javax</tt></li>
-</ul>
-</div>
-<div class="sws-slide">
-<h1>Structure d'un programme XSLT</h1>
-<p>Un programme XSLT commence par la balise :<code><u><![CDATA[  <xsl:stylesheet version="1.0"
-   xmlns:xsl="http://www.w3.org/1999/XSL/Transform">]]></u></code>
-et fini par la balise : <code><u><![CDATA[  </xsl:stylesheet>]]></u></code>
-Le texte ainsi que les éléments qui ne sont pas dans
-   le <i>namespace</i> « <tt><a>xsl:</a></tt> » sont copiés à
-   l'identique dans la sortie.<br/>
-   Dans la balise principale <tt>&lt;xsl:stylesheet&gt;</tt> on trouve
-   un certain nombre de balises <u><tt>&lt;xsl:template match="…"
-   &gt;</tt></u>.<br/>
-   Les <i>templates</i> vont jouer le rôle de fonctions et vont être
-   appelées pour transformer des nœuds du document en nœuds de sortie.
-</p>
-</div>
-<h1>Les templates XSLT</h1>
-<div class="sws-slide">
-  <h1>Templates</h1>
-<p>Un template est délimité par une balise <u><tt>&lt;xsl:template match="…"
-   &gt;</tt></u> où le «&nbsp;…&nbsp;» est une expression XPath. Il peut y avoir
-   plusieurs templates dans un fichier XSLT. <br/>
-   Un template est appliqué à un ensemble de nœuds. Parmi cet
-   ensemble, tous les nœuds qui vérifient l'expression XPath de
-   l'attribut <tt>match</tt> sont passés en argument au template.<br/>
-   Initialement, tous les templates existants sont appliqués au nœud
-   fictif document.
-  </p>
-</div>
-<div class="sws-slide">
-  <h1>Retour sur l'exemple</h1>
-  <code style="color:black;font-size:80%;position:relative;"><![CDATA[  <xsl:stylesheet version="1.0"
-   xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-   <xsl:template match="/">
-     <html>
-       <head>
-          <title>Ingrédients du ]]><u>&lt;xsl:value-of select="descendant::title" /&gt;</u><![CDATA[ </title>
-       </head>
-       <body>
-        <h1>Ingrédients du ]]><u>&lt;xsl:value-of select="descendant::title" /&gt;</u><![CDATA[ </h1>
-        <ul>
-          ]]><u>&lt;xsl:for-each select="descendant::ingredient"&gt;</u><![CDATA[
-            <li> ]]><u>&lt;xsl:value-of select="child::text()" /&gt;</u><![CDATA[ </li>
-          ]]><u>&lt;/xsl:for-each&gt;</u><![CDATA[
-        </ul>
-       </body>
-     </html>
-   </xsl:template>
-  </xsl:stylesheet>
-]]></code>
-<ol><li>Initialement tous les templates (il n'y en a qu'un ici) sont
-    appliqués à la racine du document</li>
-<li>Pour chacun d'entre eux, l'expression XPath dans
-  le <tt>match</tt> est contrôlée. Si elle réussit, alors le template
-  est appliqué au nœud</li>
-</ol>
-</div>
-<div class="sws-slide">
-<h1>Deuxième exemple, 2 templates</h1>
-<p>
-  <code style="color:black;font-size:80%;position:relative;"><![CDATA[  <xsl:stylesheet version="1.0"
-   xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-   <xsl:template match="/">
-     <html>
-       <head>
-          <title>Ingrédients du ]]><u>&lt;xsl:value-of select="descendant::title" /&gt;</u><![CDATA[ </title>
-       </head>
-       <body>
-        <h1>Ingrédients du ]]><u>&lt;xsl:value-of select="descendant::title" /&gt;</u><![CDATA[ </h1>
-        <ul>
-          ]]><u>&lt;xsl:apply-templates select="descendant::ingredient" /&gt;</u><![CDATA[
-        </ul>
-       </body>
-     </html>
-   </xsl:template>
-   <xsl:template match="ingredient">
-     <li> ]]><u>&lt;xsl:value-of select="child::text()" /&gt;</u><![CDATA[ </li>
-   </xsl:template>
-  </xsl:stylesheet>]]></code></p>
-<ol style="background:white;"><li>On applique tous les templates à la racine. Le
-    template <tt>match="/"</tt> réussit, le
-    template <tt>match="ingredient"</tt> échoue.</li>
-<li>L'expression
-  <tt><![CDATA[<xsl:apply-templates select="…" />]]></tt>
-  réapplique <a>tous</a> les templates à tous les nœuds sélectionnés
-  par l'expression XPath.</li>
-</ol></div>
-<div class="sws-slide">
-<h1>Priorité des templates</h1>
-<p>Que se passe-t-il si deux templates peuvent s'appliquer à un même
-  élément&nbsp;? On applique les règles de priorité suivantes
-  (simplifiées) :
-</p>
-<ol>
-<li>Si le <tt>match</tt> d'un template contient un <tt>|</tt> entre
-  plusieurs chemins, la priorité la plus élevée de ces chemins est choisie
-</li>
-<li>si le <tt>match</tt> est de la forme : <tt>child::foo</tt>
-  ou <tt>attribute:foo</tt>, sa priorité est 0 </li>
-<li>si le <tt>match</tt> est de la forme : <tt>child::*</tt> ou
-  ou <tt>attribute:*</tt>, sa priorité est -0.25 </li>
-<li>si le <tt>match</tt> est de la form : <tt>child::text()</tt>
-  ou <tt>child::node()</tt> (idem avec <tt>attribute</tt>), sa
-  priorité est -0.5</li>
-<li>sinon (test complexe, par exemple <tt>foo[ count(child::bar) &lt;
-    4]</tt>), la priorité est 0.5</li>
-</ol>
-<p>Le template ayant la priorité la plus élevée est choisi. On peut
-  donner explicitement à un template une priorité avec
-  l'attribut <tt>priority="…"</tt><br/>Le moteur XSLT <s>lève une
-  erreur</s> d'exécution si deux templates ont exactement la même
-  priorité.</p>
-</div>
-<div class="sws-slide">
-<h1>Templates par défaut</h1>
-<p>Il existe 3 templates <a>par défaut</a> qui sont toujours
-  définis :</p>
-<code><![CDATA[  <xsl:template match="*|/">
-     <xsl:apply-templates/>
-  </xsl:template>
-
-  <xsl:template match="text()|@*">
-    <xsl:value-of select="."/>
-  </xsl:template>
-
-  <xsl:template match="processing-instruction()|comment()"/>
-]]>
-</code>
-<p>Ils ont des priorités inférieures aux templates présents dans le
- fichier donc ne sont appliqués
-  que si aucun templates ne fonctionne. Ils permettent de « descendre
-  dans l'arbre » (jusqu'aux textes), si aucun template ne s'applique à
-  la racine.
-</p>
-</div>
-  </body>
-</html>