.Merge branch 'master' of ssh://git.nguyen.vg/hacks/simpleWebSlides
[hacks/simpleWebSlides.git] / xpi / xpi_02.xhtml
diff --git a/xpi/xpi_02.xhtml b/xpi/xpi_02.xhtml
deleted file mode 100644 (file)
index ce4fa3d..0000000
+++ /dev/null
@@ -1,386 +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>XPath</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_01.xhtml" class="sws-previous"/>
-    <div class="sws-slide sws-cover sws-option-nofooter">
-      <h1>XML et Programmation Internet</h1>
-      <h1>Cours 2</h1>
-      <a href="mailto:kn@lri.fr">kn@lri.fr</a>
-    </div>
-
-    <h1>Modèle d'arbre</h1>
-<div class="sws-slide">
-
-<h1>XML vu comme un arbre (1/2)</h1>
-<ul>
-<li>Tout ce qui apparait dans le document correspond à un nœud de
-  l'arbre (texte, balises, commentaires, blanc, …)</li>
-<li>Il existe en plus, un nœud fictif se trouvant au dessus de
-  l'élément racine, le <a>nœud document</a></li>
-<li>Un couple balise ouvrante/balise fermante correspond à <a>un seul
-    nœud</a>
-<li>Les principaux types de nœuds sont: élément, attribut, texte,
-  commentaire, document</li>
-</li>
-</ul>
-
-</div>
-    <div class="sws-slide">
-      <h1>XML vu comme un arbre (2/2)</h1>
-      <p>Un document XML peut être vu comme un arbre:</p>
-      <code class="inline-xml" style="font-size:80%;width:50%;position:relative;float:left;"><![CDATA[<bibliography>
-
-  <book>
-    <title>Foundations of Databases</title>
-    <author>Abiteboul</author>
-    <author>Hull</author>
-    <author>Vianu</author>
-    <publisher>Addison Wesley</publisher>
-    <year>1995</year>
-  </book>
-
-  <book>
-    <title>The Lord of the Rings</title>
-    <author>J. R. R. Tolkien</author>
-    <publisher>Houghton Mifflin</publisher>
-    <year>2001</year>
-  </book>
-
-</bibliography>]]></code>
-      <embed src="tree.svg" style="width: 10cm; height: 13cm;" />
-    </div>
-<div class="sws-slide">
-  <h1>Sérialisation d'un arbre sous forme de document</h1>
-  <p class="sws-pause">Étant donné un arbre, comment peut ont produire
-  le document XML correspondant ?</p>
-  <code>       //pseudo-code
-      void print(Node n)
-      {
-         if (n is text or comment) { output_text(n) }
-         else {
-                output_text ("&lt;" + tag(n) + "&gt;");
-                for k in children(n)
-                    print(k);
-                output_text ("&lt;/" + tag(n) + "&gt;");
-         }
- </code>
- <ul style="background:white;">
-   <li>On effectue un parcours en profondeur d'abord </li>
-   <li>Si le nœud courant est une feuille, on l'affiche</li>
-   <li>Sinon on affiche la balise ouvrante, puis récursivement tous
-   les fils, puis la balise fermante</li>
- </ul>
-</div>
-<div class="sws-slide">
-<h1>Ordre du document, parcours préfixe</h1>
-<p>On appelle <a>ordre du document</a> un ordre <a>total</a> sur les
-  nœuds d'un document qui correspond à leur ordre dans un fichier
-  sérialisé. Il correspond aussi à la numérotation lors du parcours
-  préfixe</p>
-<ol style="float:left; width:50%">
-<li>#document</li>
-<li>bibliography</li>
-<li>book</li>
-<li>title</li>
-<li>"Foundations of Databases"</li>
-<li>author</li>
-<li>"Abiteboul"</li>
-<li>author</li>
-<li>"Hull"</li>
-<li>author</li>
-<li>"Vianu"</li>
-</ol>
-      <embed src="tree.svg" style="width: 10cm; height: 13cm;" />
-
-</div>
-<div class="sws-slide">
-<h1>Construction d'un arbre à partir d'un fichier XML ?</h1>
-<p class="sws-slide">Pour simplifier on suppose un fichier sans texte, uniquement avec
-  des balises ouvrantes/fermantes</p>
-<code>
- type Node = { label : string; children : List&lt;Node&gt; }
- Stack&lt;Node&gt; stack;
- stack.push (new Node("#document"), []));
- while (true) {
-
-  tag = read ();
-  if end_of_file () break;
-  if tag is opening {
-               parent = stack.peek();
-               node = new Node(tag, []);
-               parent.addChild(node);
-               stack.push(node);
-  }
-  if tag is closing {
-      stack.pop();
-  }
- }
-</code>
-<p class="sws-pause">En pratique, on utilise des bibliothèques toutes faites pour
-  lire/écrire des fichiers!</p>
-</div>
-<h1>XPath, introduction</h1>
-<div class="sws-slide">
-<h1>Intérogation de documents XML</h1>
-<p>Les documents représentant des données (semi-) structurées, on
-  souhaite en extraire de l'information</p>
-<p>On va pouvoir écrire des requêtes sur des <a>critères scalaires</a>
-  (
-«&nbsp;renvoyer tous les livres publiés après 2000&nbsp;»), mais aussi sur des
-  critères de <a>structure</a> («&nbsp;renvoyer tous les éléments qui ont
-  un fils <tt>author</tt>&nbsp;»)</p>
-</div>
-<div class="sws-slide">
-<h1>XPath</h1>
-<p>XPath est un langage de <a>selection de nœud</a> dans un document
-  XML. Il ne permet <a>que</a> de sélectionner des nœuds, pas d'en
-  construire de nouveaux. C'est un langage restreint qui ne contient
-  pas de fonctions, variables, … On peut le voir comme un équivalent
-  du <tt>SELECT</tt> de SQL</p>
-</div>
-
-<div class="sws-slide">
-<h1>XPath (exemple)</h1>
-<p>Sélectionner tous les titres du document (de manière compliquée)</p>
-<code>    <span style="color:#00f">/</span>descendant::<s>author</s>/parent::<a>book</a>/child::<span style="color:#880088">title</span></code>
-<embed src="tree.svg" style="position:relative;left:20%;width: 10cm; height: 13cm;"/>
-<script type="text/javascript">
-var color = function (o,e, c) {
-   $(o).find("*[class='" + e + "']").css("fill", c);
-}
-SWS.Presentation.registerCallback(0, function (canvas) {
-  var svg = canvas.find("embed")[0].getSVGDocument();
-  $(svg).find("text").css({ "font-family":"DIN", "font-size":"70%"});
-  color(svg, "author", "#ff0000");
-  color(svg, "document", "#0000ff");
-  color(svg, "book", "#92b938");
-  color(svg, "title", "#880088");
-});
-</script>
-</div>
-<div class="sws-slide">
-<h1>XPath : syntaxe</h1>
-<p>La syntaxe d'une requête XPath est:</p>
-<code>       /axe<sub>1</sub>::test<sub>1</sub>[ pred<sub>1</sub> ]/ … /axe<sub>n</sub>::test<sub>n</sub>[ pred<sub>n</sub> ]</code>
-<ul>
-<li><a>axe</a>
-  : <tt>self</tt>, <tt>child</tt>, <tt>descendant</tt>, <tt>parent</tt>,
-  …
-</li>
-<li><a>test</a> : <tt>node()</tt>, <tt>text()</tt>, <tt>*</tt>, ou un
-  nom d'élément </li>
-<li> <a>pred(icat)</a> : chemin XPath, expression arithmétique,
-  comparaison, …
-</li>
-<p>exemple:</p>
-<code> /descendant::book[ child::year > 2000] / child::title </code>
-</ul>
-
-</div>
-<div class="sws-slide">
-<h1>XPath : sémantique</h1>
-<p>Étant donné la requête: </p>
-<code>       /axe<sub>1</sub>::test<sub>1</sub>[ pred<sub>1</sub> ]/ … /axe<sub>n</sub>::test<sub>n</sub>[ pred<sub>n</sub> ]</code>
-<ol>
-  <li>le <a>nœud contexte</a> au nœud <a>document</a></li>
-  <li>on sélectionne l'ensemble A<sub>1</sub> <a>tous les nœuds</a> qui sont dans
-  l'<tt>axe<sub>1</sub></tt> par rapport au nœud contexte</li>
-  <li>on sélectionne l'ensemble T<sub>1</sub> des nœud de
-  A<sub>1</sub> qui vérifient le test <tt>test<sub>1</sub></tt></li>
-  <li>on sélectionne l'ensemble P<sub>1</sub> des nœud de
-  T<sub>1</sub> qui vérifient <tt>pred<sub>1</sub></tt></li>
-  <li>On réapplique le pas 2 sur <tt>P<sub>1</sub></tt></li> 
-  <li> … </li>
-</ol>
-</div>
-<div class="sws-slide">
-<h1>XPath : sémantique (exemple)</h1>
-<div style="width:50%;float:left;">
-<code> <span style="color:#00f">/</span>descendant::<s>author</s>/parent::<a>book</a>/child::<span style="color:#880088">title</span></code>
-<ol><li >On séléctionne le nœud document</li>
-<li >On séléctionne tous les descendants</li>
-<li>On filtre en ne gardant que les nœuds <s>author</s>
-  (T<sub>1</sub> ≡ P<sub>1</sub>)</li>
-<li>Sur chacun des <s>author</s> on prend le parent (on n'obtient que
-  2 parents car on garde des ensembles de noeuds)</li>
-<li>On filtre les parents pour ne garder que ceux qui
-  sont <a>book</a></li>
-<li>On sélectionne tous les fils de chacun des <a>book</a></li>
-<li>On ne garde que les fils qui ont le
-  tag <span style="color:#880088">title</span></li>
-</ol>
-</div>
-<embed src="tree.svg" style="width: 10cm; height: 13cm;"/>
-<script type="text/javascript">
-SWS.Presentation.registerCallback(0, function (canvas) {
-  var svg = canvas.find("embed")[0].getSVGDocument();
-  $(svg).find("text").css({ "font-family":"DIN", "font-size":"70%"});
-  color(svg, "author", "#ff0000");
-  color(svg, "document", "#0000ff");
-  color(svg, "book", "#92b938");
-  color(svg, "title", "#880088");
-});
-</script>
-</div>
-<div class="sws-slide">
-<h1>XPath : axes</h1>
-<p>Le standard XPath définit un grand nombre d'axes</p>
-<ul>
-<li><a>self</a> : on reste sur le nœud courant</li>
-<li><a>child</a> : tous les fils du nœud courant</li>
-<li><a>parent</a> : le parent du nœud courant. Seul le nœud document
-  n'a pas de parent</li>
-<li><a>descendant</a> : les fils, les fils des fils, etc. du nœud courant</li>
-<li><a>ancestor</a> : le parent, et le parent du parent, etc. du nœud
-  courant</li>
-<li> <a>descendant-or-self</a>, <a>ancestor-or-seld</a> : comme les
-  précédents mais inclus le nœud courant</li>
-<li><a>following-sibling</a>: le frères se trouvant après</li>
-<li><a>preceding-sibling</a>: les frères se trouvant avant</li>
-<li><a>following, preceding, attributes </a> : usage avancé</li>
-</ul>
-</div>
-<div class="sws-slide">
-<h1>XPath : les tests</h1>
-<p>On peut sélectionner des nœuds selon les critères suivants</p>
-<ul>
-  <li> <a>node()</a> : n'importe quel nœud</li>
-  <li> <a>text()</a> : un nœud texte (<tt>"The Lord of the
-  Rings"</tt>)</li>
-  <li> <a>*</a> : n'importe quel élément
-  (<tt>author</tt>, <tt>title</tt>, …)</li>
-  <li> <a><i>nom_d_element</i></a> tous les éléments ayant ce nom</li>
-</ul>
-</div>
-<div class="sws-slide">
-<h1>XPath : prédicats (syntaxe)</h1>
-<code>
-      p ::=   p or p
-         |    p and p
-         |    not (p)
-         |    count(…), contains(…), position(), …
-         |    chemin XPath
-         |    e<sub>1</sub> op e<sub>2</sub>
-</code>
-<p><tt>e<sub>1</sub></tt> et <tt>e<sub>2</sub></tt> sont des
-  expressions arithmétiques, <tt>op</tt> peut être <tt>&lt;</tt>, <tt>&gt;</tt>, =, !=,
-  +, -, *, /, mod, …</p>
-</div>
-<div class="sws-slide">
-<h1>XPath : prédicats (sémantique)</h1>
-<p>On évalue le prédicat et on converti son résultat en valeur de
-  vérité. Si la valeur vaut vrai, on garde le nœud courant, si elle
-  vaut faux, on ne le garde pas
-</p>
-<p>XPath connait <a>4 types de données</a> pour les prédicats : </p>
-<ul>
-<li>Les booléens, valeur de vérité : vrai ou faux</li>
-<li>Les nombres (flottants), valeur de vérité compliquée… </li>
-<li>Les chaînes de caractères, chaîne vide = faux, sinon vrai</li>
-<li>Les ensembles de nœuds, ensemble vide = faux, sinon vrai </li>
-</ul>
-
-</div>
-<div class="sws-slide">
-<h1>XPath : prédicats (exemples)</h1>
-
-<ul><li> <tt>/descendant::book [ child::title ]</tt> : sélectionne chaque
-    élément book pour lequel l'ensemble des fils de nom title n'est
-    pas vide </li>
-<li> <tt>/descendant::book [ count(child::author) &gt; 2 ]</tt> : séléctionne
-  chaque book qui a plus de deux fils author</li>
-<li> <tt>/descendant::book [ contains(child::title, "Ring") ]</tt></li>
-<li> <code>/descendant::book [ count(child::author) &gt; 2
-                    or contains(child::author, "Tolk") 
-                  ]/child::title</code></li>
-</ul>
-</div>
-<div class="sws-slide">
-<h1>Caractéristiques d'XPath</h1>
-<ul>
-  <li>XPath est un langage standardisé par le W3C</li>
-  <li>Assez verbeux</li>
-  <li>Langage de requêtes <a>monadique</a> (on ne peut renvoyer que
-  des ensembles de nœuds. Par exemple il est impossible de renvoyer
-  des ensembles de paires auteur/titre de livre)</li>
-  <li>Il est assez compliqué à implémenter efficacement</li>
-</ul>
-</div>
-  </body>
-</html>