TD 12: Révisions

Rappels / Outils


Exercice 1

Melchior, Balthazar et Gaspard décident de vivre en colocation. Ils veulent faire leur comptes ensemble, et font appel à vous, informaticiens en herbe, pour les aider, Bien entendu, vous choisissez de mettre à profit votre cours de XML pour cette tâche. Voici une liste des dépenses déjà effectuées :

  1. Écrivez un document XML dont l'élément racine '<comptes>' contient une liste de dépenses '<depense>'.
  2. Ajoutez un élément '<colocataires>' qui contient la liste des colocataires '<coloc>', chacun avec un identifiant.
    Utilisez cet identifiant dans les dépenses faites par le colocataire correspondant (avec un attribut coloc_id).
    Déplacez les éléments '<depense>' dans un élément '<actions>' sous l'élément racine du XML.

    RENDU: 1.2.xml

  3. Écrivez une DTD qui décrit votre XML. Essayez de la rendre la plus restrictive possible, tout en validant votre XML.

    RENDU: 1.3.dtd

  4. Pour faciliter la relecture des comptes, Melchior décide d'ajouter des détails sur chaque dépense. Ainsi, vous ajouterez à chaque éléments '<depense>': Adaptez votre DTD en fonction.

    RENDU: 1.4.xml 1.4.dtd

  5. Un soir, Gaspard fait des courses alimentaires exceptionnelles pour un dîner. Il dépense 51€. Melchior est absent ce soir là, il est donc juste de ne pas lui faire payer ces courses. En revanche, Gaspard, qui a invité un ami, paye deux fois plus que Balthazar. Ajoutez cette dépense à votre XML, en incluant un attribut 'coeff' à l'élément '<pour>' qui prendra comme valeur un entier. Cet attribut est optionnel (on le supposera égal à 1 s'il est absent). Adaptez votre DTD.

    RENDU: 1.5.xml 1.5.dtd

  6. Écrivez un schéma XSD qui, en plus de reprendre toutes les restrictions précédentes, valide l'attribut date. Il devra bien entendu valider votre XML.

    RENDU: 1.6.xsd

  7. Ajoutez des éléments '<remboursement>' qui correspond à un remboursement d'une personne à une (seule) autre. Comme pour les dépenses, il faudra y intégrer la date, le montant et un unique élément '<pour>'. Adaptez votre XSD.

    Jésus est né ! et il se met en colocation avec les trois mages. Ajoutez le, et faites lui dépenser et bénéficier de dépenses. Enrichissez votre XML avec plein de dépenses et remboursements que vous inventez, de façon à montrer les différentes possibilités (catégories, coeff, liste des bénéficiaires…).

    RENDU: 1.7.xml 1.7.xsd

  8. Écrivez un XSLT qui affiche pour chaque colocataire la somme totale qu'il a dépensée.

    RENDU: 1.8.xsl

  9. Ajoutez-y la somme totale que chaque colocataire aurait du payer, c'est à dire la somme des dépenses dont il a bénéficié, en prenant en compte les coefficients (supposé égal à 1 si l'attribut 'coeff' est absent).

    RENDU: 1.9.xsl

  10. Faites la différence, pour chaque colocataire, de ces deux montants, pour chaque colocataire, et affichez les avec le signe. Vérifiez que la somme vaut 0 et affichez la.

    Sortie attendue (les montants peuvent bien sûr varier) :

    Dépenses:
    	Melchior : 1536€
    	Balthazar : 732€
    	Gaspard : 138€
    	Jésus : 15€
    Répartition:
    	Melchior : 688.75€
    	Balthazar : 705.75€
    	Gaspard : 722.75€
    	Jésus : 303.75€
    Balance :
    	Melchior : 847.25€
    	Balthazar : 26.25€
    	Gaspard : -584.75€
    	Jésus : -288.75€
    Vérification :
    	0€ − ok
    

    RENDU: 1.10.xsl

  11. Écrivez un fichier XSLT qui produit un document HTML permettant de visualiser le résultat de la question précédente sous forme de tableau (une ligne par colocataires, 3 colones : Dépenses, Répartition et Balance).

    RENDU: 1.11.xsl

  12. Ajoutez-y la liste des dépenses par ordre chronologique.

    RENDU: 1.12.xsl

  13. Comme la question précédente, mais en triant par catégorie avant (un tableau par catégorie). Exemple de rendu HTML :

    Total

    ColocataireDépensesRépartitionBalance
    Melchior 1536€ 688.75€ 847.25€
    Balthazar 732€ 705.75€ 26.25€
    Gaspard 138€ 722.75€ -584.75€
    Jésus 15€ 303.75€ -288.75€

    Depenses

    Loyer

    DateMontantCatégorieParPour
    2015-12-011236loyerMelchiorMelchior Balthazar Gaspard

    Meuble

    DateMontantCatégorieParPour
    2015-12-13732meubleBalthazarMelchior Balthazar Gaspard
    2015-12-2515meubleJésusMelchior Balthazar Gaspard Jésus

    Alimentation

    DateMontantCatégorieParPour
    2015-12-1487alimentationGaspardMelchior Balthazar Gaspard
    2015-12-1551alimentationGaspardBalthazar Gaspard

    Autre

    DateMontantCatégorieParPour
    2015-12-25300autreMelchiorJésus

    RENDU: 1.13.xsl