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