<link href="/assets/64d0ba83aa42c90354ff97799bcfc0c2.css" type="text/css" rel="stylesheet"> <script src="/assets/6fd6663d5303bb7eda3ef7493fc29db6.js"></script> <script> $(document).ready(function() { anchors.options = { visible: 'hover', placement: 'right', truncate: 64 }; anchors.add('#body h2, #body h3, #body h4, #body h5'); }); </script> <script> hljs.initHighlightingOnLoad(); </script>

<h1>M2 DEFI XML - DEVOIR 2017-2018</h1> <h2>Contexte</h2> <p>La région Aquitaine met à disposition des « données ouvertes », dont <a href="https://www.datalocale.fr/dataset?res_format=XML">certaines dans un format XML</a> .</p> <p>Vous pouvez remarquer que le format choisi présente les caractéristiques suivantes :</p> <ul> <li>il est très plat : peu de niveaux hiérarchique ;</li> <li>il exploite peu les possibilités d'XML, et en particulier, il ne comporte pas d'attributs ;</li> <li>les valeurs textuelles comportent une sorte de balisage (le caractère '#' est divisiblement un séparateur) ;</li> <li>le choix du nom des éléments n'est pas très cohérent, présentant un mélange de majuscules et de minuscules ;</li> <li>certaines balises sont présentes, mais sont vides.</li> </ul> <p>Le but de ce devoir est d'améliorer la structuration de ces documents. Pour cela vous allez mettre au point et utiliser une série de transformations <strong>XSLT 1.0</strong>.</p> <h2>Indications</h2> <ul> <li>Afin que vous ne soyez pas bloqué par une étape, je vous fournis les documents XML que vous devez obtenir (à part le HTML de la dernière question).</li> <li>Les espaces et sauts de ligne dans les documents que vous obtenez n'ont ici pas d'importance. Vous pouvez rendre plus lisible vos document avec la commande <code>xmllint --format</code>.</li> <li>Pour les transformations XML vers XML, vous avez fortement intérêt à partir de la transformation « identité », vue en cours.</li> <li>L'outils <strong>xsltproc</strong> permet de travailler en XSLT <strong>1.0</strong> uniquement : vérifiez ce point si vous cherchez de la documentation sur internet.</li> <li>Vous rendez un travail individuel : deux copies fortements identiques seront considérées comme de la fraude. Cela n'empêche pas l'entraide, mais vous devez rendre votre travail, pas celui du copain ou de la copine.</li> </ul> <h2>Préparation</h2> <h3>Répertoire de travail</h3> <p>Dans votre espace de travail, créez un répertoire <code>devoir_&lt;votre_nom&gt;</code> (par exemple <code>devoir_jorda</code>). Tous les fichiers de votre devoir devront se trouver dans ce répertoire.</p> <h3>Les fichiers à récupérer</h3> <p>Dans ce répertoire, lancez la commande pour récupérer les fichiers nécessaires au devoir :</p> <pre><code>git clone https://github.com/master-defi-xml/devoir-2017-2018.git .</code></pre> <p>(le point à la fin de la commande évite qu'un répertoire <code>devoir-2017-2018</code> ne soit créé, mais ça ne fonctionne que si votre répertoire de travail est vide).</p> <h4>Les données d'entrées</h4> <p>Les données sont contenues dans les fichiers <code>liste-xml-*.xml</code>. À titre d'exemple, nous utiliserons le fichier <code>liste-xml-plages-activites-plage-aquitaine.xml</code>.</p> <h4>La feuille de style <code>itemize.xsl</code></h4> <p>Vous allez devoir appliquer cette feuille de style courte mais un peu compliquée : <code>itemize_xml.xsl</code>.</p> <h2>Préparation</h2> <p><strong>E0.</strong> Afin de préparer votre travail, faite la liste des noms des éléments fils de l'élément <strong>OFFRE</strong>.</p> <h2>Étape 1 : ajout d'éléments par structuration du texte</h2> <h3>Documents</h3> <ul> <li>Entrée : ``liste-xml-sites-produits-IGP-aquitaine.xml</li> <li>Feuille de style : <code>itemize.xsl</code> (FOURNIE !)</li> <li>Sortie : <code>etape1.xml</code></li> </ul> <h3>À faire</h3> <p><strong>E1.</strong> Appliquer la feuille de style <code>itemize_xml.xsl</code> au document <code>liste-xml-sites-produits-IGP-aquitaine.xml</code>.</p> <h2>Étape 2 : un peu de nettoyage</h2> <h3>Documents</h3> <ul> <li>Entrée : <code>etape1.xml</code></li> <li>Feuille de style : <code>nettoie.xsl</code></li> <li>Sortie : <code>etape2.xml</code></li> </ul> <h3>À faire</h3> <p><strong>E2.</strong> Mettez au point une feuille de style <code>nettoie.xsl</code> permettant :</p> <ul> <li>de supprimer les éléments <strong>br</strong> ;</li> <li>de supprimer l'élement fils de <strong>modeles</strong> (<strong>modele_[un_identifiant_compliqué]</strong>), en conservant son contenu ;</li> <li>de supprimer les éléments dont le contenu est vide (pas de noeuds fils de type texte et pas d'éléments fils) ;</li> <li> <p>de renommer les éléments suivants :</p> <ul> <li><strong>modeles</strong> en __LISTE_OFFRE__</li> <li><strong>offre</strong> en <strong>OFFRE</strong></li> </ul> </li> </ul> <p>Appliquez cette feuille de style <code>nettoie.xsl</code> sur le fichier <code>etape1.xml</code>. Vous devez obtenir en sortie un document similaire à <code>etape2.xml</code>.</p> <h2>Étape 3 : un peu plus de structure</h2> <h3>Documents</h3> <ul> <li>Entrée : <code>etape2.xml</code></li> <li>Feuille de style : <code>ajoute_structure.xsl</code></li> <li>Sortie : <code>etape3.xml</code></li> </ul> <h3>À faire</h3> <p><strong>E3.</strong> Mettez au point une feuille de style <code>nettoie.xsl</code> permettant :</p> <ul> <li> <p>de placer le contenu des éléments <strong>INFOS_COMPLEMENTAIRES_</strong>n_ (<em>n</em> = 1, 2 ou 3) dans des éléments <strong>INFO</strong>, contenu dans un élément <strong>LISTE_INFO</strong> :</p> <pre><code> &lt;INFOS_COMPLEMENTAIRES_1&gt;tata&lt;/INFOS_COMPLEMENTAIRES_1&gt; &lt;INFOS_COMPLEMENTAIRES_2&gt;toto&lt;/INFOS_COMPLEMENTAIRES_2&gt; &lt;INFOS_COMPLEMENTAIRES_3&gt;tutu&lt;/INFOS_COMPLEMENTAIRES_3&gt;</code></pre> </li> </ul> <p>devient :</p> <pre><code>&lt;LISTE_INFOS&gt; &lt;INFO&gt;tata&lt;/INFO&gt; &lt;INFO&gt;toto&lt;/INFO&gt; &lt;INFO&gt;tutu&lt;/INFO&gt; &lt;/LISTE_INFOS&gt;</code></pre> <ul> <li>de placer les éléments <strong>LONGITUDE</strong>, <strong>LATITUDE</strong>, <strong>PORTE_ESCALIER<strong>, </strong>BATIMENT_RESIDENCE</strong>, <strong>RUE</strong>, <strong>LIEUDIT_BP<strong>, </strong>CODE_POSTAL</strong>, <strong>COMMUNE</strong> dans un élément container <strong>LOCALISATION</strong>.</li> </ul> <h2>Étape 4 : un peu d'attributs</h2> <h3>Documents</h3> <ul> <li>Entrée : <code>etape3.xml</code></li> <li>Feuille de style : <code>ajoute_attributs.xsl</code></li> <li>Sortie : <code>etape4.xml</code></li> </ul> <h3>À faire</h3> <p><strong>E4.</strong> Mettez au point une feuille de style <code>ajoute_attributs.xsl</code> permettant d'ajouter des attributs aux éléments <strong>OFFRE</strong>, avec les correspondances suivantes :</p> <ul> <li><strong>ID</strong> devient un attribut <strong><em>xml:id</em></strong>;</li> <li><strong>DATE_DERNIERE_MAJ</strong> devient un attribut <strong><em>date-maj</em></strong> ;</li> <li><strong>TYPE</strong> devient un attribut <strong><em>type</em></strong>;</li> </ul> <p>Les éléments <strong>ID</strong>, <strong>DATE_DERNIERE_MAJ</strong> et <strong>TYPE</strong> ne doivent plus apparaitre dans le document de sortie.</p> <h2>Et maintenant, exploitons le document !</h2> <p>Pour les questions suivantes, vous travaillerez en utilisant le fichier <code>etape4.xml</code>.</p> <h3>Requêtes xpath</h3> <p><strong>E5.</strong> Donnez des chemins <strong>XPATH absolus</strong> permettant d'obtenir les informations suivantes :</p> <ol> <li>La liste des sites web ;</li> <li>Le nom des offres (<strong>NOM_OFFRE</strong>) de type "Producteur" ;</li> <li>La liste des offres (<strong>NOM_OFFRE</strong>) pour lequelles il n'y a pas de site web (<strong>SITE_WEB</strong>) ;</li> <li>La liste des offres (<strong>NOM_OFFRE</strong>) où l'on peut trouver du fois gras ;</li> <li>La liste des sites web des offres avec le label (__MARQUES_LABELS__) « Bienvenue à la Ferme » (attention aux majuscules !) ;</li> <li>Les identifiants (attribut <em>xml::id</em>) des offres mise à jour le 28/11/2014.</li> </ol> <h3>Transformation en HTML</h3> <ul> <li>Entrée : <code>etape4.xml</code></li> <li>Feuille de style : <code>transfo_html.xsl</code></li> <li>Sortie : <code>etape5.html</code></li> </ul> <p><strong>E6.</strong> Mettez au point une feuille de style XSLT permettant de transformer en HTML la 10ième offre de la liste. Vous être libre du choix de la présentation.</p> <h2>Envoyez votre devoir.</h2> <p>Vous devez envoyer votre devoir sous la forme d'une archive <strong>.zip</strong> ou <strong>.tar.gz</strong> (vous pouvez utilisez pour cela la fonction « download » de votre espace codeanywhere.com). Cette archive devra contenir les feuilles de style que vous avez conçues et votre fichier texte contenant les expressions xpath :</p> <ul> <li><code>nettoie.xsl</code></li> <li><code>ajoute_structure.xsl</code></li> <li><code>ajoute_attributs.xsl</code></li> <li><code>transfo_html.xsl</code></li> </ul> <p>L'archive est à envoyer à <strong>defi@jpjorda.fr</strong>.</p>