Cours de C# pour l'ESSI - ESSI2 GL - XML dans .NET

RACINE

Partie 1 : Introduction

Je rappellerai à mon aimable lecteur(trice) que ce cours est sponsorisé par Microsoft France. Par conséquent ce sont bien évidement des technologies développées ou utilisées par Microsoft (mais qui ne sont pas forcément sa propriété) que je présenterai ici.


Pour utiliser .NET framework, vous devez avoir installé sur votre poste AU MOINS :
  1. Windows XP Pro ou 2000 avec SP2 ou NT4 avec SP6a
  2. Internet Explorer 5.01
  3. IIS (mais pas dans tout les cas)
  4. .NET Framework SDK (evidemment !!)
  5. un éditeur de votre choix (emacs ou VS.NET suivant les courants de pensée)


Pour que vous puissiez bien faire ce TP, si vous n'êtes pas familier avec .NET ou XML, prenez le temps de regarder la présentation faite à l'ESSI en HTML ou PPT sur ce site (http://www.essisharp.ht.st).

Nous allons, tout en nous familiarisant au C#, développer un logiciel (enfin, un prototype) qui nous permettra de sauvegarder et d'effectuer des requêtes sur une collection de DVDs. VOUS N'AUREZ PAS TOUT A FAIRE !! Etant donné que je ne peux préjuger d'un certain niveau de connaissance sur XML, certaines étapes se borneront à "regarder comment c'est fait".
A la fin de chaque étape, vous pourrez trouver des fichiers correspondants à une solution au problème posé, pour que vous puissiez avancer.

J'espère qu'il vous plaira ! :D

Il est plus que conseillé de se référer à la présentation C# vs. Java (SURTOUT si vous n'avez jamais fait de C#) ainsi qu'aux autres cours en cas difficulté. Notamment le cours sur XML et les WebServices.
Si vous constatez des erreurs, des imprécisions ou que vous avez des problèmes avec ce TP, adressez vous à l'auteur.


Tout le matériel qui est présenté n'est nullement un cours officiel de l'ESSI ou de Microsoft. Il a été produit par l'auteur et en est l'exclusive propriété.
Toutes remarques pouvant aider à l'améliorer ou à corriger les diverses erreurs pouvant subsister sont les bienvenues. (email auteur)

Partie 2 : Pratique

Cliquez pour télécharger Cliquez ici pour obtenir le .NET Framework SDK (130 Mo).

1/ XML Schema (XSD)

Cliquez pour télécharger Cliquez ici pour obtenir le schéma XSD présenté ci-dessous.

Voici présenté ci-dessous le fichier XSD qui va nous servir à vérifier nos données XML. Il permet de définir une DVDTheque qui est composée de DVD. Ces derniers sont composés d'un titre, d'un réalisateur, d'une date de sortie et d'acteurs principaux.

<?xml version="1.0" encoding="utf-8" ?>
<xs:schema id="DVDThequeXSD" xmlns:xs="http://www.w3.org/2001/XMLSchema">
      <xs:element name="DVDTheque">
            <xs:complexType>
                  <xs:sequence maxOccurs="unbounded">
                        <xs:element name="DVD">
                              <xs:complexType>
                                    <xs:all>
                                          <xs:element name="nom" type="xs:string" />
                                          <xs:element name="datesortie" type="xs:date" />
                                          <xs:element name="realisateur" type="personne" />
                                          <xs:element name="acteurs">
                                                <xs:complexType>
                                                      <xs:sequence>
                                                            <xs:element name="acteur" type="personne" minOccurs="1" maxOccurs="10" />
                                                      </xs:sequence>
                                                </xs:complexType>
                                          </xs:element>
                                    </xs:all>
                              </xs:complexType>
                        </xs:element>
                  </xs:sequence>
            </xs:complexType>
      </xs:element>
      <xs:complexType name="personne">
            <xs:sequence>
                  <xs:element name="nom" type="xs:string" />
                  <xs:element name="prenom" type="xs:string" />
            </xs:sequence>
      </xs:complexType>

</xs:schema>


Préambule

Dans la première partie, on décrit le fichier comme étant encodé en UTF8. Puis on commence à décrire l'arborescence XML (XSD étant décrit en XML) en indiquant par l'attribut
<xs:schema id="DVDThequeXSD" xmlns:xs="http://www.w3.org/2001/XMLSchema">
que l'on va utiliser le schéma XSD (attribut xmlns) contenu à l'URL "http://www.w3.org/2001/XMLSchema", et que tout ce que l'on préfixera par la suite de xs: (le xmlns:xs="...") est défini dans ce même schéma XSD. C'est de là d'où viennent les définitions de string, date, sequence, complexType,....

Type Personne

Dans la dernière partie du fichier, le xs:complexeType Personne est une définition d'un type. Comme celle d'un DVD, sauf que celle-ci est utilisée à plusieurs endroits : le champ realisateur d'un DVD est une Personne. C'est à dire, qu'il possède un nom et un prenom.
<xs:complexType name="personne">
	<xs:sequence>
		<xs:element name="nom" type="xs:string" />
		<xs:element name="prenom" type="xs:string" />
	</xs:sequence>
</xs:complexType>
Une personne est un complexType (type composé), qui est composé dans l'ordre (à cause du sequence) d'un élément nom et d'un élément prenom tous deux de type string.

Autre représentation du XSD


Ce schéma XML a été "fait à la main" avec Visual Studio .NET, j'entends par là tapé sans l'intervention d'un outil graphique. Par contre, VS.NET vous permet aussi d'avoir une vision "graphique" de votre oeuvre, ce qui peut être bien agréable.

Une vue bien agréable fournie par VS.NET


Bilan XSD

J'espère avoir montré que le XSD n'est pas difficile à produire, et que même dans sa forme textuelle, il est compréhensible. Nous allons utiliser ce schema dans notre exemple pour valider nos fichiers DVD. Je ne vous recommende pas de le modifier pour la suite du TP, mais au moins de l'avoir lu et d'avoir compris comment il est formé. Il pourra vous servir de base au cas où vous devriez développer votre propre schéma.

Une très bonne URL sur XSD est cet EXCELLENT tutoriel sur XSD chez W3Schools.com.

2/ Instance XML

Cliquez pour télécharger Cliquez ici pour obtenir le squelette de fichier XML.

Avoir un schéma XSD permet de valider une instance XML, c'est à dire un document XML. Vous pouvez savoir facilement si votre document respecte le formalisme recherché.

Comprenez bien que la validation XML se passe à deux niveau :
  1. Dans la définition même de XML, un document pour être validé doit être valide et bien formé (termes consacrés).
  2. Il doit correspondre à un schéma bien définis (XSD ou DTD).
La notion de validité fais partie de manière intrinseque du format XML, et c'est ce qui rend ce langage particulièrement interressant à utiliser.


Un fichier de base XML valide


Comme vous aurez certainement deviné, ceci est une DVDthèque ne contenant qu'un seul DVD. Ce dernier est Après la pluie de Kurosawa Akira, sorti en 1998, avec comme acteurs Mifune Shiro et Terao Akira.
En vous basant sur comment est formé l'élément acteurs (qui est un ensemble d'acteur), ajoutez un ou plusieurs autres DVD dans la DVDthèque.

