Vous devez activer Javascript pour accéder à ce site
 

Semaine

RECHERCHE

Travail 4

Consignes générales

  1. Utilisez les noms des fichiers spécifiés dans chaque exercice.
  2. Vous n'avez droit qu'à un seul fichier « .java » par exercice et il ne doit pas contenir plus de 500 lignes de code. Tous les problèmes peuvent être résolus en moins de 100 lignes! Rappelons qu'une « ligne » de code comprend un maximum de 80 caractères.
  3. Chaque fichier Java doit débuter par un commentaire donnant le sigle du cours et votre nom comme ceci :
    /**
    * INF 6450 -  Travail noté 4 - Votre nom,  fait avec JDK 1.9
    */
  4. Vous devriez pouvoir accéder à la version de votre SDK, en tapant « javac -version » ou « java -version » dans une ligne de commande.
  5. Ne traitez pas les cas d'exception, comme les fichiers qui n'existent pas ou ne peuvent être ouverts. Par contre, votre code doit produire un résultat correct dans des conditions normales. Par exemple, si on vous demande de produire du XML, il doit s'agir de XML bien formé. Si on vous demande de lire du XML, vous devez pouvoir lire tout XML qui se conforme aux spécifications décrites dans l'exercice. Vous devez utiliser l'API DOM.
  6. Il est impératif que vos fichiers compilent avec le SDK (le plus récent), sans utiliser de librairies particulières. Un fichier Java qui ne compile pas ne sera pas noté.
  7. Lorsque vous aurez terminé les exercices, vous devez transmettre à votre personne tutrice, en utilisant l'outil de dépôt de l'Université, l'ensemble des fichiers avec l'extension Java comme fichiers attachés. Vous devez aussi remettre un fichier XML ainsi qu'un document (Word 97/2000/XP, ODF, PDF, RTF ou en format texte) clairement identifié à votre nom contenant l'analyse demandée à la première question du travail. Il s'agit d'un travail personnel et vous ne devez pas partager vos solutions.

Cette activité notée compte pour 15% de la note globale.


Exercice 1

Supposons une liste de transactions avec un attribut « montant » pour chaque client, comme dans le document XML suivant :

<?xml version="1.0" encoding="ISO-8859-1" ?>
   <liste> 
    <client nom="Jean Charles"> 
        <transaction montant="500" />
 <question>Quelle est la dernière marque?</question>
        <transaction montant="1200" /> 
     </client> 
     <client nom="Pierre Élisabeth"> 
        <transaction montant="600" /> 
        <transaction montant="800" /> 
 <question>Où puis-je trouver le modèle 2002?</question>
        <transaction montant="2000" /> 
     </client> 
    </liste>

Supposons que le fichier se nomme « transactions.xml ».

Nous ne savons pas combien de transactions il peut y avoir par client; nous ne savons pas combien de clients nous avons; de plus, nous ne connaissons pas les noms des clients d'avance. Nous supposons que l'élément-racine est toujours « liste »; que tous les éléments « transaction » ont un attribut « montant »; que tous les éléments « transaction » sont dans des éléments « client »; que les éléments « client » sont tous dans l'élément-racine et ont tous un attribut « nom ». Nous supposons également qu'il n'y aura pas deux attributs « nom » avec la même valeur (même nom). Enfin, nous supposons que toutes les valeurs d'attribut de « montant » sont des entiers (« int » en Java).

Écrivez un programme qui calcule la somme des valeurs de l'attribut « montant » pour chaque client (seuls les attributs « montant » des éléments « transaction »). Nous supposons qu'il s'agit de nombres entiers, des dollars par exemple. Le code source de votre programme sera dans un fichier nommé « Transactions.java ».

Ainsi, la commande « java Transactions transactions.xml » devra donner :

 Nom du client: Jean Charles
 Somme: 1700
 Nom du client: Pierre Élisabeth
 Somme: 3400

Comparez la solution que vous obtenez en utilisant DOM avec ce qui est possible de faire avec XSLT, en fonction du temps de développement. Donnez au moins un avantage de l'approche DOM sur l'approche XSLT et un avantage de l'approche XSLT sur DOM. Vous devez remettre une solution XSLT sous la forme d'un document XML. Vous pouvez mettre des commentaires dans votre code Java, mais la comparaison entre DOM et XSLT doit être faite dans un document à part.

Exercice 2

Avec XSLT, nous pouvons combiner plusieurs documents en utilisant la fonction « document » qui permet de charger plusieurs documents XML. Mais que se passe-t-il lorsque nous devons combiner plusieurs documents, dont certains ne sont pas en XML? À ce moment, l'utilisation d'un langage comme Java et de DOM peut être très avantageuse.

Supposons qu'un serveur enregistre les achats effectués sur le site, dans un fichier texte, en plaçant chaque achat sur une ligne avec des informations séparées par des virgules. Le fichier se nomme « achats.txt » :

 Jean Charles, 3214324565, 321, 2
 Yvan Richard, 5435435545, 321, 1
 Yvette Gagnon, 4324324243, 1, 12

