TP programmation XML native
Programmation avec Active Tags
L'INRIA publie annuellement son RApport d'activité sur le WEB (RAWEB) à partir de données sources
transformées en XML puis dynamiquement en HTML. Vous allez manipuler quelques uns de ces
documents : téléchargez les puis dézippez les dans le répertoire
[MY_TP]/raweb/.
- Ouvrez l'un des fichiers XML dans un navigateur pour en étudier la structure.
Au lieu d'écrire 300000 lignes de code en Java en utilisant DOM ou SAX,
vous écrirez une douzaine de tags XML (Active Tags) qui font la même chose.
Vous devriez réussir à écrire des active sheets (scripts XML) en vous inspirant de ceux fournis dans les didacticiels et
les trucs et astuces du moteur RefleX.
- Téléchargez RefleX v0.3.0, dézippez dans le répertoire [MY_TP]
(vous devriez obtenir [MY_TP]/reflex/).
On vous donne ces quelques fichiers de base à dézipper dans [MY_TP]/ (squelettes et lanceur).
Pour lancer un script Active Tags, utiliser ./run.sh script-to-run.xcl
- list.xcl :
Faites une active-sheet (list.xcl) qui parcourt les fichiers depuis le répertoire où ils ont été dézippés
(exemple : "how it works"),
et affichez leur nom et leur taille (voir le type #io:x-file) comme ceci :
acacia.xml (249794)
aces.xml (113382)
adept.xml (243853)
alchemy.xml (289582)
alcove.xml (124015)
algo.xml (91724)
algorille.xml (168211)
- parse.xcl : Parsez en streaming (c'est à dire à la SAX) chacun de ces fichiers.
- merge.xcl : Créez un nouveau document (en streaming) qui contient l'élément racine <projets>
dans lequel vous allez fusionner tous les documents précédemment parsés. Vous obtenez un
gros document que vous sérialiserez avec XSLT dans [MY_TP]/build/rapports.xml.
Vérifiez ce nouveau document en le chargeant dans un navigateur ; ça devrait ressembler à ça :
<projets>
<raweb xml:lang="en" year="2006">
<identification id="acacia" isproject="true">
[etc]
</identification>
[etc]
</raweb>
<raweb xml:lang="en" year="2006">
<identification id="aces" isproject="true">
[etc]
</identification>
[etc]
</raweb>
[etc...]
</projets>
- filter.xcl : Parsez [MY_TP]/build/rapports.xml et utilisez un filtre (id-filter.xcl) (en streaming) pour extraire
le contenu de la section <identification> de chaque projet :
<identifications>
<projet id="acacia">
[insérez ici tout le contenu de la section "identification" du projet acacia]
</projet>
<projet id="aces">
[insérez ici tout le contenu de la section "identification" du projet aces]
</projet>
[etc...]
</identifications>
Sérialisez dans build/identifications.xml.
- transform.xcl :Transformez
build/identifications.xml avec teams.xsl dans build/result.xhtml.
- xunit.xcl :Vérifiez avec XUnit (vous n'avez pas besoin de faire de module ni
de catalogue, juste d'utiliser <xunit:test-case>
et <xunit:merge-reports>) que le résultat obtenu build/result.xhtml est en conformité avec
result-expected.xhtml.
Le rapport d'erreur est dans build/raweb-err.xml
Corrigez le XSLT jusqu'à ne plus avoir d'erreur.
Pour vous aider, consultez la documentation en ligne :
- Documentation pratique sur RefleX :
- Documentation générale sur Active Tags :