Vous trouverez ci-dessous une solution possible (2 DVDs) ... mais essayez déjà de faire la votre ;)
Cliquez pour télécharger Cliquez ici pour obtenir une solution de DVDThèque avec 2 DVDs dedans.

3/ Validation

Cliquez pour télécharger Cliquez ici pour obtenir le squelette du validateur XML.

Le but de cette partie est de créer une classe qui est capable de valider un documet XML au moyen d'un schéma XSD. Ne craignez rien, cette opération étant un tout petit peu trop compliquée, vous n'aurez pas à l'ccomplir. Tout le code est fournit, seul une petite partie dans le Main de test est à écrire (pour se faire la main doucement avec le C#).

Voici la partie interressante du code. On charge une liste de fichiers XSD, on instancie un objet validateur (fournis par .NET), on lie le tout avec le document XML à valider; pour finir, on lit tout le document et on signale les erreurs.
    //create a collection of XML Schema
    XmlSchemaCollection xsdColl = new XmlSchemaCollection();
    //add the XSD file to the collection
    xsdColl.Add("", new XmlTextReader(XSDFile));


    //the validating reader
    XmlValidatingReader vr = new XmlValidatingReader(new XmlTextReader (XMLFile));

    //we'll use XSD
    vr.ValidationType = ValidationType.Schema;
    
    //the XSD files are here
    vr.Schemas.Add(xsdColl);
    
    //what to do on error and warnings 
    //(ignore it, it's the way C# handles with event programming)
    vr.ValidationEventHandler += new ValidationEventHandler (XSDValidationHandler);

    
    //read the file through
    while(vr.Read()) { }

Je vous rappelle que pour compiler une classe C# (un .cs) en un exe; vous taperez une ligne ressemblant à celle ci-dessous:
csc /out:XMLValidator.exe XMLValidator.cs

Cliquez pour télécharger Cliquez ici pour obtenir une solution du validateur XML (simple).
Cliquez pour télécharger Cliquez ici pour obtenir une solution du validateur XML (plus complexe).

4/ Requetes sur notre document XML

Maintenant, avec assez peu de lignes de code, nous sommes sûr que notre document XML contient des données valides et conformes au format que l'on souhaitait obtenir.

On utilisera X-Path. Je vous renvoi vers le cours #4 section X-Path pour comprendre de quoi il s'agit et comment on forme une requête X-Path.
Voici par exemple un programme de base qui lit un fichier XML, effectue une requète dessus et affiche les noeuds résultats sur la sortie standard. Rien de bien transcendant, mais efficace.
XmlDocument doc = new XmlDocument("monfichierxml.xml");

XmlNodeList nodeCollection = doc.DocumentElement.SelectNodes ("ma requete Xpath ..."); 

foreach (XmlNode n in nodeCollection)
  Console.WriteLine(n); 
Le but va être de coupler la validation (la classe à écrire ci-dessus) avec un programme qui affiche les informations (titres, etc ..) des DVDs contenus dans la collection (le document XML validé).
A vous de jouer !!

NB : si vous ne trouvez pas une classe, que vous avez des problèmes, que ça compile pas : cherchez dans l'AIDE !!! Demarrer -> Programmes -> Microsoft .NET Framework -> Documentation (enfin, normalement :D).
Sinon, reste mon mail !! Envoyez moi votre source avec une description de votre problème et je vous répondrai vite ...

Partie 3 : Le mot de la fin

Remerciements

Monsieur Paul FRANCHI, professeur à l'ESSI, pour ses encouragements et pour m'avoir permis de faire ma présentation et de m'avoir laissé son dernier créneau TP.
Monsieur Laurent ELLERBACH, responsable relation études supérieures chez Microsoft France, pour son soutien et ses idées.

Sources

Sur le Web : Bibliographie :



par Alain Vizzini (vizzini@essi.fr)
pour l'ESSI & Microsoft, création 07-11-2002, dernière màj 09-03-2003


pages vues depuis le 14 oct. 2002