Finished XPI 1
authorKim Nguyễn <kn@lri.fr>
Mon, 8 Sep 2014 22:11:18 +0000 (00:11 +0200)
committerKim Nguyễn <kn@lri.fr>
Mon, 8 Sep 2014 22:11:18 +0000 (00:11 +0200)
xpi/xpi_01.xhtml

index b8f7620..0ca0c8a 100644 (file)
@@ -4,7 +4,7 @@
 >
 <html xmlns="http://www.w3.org/1999/xhtml" >
   <head>
-    <title>Systèmes d'exploitation (1/2)</title>
+    <title>Introduction, UTF-8 et XML</title>
 
     <meta http-equiv="Content-Type"
           content="text/html; charset=utf-8" />
@@ -36,9 +36,9 @@
 
   </head>
   <body>
-
+    <a href="" class="sws-previous"/>
     <div class="sws-slide sws-cover sws-option-nofooter">
-      <h1>Programmation Internet</h1>
+      <h1>XML et Programmation Internet</h1>
       <h1>Cours 1</h1>
       <a href="mailto:kn@lri.fr">kn@lri.fr</a>
     </div>
     <div class="sws-slide" >
       <h1>Contenu du cours</h1>
       <ol >
-        <li > Comprendre les bases du Web
+        <li >XML pour la représentation des données
           <ul>
-            <li>Fonctionnement des ordinateusr Unix (cours 1 et 2) </li>
-            <li>Notions de réseau (cours 3 et 4) </li>
+            <li>Motivation, présentation d'XML sérialisé (cours 1) </li>
+            <li>Notions de schémas et de validation (cours 1) </li>
           </ul>
         </li>
-        <li class="sws-pause" style="padding:20pt 0;" > Programmer (pour) le Web
+        <li class="sws-pause" style="padding:20pt 0;" > Interroger des
+        documents XML
+        <ul>
+          <li>XPath (cours 2-3)</li>
+          <li>XSLT (cours 3-4)</li>
+        </ul>
+        </li>
+        <li class="sws-pause" style="padding:20pt 0;" > Programmer
+        avec XML
         <ul>
-          <li>Pages statiques (HTML &amp; CSS cours 5)</li>
-          <li>Pages dynamiques avec PHP (cours 6, 7 et 8)</li>
-          <li>Notions de sécurité des sites Web (cours 9)</li>
-          <li>Bonus (cours 10)</li>
+          <li>Les modèles DOM et SAX (cours 5)</li>
+          <li>XML Avancé: encodage relationnel (cours 6)</li>
         </ul>
         </li>
 
       <ul >
         <li > 1<sup>ère</sup> session
           <ul>
-            <li> Contrôle continu (50%):
-            <ul>
-              <li> Partiel (fin octobre/début novembre) 25% </li>
-              <li> 1 interro de TD (12,5 %) </li>
-              <li> 1 interro de TP (12,5 %) </li>
-            </ul>
+            <li> Contrôle continu (33%): Projet (soutenances fin janvier)
             </li>
-            <li> Examen (50%) </li>
+            <li> Examen écrit (67%) </li>
           </ul>
         </li>
         <li class="sws-pause" >
           2<sup>ème</sup> session (examen 100%)</li>
       </ul>
-      <p class="sws-pause" ><b>Rappel:</b>
-        <i>La défaillance fait obstacle au calcul de la moyenne
-          et implique l'ajournement.
-          La présence de l'étudiant étant obligatoire en TP [...], plus
-          d'une absence injustiée dans un enseignement peut entraîner
-          la défaillance de l'étudiant dans l'enseignement concerné
-        </i>
-      </p>
+      <p>Organisation:</p>
+      <ul>
+        <li> 8 séances de cours</li>
+       <li> 8 séances de TD (sur machine)</li>
+      </ul>
     </div>
-
+    <h1>Introduction</h1>
     <div class="sws-slide" >
-      <h1>Organisation</h1>
+      <h1>Qu'est-ce qu'XML ?</h1>
+      <p>XML (eXtensible Markup Language) est un standard de
+      représentation de données</p>
       <ul>
-        <li> 10 semaines de cours :
-          <ul>
-            <li> 16/9, 23/9, 30/9, 7/10, 14/10, 21/11 (cours
-            uniquement, ni TD, ni TP) </li>
-            <li> partiel entre le 22-25/11 </li>
-            <li> congés du 28-1/11</li>
-            <li> 4/11, 11/11 (TD/TP uniquement, pas de cours) 18/11, 25/11, 2/11, 9/11</li>
-          </ul>
-        </li>
-        <li> examen début Janvier</li>
-        <li> cours tous les lundi (15h30) </li>
-        <li> TD le mardi (3 groupes) </li>
-        <li> TP le mecrecredi/jeudi </li>
+       <li>Conçu pour être lisible par un humain, mais traîtable
+       simplement par les machines</li>
+       <li>Permet la représentation de données structurées</li>
+       <li>Est <em>normalisé</em> (par le W3C)</li>
+       <li>Typé (notion de schéma très fine)</li>
       </ul>
     </div>
     <div class="sws-slide" >
-      <h1> Plan </h1>
-      <ol >
-        <li> Systèmes d'exploitation
-          <ul class="empty">
-            <li class="hl">1.1 Principes des systèmes
-            d'exploitation</li>
-            <li>1.2 Système de gestion de fichiers</li>
-            <li>1.3 Système de gestion de processus</li>
-            </ul>
-        </li>
-      </ol>
-    </div>
-
-    <div class="sws-slide">
-      <h1> Système d'exploitation </h1>
-      <p>Quelques systèmes:</p>
+      <h1>En a-t-on besoin ?</h1>
+      <p>Quels sont les autres moyen de représenter les données ?</p>
+      <ul>
+       <li class="sws-pause">Table relationnelle</li>
+       <li class="sws-pause">Fichiers textes non structurés</li>
+       <li class="sws-pause">Format binaires <i>ad-hoc</i></li>
+      </ul>
+      <p class="sws-pause">Quels sont les désavantages des
+      représentations ci-dessus ?</p>
       <ul>
