\documentclass[twoside,a4paper,10pt]{amsbook}
\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 TP5},
pdfauthor = {E. Bruno},
pdfcreator = {DokuTeXit},
pdfproducer = {dokuwiki + TeXit + pdflatex}
}
\title{XML TP5}
\author{E. Bruno}
\dokubackground{http://bruno.lsis.univ-tln.fr/}
\begin{document}
\thispagestyle{empty}
\maketitle
\thispagestyle{empty}
\cleardoublepage
\tableofcontents
\newpage
\thispagestyle{plain}
\cleardoublepage
\newpage



\dokutitlelevelone{TP5 - La mise en place d’un application Web XML s’appuyant sur Apache Cocoon}
\label{740ec723d8e94d3f48a2ae1dd03dd91e}%% tp5_-_la_mise_en_place_d_un_application_web_xml_s_appuyant_sur_apache_cocoon
\label{a3a9e69cbd6798a6477632749bea2a6e}%%Start: inf10-tp5 => /home/bruno/public_html/data/pages/inf10-tp5.txt
Après avoir suivi la présentation de l'outils Apache \href{http://maven.apache.org}{Maven}, vous mettrez en place une application Apache cocoon basique.


\dokutitleleveltwo{Mise en place de Cocoon}
\label{e1903b53a6fa0c6d4de0a73eef4bff38}%% mise_en_place_de_cocoon
Après avoir configuré maven pour l'utilisation à l'USTV (ajout du proxy dans \~{ }/.m2/settings.xml cf. \href{http://maven.apache.org/guides/mini/guide-proxies.html}{http://maven.apache.org/guides/mini/guide-proxies.html}), suivez le tutoriel \href{http://cocoon.apache.org/2.2/1159_1_1.html}{Your first Cocoon application using Maven 2} pour installer l'application de base Cocoon 2.2 (\href{http://cocoon.apache.org/2.2/}{http://cocoon.apache.org/2.2/}).Pas de proxy à configurer pour l'upf.


\dokutitleleveltwo{Utilisation d'une pipeline cocoon}
\label{70102f5787738a33db449d2c5fe88c7b}%% utilisation_d_une_pipeline_cocoon
Après avoir suivi le tutoriel \href{http://cocoon.apache.org/2.2/1290_1_1.html}{Your first XML pipeline}, mettez en place les pipelines nécessaires pour obtenir à partir de cocoon:


\begin{enumerate}\dokuitem  le document XML \dokumonospace{books.xml}
\dokuitem  le document XML intermédiaire dans le format XML pivot (\dokumonospace{books{\textunderscore}pivot.xml}) après application d'une feuille de style XSLT sur le document précédents (cf. TP sur XSLT)
\dokuitem  le document XHTML \dokumonospace{books.xhtml} après application d'un autre feuille de style sur le document \dokumonospace{books{\textunderscore}pivot.xml}. Votre document fera référence à une feuille CSS\dokufootnote{Cascading Style Sheets} pour la présentation.
\dokuitem  le document SVG \dokumonospace{books{\textunderscore}prices.svg} qui affichera un histogramme SVG des prix des livres.
\dokuitem  le document png \dokumonospace{books{\textunderscore}prices.png} qui affichera une version png du diagramme précédent.
\end{enumerate}

\dokutitleleveltwo{Cocoon avancé}
\label{8c011042374a13ee01cd3bf3511a7301}%% cocoon_avance
Mettez en place, une utilisation plus poussée de cocoon en :


\begin{enumerate}\dokuitem  Etudiant et mettant en place les divers composants du \href{http://cocoon.apache.org/2.2/1347_1_1.html}{sitemap}.
\dokuitem  Mettant en place uen application modulaire à base de \href{http://cocoon.apache.org/2.2/1291_1_1.html}{blocks}.
\dokuitem  Utilisation de saxon : \href{http://mrhaki.blogspot.com/2008/09/use-saxon-in-cocoon-22.html}{http://mrhaki.blogspot.com/2008/09/use-saxon-in-cocoon-22.html}
\end{enumerate}

\dokutitleleveltwo{Améliorer cocoon}
\label{da98a366c2e6bff03717a9483bd41d00}%% ameliorer_cocoon

\dokutitleleveltree{Installer Batik (SVG)}
\label{8bb14265defe019f1a7818af4ce7bdff}%% installer_batik_svg
Dans le \dokumonospace{pom.xml} à la fin de l'élément \dokumonospace{dependencies} ajouter


\lstset{language=XML}
\begin{lstlisting}
<dependency>
 <groupId>org.apache.cocoon</groupId>
 <artifactId>cocoon-batik-impl</artifactId>
 <version>1.0.0</version>
</dependency>

\end{lstlisting}

\dokutitleleveltree{Installer FOP (xsl-fo/pdf)}
\label{437175ba4191210ee004e1d937494d09}%% pdf

\lstset{language=XML}
\begin{lstlisting}
 <dependency>
 <groupId>org.apache.cocoon</groupId>
 <artifactId>cocoon-fop-impl</artifactId>
 <version>1.0.0</version>
</dependency>

\end{lstlisting}

\dokutitleleveltree{Utiliser le SQL Transformer}
\label{cc5c1b26d6f4dc678d76e05d0a4aa1e5}%% utiliser_le_sql_transformer
Pour utiliser le SQL Transformer vous devez :


\begin{itemize}
\dokuitem  Ajouter dans l'élément \dokumonospace{dependencies} du pom.xml les dépendances suivantes pour que maven puisse les télécharger. Elles concernent le block databases de cocoon et les drivers de postgresql.
\end{itemize}

\lstset{language=xml}
\begin{lstlisting}
    <dependency>
	<groupId>org.apache.cocoon</groupId>
	<artifactId>cocoon-databases-impl</artifactId>
	<version>1.0.0</version>
     </dependency>
     <dependency>
	<groupId>postgresql</groupId>
	<artifactId>postgresql</artifactId>
	<version>8.4-702.jdbc3</version>
     </dependency>

\end{lstlisting}
Le .jar pour oracle n'est pas dans les dépôts, il faut donc le télécharger ici (dans la suite adapter la version) : \href{http://www.oracle.com/technology/software/tech/java/sqlj_jdbc/index.html}{http://www.oracle.com/technology/software/tech/java/sqlj{{\textbackslash}textunderscore}jdbc/index.html} et l'installer "à la main".


\small
\begin{verbatimtab}
mvn install:install-file -DgroupId=com.oracle -DartifactId=ojdbc6 \
   -Dversion=11.2.0.3 -Dpackaging=jar -Dfile=ojdbc6.jar -DgeneratePom=true 
\end{verbatimtab}
\normalsize
on peut ensuite ajouter la dépendance dans le pom.xml :


\lstset{language=xml}
\begin{lstlisting}
    <dependency>
	<groupId>com.oracle</groupId>
	<artifactId>ojdbc6</artifactId>
	<version>11.2.0.3</version>
     </dependency>

\end{lstlisting}

\begin{itemize}
\dokuitem  Ensuite configurer la ou les sources de données que vous voulez utiliser en créant un fichier \dokumonospace{src/main/resources/META-INF/cocoon/spring/datasources.xml}
\end{itemize}

\lstset{language=xml}
\begin{lstlisting}
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">

    <bean name="org.apache.avalon.excalibur.datasource.DataSourceComponent/personnel"
class="org.apache.cocoon.databases.bridge.spring.avalon.SpringToAvalonDataSourceWrapper">

        <property name="wrappedBean">
            <bean class="org.springframework.jdbc.datasource.DriverManagerDataSource" >
              <property name="driverClassName" value="org.postgresql.Driver"/>
              <property name="url" value="jdbc:postgresql://localhost/test"/>
              <property name="username" value="test"/>
              <property name="password" value="test"/>
            </bean>
        </property>

    </bean>
</beans>

\end{lstlisting}

\begin{itemize}
\dokuitem  Le driver class name pour oracle \dokumonospace{oracle.jdbc.OracleDriver}
\dokuitem  L'url pour oracle 
\small
\begin{verbatimtab}
jdbc:oracle:thin:@//10.8.0.2:1521
\end{verbatimtab}
\normalsize

\dokuitem  Créer un ou plusieurs fichiers XML qui contient le squelette des documents XML à générer et surtout les requêtes SQL à exécuter. Vous pouver ranger des sous-répertoires de \dokumonospace{src/main/resources/COB-INF} (attention aux chemins dans le sitemap).
\end{itemize}
La syntaxe est expliquée ici \href{http://cocoon.apache.org/2.1/userdocs/sql-transformer.html}{http://cocoon.apache.org/2.1/userdocs/sql-transformer.html}


\lstset{language=xml}
\begin{lstlisting}
<page>
   <title>Hello</title>
   <content>
    <para>This is my first Cocoon page filled with sql data!</para>
    <sql:execute-query xmlns:sql="http://apache.org/cocoon/SQL/2.0"> 
     <sql:query name="personne">
       select * from personne 
     </sql:query>
    </sql:execute-query>
   </content>
  </page>

\end{lstlisting}

\begin{enumerate}\dokuitem  finalement modifier le sitemap en ajoutant dans un \dokumonospace{pipeline} un match pour générer le fichier XML précédent, lui appliquer le SQL Transformer et le serialiser.
\end{enumerate}

\lstset{language=xml}
\begin{lstlisting}
  <map:match pattern="personne.xml">
        <map:generate src="testsql.xml"/>        
        <map:transform type="sql">
         <map:parameter name="use-connection" value="personnel"/>
         <map:parameter name="show-nr-of-rows" value="true"/> 
         <map:parameter name="clob-encoding" value="UTF-8"/> 
        </map:transform>
        <map:serialize type="xml"/>
  </map:match>
      
\end{lstlisting}

\dokutitleleveltree{Retourner directement des fichiers (A faire dans le sitemap)}
\label{a3f580799e0d934ee18b6373e85b083a}%% retourner_directement_des_fichiers_a_faire_dans_le_sitemap

\lstset{language=xml}
\begin{lstlisting}
 <!-- Exemple de lecture d'un fichier avec type MIME -->
      <!-- Remarquer l'utilisation de l'URL pour passer un parametre -->
      <map:match pattern="CSS/*.css">
         <map:read mime-type="text/css" src="CSS/{1}.css"/>
      </map:match>

      <map:match pattern="DTD/*.dtd">
         <map:read mime-type="text/plain" src="DTD/{1}.dtd"/>
      </map:match>

\end{lstlisting}

\dokutitleleveltree{Passer des paramètres}
\label{eef24f464a40439c1b0df79b7693e482}%% passer_des_parametres

\lstset{language=xml}
\begin{lstlisting}
        <map:match pattern="livres/pivots_*.xml">
        <map:generate src="Books/books.xml"/>
        <map:transform src="Books/tp3.xsl" type="saxon">
          <!-- Deux solutions -->
          
          <!-- Passage directe d'un paramètre -->
          <map:parameter name="topauthor" value="{1}"/>

          
          <!-- La feuille de style accepte les param depuis les URL
             ?param1=valeur1&param2=valeur2....
           -->
          <map:parameter name="use-request-parameters" value="true"/>
                    
        </map:transform>
        <map:serialize type="xml"/>
      </map:match>

\end{lstlisting}
\end{document}

