XML
Transcription
XML
Les langages Internet Jean-Claude CABIANCA Le langage XML (eXtensible Markup Language) 1 . Introduction Le XML est le frère du HTML tous deux étant en effet issus du SGML. Là où le HTML a une approche de mise en forme de texte , le XML est lui orienté données. Son système de balise définie par le créateur du fichier, vise aussi bien à un « parsage » (analyse) aisé par une application qu'à garder un aspect lisible pour l'utilisateur humain. Le XML est rarement seul, il est souvent accompagné de deux autres types de fichier : le XSD (le schéma) et le XSL(T) (la mise en forme). 2 . Le XML Exemple de fichier xml listant des voitures : voiture.xml. <?xml version="1.0" encoding="UTF-8"?> <Voiture xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <marque>Renault</marque> <modele>Scenic</modele> <kms>150000</kms> <dateMiseEnCirculation>2006-02-01</dateMiseEnCirculation> </Voiture> La structure d'un fichier XML est toujours la même, elle commence toujours par : <?xml version="1.0" encoding="UTF-8"?> ou encore <?xml version="1.0" encoding="ISO-8859-1"?> qui comporte la version du XML utilisée ainsi que le type d'encodage du document. Viennent ensuite la hiérarchie des balises avec les nodes. On remarque que les balises commencent par < et se terminent par >. Pour chaque balise ouvrante, il faut une balise fermante. Nous avons un node père Voiture et des nodes « enfants » : marque; modèle; kms et dateMiseEnCirculation. Entre ces différentes balises, on trouve les valeurs. 3 . Le XSD « XML Schema Description » Le XSD, est un fichier nécessaire si l'on veut valider les données du XML. Lié à un fichier XSD, le XML ne pourra pas contenir un type de données autre que celui prévu par le concepteur. Exemple de fichier xsd : voiture.xsd. <?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="Voiture"> <xs:complexType> <xs:sequence> <xs:element name="marque" type="xs:string"/> <xs:element name="modele" type="xs:string"/> <xs:element name="kms" type="xs:integer"/> <xs:element name="dateMiseEnCirculation" type="xs:date"/> </xs:sequence> </xs:complexType> </xs:element> </xs:schema> Le XML by JCC Page 1/8 Les langages Internet Jean-Claude CABIANCA Dans ce fichier XSD, on définit les données pour chaque node « enfant ». Par exemple, marque est de type texte (string); kms est de type nombre entier (integer). Si vous essayez d'entrer une autre valeur que celle prévue dans les XSD, le fichier ne pourra pas être validé. 4 . Le XSL(T) « eXtensible Styleshhet Language » Troisième fichier important, le XSL, ce fichier prend toute son importance dès que l'on veut afficher ou mettre en forme les données. Non traité ici. 5 . Génération des fichiers à l'aide de editXml Nous allons utiliser le logiciel editXml version free, sous Linux et Windows. Ce logiciel va nous permettre de générer ces 2 types de fichiers en commençant par le XSD. 5.1. Génération du fichier XSD Nous allons créer le fichier parking.xsd en faisant File->New (W3C XML Schema). On clicke sur l'onglet « Visual Editor » situé en bas à gauche. On double clicke sur xs:element, on modifie le nom de l'élément qui devient parking. Le XML by JCC Page 2/8 Les langages Internet Jean-Claude CABIANCA Depuis l'éditeur graphique, il suffit maintenant de créer les nodes enfants en faisant à l'aide d'un click droit depuis l'élément parking : Add Child-> Complex Type, puis Add Child-> Sequence, puis Add Child-> element, puis Add Child-> Complex Type, puis Add Child-> element pour tous les des nodes enfants de l'élément voiture. Il est nécessaire de déclarer le type de la valeur pour chaque élément, dans les propriétés à droite : 5.2. Génération du fichier XML Lorsque le fichier XSD est terminé, on peut créer le fichier xml voiture.xml en faisant File>New (Standard XML Document). Le XML by JCC Page 3/8 Les langages Internet Jean-Claude CABIANCA Il faut maintenant associer notre fichier xml le schéma xsd correspondant en faisant DTD/Schema → Assign W3C XML Schema to Document, puis en spécifiant le fichier xsd. Le fichier xml (parking.xml) est maintenant en relation avec le schéma xsd (parking.xsd), et on obtient le contenu suivant : <?xml version="1.0" encoding="UTF-8"?> <parking xsi : noNamespaceSchemaLocation = "D:\Travail\tsiris 2012\pedagogie\developpement logiciel\xml\parking\parking.xsd" xmlns : "http://www.w3.org/2001/XMLSchema-instance"> <voiture> <marque>VALUE</marque> <modele>VALUE</modele> <kms>VALUE</kms> <dateMiseEnCirculation>VALUE</dateMiseEnCirculation> </voiture> </parking> 2010xsi = On peut affecter une valeur à chaque champ et rajouter des enregistrements : <?xml version="1.0" encoding="UTF-8"?> <parking xsi : noNamespaceSchemaLocation = "D:\Travail\tsiris 2012\pedagogie\developpement logiciel\xml\parking\parking.xsd" xmlns : "http://www.w3.org/2001/XMLSchema-instance"> <voiture> <marque>Peugeot</marque> <modele>Partner</modele> <kms>80000</kms> <dateMiseEnCirculation>2009-02-01</dateMiseEnCirculation> </voiture> <voiture> <marque>Citroen</marque> <modele>Evasion</modele> <kms>150000</kms> <dateMiseEnCirculation>2006-02-10</dateMiseEnCirculation> </voiture> <voiture> <marque>Fiat</marque> <modele>Uno</modele> <kms>200000</kms> <dateMiseEnCirculation>2003-09-11</dateMiseEnCirculation> </voiture> </parking> Le XML by JCC 2010xsi = Page 4/8 Les langages Internet Jean-Claude CABIANCA 6 . Importation des données xml avec Access 2007 Nous allons utiliser Access 2007 afin d'importer les données contenues dans un fichier xml dans une base de données. Il faut choisir l'onglet « Donnée externes » et choisir la source des données (le fichier xml). On récupère ainsi la structure du fichier xml avec une table voiture et les champs marque, modele, kms et dateMiseEnCirculation. 7 . Xml et Visual C++ 7.1. Généralités On va utiliser ici les classes XmlWriter et XmlReader résidant dans l'espace de noms System::Xml. D'autre part le projet devra être configuré en mode managé (option /clr) : Propriétés projet / propriétés de configuration / Général / Prise en charge du CLR. Le XML by JCC Page 5/8 Les langages Internet Le XML by JCC Jean-Claude CABIANCA Page 6/8 Les langages Internet Jean-Claude CABIANCA 7.2. Écriture dans un fichier XML #using <System.Xml.dll> #using <System.dll> using namespace System; using namespace System::Xml; String^ path = "D:\\sources\\visual studio\\xml\\parking.xml"; XmlWriterSettings^ settings = gcnew XmlWriterSettings(); settings->Indent = true; settings->IndentChars = (" "); XmlWriter^ xmlOut = XmlWriter::Create(path, settings); xmlOut->WriteStartDocument(); xmlOut->WriteStartElement("Parking"); xmlOut->WriteAttributeString("xsi", "http://www.w3.org/2001/XMLSchema-instance"); xmlOut->WriteStartElement("voiture"); xmlOut->WriteElementString("Marque", "Peugeot"); xmlOut->WriteElementString("Modele", "Partner"); xmlOut->WriteElementString("kms", "100000"); xmlOut->WriteEndElement(); xmlOut->WriteStartElement("voiture"); xmlOut->WriteElementString("Marque", "Citroen"); xmlOut->WriteElementString("Modele", "Evasion"); xmlOut->WriteElementString("kms", "200000"); xmlOut->WriteEndElement(); xmlOut->WriteStartElement("voiture"); xmlOut->WriteElementString("Marque", "Fiat"); xmlOut->WriteElementString("Modele", "Punto"); xmlOut->WriteElementString("kms", "150000"); xmlOut->WriteEndElement(); xmlOut->WriteEndElement(); xmlOut->Close(); Résultat : <?xml version="1.0" encoding="utf-8"?> <Parking xsi="http://www.w3.org/2001/XMLSchema-instance"> <voiture> <Marque>Peugeot</Marque> <Modele>Partner</Modele> <kms>100000</kms> </voiture> <voiture> <Marque>Citroen</Marque> <Modele>Evasion</Modele> <kms>200000</kms> </voiture> <voiture> <Marque>Fiat</Marque> <Modele>Punto</Modele> <kms>150000</kms> </voiture> </Parking> Le XML by JCC Page 7/8 Les langages Internet Jean-Claude CABIANCA 7.3. Lecture d'un fichier XML #using <System.Xml.dll> #using <System.dll> using namespace System; using namespace System::Xml; CString marque, modele, kms; m_edit_marque = ' '; m_edit_modele = ' '; m_edit_kms = ' '; String^ path = "D:\\sources\\visual studio\\xml\\parking.xml"; XmlReaderSettings^ settings = gcnew XmlReaderSettings(); settings->IgnoreWhitespace = true; settings->IgnoreComments = true; XmlReader^ xmlIn = XmlReader::Create(path, settings); if (xmlIn->ReadToDescendant("voiture")) { do { xmlIn->ReadStartElement("voiture"); marque = xmlIn->ReadElementContentAsString(); m_edit_marque = m_edit_marque + ' ' + marque; modele = xmlIn->ReadElementContentAsString(); m_edit_modele = m_edit_modele + ' ' + modele; kms = xmlIn->ReadElementContentAsString(); m_edit_kms = m_edit_kms + ' ' + kms; } while (xmlIn->ReadToNextSibling("voiture")); } xmlIn->Close(); Le XML by JCC Page 8/8