\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 TP2},
pdfauthor = {E. Bruno},
pdfcreator = {DokuTeXit},
pdfproducer = {dokuwiki + TeXit + pdflatex}
}
\title{XML TP2}
\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{TP2 - Le langage XPath}
\label{638e6f3c7dae57d3071bf64cf12e5dcf}%% tp2_-_le_langage_xpath
\label{0ce9a44d0c4d81c1dbcecda11ecb588c}%%Start: inf10-tp2 => /home/bruno/public_html/data/pages/inf10-tp2.txt

\dokutitleleveltwo{Objectif}
\label{ba81ee9ceeb9c96227f3607460f09179}%% objectif
L'objectif de ce TP est de mettre en pratique les constructions proposées par le langage XPath. Nous utilisons pour cela un
outil en ligne de commande qui extrait les fragments d’un document qui vérifient un chemin de localisation XPath (ce n'est que l'une des utilisations possibles de ce langages, cf. le cours sur XSLT). Attention,
une expression XPath sélectionne une séquence de noeuds de l’arbre du document, cet outils affiche la représentation XML de
tous les sous-arbres dont ces noeuds sont les racines.


\dokutitleleveltwo{Prérequis}
\label{e8a6ead47877c52114262e548e352d17}%% prerequis
Parcourir et garder la recommendation XPath (\href{http://www.w3.org/TR/xpath}{http://www.w3.org/TR/xpath}) ouverte.

Outils utilisés pour l’application des chemins XPath :


\begin{itemize}
\dokuitem  Zorba (\href{http://www.zorba-xquery.com/}{http://www.zorba-xquery.com/}). Il s'agit d'un interprète du langage XQuery dont XPath est un sous ensemble.
\dokuitem  \href{http://eclipsexslt.sourceforge.net}{http://eclipsexslt.sourceforge.net} propose XPath Navigator qui permet de visualiser le résultat d'une expression XPath dans eclipse. 
\end{itemize}
Deux commandes sont possible pour extraire les fragments correspondants à une expression XPath :


\begin{itemize}
\dokuitem  \dokumonospace{zorba trailing-nl -i context-item $<$docXML$>$ -f -q $<$XPathFile$>$}
\dokuitem  \dokumonospace{zorba trailing-nl -i context-item $<$docXML$>$ -f -q $<$RequeteXPath$>$}
\end{itemize}
\dokumonospace{$<$docXML$>$} et \dokumonospace{$<$XPathFile$>$} sont des fichiers qui contiennent le document XML et requête XPath. Par exemple,


\small
\begin{verbatimtab}
zorba --trailing-nl -i --context-item books.xml -f -q q.xq

\end{verbatimtab}
\normalsize
Applique la requête contenue dans le fichier \dokumonospace{q.xq} au document \dokumonospace{books.xml}.

A noter : sous Unix, l'expression XPath doit être mise entre ' ' (ou entre " ") pour  éviter une interprétation de la ligne de commande.

A partir du document décrivant une liste de livres du TP sur l'édition de documents XML, proposer une ou plusieurs expressions XPath qui répondent aux questions suivantes (certaines questions n'ont pas de réponses dans le document, dans ce
cas vous ajouterez des informations dans celui-ci) :


\dokutitleleveltwo{Expressions XPath}
\label{a16f8f0d786148e307a3391ae4cf8e04}%% expressions_xpath

\begin{enumerate}\dokuitem  En utilisant uniquement les axes \dokumonospace{child}, \dokumonospace{descendant}, et \dokumonospace{attribute}, extraire :
\begin{itemize}
\dokuitem  le document complet
\dokuitem  Uniquement les livres
\dokuitem  les catégories
\dokuitem  les catégories des livres
\end{itemize}

\dokuitem  En utilisant les positions dans les prédicats.
\begin{itemize}
\dokuitem  Le titre du premier livre
\dokuitem  le titre du dernier livre
\dokuitem  les catégories du second et de l'avant-dernier livre
\end{itemize}

\dokuitem  En utilisant des expressions de chemin dans les prédicats.
\begin{itemize}
\dokuitem  Les catégories ayant une note
\dokuitem  Les livres ayant au moins deux auteurs.
\end{itemize}

\dokuitem  Le code de la catégorie "Science"
\dokuitem  Le titre des livres de la catégorie "C"
\dokuitem  Le titre des livres dont la quantité est égale à 0
\dokuitem  Les livres dont le titre contient le mot "Animal"
\dokuitem  Les livres dont le nom de l'auteur a six lettres (y-a-t-il un pb ?)
\dokuitem  Les livres dont l'auteur est "Bonner" ou la catégorie "F"
\dokuitem  Tous les éléments
\dokuitem  Le texte sans balisage
\dokuitem  Les livres qui sont avant le premier livre de la catégorie 'X'
\dokuitem  Le livre qui suit immédiatement le dernier livre de l’auteur "Bonner"
\dokuitem  Afficher les instructions de traitements (de quoi s’agit-il ?)
\dokuitem  Afficher un livre sur deux
\dokuitem  Le (ou les) livre(s) du milieu de la liste
\dokuitem  La description de la catégorie du premier livre
\end{enumerate}

\dokutitleleveltwo{XPath, Id, Idref et documents multiples}
\label{9a57381fc9d29583bb832f5bffa816c6}%% xpath_id_idref_et_documents_multiples
Que font les fonctions \dokumonospace{id()} et \dokumonospace{document()} ? Que doit contenir le document ? 
Pour cela, les requêtes doivent avoir la forme suivante :


\small
\begin{verbatimtab}
declare namespace op = "http://www.zorba-xquery.com/options/features";
declare namespace f = "http://www.zorba-xquery.com/features";
declare option op:enable "f:dtd";
fn:doc("books.xml")//Item
\end{verbatimtab}
\normalsize
Proposer des exemples de requêtes utilisant ces fonctions :


\begin{enumerate}\dokuitem  Utiliser \dokumonospace{id} pour atteindre directement la description de la catégorie du premier livre
\dokuitem  Ecrire un document qui décrit tous les auteurs et leur associe un identifiant. Faire une copie de la bibliographie en remplaçant les auteurs par un élément qui contient leur identifiant. Ecrire une requête qui retourne le premier auteur du dernier livre. 
\end{enumerate}

\dokutitleleveltwo{Pour aller plus loin}
\label{0b86065ef4df14e9ff039edd0d533671}%% pour_aller_plus_loin
En vous inspirant des requêtes précédentes proposer une ensemble de requêtes qui permettent d'exploiter les javadoc structurées en XML du TP1. 

\end{document}