-        <li>Windows XP/NT/2003/7/8, …</li>
-        <li>Linux, FreeBSD, NetBSD, OpenBSD, …</li>
-        <li>MacOS X (basé sur une variante de FreeBSD), …</li>
-        <li>Unix, AIX, Solaris, HP-UX, …</li>
-        <li>Symbian OS (Nokia), iOS, Android, …</li>
+       <li class="sws-pause">Non échangeable (il faut faire
+       un <i>dump</i> de la base), contraintes simples</li>
+       <li class="sws-pause">Lisible, mais sans structure donc
+       difficilement utilisable par un programme, pas de schéma</li>
+       <li class="sws-pause">Lié à une utilisation particulière</li>
       </ul>
+
     </div>
 
+
     <div class="sws-slide">
-      <h1> Système d'exploitation </h1>
-      <p>Qu'est-ce qu'un système d'exploitation ?</p>
+      <h1>Historique</h1>
       <ul>
-        <li class="sws-pause" >c'est un <em>programme</em></li>
-        <li class="sws-pause" > qui <em>organise</em> l'accès aux <em>ressources</em> de la machine</li>
+       <li>Fin des années 1980: SGML adopté pour la publication de
+       média</li>
+       <li>Milieu des années 1990: un groupe de travail commence à
+       étudier l'utilisation de SGML pour le Web (qui débutait)
+         </li>
+       <li>1998 : XML 1.0 devient une recommandation du W3C</li>
       </ul>
-      <p class="sws-pause"> Quelles sont les ressources d'une machine?</p>
+    </div>
+    <div class="sws-slide">
+      <h1>Exemples d'utilisation</h1>
       <ul>
