Dans plusieurs projets, vous devez permettre l'exportation du document XML, ou du résultat d'une requête, sous la forme d'un document PDF. Nous avons vu comment réaliser la présentation d'un document XML au format PDF à l'aide du format XSL-FO et d'une feuille de style XSL adaptée. Le logiciel fop permet alors de produire le document PDF souhaité. Il peut être utile de pouvoir appeler FOP sous la forme d'un service web, comme le logiciel eXist permet par exemple d'exécuter des requêtes XQuery au travers d'une interface web.
Afin d'intégrer dans un même serveur web l'utilisation d'eXist et de FOP, le plus simple est d'installer un serveur apache Tomcat sur votre machine. Commencez donc par télécharger et installer ce logiciel depuis l'archive suivante : apache-tomcat-5.5.28.tar.gz
Une fois installé, vous pouvez ouvrir la page internet locale :
http://localhost:8080
La page d'accueil de Tomcat
s'affiche. Pour installer de noveaux services (on parle de servlet),
vous devez disposer d'une archive au format war
du
service voulu. Cette archive doit ensuite être placée dans le
dossier webapps
de Tomcat. Vous pouvez télécharger
l'archive correspondant à eXist (exist.war) et celle correspondant à FOP
(fop.war). Une fois déposées à leur place, vous
pouvez exécuter ces services aux adresses suivantes :
http://localhost:8080/exist
et http://localhost:8080/fop
Vous connaissez déjà le fonctionnement de la servlet eXist. Vous pouvez tester la servlet FOP avec des fichiers des TPs précédents. L'utilisation se fait de l'une des deux façons suivantes :
http://localhost:8080/fop/fop?fo=/home/path/to/fofile.fo
http://localhost:8080/fop/fop?xml=/home/path/to/xmlfile.xml&xslt=/home/path/to/xslfile.xsl
En reprenant l'exemple de site web vu lors du TP eXist, modifiez-le pour intégrer une nouvelle fonctionalité permettant l'export au format PDF de la base de données. Voici un fichier html réalisant cet appel, attention les liens des fichiers sont à mettre à jour pour votre machine. Observez le "&" qui est écrit avec "& amp;".
Nous n'avons pas vu pendant le TP sur eXist comment exporter des
parties de la base de données sous forme de fichier XML. Ceci peut
être réalisé à l'aide de la fonction serialize
. Un
exemple incomplet est donné dans le fichier suivant
: write.xqy
Référez-vous à la doumentation d'eXist pour plus de détails concernant
l'utilisation de cette fonction. (Functions Library sur la gauche de
la page http://localhost:8080/exist/
).
Modifiez le site vu dans le TP sur eXist pour permettre l'exportation dans un fichier XML du résultat d'une recherche.
Combinez cette fonctionnalité pour permettre d'appliquer l'export PDF vu dans l'exercice précédent au résultat d'une sélection.
Vous pouvez avoir besoin de créer dans les fichiers produits des
instructions de traitement (processing instruction). Il existe un
constructeur en XQuery pour ce type de noeuds. Vous pourrez vous
inspirer de l'exemple suivante : proc-instr.xqy
Il est inutile de créer l'en-tête XML du fichier.
Afin de gérer un système d'authentification pour les utilisateurs du site, vous pouvez avoir besoin de créer des sessions lorsqu'un utilisateur se connecte, et d'y associer des variables de session. Vous pouvez pour cela utiliser des fonctions existantes dans l'outil eXist. Vous trouverez ces fonctions dans le module intitulé "session". Vous trouverez plus d'informations sur la page décrivant la librairie de fonctions de votre installation : http://localhost:8080/exist/xquery/functions.xql
Vous pouvez si vous le souhaitez utiliser XUL pour réaliser l'interface de votre site web. Des slides présentant cette technologie sont diponibles dans la rubrique archive de la page du cours. Voici un exemple simple comprenant une barre d'outil et un cadre contenant une page web. Il montre aussi comment définir une interaction avec les boutons permettant de changer la page chargée dans le cadre : sample.xul
Voilà un deuxième exemple qui montre comment appeler depuis un fichier xul un document XQuery. Attention, ce fichier n'est pas fonctionnel tel quel, il faut l'adapter à votre cadre. index.xul
On peut bien sûr construire avec XQuery des pages web utilisant des scripts écrits en Javascript. On peut également passer à ces scripts des arguments obtenus comme les résultats de requêtes XPath. Voici un exemple qui démontre ce genre d'utilisation. Attention à la syntaxe pour décrire l'appel à Javascript, l'imbrication de guillemets doubles et simples est plutôt complexe... Pour tester cet exemple, il suffit de l'utiliser dans l'exemple eXist à la palce du fichier simple display_XQ.xqy.