Sur chaque ligne, se trouvent le nom du client, son numéro de carte de crédit, le code du produit acheté et la quantité achetée. Nous supposons que le serveur est un logiciel commercial et qu'il n'est pas possible de le modifier pour obtenir le format des données en XML.

Par ailleurs, nous avons un document XML contenant notre inventaire; le fichier se nomme « inventaire.xml ». Le voici :

<?xml version="1.0" encoding="ISO-8859-1"?>
 <inventaire>
 <produit code="1" prix="432.00" quantité= "43" />
 <produit code="32" prix="32.00" quantité= "100"  />
 <produit code="321" prix="31.00" quantité= "200"  />
 </inventaire>

Écrivez un programme qui met à jour l'inventaire en tenant compte des achats de la journée, contenus dans le fichier « achats.txt ». Votre code source devra se trouver dans le fichier « Inventaire.java » et la commande « java Inventaire achats.txt inventaire.xml» va modifier le fichier « inventaire » pour y soustraire les produits achetés ce qui, dans le cas qui nous concerne, donnera un fichier « inventaire.xml » ayant le contenu suivant :

<?xml version="1.0" encoding="ISO-8859-1"?>
 <inventaire>
 <produit code="1" prix="432.00" quantité= "31" />
 <produit code="32" prix="32.00" quantité= "100"  />
 <produit code="321" prix="31.00" quantité= "197"  />
 </inventaire>

Nous pouvons supposer que le fichier « inventaire.xml » ne contient qu'un seul élément « produit » pour chaque valeur d'attribut « code ». Nous pouvons aussi supposer qu'aucun code invalide n'apparaît dans le fichier « achats.txt ». Par contre, nous ne savons pas combien de produits nous avons et combien d'achats il y aura. Évidemment, il est possible d'avoir un nombre négatif de produits dans notre inventaire.

Indice.- Il est parfaitement possible d'écrire un tel programme en moins de 50 lignes.

Exercice 3

Il est parfois pénible d'utiliser l'interface DOM quand on cherche une seule information précise. Écrivez un programme Java qui permet d'extraire le prix correspondant à l'item ayant le code de produit 321 dans un fichier XML ayant la forme suivante en utilisant une expression XPath.

<?xml version="1.0" encoding="ISO-8859-1"?>
 <inventaire>
 <produit code="1" prix="432.00" quantité= "43" />
 <produit code="32" prix="32.00" quantité= "100"  />
 <produit code="321" prix="31.00" quantité= "200"  />
 </inventaire>

Exercice 4

En utilisant AJAX, on peut rendre une page web dynamique. Malheureusement, pour des raisons de sécurité, un script dans une page web ne peut charger un fichier qui se trouve dans un domaine autre que celui d'origine. On vous demande donc de déposer le fichier RSS https://www.ledevoir.com/rss/edition_complete.xml (il faut enregister le contenu sur votre disque) sur votre machine et de créer une page web AJAX capable de charger le fichier XML en question et d'afficher tant le titre des nouvelles que leur description complète. Attention, il ne faut récupérer que le contenu des éléments au sein des éléments item. Vous pouvez supposer que les titres et descriptions ne contiennent que du texte, sans éléments HTML.

Certains étudiants trouvent utile d'utiliser la syntaxe « try { } catch(e) {} » de l'ECMAScript (qui fonctionne comme en Java) pour traiter les erreurs. Cependant, cette syntaxe n'est pas nécessaire.

<?xml version="1.0"  ?>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="UTF-8">
<title>Exemple AJAX</title>

<script language="JavaScript">
function afficheTitres(doc) {
     titres = doc.getElementsByTagName("title");
     elementol = document.createElement("ol");
     var longueur = titres.length;
     for ( k = 0; k < longueur ; ++k) {
       elementli = document.createElement("li");
       elementli.appendChild(document.createTextNode(titres[k].firstChild.nodeValue));
       elementol.appendChild(elementli);
     }
     body = document.getElementsByTagName("body").item(0);
     body.appendChild(elementol);
}

function chargeDocument(f) {
        var fileReader = new FileReader();
        fileReader.onload = function(evt) {
           var doc = new DOMParser().parseFromString(this.result, 'application/xml');
           afficheTitres(doc);
        }
        fileReader.readAsText(f[0]);
}

</script>
</head>
<body>
  <p>Récupére et affiche
  les nouvelles du devoir: </p>
<input type="file" onchange="chargeDocument(this.files)" ></input>

</body>
</html>

Exercice 5

Pour les cas simples, on peut convertir les documents XML en JSON, et vice versa avec une simple familiarité avec les formats. Convertissez le fichier suivant en fichier JSON. Vérifiez que votre document JSON est un document JSON valable.

<?xml version="1.0" encoding="ISO-8859-1"?>
<joueur>
   <nom>Pierrot Rouge</nom>
   <cote>3 étoiles</cote>
   <parent>
  <nom>Pierrette Rouge</nom>
   <nom>Pierre Rouge</nom>
  </parent>
 </joueur>

© Daniel Lemire, 2014. Tous droits réservés.