-        <li>Processeur (temps d'exécution)</li>
-        <li>Mémoire</li>
-        <li>Accès aux périphériques de stockage</li>
-        <li>Accès aux périphériques d'entrées/sorties</li>
-        <li>…</li>
+       <li>Page Web (XHTML)</li>
+       <li>Flux RSS (atom)</li>
+       <li>Voix sur IP/Messagerie instantanée (SMIL/Jabber)</li>
+       <li>Images vectorielles (SVG)</li>
+       <li>Données biologiques (séquençages)</li>
+       <li>Données financières et bancaires (XBRL)</li>
+       <li>Document bureautiques (OpenDocument Format, Office
+       2010)</li>
+       <li>Données linguistiques (TreeBank)</li>
       </ul>
+
     </div>
+    <h1>Le standard UTF-8</h1>
     <div class="sws-slide">
-      <h1> Système d'exploitation </h1>
-      <br/>
-      <div style="display:inline-block;vertical-align:middle;width:19%;text-align:center;">
-        Haut niveau<br/>
-      <span style="font-size:6cm;">↓</span><br/>
-      Bas niveau
-      </div>
-      <div style="display:inline-block; width:80%;vertical-align:middle;">
-        <ul class="empty">
-          <li><em>Applications</em>: navigateur Web, éditeur de
-          texte, anti-virus, jeu, compilateur, …</li>
-          <li style="margin-top:2em;" ><em><b>Système d'exploitation</b></em>:
-            <ul>
-              <li>Gestion des ressources</li>
-              <li>Interface avec le matériel (pilotes)</li>
-            </ul>
-          </li>
-          <li style="margin-top:2em;"><em>Matériel</em>: CPU, mémoire, périphériques, …</li>
-        </ul>
-      </div>
+      <h1>Représentation des textes</h1>
+      <p>Avant de représenter des documents complexes, on s'intéresse
+      aux textes (sans structure particulière)</p>
+      <p class="sws-pause">Problématique: comment représenter du texte
+      réaliste ?</p>
+      <p>Exemple de texte réaliste:<br/>
+       <tt>&quot;</tt> و عليكم السلام,Здравей,¡Hola!, 你好,Góðan daginn,…
+       <tt>&quot;</tt>
+      </p>
     </div>
-    <div class="sws-slide centerbox">
-      <h1>Le système Unix</h1>
-      <table class="desc">
-        <tr><td>1965</td> <td>MultICS: <i>Multiplexed Information and Computing Service</i> (Bell &amp; MIT) </td>
-        </tr>
-        <tr><td>1969</td> <td>Unix: 1<sup>ère</sup> version en
-        assembleur (AT&amp;T)</td>
-        </tr>
-        <tr><td style="width:4em;">1972-73</td><td> Unix réécrit en C</td></tr>
-        <tr><td>1976</td><td> Invention de TCP/IP</td></tr>
-        <tr><td>1977</td><td> <i>Berkeley Software Distribution</i>
-        (BSD)</td></tr>
-        <tr><td>1985</td><td>Unix System V</td></tr>
-        <tr><td>1988</td><td>Minix</td></tr>
-        <tr><td>1992</td><td>Linux</td></tr>
-      </table>
+    <div class="sws-slide">
+      <h1>Historiquement…</h1>
+      <p>Encodage 1 caractère = 1 octet (8 bits) : </p>
+      <ul><li>Encodage ASCII sur 7 bits (128 caractères)</li>
+       <li>ASCII étendu 8 bits (256 caractères, dont 128 de «
+       symboles »</li>
+       <li>Latin 1 : ASCII 7 bits + 128 caractères « ouest-européens »
+       (lettres accentuées française, italienne, …)</li>
+       <li>Latin 2 : ASCII 7 bits + 128 caractères « est-européens »
+       (Serbe, Hongrois, Croate, Tchèque, …)</li>
+       <li>Latin 3 : ASCII 7 bits + 128 caractères turques, maltais,
+       esperanto, </li>
+       <li>Latin 4 : ASCII 7 bits + 128 caractères islandais,
+       lituanien, …</li>
+       <li class="sws-pause"> … </li>
+       <li >Latin 15 : Latin 1 avec 4 caractères « inutiles »
+       remplacés (par exemple pour « € » à la place de « ¤ »)</li>
+      </ul>
     </div>
     <div class="sws-slide">
-      <div class="centerbox">
-      <h1>Unix : architecture</h1>
-      <table style="position:relative;left:5%;width:90%;" class="rounded">
-        <tr><td colspan="2" style="background:#ddf;width:100%;">
-            Applications
-            </td>
-        </tr>
-        <tr><td style="width:50%;background:#bbf;">
-            Interface utilisateur
-          </td>
-          <td style="width:50%;background:#bbf;">
-            Services
-          </td>
-        </tr>
-        <tr><td colspan="2" style="width:100%;background:#99f;color:white;">
-            Noyau (<i>kernel</i>)
-            </td>
-        </tr>
-        <tr><td style="border-style:none;"/> <td style="background:#88f;color:white;">
-            Micro-code
-          </td>
-        </tr>
-        <tr><td colspan="2" style="width:100%;background:#77f;color:white;">
-            Matériel
-            </td>
-        </tr>
-      </table>
-      </div>
+      <h1>… et pendant ce temps là, ailleur dans le monde </h1>
+      <p>Encodage multi-octets:</p>
+      <ul>
+       <li>Encodages spécifiques pour le Chinois (Big5, GB, …)</li>
+       <li>Encodages spécifiques pour le Japonais (Shift-JIS, EUC, …)</li>
+      </ul>
+      <p>Impossibilité de mettre plusieurs « alphabets » dans un même
+      texte</p>
+      <p>Chaque logiciel « interprétait » les séquences d'octet de
+      manière prédéfinie</p>
     </div>
     <div class="sws-slide">
-      <h1>Zoom sur le noyau</h1>
-      <table style="position:relative;left:5%;width:90%;" class="rounded">
-        <tr> <td style="background:#ddf;width:20%;">
-            Applications
-            </td>
-        </tr>
-        <tr><td style="width:20%; border-style:none;" />
-          <td style="width:80%;background:#ddf;">
-            Bibliothèques
-            (<code>libc</code>, <code>DirectX</code>, <code>OpenGL</code>, …)
-          </td>
-        </tr>
-      </table>
-      <hr style="border-bottom: dashed 1pt #696968; width: 90%;border-top:none;" />
-      <table  style="position:relative;left:5%;width:90%;"
-              class="rounded sws-pause">
-        <tr><td  style="width:100%;background:#f99;color:white;">
-            Appels systèmes
-            </td>
-        </tr>
-        <tr> <td style="background:#f66;color:white;">
-            Noyau <br/>
-            <div style="font-size:smaller">
-            pilotes de périphériques <span style="display:inline-block;width:4em"> </span>
-            ordonnanceur (gestion du temps CPU)<br/>
-            gestionnaire de mémoire <span style="display:inline-block;width:4em"> </span>
-            système de fichier<br/>
-            </div>
-          </td>
-        </tr>
-        <tr><td  style="width:100%;background:#f33;color:white;">
-            Matériel
-            </td>
-        </tr>
+      <h1>UTF-8</h1>
+      <p>Universal (Character Set) Transformation Format 8 bit</p>
+      <ul><li>Encodage à taille variable « universel » (contient tous
+      les alphabets connus)</li>
+       <li>Un organisme (ISO) donne un code à chaque symbole</li>
+       <li>Compatible avec ASCII 7 bits</li>
+      </ul>
+      <p>Encodage</p>
+      <table class="withborder" style="position:relative;left:8%;">
+       <tr ><td>Nombre d'octets</td><td>Octet 1</td><td>Octet
+       2</td><td>Octet 3</td><td>Octet 4</td><td>Octet 5</td><td>Octet 6</td></tr>
+       <tr ><td>1</td><td><tt>0xxxxxxx</tt></td><td></td><td></td><td></td><td></td><td></td></tr>
+
+       <tr ><td>2</td><td><tt>110xxxxxx</tt></td><td><tt>10xxxxxx</tt></td><td></td><td></td><td></td><td></td></tr>
+       <tr ><td>3</td><td><tt>1110xxxxx</tt></td><td><tt>10xxxxxx</tt></td><td><tt>10xxxxxx</tt></td><td></td><td></td><td></td></tr>
+       <tr ><td>4</td><td><tt>11110xxxx</tt></td><td><tt>10xxxxxx</tt></td><td><tt>10xxxxxx</tt></td><td><tt>10xxxxxx</tt></td><td></td><td></td></tr>
+
+       <tr ><td>5</td><td><tt>111110xxx</tt></td><td><tt>10xxxxxx</tt></td><td><tt>10xxxxxx</tt></td><td><tt>10xxxxxx</tt></td><td><tt>10xxxxxx</tt></td><td></td></tr>
+       <tr ><td>6</td><td><tt>1111110xx</tt></td><td><tt>10xxxxxx</tt></td><td><tt>10xxxxxx</tt></td><td><tt>10xxxxxx</tt></td><td><tt>10xxxxxx</tt></td><td><tt>10xxxxxx</tt></td></tr>
+
       </table>
     </div>
     <div class="sws-slide">
-      <h1>Le <i>Shell</i> Unix</h1>
+      <h1>Exemples</h1>
+      <p><tt style="font-size:200%">A</tt> &nbsp;&#10230;&nbsp; 65<sub>10</sub>
+      &nbsp;&#10230;&nbsp; 0100 1010<sub>2</sub> (représenté sur un
+      seul octet)</p>
+
+      <p><tt style="font-size:200%">ễ</tt> &nbsp;&#10230;&nbsp; 7877<sub>10</sub>
+      &nbsp;&#10230;&nbsp; 0001 1110 1100 0101<sub>2</sub> (représenté
+       3 octets) : <br/>
+       <s>1110</s><em>0001</em>&nbsp;<s>10</s><em>11 10
+       11</em>&nbsp;<s>10</s><em>00 0101</em>≡ 225 187 133
+</p>
+      <p><tt style="font-size:200%">&#x1f435;</tt>
+      &nbsp;&#10230;&nbsp; 128053<sub>10</sub> &nbsp;&#10230;&nbsp; …
+      ≡ 240 237 220 181</p>
+      <p>Avantages</p>
+      <ul><li>compatible ASCII 7 bits (d'anciens documents texte en
+      anglais sont toujours lisibles)</li>
+       <li>pas d'espace gaspillé (à l'inverse d'UTF-32 ou tous les
+       caractères font 32 bits)</li>
+      </ul>
+      <p>Inconvénients</p>
       <ul>
