\documentclass[twoside,a4paper,10pt]{report}
\usepackage[french]{babel} %% Use your own babel language
\usepackage[top=3cm,bottom=3cm,left=2.5cm,right=2.5cm]{geometry}
\usepackage[utf8]{inputenc}
\usepackage{pslatex}
\usepackage{hyperref}
\usepackage{graphicx}
\usepackage{tabularx}
\usepackage{supertabular}
\usepackage{pdflscape} %% Used for very big table
\usepackage{moreverb}
\usepackage{color}
\usepackage{listings}
\usepackage{lastpage}
\usepackage{fancyhdr}
\usepackage{ulem}
\usepackage{textcomp}
\usepackage{wasysym}
\usepackage{wrapfig} %%Usefull for image 
%%\usepackage{fguill} %%Use this package for guillemot[left|right] useless with babel set to french
\usepackage{eso-pic} %% Background
\pagestyle{fancy}%
\renewcommand{\headrulewidth}{0.1pt}
\renewcommand{\footrulewidth}{0pt}
\renewcommand{\chaptermark}[1]{%
	\markboth{\chaptername\ \thechapter.\ #1}{}}

\renewcommand{\sectionmark}[1]{%
	\markright{#1}{}}

\fancypagestyle{plain}{%
\fancyhf{}
\fancyfoot[R]{\thepage/\pageref{LastPage}}
\renewcommand{\headrulewidth}{0pt}
\renewcommand{\footrulewidth}{0pt}}
\fancyhf{}
\fancyhead[L]{\rightmark}
\fancyhead[R]{\leftmark}
\fancyfoot[R]{\thepage/\pageref{LastPage}}
\renewcommand{\headrulewidth}{0.1pt}
\renewcommand{\footrulewidth}{0pt}

\definecolor{codegray}{gray}{.95}
\lstset{language=C,
	numbers=left,
	tabsize=2,
	basicstyle=\scriptsize,
	stringstyle=\textrm,
	showstringspaces=false,
	frame=none,
	xleftmargin=3pt,
	backgroundcolor=\color{codegray}}

\newcommand{\settexitref}[2]{(\ref{#1}p\pageref{#1})}
\newcommand{\dokutitlelevelone}[1]{\chapter{#1}}
\newcommand{\dokutitleleveltwo}[1]{\section{#1}}
\newcommand{\dokutitleleveltree}[1]{\subsection{#1}}
\newcommand{\dokutitlelevelfour}[1]{\subsubsection{#1}}
\newcommand{\dokutitlelevelfive}[1]{\paragraph{#1}}
\newcommand{\dokufootnote}[1]{\footnote{#1}}
\newcommand{\dokufootmark}[1]{\footnotemark[#1]}
\newcommand{\dokubold}[1]{\textbf{#1}}
\newcommand{\dokuitalic}[1]{\textsl{#1}}
\newcommand{\dokumonospace}[1]{\texttt{#1}}
\newcommand{\dokuunderline}[1]{\underline{#1}}
\newcommand{\dokuoverline}[1]{\sout{#1}}
\newcommand{\dokusupscript}[1]{\textsuperscript{#1}}
\newcommand{\dokusubscript}[1]{$_{#1}$}
\newcommand{\dokuhline}{\line(1,0){400}}
\newcommand{\dokulabel}[1]{\label{#1}}
\newcommand{\dokuitem}{\item}
\newcommand{\dokuquoting}{\textbar}
\newcommand{\dokutabularwidth}{\textwidth}
\newcommand{\dokusupertabularheadbreak}{\small\sl continued from previous page}
\newcommand{\dokusupertabulartailbreak}{\small\sl continued on next page}
\newcommand{\dokuheadingstyle}[1]{\textbf{#1}}
\definecolor{dokuheadingcolor}{rgb}{0,0,0.60}
\newcommand{\dokubackground}[1]{%
\AddToShipoutPicture{%
  \AtTextCenter{%
    \makebox(0,0)[c]{\resizebox{\textwidth}{!}{%
      \rotatebox{25}{\textsf{\textbf{\textcolor[gray]{0.90}{#1}}}}}}%
  }%
 }%
}

\hypersetup{
pdftitle = {XML TP1},
pdfauthor = {E. Bruno},
pdfcreator = {DokuTeXit},
pdfproducer = {dokuwiki + TeXit + latex + dvipdf}
}
\title{XML TP1}
\author{E. Bruno}
\dokubackground{http://lsis.univ-tln.fr/\~{ }bruno/}
\begin{document}
\thispagestyle{empty}
\maketitle
\thispagestyle{empty}
\cleardoublepage
\tableofcontents
\newpage
\thispagestyle{plain}
\cleardoublepage
\newpage



\dokutitlelevelone{TP1 - Edition de documents XML bien-formés et valides}
\label{eaa2dde46d800aac57f956eb66b1039b}%% tp1_-_edition_de_documents_xml_bien-formes_et_valides
\label{53580383cdf7a09a21f7c45616ed5239}%%Start: inf10-tp1 => /home/bruno/public_html/data/pages/inf10-tp1.txt

\dokutitleleveltwo{Objectifs}
\label{a171964ae6165de72f92bdc90b056e27}%% objectifs

\begin{itemize}
\dokuitem  Utilisation des outils de base pour la création et l’édition de documents XML\dokufootnote{Extensible Markup Language}. 
\dokuitem  Vérification des documents bien formés et validation d’un document par rapport à une DTD\dokufootnote{Document Type Definition}. 
\dokuitem  Exemple de transformation avec XSLT\dokufootnote{Extensible Stylesheet Language Transformations} vers HTML\dokufootnote{HyperText Markup Language}, XSL\dokufootnote{Extensible Stylesheet Language} puis vers pdf.
\end{itemize}
Les documents exemples sont fournis à  l’adresse \href{http://bruno.univ-tln.fr}{http://bruno.univ-tln.fr}. Les outils sont installés sur la machine \dokumonospace{sis.univ-tln.fr} (Vous commencerez par mettre en place une connexion avec votre clé publique vers cette machine.


\dokutitleleveltwo{Les outils pour l'édition et validation de documents}
\label{da1858b6f755abac8cb15b0f38a0e000}%% les_outils_pour_l_edition_et_validation_de_documents
Les outils suivant sont utilisables pour l’édition :


\begin{itemize}
\dokuitem  L’éditeur Emacs \href{http://www.gnu.org/software/emacs/emacs.html}{http://www.gnu.org/software/emacs/emacs.html}
\begin{itemize}
\dokuitem  Le mode psgml \href{http://sourceforge.net/projects/psgml/}{http://sourceforge.net/projects/psgml/} - (pour activer esc-x xml-mode)
\dokuitem  Le mode nxml (par défaut sur lsis, ne supporte pas les dtd) (pour activer esc-x nxml-mode)
\dokuitem  Le mode tdtd \href{http://www.menteith.com/tdtd/}{http://www.menteith.com/tdtd/}
\dokuitem  Un exemple de fichier de configuration de emacs est proposé dans emacs.dotfile (à renommer en .emacs).
\end{itemize}

\dokuitem  Le logiciel commercial xmlspy (\href{http://www.xmlspy.com}{http://www.xmlspy.com}) disponible sous windows ou sous linux avec wine.
\dokuitem  Le logiciel commercial oxygen (\href{http://www.oxygenxml.com}{http://www.oxygenxml.com}) sur sis \dokumonospace{/usr/local/Oxygen}
\dokuitem  Un plugin pour eclipse xmlbuddy (\href{http://xmlbuddy.com/}{http://xmlbuddy.com/})
\dokuitem  l'IDE eclipse
\end{itemize}
Pour la validation en ligne de commande :


\begin{itemize}
\dokuitem  Parser XML\dokufootmark{1} : Xerces (\href{http://xml.apache.org/xerces2-j/index.html}{http://xml.apache.org/xerces2-j/index.html})
\dokuitem  Opensp (depuis emacs), parser SGML\dokufootnote{Standard General Markup Language} adapté à XML\dokufootmark{1} (\href{http://openjade.sourceforge.net/}{http://openjade.sourceforge.net/}).
\end{itemize}
Pour la transformation de document XML\dokufootmark{1} :


\begin{itemize}
\dokuitem  Processeur XSLT\dokufootmark{3} : Xalan (\href{http://xml.apache.org/xalan-j/index.html}{http://xml.apache.org/xalan-j/index.html})
\end{itemize}

\dokutitleleveltwo{Les recommendations}
\label{ef09abc6f0ca02bf68026eda0d44e861}%% les_recommendations

\begin{itemize}
\dokuitem  XML\dokufootmark{1} : \href{http://www.w3.org/TR/xml11}{http://www.w3.org/TR/xml11}
\dokuitem  Namespaces : \href{http://www.w3.org/TR/xml-names11}{http://www.w3.org/TR/xml-names11}
\end{itemize}

\dokutitleleveltwo{Validation d’un document associé à une DTD}
\label{572e0166c188a8ec28ec58ad79f8db1c}%% validation_d_un_document_associe_a_une_dtd
Le fichier \hyperref[9505dbcf041a4dc4b39dfeaf9e1b0d74]{books.dtd.zip} décrit un modèle de document qui permet de représenter une collection de livres. Le fichier \hyperref[010001b831c6326df26bb68c02f2ac9a]{books-errors.xml} est un document XML\dokufootmark{1} exemple qui est une instance de la dtd précédente, il contient des erreurs. 
Deux types d’erreurs peuvent apparaître. Des erreurs de non-conformité avec le langage XML\dokufootmark{1} (balises non fermés, \ldots{}), on dira alors que le document n’est
pas bien formé ; et des erreurs de non conformité par rapport à une DTD\dokufootmark{2}, on dira alors que le document n’est pas valide par rapport à cette DTD\dokufootmark{2}.

Pour vérifier la conformité d’un document à la norme XML\dokufootmark{1}, on utilise un parser. La vérification peut aussi être faite depuis Emacs avec le parser onsgmls (ctrl-c ctrl-v), depuis Oxygen ou eclipse.

Corriger les erreurs syntaxiques du document books-errors.xml pour le rendre bien formé.    

Pour valider un documents XML\dokufootmark{1} par rapport à une DTD\dokufootmark{2}, on ajoute un DOCTYPE dans le document pour le lier à cette
DTD\dokufootmark{2}, le parser l’utilisera pour vérifier la conformité du document. Rendre le document books-errors.xml valide par rapport
à la dtd books.dtd. Vous pouvez soit réutiliser onsgmls, soit utiliser Xerces, soit oxygen :


\small
\begin{verbatimtab}
  /usr/local/bin/xerces-validate <doc.xml> (regarder le script !)
\end{verbatimtab}
\normalsize

\dokutitleleveltwo{Edition d’un document XML}
\label{2e0a948efe9d967c75c7fe2033c342a6}%% edition_d_un_document_xml
En utilisant l’éditeur Emacs et le mode psgml (pour insérer des  éléments et créer des attributs) ajouter des livres et des
catégories au document exemple
(cf. \href{http://www.lavoisier.fr/fr/livres/index.asp?texte=xml&select=motcle&exact=on&togo=&support=NULL&from=}{http://www.lavoisier.fr/fr/livres/index.asp?texte=xml{\textbackslash}\&select=motcle{\textbackslash}\&exact=on{\textbackslash}\&togo={\textbackslash}\&support=NULL{\textbackslash}\&from=}).

La documentation du mode psgml se trouve dans le fichier \href{http://www.snee.com/bob/sgmlfree/psgmqref.html}{http://www.snee.com/bob/sgmlfree/psgmqref.html}, et le manuel ici
\href{http://www.lysator.liu.se/~lenst/about_psgml/psgml.html}{http://www.lysator.liu.se/{\textbackslash}\~{ }{ }lenst/about{{\textbackslash}textunderscore}psgml/psgml.html}. Vous utiliserez en particulier :


\begin{itemize}
\dokuitem  C-c C-v (sgml-validate) validates a document. It must be done from the main document file, the one with the DTD\dokufootmark{2} declaration at
\end{itemize}
      the top. (For our documents that’s usually doc/o/*/main.sgml.)


\begin{itemize}
\dokuitem  C-c C-r (sgml-tag-region) tags a region of marked text. The system prompts for a tag name and will not accept an invalid one. You
\end{itemize}
      can use the Tab key for auto-fill for the name.


\begin{itemize}
\dokuitem  C-c C-e (sgml-insert-element) prompts for a tag name, and then puts an empty element (start and end tags) at the point at the
\end{itemize}
      cursor location. The system checks for valid entries, and offers auto-fill.


\begin{itemize}
\dokuitem  C-c = (sgml-change-element-name) only works if the cursor is inside the element’s start or end tag. It prompts for a new tag name
\end{itemize}
      and changes the element to what you enter. The system checks for valid entries, and offers auto-fill.


\begin{itemize}
\dokuitem  C-c - (sgml-untag-element) removes the tags of an element. The cursor must be inside the element’s start or end tag.
\dokuitem  ESC C-k (sgml-kill-element) removes the entire element with all its children, text, and tags intact. This is useful for moving whole
\end{itemize}
      chunks of tagged text within and between documents. The cursor must be positioned before the start tag of the element.


\begin{itemize}
\dokuitem  C-c RET (sgml-split-element) inserts an end tag for the current element followed by a beginning tag for the same kind of element,
\end{itemize}
      effectively splitting the element at that point. This is an easy way to make two paragraphs. The cursor must be between (and not inside) the start and end tags of the element.

Vous mettrez éventuellement la DTD\dokufootmark{2} à jour, et vous validerez le document modifié.


\dokutitleleveltwo{Espaces de noms}
\label{4880c498e06851ec827cc3fa7ad0eb21}%% espaces_de_noms
Modifier le document précédent en utilisant les espaces de noms. Vous structurerez de façon plus fine les auteurs pour leur ajouter un \dokumonospace{title} (Dr., Pr., Ms., Mrs., Miss). Pour distinguer les éléments ayant le même nom, vous définirez deux espaces de noms, un pour les personnes et un pour les auteurs. Attention, les DTD\dokufootmark{2} ne supportent pas les espaces de noms (cf. schemas) par contre vous pouvez utiliser les noms qualifiés (ie le même préfixe).


\dokutitleleveltwo{Création d’une définition de type de documents: DTD}
\label{6a87284914054e1ba5d1d288c1b09f43}%% dtd

\dokutitleleveltree{Baliser des documents}
\label{1094981d2c80404dcc6ef8cc445ae059}%% baliser_des_documents
Proposer une structuration XML\dokufootmark{1} pour les classes et interfaces de la javadoc \href{http://java.sun.com/j2se/1.5.0/docs/api/index.html}{http://java.sun.com/j2se/1.5.0/docs/api/index.html} .Vous détaillerez une exemple avec les classes \dokumonospace{String} et \dokumonospace{StringBuilder}. Attention, le site Web est orienté présentation mais votre document XML\dokufootmark{1} devra décrire la structure logique. Vous utiliserez en particulier la possibilité de décrire des listes et des tableaux et les références internes.


\dokutitleleveltree{Construire une DTD}
\label{2bd7cf85237953463b3dfe8cd09b23ad}%% construire_une_dtd
A partir des balisages que vous venez de définir, proposer une DTD\dokufootmark{2} \dokumonospace{javadoc.dtd} et valider les deux documents.


\dokutitleleveltwo{Une DTD industrielle, Docbook}
\label{717cbf283b80410a44cabe60ca244072}%% une_dtd_industrielle_docbook
La DTD\dokufootmark{2} docbook (ainsi qu’une version simplifié) sont présentés sur les sites \href{http://www.docbook.org}{http://www.docbook.org} et
\href{http://www.oasis-open.org/docbook/}{http://www.oasis-open.org/docbook/}. Un exemple simple de document se trouve dans le fichier \hyperref[08abe882411d5f8071f213a9736bdbf8]{sample-docbook.xml}.

La documentation complète de docbook écrite en XML\dokufootmark{1} se trouve ici :
\href{http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/docbook/defguide/en/}{http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/docbook/defguide/en/}, une version HTML\dokufootmark{4} (générée automatiquement) est disponible ici : \href{http://www.docbook.org/tdg/en/html/docbook.html}{http://www.docbook.org/tdg/en/html/docbook.html}.

La DTD\dokufootmark{2} est ici \href{http://www.oasis-open.org/docbook/xml/}{http://www.oasis-open.org/docbook/xml/} et les feuilles de style là : \href{http://sourceforge.net/projects/docbook/}{http://sourceforge.net/projects/docbook/} (Plus d'information \href{http://sagehill.net/docbookxsl/index.html}{http://sagehill.net/docbookxsl/index.html}).


\dokutitleleveltree{Créer un document conforme à la DTD docbook}
\label{db57113246dd837254e3c7dee40b9851}%% creer_un_document_conforme_a_la_dtd_docbook
Écrire le manuel d’utilisation d’un projet que vous avez réalisé en utilisant la DTD\dokufootmark{2} docbook.


\dokutitleleveltree{Transformer un document XML}
\label{c17e340aaab99fc5445476e0a37d92f7}%% transformer_un_document_xml
Un document XML\dokufootmark{1} peut être transformé en un autre document XML\dokufootmark{1} (ou en un fichier texte) en utilisant des feuilles de style
XSLT\dokufootmark{3} (celles-ci seront étudiées ultérieurement en cours, nous allons ici simplement les utiliser).

Trois feuilles de style sont proposées pour transformer un document XML\dokufootmark{1} valide pour la DTD\dokufootmark{2} docbook en


\begin{itemize}
\dokuitem  HTML\dokufootmark{4} : /usr/share/xml/docbook/stylesheet/nwalsh/html/docbook.xsl
\dokuitem  XHTML\dokufootnote{Extensible HyperText Markup Language} : /usr/share/xml/docbook/stylesheet/nwalsh/xhtml/docbook.xsl
\dokuitem  XSL\dokufootmark{5}-FO : /usr/share/xml/docbook/stylesheet/nwalsh/fo/docbook.xsl
\end{itemize}
Il faut utiliser un processeur XSLT\dokufootmark{3} (xalan par exemple \href{http://xml.apache.org/xalan-j/}{http://xml.apache.org/xalan-j/}). La commande pour appliquer une feuille de style est : 


\small
\begin{verbatimtab}
 setenv CLASSPATH xalan-j_2_7_1/xalan.jar::xalan-j_2_7_1/xercesImpl.jar:xalan-j_2_7_1/xml-apis.jar
 java org.apache.xalan.xslt.Process -IN sample-docbook.xml -XSL docbook-xsl-1.76.1/xhtml/docbook.xsl
-OUT OUT/sample-docbook.xhtml
 
\end{verbatimtab}
\normalsize
Transformer le document de l’exercice précédent en un document HTML\dokufootmark{4}, puis en un document XHTML\dokufootmark{7}. 

La troisième feuille de style produit un document XML\dokufootmark{1} dans un format appelé FO (Formating Object) qui décrit un document formaté. Ce document peut ensuite être converti vers un format propriétaire (dvi, ps, pdf, . . . ). Pour réaliser cette transformation, deux outils  sont disponibles FOP (\href{http://xml.apache.org/fop/}{http://xml.apache.org/fop/}) et PassiveTeX (\href{http://www.tei-c.org.uk/Software/p}{http://www.tei-c.org.uk/Software/p}

Deux commandes possibles fop et pdfxmltex :


\begin{itemize}
\dokuitem  fop $<$fichier.fo$>$ -pdf $<$fichier.pdf$>$
\dokuitem  pdfxmltex $<$fichier.fo$>$
\end{itemize}
Les commandes docbook2{pdf, html, rtf, \ldots{}} utilisent un autre langage de feuilles de style. 

\end{document}

