\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 + pdflatex}
}
\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  (Optionnel) 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}

\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'IDE eclipse
\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/}, avec le mode nxml et le mode tdtd \href{http://www.menteith.com/tdtd/}{http://www.menteith.com/tdtd/}
\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}
\end{itemize}
Dans le cadre de ces TP, nous utiliserons


\begin{itemize}
\dokuitem  eclipse comme interface d'édition \href{http://eclipse.org/juno/}{http://eclipse.org/juno/}
\dokuitem  Xerces2 version java (\href{http://xerces.apache.org/}{http://xerces.apache.org/}) pour la validation en ligne de commande
\dokuitem  Saxon pour Java (\href{http://saxon.sourceforge.net/\#F9.4HE}{http://saxon.sourceforge.net/{\textbackslash}\#F9.4HE}) comme processeur XSLT\dokufootmark{3} pour la transformation de document XML\dokufootmark{1} (Saxon est aussi un parseur XML\dokufootmark{1} et un processeur XQuery). 
\dokuitem  Il faudra donc une machine virtuelle java installée JDK\dokufootnote{Java Development Kit} SE (au moins version 6) (\href{http://www.oracle.com/technetwork/java/javase/downloads/index.html}{http://www.oracle.com/technetwork/java/javase/downloads/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 editeur XML\dokufootmark{1} (eclipse pour nous) ou un parser (Xerces en ligne de commande) :


\small
\begin{verbatimtab}
java -cp xerces-2_11_0/xercesImpl.jar:xerces-2_11_0/xercesSamples.jar:xerces-2_11_0/xml-apis.jar
dom.Counter -v books-errors.xml
\end{verbatimtab}
\normalsize
En fait, il s'agit d'un application java qui analyse le document en comptant les éléments mais au et à mesure elle vérifie le document.

Corriger les erreurs syntaxiques du document \dokumonospace{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} (enlever le commentaire autour de celui qui est présent et modifier le chemin). Le parser l’utilisera pour vérifier la validité du document. Rendre le document \dokumonospace{books-errors.xml} valide par rapport à la dtd \dokumonospace{books.dtd}.


\small
\begin{verbatimtab}
java -cp xerces-2_11_0/xercesImpl.jar:xerces-2_11_0/xercesSamples.jar:xerces-2_11_0/xml-apis.jar
dom.Counter -v books.xml
\end{verbatimtab}
\normalsize

\dokutitleleveltwo{Edition d’un document XML}
\label{2e0a948efe9d967c75c7fe2033c342a6}%% edition_d_un_document_xml
En utilisant eclipse, exercez vous à ajouter des élements, des attributs et du texte en insérant deux ou trois nouveau livre dans le document XML\dokufootmark{1}.

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 livres et un pour les auteurs. 

DTD\dokufootmark{2}


\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 un 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://docbook.svn.sourceforge.net/viewvc/docbook/trunk/defguide/en/}{http://docbook.svn.sourceforge.net/viewvc/docbook/trunk/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/}

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} : docbook-xsl-1.77.1/html/docbook.xsl
\dokuitem  XHTML\dokufootnote{Extensible HyperText Markup Language} : docbook-xsl-1.77.1/xhtml/docbook.xsl
\dokuitem  XSL\dokufootmark{5}-FO : docbook-xsl-1.77.1/fo/docbook.xsl
\end{itemize}
Il faut utiliser un processeur XSLT\dokufootmark{3} (Saxon par exemple). La commande pour appliquer une feuille de style de xhtml est : 


\small
\begin{verbatimtab}
 java -cp saxon9he.jar net.sf.saxon.Transform -strip:all -s:sample-docbook.xml
-xsl:docbook-xsl-1.77.1/xhtml/docbook.xsl -o:sample-document.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}/XHTML5. 

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, divers outils sont disponibles par exemple FOP (\href{http://xml.apache.org/fop/}{http://xml.apache.org/fop/}) .


\small
\begin{verbatimtab}
java -cp saxon9he.jar net.sf.saxon.Transform -strip:all -s:sample-docbook.xml
-xsl:docbook-xsl-1.77.1/fo/docbook.xsl -o:sample-document-fo.xml
fop -fo sample-document-fo.xml -pdf sample-document-fo.pdf
\end{verbatimtab}
\normalsize
\end{document}