-        <li>Interface utilisateur <em>en mode texte</em><br/>
-        L'utilisateur écrit des commandes dont le résultat est
-          affiché à l'écran</li>
-        <li>Interface « historique » sous Unix</li>
-        <li>Expose à l'utilisateur certains concepts Unix
-        (pesmissions, propriétaires, processus, …)</li>
-        <li>(Utilisé dans la première partie du cours)</li>
+       <li>Caractères à taille variable: il faut parcourir le texte
+       pour trouver le n<sup>ème</sup> caractère</li>
+       <li>Les vieux logiciels doivent être adaptés</li>
       </ul>
     </div>
+    <h1>XML</h1>
     <div class="sws-slide">
-      <h1>Le <i>Shell</i> Unix</h1>
-      <p>Exemple de session <i>shell</i>:</p>
-      <div>
-        <code>
-          $ ls
-          <span style="color:blue">Documents   Downloads   Public    Person</span>
-          $ cd Documents
-          $ ls
-          <span style="color:blue">compte_rendu.txt</span>
-          $ mv compte_rendu.txt cr.txt
-          $ ls
-          <span style="color:blue">cr.txt</span>
-        </code>
+    <h1>Qu'est-ce qu'un document XML ? (1)</h1>
+    <ul>
+      <li>C'est un fichier texte, encodé par défaut en UTF-8</li>
+      <li>Le texte peut être <em>structuré</em> au moyen
+      de <em>balises</em></li>
+      <li>Une balise est de la forme <tt>&lt;foo&gt;</tt> (ouvrante)
+      ou <tt>&lt;/foo&gt;</tt> (fermante)</li>
+      <li>Les balises doivent être bien parenthésées</li>
+      <li>Il doit y avoir une racine « englobant » tout le contenu du
+      document (texte et autres balises). On appelle cette balise la
+      <em>racine</em></li>
+      <li>Les balises sont <em>sensibles à la casse</em></li>
+      <li><tt>&lt;foo/&gt;</tt> est un raccourcis pour <tt>&lt;foo&gt;</tt><tt>&lt;/foo&gt;</tt></li>
+    </ul>
+    <p>Exemple</p>
+    <code style="position:relative;left:10%;color:black;"><![CDATA[<exemple>
+   ceci est la racine <balise>on peut</balise> y mettre des
+   balises <level><level>imbriquées</level> </level> comme
+   on veut si
+   elles sont <FOO>bien</FOO> parenthésées
+</exemple>]]>
+    </code>
       </div>
-    </div>
+    <div class="sws-slide">
+    <h1>Qu'est-ce qu'un document XML ? (2)</h1>
+    <ul>
+      <li>On peut mettre des espaces et des commentaires en dehors de
+      la racine</li>
+      <li>Les commentaires sont délimités par <s><tt style="">&lt;!--</tt></s> et <s><tt>--&gt;</tt></s></li>
+      <li>On peut annoter les balises ouvrantes avec
+      des <em>attributs</em> de la forme <tt>att</tt>=<tt>&quot;v&quot;</tt> (on
+      peut aussi utiliser « &apos; » pour délimiter les chaînes)</li>
+      <li>Au sein d'un même élément (ou balise) on ne peut pas avoir
+      deux fois un attribut <em>avec le même nom</em></li>
+      <li>On dispose de <em>séquences d'échappement</em>: &amp;lt; pour &lt;,
+      &amp;gt; pour &gt;, &amp;apos; pour &apos;,  &amp;quot; pour
+      &quot;,  &amp;amp; pour &amp; et &amp;<tt>nnnn</tt>; pour un caractère
+      UTF-8 dont le code décimal est <tt>nnnn</tt>.</li>
+      </ul>
+    <p>Exemple</p>
+    <code style="position:relative;left:10%;color:black;">&lt;<![CDATA[-- commentaire en début de fichier-->
+<exemple id="1">
+     Un autre <balise id="2" type="texte">exemple</balise>
+</exemple>]]>
+    </code>
 
-    <div class="sws-slide" >
-      <h1> Plan </h1>
-      <ol >
-        <li> Systèmes d'exploitation
-          <ul class="empty">
-            <li >1.1 Principes des systèmes
-            d'exploitation</li>
-            <li class="hl">1.2 Système de gestion de fichiers</li>
-            <li>1.3 Système de gestion de processus</li>
-            </ul>
-        </li>
-      </ol>
+</div>
+    <div class="sws-slide">
+      <h1>Exemple complet (trouver toutes les erreurs)</h1>
+<code style="position:relative;left:10%;color:black;"><![CDATA[
+<exemple id="1">
+
+  On se donne cette fois un <FOO>exemple</Foo> complet, mais
+
+  <balise>incorrect. En effet, il y a
+
+    <note id="32" val='32'>plusieurs</note> erreurs dans
+
+    <note id="42" id="51">dans ce document</note>.
+
+    Il n'est pas simple de toutes les trouver
+
+</exemple>
+<exemple>En plus cet exemple est en deux parties</exemple>
+]]></code>
     </div>
     <div class="sws-slide">
-      <h1>Système de gestion de fichiers (<i>filesystem</i>)</h1>
+      <h1>Utilisations d'XML (1)</h1>
       <ul>
