TD XML sur http://xml.pastorelly.com/

Le support de cours se trouve ici.

  1. Téléchargez XMLSpy

  2. Exemples XML et XML Schema: Ouvrir ExpReport.xml depuis les examples de XMLSpy.
    1. Ouvrez l'onglet XPath et effectuer des commandes. Essayez d'obtenir "Fred", "Development", le nombre des dépenses, la somme des dépenses, la moyenne des dépenses, etc..
    2. Mofidiez ExpReport.xml. Pourquoi XMLSpy fait une validation des valeurs tapées dans ExpReport.xml ? A partir de quel fichier ?
    3. Ouvrir ExpReport.xsd. Etudiez les 2 fichiers ExpReport.xml/xsd, modifiez les.
    4. Interdire le "9" dans le numéro de téléphone par exemple

  3. Utilisation XPath avancée:Ouvrez le fichier Books.xml sous XMLSpy. Ouvrez l'onglet XPath et affichez:
    1. Affichez la liste des chapter qui sont dans un livre ayant au moins 2 chapter (<=> un chapitre numéroté "II")
      • /books/book[chapters/chapter[@number="II"]]/chapters/* (ici on se base sur la présence d'un attribut number ayant pour valeur "II")
      • /books/book[count(chapters/chapter)>=2]/chapters/* (ici on se base sur le nombre de chapter présent)
    2. Affichez le nombre de chapter totaux
      • count(//chapter)
    3. Affichez le dernier chapter des livres ayant au moins 2 chapter
      • books/book[chapters/chapter[@number="II"]]/chapters/*[position()=last()]
      • books/book[count(chapters/chapter)>=2]/chapters/*[position()=last()]
    4. Essayez cette commande XPath: for $b in (/books/book[count(chapters/*)>1]/*/parent::node()) return $b/Title. Modifiez la et jouez avec
    5. Essayez cette commande XPath: every $bk in /books/book satisfies (count($bk/chapters/*) >= 1). Modifiez la et jouez avec. Remplacez every par some
    6. Essayez d'autres commandes...

  4. XML Transformation:Écrivez un XSLT document qui permet de transformer Company-Step1.xml en Company-Step2.xml

  5. XML Transformation:Ouvrez les fichiers Bank.xml et Bank.xslt sous XMLSpy.
    1. Affichez le rendu obtenu grace au XSLT. Vous devez obtenir ce rendu
    2. Le but de cet exercice est d'obtenir ce rendu. . Regardez ce que fait Bank.xslt et modifiez le pour ajouter:
    3. Statistics: Total wealth
    4. Statistics: Average account balance
    5. Statistics: Average client wealth
      • <xsl:value-of select="format-number(avg(for $i in //Client return sum(for $j in $i//AccountRef/@Ref return //Accounts/*[@Number=$j]/@Balance)), '#.00')"/>
    6. Ecrivez une function mbds:age (qui retourne le nombre d'années) qui sera appelée depuis le template DisplayAge. Affichez l'age avec le nom de la personne
    7. Statistics: Youngest client
    8. Statistics: Oldest client
    9. Statistics: Richest client
    10. Exemple de solution

  6. Utilisation de WebService:Utilisez les WebService suivants SPECS_Weather.pdf pour construire une page HTML (comme ici par ex) récapitulant la prévision météo d'une ville Américaine.
    1. Lisez bien les specs et regardez la WSDL ainsi que les exemples de code sur le wiki
    2. Choississez la ville que vous voulez pour le WS GetCityForecastByZIP, sauvez la GetCityForecastByZIPResponse dans un premier fichier XML.
    3. Récupérez les images associées avec le WS GetWeatherInformation. Sauvez la GetWeatherInformationResponse dans un second fichier XML.
    4. Écrivez un XSLT document qui transforme le premier fichier XML en un joli tableau en HTML (XSLT vide de base ici)
    5. Ajoutez-y les images qui correspondent aux prévisions dans le tableau (utilisez XSLT document() function pour accéder au second fichier XML pendant la transformation du premier)
    6. Relancez le GetCityForecastByZIP sur une autre ville et regénérez la sortie sans modfier le XSLT
    7. Envoyez moi par mail (alexandre AT pastorelly.com) votre XSLT ainsi que les 2 (ou +) fichiers XML correspondants aux WS que vous avez utilisés. En binome.
    8. Attention aux namespaces... Vous pouvez définir un namespace et préfixez chaque balise ou bien définir un xpath-default-namespace au niveau de xsl:stylesheet
    9. Pour aller plus loin:Remplacez les 2 fichiers locaux par un appel direct au WS en HTTP depuis votre XSLT, toujours avec la fonction document(). Créez un fichier XML local contenant une liste de ZIP code, ce fichier doit être parcouru par le XSLT qui appelle dynamiquement les WS de http://wsf.cdyne.com.


  7. Un QCM sur le cours et le TP aura lieu dans les prochaines semaines


Quelques liens utiles:
http://www.w3schools.com/xml/
http://www.w3schools.com/dtd
http://www.w3schools.com/Schema
http://www.w3schools.com/xpath
http://www.w3schools.com/xsl
http://www.w3schools.com/xslfo
http://www.quackit.com/xml/
http://msdn.microsoft.com/en-us/library/ms256177(v=VS.90).aspx
http://www.learn-xml-tutorial.com/
http://www.learn-xml-schema-tutorial.com/
http://www.learn-xslt-tutorial.com/
http://www.learn-xsl-fo-tutorial.com/
http://www.datypic.com/books/defxmlschema/
http://www.java2s.com/Tutorial/XML/CatalogXML.htm
http://www.w3.org/TR/xpath20/
http://www.w3.org/TR/xml/
http://www.w3.org/TR/xml-names/
http://www.w3.org/TR/xml11/
http://www.w3.org/TR/xml-names11/
http://www.w3.org/TR/xmlschema-0/
http://www.w3.org/TR/xmlschema-1/
http://www.w3.org/TR/xmlschema-2/
http://www.w3.org/TR/xpath20/
http://www.w3.org/TR/xquery-operators/
http://www.w3.org/TR/xslt20/


Alexandre PASTORELLY - Contact: alexandre AT pastorelly.com