\documentclass{beamer}

\usepackage[french]{babel}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{color}

\usetheme[secheader]{Boadilla}

\newsavebox{\fmbox}
\newenvironment{minidoc}
{\begin{center}\begin{lrbox}{\fmbox}\begin{minipage}{10cm}\flushleft\ttfamily}{\end{minipage}\end{lrbox}\fbox{\usebox{\fmbox}}\end{center}}

\newenvironment{bloc}{\begin{center}\begin{minipage}{10cm}\flushleft\ttfamily}{\end{minipage}\end{center}\vspace{0.6cm}}


\newcommand{\coul}[1]{\textcolor{red}{#1}}
\newcommand{\coulo}[1]{\textcolor{orange}{#1}}
\newcommand{\link}[1]{\textcolor{blue}{\texttt{#1}}}


\AtBeginSection[]
{
  \begin{frame}<beamer>
    \frametitle{Plan}
    \tableofcontents[currentsection]
  \end{frame}
}

\title{XML - eXtensible Markup Language}
\subtitle{Présentation générale}
\author{Julien Barnier}
\institute{}
\date{Février 2005}



\begin{document}

\begin{frame}
  \titlepage
\end{frame}

\section*{Plan}

\begin{frame}
  \frametitle{Plan}
  \tableofcontents
\end{frame}


\section{Historique}

\begin{frame}
  \frametitle{Historique de XML}
  \begin{itemize}
    \item <1-> Histoire liée au développement de l'Internet et de
      l'échange de fichiers.
    \item <2-> Réflexion entamée en 1996 par le W3C.
    \item <3-> Spécification publiée en 1998.
    \item <4-> \textit{Objectif :} structurer l'information pour permettre son
      traitement par un ordinateur.
  \end{itemize}
\end{frame}


\section{Structurer l'information}


\begin{frame}
  \frametitle{Structurer l'information}
  Exemple de document :
  \pause
  \begin{minidoc}
    Supermarché Lastar\\
    3 rue de la Libération, Givors\\
    le 01/02/2005 à 18h17\\
    
    \begin{tabular}{lr}
      & \\
      3KG CHOUX DE BRUXELLES & 2,30\\
      STEAK D'AUTRUCHE & 8,78\\
      & \\
      TOTAL EUROS :& 11,08\\
      TOTAL FRF :& 72,68\\
    \end{tabular}
  \end{minidoc}
\end{frame}

\begin{frame}
  \frametitle{Structurer l'information}
  \begin{itemize}
  \item <1-> Document facile à lire et à comprendre pour un lecteur humain
    francophone.
  \item <2-> Difficile pour un programme informatique de repérer et de
    donner sens aux éléments d'information importants.
  \end{itemize}
\end{frame}

\begin{frame}
  \frametitle{Structurer l'information} 
  C'est la ponctuation et la
  mise en forme du document qui permettent de donner du sens à
  l'information qu'il contient~:
  \pause
  \begin{minidoc}
    Supermarché Lastar 3 rue de la Libération Givors le 01/02/2005 à
    18h17 BIENVENUE ! 3KG CHOUX DE BRUXELLES 2,30 STEAK D'AUTRUCHE
    8,78 TOTAL EUROS : 11,08 TOTAL FRANCS : 72,68
  \end{minidoc}
\end{frame}


\begin{frame}
  \frametitle{Structurer l'information}
  \begin{minidoc}

    \uncover<4->{\coulo{<supermarche>}}\\
    Supermarché \uncover<2->{\coulo{<nom>}}Lastar\uncover<2->{\coulo{</nom>}}\\
    \uncover<3->{\coulo{<adresse>}}3 rue de la Libération, Givors\uncover<3->{\coulo{</adresse>}}\\
    \uncover<4->{\coulo{</supermarche>}}\\

    \uncover<5->{\coulo{<commande>}}\\
    le \uncover<5->{\coulo{<date>}}01/02/2005\uncover<5->{\coulo{</date>}} à \uncover<5->{\coulo{<heure>}}18h17\uncover<5->{\coulo{</heure>}}\\
    \uncover<5->{\coulo{<articles>}}\\
    \uncover<5->{\coulo{<article>}}\uncover<5->{\coulo{<nom>}}3KG CHOUX DE BRUXELLES\uncover<5->{\coulo{</nom>}} \uncover<5->{\coulo{<prix>}}2,30\uncover<5->{\coulo{</prix>}}\uncover<5->{\coulo{</article>}}\\
    \uncover<5->{\coulo{<article>}}\uncover<5->{\coulo{<nom>}}STEAK D'AUTRUCHE\uncover<5->{\coulo{</nom>}} \uncover<5->{\coulo{<prix>}}8,78\uncover<5->{\coulo{</prix>}}\uncover<5->{\coulo{</article>}}\\
    \uncover<5->{\coulo{</articles>}}\\ 
    TOTAL EUROS : \uncover<5->{\coulo{<total devise="euro">}}11,08\uncover<5->{\coulo{</total>}}\\
    TOTAL FRF : \uncover<5->{\coulo{<total devise="franc">}}72,68\uncover<5->{\coulo{</total>}}\\
    \uncover<5->{\coulo{</commande>}}\\ 
  \end{minidoc}
\end{frame}


\section{Syntaxe de XML}

\subsection{Éléments du langage}

\begin{frame}
  \frametitle{Éléments du langage : balises}
  L'élément fondamental dans un document XML est la balise.
  \pause
  \begin{bloc}
    \coulo{<balise>}contenu\coulo{</balise>}
  \end{bloc}
  \pause
  Exemple :
  \begin{bloc}
    \coulo{<titre>}Les pratiques culturelles des classes populaires\coulo{</titre>}
  \end{bloc}
  \pause
  Forme courte :
  \begin{bloc}
    \coulo{<balise />}
  \end{bloc}
\end{frame}

\begin{frame}
  \frametitle{Éléments du langage : attributs}
  Les attributs servent à donner des informations supplémentaires sur
  une balise ou son contenu.
  \pause
  \begin{bloc}
    <balise \coulo{attribut="valeur"}>contenu</balise>
  \end{bloc}
  \pause
  Exemple :
  \begin{bloc}
    <total \coulo{devise="euros"}>11,08</total>\\
    <total \coulo{devise="FRF"}>72,68</total>
  \end{bloc}
\end{frame}

\begin{frame}[fragile]
  \frametitle{Éléments du langage : entités}
  Les entités servent à encoder des caractères spéciaux :\\
  \pause
\begin{verbatim}
      < = &lt;
      > = &gt;
      & = &amp;
      " = &quot;
      ' = &apos;
\end{verbatim}

\end{frame}

\begin{frame}
  \frametitle{Éléments du langage : autres éléments}
  \pause
  Commentaires :
  \begin{bloc}
    \coulo{<!-{-}} Texte de commentaire \coulo{-{-}>}
  \end{bloc}
  \pause
  Déclaration :
  \begin{bloc}
    \coulo{<?xml version="1.0" encoding="UTF-8" ?>}
  \end{bloc}
  \pause
  Instructions de traitement :
  \begin{bloc}
    \coulo{<?xml-stylesheet type="text/xsl" href="article.xsl" ?>}
  \end{bloc}
\end{frame}

\begin{frame}
  \frametitle{Exemple de fichier}
  \pause
  \begin{minidoc}
    <?xml version="1.0" encoding="UTF-8" ?>\\
    <?xml-stylesheet type="text/xsl" href="carnet.xsl" ?>\\
    <!-{-} Début du carnet d'adresse -{-}>\\
    <carnet>\\
    ~~<adresse>\\
    ~~~~<nom>CRUSOE</nom>\\
    ~~~~<prenom>Robinson</prenom>\\
    ~~~~<telephone type="fixe">aucun</telephone>\\
    ~~~~<telephone type="mobile">aucun</telephone>\\
    ~~</adresse>\\
    </carnet>\\
  \end{minidoc}
\end{frame}


\subsection{Règles du langage}

\begin{frame}
  \frametitle{Règles du langage}
  Le document doit contenir un unique élément racine.\\
  \vspace{0.6cm}
  \pause
  Contre-exemple :
  \begin{minidoc}
    <?xml version="1.0" encoding="UTF-8" ?>\\
    \coul{<adresse>}\\
    ~~<nom>Robinson CRUSOE</nom>\\
    ~~<telephone>Aucun</telephone>\\
    \coul{</adresse>}\\
    \coul{<adresse>}\\
    ~~<nom>Vendredi LAVIESAUVAGE</nom>\\
    ~~<telephone>Aucun</telephone>\\
    \coul{</adresse>}
  \end{minidoc}
\end{frame}


\begin{frame}
  \frametitle{Règles du langage}
  Les éléments ayant du contenu doivent avoir une balise ouvrante et
  une balise fermante.\\
  \vspace{0.6cm}
  \pause
  Contre-exemple :
  \begin{minidoc}
    <?xml version="1.0" encoding="UTF-8" ?>\\
    <adresse>\\
    ~~\coul{<nom>Robinson CRUSOE}\\
    ~~<telephone>Aucun</telephone>\\
    </adresse>\\
  \end{minidoc}
\end{frame}

\begin{frame}
  \frametitle{Règles du langage}
  Les attributs doivent avoir une valeur (éventuellement vide) et
  celle-ci doit-être entre guillemets simples ou doubles.\\
  \vspace{0.6cm}
  \pause
  Exemples :
  \begin{bloc}
    <total devise="euros">11,08</total>\\
    <total devise=\string'FRF\string'>72,68</total>\\
    <total devise="">8215,30</total>\\
  \end{bloc}
  \pause
  Contre-exemples :
  \begin{bloc}
    <total \coul{devise=euros}>11,08</total>\\
    <total \coul{devise=}>72,68</total>
  \end{bloc}
\end{frame}

\begin{frame}
  \frametitle{Règles du langage}
  Les balises ne doivent pas se recouvrir, \textit{i.e.} toute balise
  B ouverte après une balise A doit être fermée avant cette balise.\\
  \vspace{0.6cm}
  \pause
  Exemple :
  \begin{bloc}
    <A><B></B></A>
  \end{bloc}
  \pause
  Contre-exemple :
  \begin{bloc}
    \coul{
      <A><B></A></B>
    }
  \end{bloc}
\end{frame}

\begin{frame}
  \frametitle{Règles du langage}
  Les caractères de marquage (<, > et \&) ne doivent pas être utilisés
  dans le contenu des balises mais être remplacés par l'entité
  correspondante.\\
  \vspace{0.6cm}
  \pause
  Contre-exemples :
  \begin{bloc}
    <titre>Ma vie \coul{\&} mon oeuvre</titre>\\
    <condition> x \coul{>} y </condition>
  \end{bloc}
  \pause
  À remplacer par :
  \begin{bloc}
    <titre>Ma vie \&amp\string; mon oeuvre</titre>\\
    <condition> x \&gt\string; y </condition>
  \end{bloc}
\end{frame}

\begin{frame}
  \frametitle{Fichier XML bien formé}
  Un fichier XML qui respecte les règles du langage est dit
  \textit{bien formé}.\\
  Ceci signifie qu'il pourra être lu par tout analyseur XML
  (\textit{XML parser}) conforme aux standards.
\end{frame}


\section{XML comme métalangage}

\subsection{Comparaison avec HTML}

\begin{frame}
  \frametitle{Comparaison avec HTML}
  En apparence, un fichier XML semble assez proche d'un fichier
  (X)HTML :
  \pause
  \begin{minidoc}
    <html>\\
    ~~<head>\\
    ~~~~<title>Article de revue</title>\\
    ~~</head>\\
    ~~<body>\\
    ~~~~<h1>Titre de l'article</h1>\\
    ~~~~<p>Voici du texte qui peut être mis <i>en\\
    ~~~~~italique</i> ou même <b>en gras</b>.</p>\\
    ~~</body>\\
    </html>
  \end{minidoc}
\end{frame}

\begin{frame}
  \frametitle{Comparaison avec HTML}
  \begin{itemize}
  \item <1-> XML, contrairement à HTML, ne définit pas d'ensemble de balises.
  \item <2-> XML ne définit que des règles de syntaxe, pas le vocabulaire.
  \item <3-> XML est un \textit{métalangage}, il permet de décrire et
    définir d'autres langages, dont (X)HTML fait partie.
  \end{itemize}
\end{frame}

\subsection{Définition de document}

\begin{frame}
  \frametitle{Définition de document} Définir un langage ou un type de
  document à l'aide d'XML revient à définir un vocabulaire et des
  règles supplémentaires~: 
  \pause
  \begin{itemize}
  \item <2-> Ensemble d'éléments et d'attributs utilisables.
  \item <3-> Ensemble de valeurs prédéfinies pour certains de ces éléments.
  \item <4-> Séquence dans laquelle ces éléments peuvent apparaître.
  \item <5-> Autres règles : éléments obligatoires, répétabilité... 
  \end{itemize}
\end{frame}

\begin{frame}
   \frametitle{Définition de document}
   La définition de ce vocabulaire et de ces règles supplémentaires
   s'effectue à l'aide d'un \textit{langage de définition de
     document}~:
   \pause
   \begin{itemize}
   \item DTD (\textit{Document Type Definition})
   \item Schema XML
   \item Relax NG
   \item etc.
   \end{itemize}
\end{frame}

\begin{frame}
   \frametitle{Définition de document}
   L'association de XML et d'un langage de définition de document
   permet à XML de décrire un très grand nombre d'objets~:
   \pause
   \begin{itemize}
   \item Livres (\textsf{Docbook}, ...)
   \item Documents bureautiques (\textsf{OpenDocument}, ...)
   \item Données statistiques (\textsf{DDI})
   \item Formules mathématiques (\textsf{MathML})
   \item Images (\textsf{SVG})
   \item Articles de revue
   \item Etc., etc., etc.
   \end{itemize}
\end{frame}

\begin{frame}
  \frametitle{Notion de validité}
  \begin{itemize}
  \item <1-> Un document XML est dit \textit{valide} s'il est bien formé et
    conforme à une définition de type de document qui lui est associée.
  \item <2-> Un document XML \textit{bien formé} est manipulable par
    un analyseur XML, indépendamment du type de données qu'il contient.
  \item <3-> Un document XML \textit{valide} est manipulable dans un
    second temps par un logiciel dédié au type de données qu'il contient.
  \end{itemize}
\end{frame}


\section{Intérêt de XML}

\begin{frame}
  \frametitle{Lisibilité}
  \begin{itemize}
  \item <1-> Les fichiers XML sont des fichiers textes.
  \item <2-> Leur format est public.
  \item <3-> L'encodage des caractères est spécifié dans le fichier
    lui-même.
  \item <4-> Lisibles par les ordinateurs et les êtres humains.\\
  \end{itemize}
  \vspace{0.6cm}
  \onslide<5->{$\Rightarrow$ \textit{Garantie d'une conservation à long terme}}
\end{frame}

\begin{frame}
  \frametitle{Universalité}
  \begin{itemize}
  \item <1-> Possibilité de décrire une grande variété de données. 
  \item <2-> Possibilité de formaliser et de partager ces
    descriptions \textit{via} des langages de description de document.
  \item <3-> Format indépendant d'un sytème d'exploitation ou d'un
    logiciel particulier.\\
  \end{itemize}
  \vspace{0.6cm}
  \onslide<4->{$\Rightarrow$ \textit{Facilité d'échange en particulier via l'Internet}}
\end{frame}

\begin{frame}
  \frametitle{Dissociation forme/fond}
  Le balisage XML est un balisage \textit{sémantique} (contrairement au HTML).\\
  \pause
  \vspace{0.6cm}
  Il existe un langage particulier dédié à la mise en forme des informations 
  contenues dans un fichier XML~: le langage XSL (\textit{eXtensible Stylesheet 
    Language}).\\
  \pause
  \vspace{0.6cm}
  Celui-ci permet la transformation du XML en HTML, PDF, ou tout autre format.\\
  \pause \vspace{0.6cm} $\Rightarrow$ \textit{Facilité de mise à jour
    et de publication de l'information}
\end{frame}

\begin{frame}
  \frametitle{Conclusion}
  \pause
  \begin{itemize}
  \item XML est un langage simple et universel permettant de décrire
    une grande variété de données.
  \pause
  \item Ses spécifications ouvertes et l'utilisation de langages de
    définition de types de document facilitent l'échange d'informations
    et leur conservation à long terme.
  \pause
  \item La dissociation opérée entre le contenu et sa mise en forme
    facilite la publication des informations et leur mise à jour.
  \end{itemize}
\end{frame}

\begin{frame}
  \frametitle{Liens utiles}
  \begin{itemize}
  \item Spécifications officielles du langage :\\
    \link{http\string://www.w3.org/XML/}
  \item Ressources en anglais :\\
    \link{http\string://www.xml.com/}
  \item Ressources en français :\\
    \link{http\string://www.xmlfr.org/}
  \item Tutoriaux en anglais :\\
    \link{http\string://www.w3schools.com/xml/}
  \item Articles sur XML de Wikipedia :\\
    \link{http\string://fr.wikipedia.org/wiki/XML}\\
    \link{http\string://en.wikipedia.org/wiki/XML}\\
  \end{itemize}
\end{frame}


\end{document}