-        <li> <em>Organise</em> les données sur le support
-        physique </li>
-        <li>Protège contre les <em>corruptions de données</em> </li>
-        <li>Gestion optimale de l'espace disponible</li>
-        <li><em>Accès efficace</em> aux données</li>
-        <li><em>Abstraction</em> du support physique (DVD, mémoire
-        flash, disque réseau, …)</li>
-        <li>Enregistrement des <em>méta-données</em> (date de
-        création, propriétaire, taille, …)</li>
+       <li>Les noms de balise sont <em>libres</em>. La personne qui
+       conçoit le document choisit les balises</li>
+       <li>Un document XML est une manière de représenter
+       un <em>arbre</em> (l'élement racine est la racine de
+       l'arbre)</li>
+      </ul>
+      <p>Un bon exemple est XHTML (XML pour les pages Web)</p>
+      <ul>
+       <li>La structure des documents (titres, sections, paragraphes,
+       tableaux) est donnée par les balises
+       </li>
+       <li>Le rendu graphique ne fait pas partie de la structure du
+       document et est donné par un moyen annexe (feuille de style
+       CSS par exemple)</li>
+      </ul>
+      <p>Autre exemple: les flux RSS de mises à jour d'un blog</p>
+      <ul>
+       <li><a href="https://blog.wikimedia.org/feed/">Lien vers le
+       blog wikimedia</a></li>
+       <li>XML est un exellent format <em> d'échange </em></li>
       </ul>
     </div>
     <div class="sws-slide">
-      <h1>Le concept de <em>fichier</em></h1>
-      <p>
-        Un fichier est une <em>collection d'infromations
-        numériques</em> réunies sous un même <em>nom</em> et
-        enregistrée sur un support de stockage
-      </p>
+      <h1>Utilisation d'XML (2)</h1>
+      <ul>
+       <li>Le format texte est un mauvais format pour
+       l'interrogation</li>
+       <li>Il encode un arbre mais ne permet pas de le manipuler
+       directement</li>
+      </ul>
+      <p>En réalité, on ne manipule pratiquement jamais de XML tel que stocké
+      sur le disque </p>
       <ul>
-        <li>Manipulable comme une unité</li>
-        <li>Selon les systèmes, le <em>nom</em> a plus ou moins
-        d'importance</li>
-        <li>possède un type</li>
+       <li>On peut charger un document XML sous la forme d'un arbre
+       (Objet Java par exemple) dans lequel on peut naviguer</li>
+       <li>Certaines bases de données permettent de stocker des
+       fichiers XML dans des colones (comme un VARCHAR)</li>
       </ul>
+      <p>Une application moderne mélange BD relationnelle et XML (et
+      aussi d'autres choses si besoin: JSON, YAML, …)</p>
     </div>
     <div class="sws-slide">
-      <h1>Le concept de <em>fichier</em></h1>
-      <p>Ne pas confondre:</p>
+      <h1>Étude de cas: journal en ligne</h1>
+      <p>On se pose dans le cas du site internet d'un journal en
+      ligne</p>
       <ul>
-        <li>type du fichier: il influe sur le comportement du système
-        (fichier « normal », répertoire, lien (raccourcis), fichier
-        système, …). C'est une méta-donnée conservée par le système
-        de fichier</li>
-        <li>type du contenu: le type des <em>données</em> contenues
-        dans le fichier:
-          <ul>
-            <li>DOS puis Windows: l'extension (les 3 derniers
-            caractères après le « . ») détermine le type de contenu
-            </li>
-            <li>MacOS puis OS X/iOS: les premiers octets du fichier
-            déterminent son type
-            </li>
-            <li>Premiers octets ou extension, selon les interfaces
-            utilisées</li>
-          </ul>
-        </li>
+       <li>Le site a des utilisateurs enregistrés (ainsi qu'un accès
+       invité)</li>
+       <li>Le site propose des articles en lecture sur le site</li>
+       <li>Le site permet d'exporter des articles en PDF pour
+       impression</li>
+       <li>Le site permet la lecture sur smartphone/tablette</li>
       </ul>
     </div>
     <div class="sws-slide">
-      <h1>Les attributs d'un fichier</h1>
-      <table class="desc">
-        <tr>
-          <td><em>Nom</em></td> <td/>
-        </tr>
-        <tr>
-          <td><em>Propriétaire</em></td>
-          <td>utilisateur qui possède ce fichier</td>
-        </tr>
-        <tr>
-          <td><em>Groupe</em></td>
-          <td>groupe d'utilisateurs qui possède ce fichier</td>
-        </tr>
-        <tr>
-          <td><em>Emplacement</em></td>
-          <td>localisation du fichier sur le support physique</td>
-        </tr>
-        <tr>
-          <td><em>Taille</em></td>
-          <td>en octet (peut être la taille réelle ou la taille
-        occupée sur le support)</td>
-        </tr>
-        <tr>
-          <td><em>Permissions</em></td>
-          <td> « qui a quel droit » sur le fichier (lecture, écriture,
-          exécution, …)
-          </td>
-        </tr>
-        <tr>
-          <td><em>Type</em></td>
-          <td/>
-        </tr>
-        <tr>
-          <td><em>Dates</em></td>
-          <td>dernier accès, dernière modification, création, …</td>
-        </tr>
-      </table>
-    </div>
-<div class="sws-slide">
-<h1>Organisation logique des fichiers</h1>
-<p> Usuellement, les fichiers sont regroupés en <em>répertoires</em>. Les
-répertoires sont imbriqués les uns dans les autres de manière a former
-une <em>arborescence</em>.
-</p>
-<p>
-  <em>Sous Unix</em> il y a un répertoire racine, « <em>/</em> »
-(<i>slash</i>) qui contient toute l'arborescence du système.<br/>
-Chaque utilisateur possède aussi un répertoire personnel
-</p>
-</div>
-
-<div class="sws-slide">
-<h1>Noms de fichiers et chemins</h1>
-<p>
-Un chemin est une <em>liste de répertoire</em> à traverser pour
-atteindre un fichier ou répertoire donné.
-Sous Unix, le séparateur de chemin est le « <em>/</em> » <br/>
-<em>Les chemins absolus </em> commencent par un <code>/</code> et
-           dénotent des fichiers à partir de la racine. Exemple:
-           <code>
-             /home/kim/Documents/ProgInternet/cours01.pdf
-           </code>
-<br/>
-<em>Les chemins relatifs</em> dénotent des fichiers à partir du
-  répertoire courant. Exemple:<br/>
-<code>
-           Documents/ProgInternet/cours01.pdf
+      <h1>Une solution possible</h1>
+      <ul><li>On stocke les articles comme des fichiers XML avec une
+      syntaxe particulière:
+<code style="font-size:80%;position:relative;left:10%;color:black;"><![CDATA[<article>
+  <category>Science</category>
+  <title>A new planet discovered</title>
+  <date>2014/09/09</date>
+  <authors>
+    <name><first>Jonh</first><last>Doe</last></name>
+    <name><first>Someone</first><last>Else</last></name>
+  </authors>
+  <content>
+    <bold>A new plange</bold> has been discovered …
+  </content>
+</article>]]>
 </code>
-si on se trouve dans le répertoire <code>/home/kim</code>
-<br/>
-<em>Les noms spéciaux</em>: « . » dénote le répertoire
-    courant,
-  « .. » le répertoire parent, « ~ » le répertoire de
-  l'utilisateur et « ~<code>toto</code> » le répertoire de l'utilisateur
-    <code>toto</code>
-</p>
-</div>
-
-<div class="sws-slide">
-  <h1>Utilisation du <i>Shell</i></h1>
-  <p>
-    Le <em>shell</em> affiche un <em>invite de commande</em>
-    (<i>prompt</i>). Exemple:<br/>
-    <code>kim@machine $ <span class="sws-pause" /></code><br/><br/>
-    <span>On peut alors saisir une commande:</span><br/><br/>
-    <code>   kim@machine $ ls *.txt<span class="sws-pause"/></code><br/><br/>
-    <span>Le shell affiche la <em>sortie</em> de la commande:</span><br/><br/>
-    <code>   fichier1.txt   fichier2.txt</code><br/><br/>
-    <span>Certains caractères doivent être précédés d'un « \ » (échappés):</span><br/><br/>
-    <code>   kim@machine $ ls mon\ fichier\#1.txt</code>
-  </p>
-</div>
-<div class="sws-slide">
-<h1>La ligne de commande</h1>
-<p>
-  Une ligne de commande a la forme:<br/>
-  <code>prog item1 item2 item3 item4 … </code>
-</p>
-  <ol>
-  <li class="sws-pause"> Si <tt>prog</tt> est un chemin il doit
-    dénoter <em>un fichier exécutable </em>
-  </li>
-  <li class="sws-pause"> Si <tt>prog</tt> est un simple nom, il doit dénoter un fichier
-    exécutable se trouvant dans un des <em>répertoires prédéfinis</em>
-    (<tt>/bin</tt>, <tt>/usr/bin</tt>, …)
-  </li>
-  <li class="sws-pause"> Pour chaque <tt>item<sub>i</sub></tt> (séparés par un ou plusieurs espaces
-    non échappés) le <i>shell</i> fait une <em>expansion de nom</em>
-  </li>
-  <li class="sws-pause"> La liste de toutes les chaînes de caractères expansées est
-    passée comme argument au programme <tt>prog</tt>
-  </li>
-  </ol>
-</div>
-<div class="sws-slide">
-<h1>Expansion des noms<br/>Expressions régulières glob</h1>
-<p>
-  Certains caractères sont <em>interprétés</em> de manière spéciale par le
-  <i>shell</i>. Ces caractères sont « expansés » selon des
-  règles. Si la forme <em>expansée</em> correspond a un ou plusieurs fichiers
-  existants, alors leurs noms sont placés sur la ligne de commande. Sinon
-  la chaîne de caractère de départ garde sa valeur textuelle.
-</p>
-</div>
-<div class="sws-slide">
-  <h1>Expressions régulières glob</h1>
-  <p>Règles d'expansion:
-  <tt><em>*</em></tt> n'importe quelle chaîne<br/>
-   <tt><em>?</em></tt> n'importe quel caractère
-   <tt><em>[ab12…]</em></tt> un caractère dans la liste <br/>
-   <tt><em>[^ab12…]</em></tt> un caractère absent de liste<br/>
-   <tt><em>[a-z]</em></tt> un caractère dans l'intervalle<br/>
-   <tt><em>[^a-z]</em></tt> un caractère absent de l'intervalle<br/>
-   <tt><em>{m<sub>1</sub>, m<sub>2</sub>}</em></tt>
-  motif <tt>m<sub>1</sub></tt> ou <tt>m<sub>2</sub></tt> <br/>
-  <tt><em>?(m<sub>1</sub>|…|m<sub>n</sub>)</em></tt>
-  <span style="display:inline-block;width:2em" />
-  <tt><em>@(m<sub>1</sub>|…|m<sub>n</sub>)</em></tt>
-  <span style="display:inline-block;width:2em" />
-  <tt><em>*(m<sub>1</sub>|…|m<sub>n</sub>)</em></tt>
-  <span style="display:inline-block;width:2em" />
-  <tt><em>+(m<sub>1</sub>|…|m<sub>n</sub>)</em></tt><br/>
-  <i>k</i> motifs parmi <tt>m<sub>i</sub></tt> <br/>
-  <tt><em>?</em></tt>: <tt>0 ≤ <i>k</i> ≤ 1</tt>
-  <span style="display:inline-block;width:2em" />
-  <tt><em>@</em></tt>: <tt><i>k</i> = 1</tt>
-  <span style="display:inline-block;width:2em" />
-  <tt><em>*</em></tt>: <tt><i>k</i> ≥ 0</tt>
-  <span style="display:inline-block;width:2em" />
-  <tt><em>+</em></tt>: <tt><i>k</i> ≥ 1</tt>
-  <br/>
-  <tt><em>!(m<sub>1</sub>|…|m<sub>n</sub>)</em></tt>:
-  ni <tt>m<sub>1</sub></tt>, …, ni <tt>m<sub>n</sub></tt>
-</p>
-</div>
-<div class="sws-slide">
-<h1>Expressions régulières glob<br/>Exemples</h1>
-<p><tt><em>ls  !(*[aeiouy]?)</em></tt> <span class="sws-pause">
-  La chaine « <tt>!(*[aeiouy]?)</tt> » est remplacée par la liste de tous
-  les fichiers dont l'avant dernière lettre du nom n'est pas une
-  voyelle. S'il n'y a pas de tel fichier, la chaîne
-  « <tt>!(*[aeiouy]?)</tt> » est passée à la commande <tt>ls</tt>.</span><br/><br/>
-  <span>
-  <tt><em>ls [0-9]*</em></tt> affiche la liste des fichiers commençant par un
-  chiffre<br/><br/>
-  <tt><em>ls +(abc)</em></tt> affiche la liste des fichiers dont le nom est une
-  répétition de «&nbsp;abc&nbsp;».
-</span>
-</p>
-</div>
-<div class="sws-slide">
-<h1>Commandes shell de base</h1>
-<ul class="empty">
-<li><em>cd </em><i>chemin</i>: <i>chemin</i> devient le
-  répertoire courant. Si absent, utilise le répertoire personnel
-</li>
-<li><em>ls</em> <i>chemin<sub>1</sub></i> … <i>chemin<sub>n</sub></i>:
-  affiche le nom des <i>n</i> fichiers. Si <i>n=0</i> affiche le contenu du
-  répertoire courant. Avec l'option <tt><em>-l</em></tt> affiche la liste
-  détaillée.
-</li>
-<li><em>cp</em> <i>chemin<sub>1</sub></i>  <i>chemin<sub>2</sub></i>:
-copie de fichier
-</li>
-<li><em>mv</em> <i>chemin<sub>1</sub></i>  <i>chemin<sub>2</sub></i>:
-  déplacement
-  de fichier (et renommage)
-</li>
-<li><em>rm</em> <i>chemin<sub>1</sub></i> … <i>chemin<sub>n</sub></i>:
-  supprime les fichiers (définitif)
-</li>
+       </li>
+<li>Une <em>BD relationelle</em> stocke les données dynamiques (utilisateurs, …)</li>
+<li>Un <em>programme</em> (Java ou PHP) applique une transformation (XSLT) pour
+  transformer les articles XML en pages XHTML</li>
+<li>Le programme utilise la BD pour  personaliser l'affichage</li>
+<li style="background:white;">Le programme applique une autre transformation pour transformer
+  les articles en PDF plutot que XHTML</li>
+<li style="background:white;">Le programme transforme l'article en un
+  XML RSS pour affichage dans un lecteur de blog</li>
 </ul>
-</div>
-<div class="sws-slide">
-<h1>Droits et propriétés des fichiers</h1>
-<p>
-Sous Unix un utilisateur est identifié par son <em>login</em> (ou nom
-d'utilisateur). Chaque utilisateur est dans  un <em>groupe
-  principal</em>.<br/>
-Chaque fichier appartient à un utilisateur et à un groupe.<br/>
-Chaque fichier possède 3 permissions pour son propriétaire, son groupe
-et tous les autres. Les permissions sont lecture, écriture, exécution
-(plus d'autres non abordées dans ce cours).<br/>
-<table >
-  <tr><th style="width:20%">Permission</th> <th  style="width:40%">fichier</th> <th style="width:40%">répertoire</th> </tr>
-  <tr><td><em>lecture</em> (r)</td> <td>lire le contenu du
-  fichier</td>
-    <td >lister le contenu du répertoire</td></tr>
-  
-  <tr><td style="vertical-align:top;"><em>écriture</em> (w)</td> <td style="vertical-align:top;">écrire dans le fichier</td>
-    <td style="vertical-align:top;">supprimer/renommer/créer des
-    fichiers dans le répertoire</td></tr>
-  <tr><td style="vertical-align:top;"><em>exécution</em>
-  (x)</td> <td style="vertical-align:top;">exécuter le fichier
-  (si<br/>
-
-  c'est un programme)</td>
-    <td style="vertical-align:top;">rentrer dans le répertoire
-  </td></tr>
-</table>
-<code>$ ls -l
-drwxr-x---  9 kim prof 4096 Sep  7 21:31 Documents</code>
-</p>
-</div>
-<div class="sws-slide">
-<h1>La commande <em>chmod</em></h1>
-<code>
-   chmod <i>permissions</i> <i>chemin<sub>1</sub></i> … <i>chemin<sub>n</sub></i>
-</code>
-<p> modifie les permissions des fichiers <i>1</i> à <i>n</i>. La chaîne
-<i><tt>permissions</tt></i> est soit une suite de modifications de
-permissions <em>symbolique</em> soit l'ensemble des permissions données
-de manière <em>numérique</em>: <br/>
-<code>
-    chmod 755 fichier.txt
-    chmod u-w,a+x,g=w fichier.txt
-</code>
-</p>
-</div>
-<div class="sws-slide">
-<h1>Permissions numériques</h1>
-<p>
-On groupe les <em>bits</em> de permissions par trois puis on convertit
-en décimal:<br/>
-<table style="width:100%;text-align:center;" class="btable">
-<tr> <th colspan="3" style="width:33%"> Utilisateur </th>
-  <th colspan="3" style="width:33%">
-    Groupe</th>
-  <th colspan="3" style="width:33%">Autres</th>
-</tr>
-<tr>
-  <td>r</td>   <td>w</td>    <td>x</td>   <td>r</td>   <td>w</td>    <td>x</td>   <td>r</td>   <td>w</td>    <td>x</td> 
-</tr>
-<tr>
-  <td>1</td>   <td>1</td>    <td>0</td>   <td>1</td>   <td>0</td>    <td>0</td>   <td>0</td>   <td>0</td>    <td>0</td> 
-</tr>
-<tr>
-<td colspan="3"> 6 </td> <td colspan="3">
-    4</td><td colspan="3">0</td>
-</tr>
-</table>
-Le fichier est lisible et modifiable mais pas exécutable par son
-propriétaire, lisible pour le groupe. Les autres ne peuvent ni le lire
-ni le modifier.</p>
-</div>
-<div class="sws-slide">
-<h1>Permissions symboliques</h1>
-<code>
-       cible modifieur permission
-</code>
-<ul class="empty">
-  <li> <em>cible</em> : u (utilisateur), g (groupe), o (others), a
-  (all)
-  </li>
-
-  <li> <em>modifieur</em> : + (autorise), - (interdit), = (laisse
-  inchangé)
-  </li>
-
-  <li><em>permission</em> : r (lecture), w (écriture), x (exécution)</li>
+    </div>
+    <h1>Validation de documents</h1>
+    <div class="sws-slide">
+      <h1>Schéma d'un document</h1>
+      <p>Comme tout le monde peut définir son propre format XML, on
+      veut pouvoir être sûr que des <em>données en entrées</em> d'un
+      programme ont un certain
+      format (par exemple, c'est du XHTML valide, sans balise inconnue
+      des navigateurs)
+      </p>
+      <p>Il existe plusieurs manières de contraindre les balises d'un
+      document XML. On s'intéresse dans le cours à la plus simple.
+      </p>
+    </div>
+    <div class="sws-slide">
+      <h1>DTD</h1>
+      <p>Document Type Definitions. Permet de définir le contenu d'un
+      document par des expressions régulières</p>
+      <p>Syntaxe particulière qui n'est pas du XML</p>
+      <p>Permet de définir:</p>
+      <ul><li>les <em>balises autorisées dans un document</em></li>
+       <li>le contenu des balises au moyen d'expressions
+       régulières</li>
+       <li>les <em>attributs d'un élément</em></li>
+       <li>le type des <em>valeurs </em> que peut prendre un
+       attribut</li>
+      </ul>
+    </div>
+    <div class="sws-slide">
+      <h1>Syntaxe des DTD</h1>
+      <p>Un fichier contenant une suite de directives de la forme suivantes:</p>
+      <ul><li><tt>&lt;!ELEMENT <em>nom_elem</em> <em>regexp_elem</em>&gt;</tt>
+      dit qu'un élement de nom <tt><em>nom_elem</em></tt> contient
+      des éléments décrits par l'expression
+      régulière <tt><em>regexp_elem</em></tt></li>
+      <li><tt>&lt;!ATTLIST <em>nom_elem</em> <em>nom_att</em> <em>type_att</em> <em>val_att</em>&gt;</tt><br/>
+signifie que l'élément (balise) <tt><em>nom_elem</em></tt>
+       a un attribut <em>nom_att</em>, dont le type
+       est <tt><em>type_att</em></tt> et la valeur
+       est <tt><em>val_att</em></tt></li>
+       <li>Les <em>expressions régulières</em> sont formées
+       de <tt>*</tt>, <tt>+</tt>,<tt>?</tt>, mise en séquence
+       (<tt>,</tt>), <tt>EMPTY</tt> (contenu vide), <tt>ANY</tt>
+       (n'importe quel contenu), <tt>#PCDATA</tt> (du texte)</li>
+       <li>Les <em>types d'attributs</em> sont <tt>ID</tt> (attribut unique
+       dans tous le document ≡ clé primaire), <tt>IDREF</tt> (fait
+       référence à un ID unique ≡ clé étrangère), <tt>CDATA</tt>(du
+       texte simple), <tt>v1|v2|…|vn</tt> (une liste de valeurs fixées)
+       </li>
+       <li>Les <em>valeurs d'attributs</em> sont: <tt>v</tt> (une valeur par
+       défaut si l'attribut est absent), <tt>#REQUIRED</tt>
+       (l'attribut est obligatoire), <tt>#IMPLIED</tt> (l'attribut
+       est optionnel), <tt>#FIXED v</tt> (valeur constante v)</li>
 </ul>
-<p>
-Exemple:<br/>
-<code>   chmod u+rw,u-x,g+r,g-wx,o-rwx fichier.txt </code>
-</p>
-</div>
+
+    </div>
+    <div class="sws-slide">
+      <h1>Exemple de DTD</h1>
+<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>
+<p>Question: quel est la taille minimale d'un document valide ?</p>
+    </div>
+    <div class="sws-slide">
+      <h1>Utilisation d'une DTD (1)</h1>
+      <p>Il suffit de référencer la DTD dans un élément
+      spécial <br/><tt>&lt;!DOCTYPE racine SYSTEM "fichier.dtd" &gt;</tt><br/> avant la racine du
+      document</p>
+<code style="color:black;position:relative;left:10%;"><![CDATA[
+<!DOCTYPE recette SYSTEM "recette.dtd">
+<recette difficulte="facile">
+<title>Tiramisú</title>
+<ingredients>
+  <ingredient>mascarpone</ingredient>
+  <ingredient>oeufs</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>Utilisation d'une DTD (2)</h1>
+      <ul>
+       <li>Les bibliothèques permettant de charger des fichiers XML
+       vérifient qu'il est bien formé (parenthésages, attributs, …)
+       </li>
+       <li>Elles peuvent aussi <em>valider</em> le document par
+       rapport à une DTD</li>
+       <li>Si le fichier est invalide, elles lèvent une erreur</li>
+       <li>C'est une forme de vérification de contraintes
+       d'intégrité</li>
+      </ul>
+    </div>
   </body>
 </html>