Blog ENI : Toute la veille numérique !
🐠 -25€ dès 75€ 
+ 7 jours d'accès à la Bibliothèque Numérique ENI. Cliquez ici
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
  1. Livres et vidéos
  2. Delphi 10.3
  3. Représentation de données : formats XML et JSON
Extrait - Delphi 10.3 Programmation orientée objet en environnement Windows
Extraits du livre
Delphi 10.3 Programmation orientée objet en environnement Windows
9 avis
Revenir à la page d'achat du livre

Représentation de données : formats XML et JSON

Introduction

Il est possible de représenter une donnée de multiples façons, la seule limite étant l’imagination du développeur. De nombreux formats de représentation de données ont été créés pour tenter d’uniformiser ce concept, dans le but que les développeurs ‘parlent’ le même langage au moins dans l’échange de données. 

Deux formats ont émergé au fil des années : le XML (Extensible Markup Language) et le JSON (JavaScript Object Notation).

L’évolution du XML et sa standardisation sont suivies par le World Wide Web Consortium connu aussi sous l’acronyme W3C, alors que le JSON est soutenu par les standards ECMA (European Computer Manufacturers Association).

Il ne s’agit pas ici de comparer quel est le meilleur formalisme, mais plutôt de présenter comment on manipule ce genre de format avec les routines fournies par Delphi.

Définitions

Sérialisation : la sérialisation est le processus de conversion d’un objet en un flux d’octets pour stocker l’objet ou le transmettre à la mémoire, à une base de données, ou dans un fichier. Son principal objectif est d’enregistrer l’état d’un objet afin de pouvoir le recréer si nécessaire.

Désérialisation : il s’agit...

Format XML

1. Écriture du fichier XML, sérialisation directe

Prenons comme exemple un modèle de données qui représente une personne possédant une voiture et plusieurs enfants. Cet exemple permet de montrer comment on modélise des relations 1<->1 pour la voiture et 1<->N pour les enfants.

type 
 TCar = class(TObject) 
 private 
   FID:string; 
   FBrand : string; 
 public 
   property ID:string read FID write FID; 
   property Brand:string read FBrand write FBrand; 
end;  

On observe ci-dessus la classe TCar qui représente une voiture avec son immatriculation (ID) et sa marque (Brand).

type 
 TChild = class(TObject) 
 private 
   FLastName:string; 
   FFirstName:string; 
 public 
   property LastName:string read FLastName write FLastName; 
   property FirstName:string read FFirstName write FFirstName; 
end;  

On observe ci-dessus la classe TChild qui représente un enfant avec son nom (LastName) et son prénom (FirstName)

type 
 TPersonne = class(TObject) 
 private 
   FLastName:string; 
   FFirstName:string; 
   FAddress:string; 
   FCity :string; 
   FBirthDate:TDate; 
   FCar : TCar; 
   FChildrenList : TList<TChild>; 
 public 
   property LastName:string read FLastName write FLastName; 
   property FirstName:string read FFirstName write FFirstName; 
   property Address:string read FAddress write FAddress; 
   property City:string read FCity write FCity; 
   property BirthDate:TDate read FBirthDate write FBirthDate; 
   property Car : TCar read FCar write FCar; 
   property ChildrenList : TList<TChild> read FChildrenList write 
FChildrenList; 
   function ToJsonText:string; 
   constructor Create;reintroduce; 
   destructor Destroy;override; 
end; 

On observe ci-dessus la classe TPersonne qui représente une personne avec les informations détaillées suivantes : nom (LastName), prénom (FirstName), age (Age), adresse (Address), ville de résidence...

XML Data Binding

XML Data Binding, que l’on pourrait traduire par liaison de données XML, est le fait d’utiliser des schémas XML pour modeliser des classes ou des interfaces. Delphi propose un moteur XML Data Binding qui permet de créer une unité .pas qui modélise en une classe et une interface Delphi un modèle de données source representé en XML. Une fois ce modèle de données Delphi réalisé, on peut alors instancier des objets de ce modèle grâce à un document XML portant le type de données voulu.

Nous avons vu qu’une même structure objet peut être sérialisée de différentes façons en XML. Le standard XML propose un type de fichier qui permet de définir la structure attendue parmi ces différentes "possibilités de format" XML. Il s’agit des fichiers xsd pour XML Schema Definition.

Le moteur de XML Data Binding utilise en entrée le fichier xsd associé à la structure finale XML souhaitée. Il utilise le mécanisme d’introspection pour générer les classes et la lecture/écriture des propriétés/éléments.

images/databinding.PNG

1. Utilisation du moteur XML Data Binding

Il utilise en entrée un fichier xsd qui permet de figer le format XML attendu. Comme nous l’avons vu précédemment, il existe de nombreuses façons de modéliser le modèle objet précédent TPersonne/TCar/TChild. Ce fichier xsd va permettre de le définir de manière unique.

Il existe de nombreux outils pour générer le fichier xsd associé à un fichier XML. Analysons la structure XML suivante :

<?xml version="1.0" encoding="utf-8"?> 
<PersonneList> 
   <Personne> 
       <LastName></LastName> 
       <FirstName></FirstName> 
       <Address></Address> 
       <City></City> 
       <BirthDate></BirthDate> 
           <Car ID='' Brand='' />   
           <ChildrenList> 
 ...

Format JSON

1. Présentation

Le format JSON, pour JavaScript Object Notation, a été créé lors de l’élaboration du langage JavaScript. Il est défini comme facile à lire et écrire, moins volumineux que le XML, et il est beaucoup plus directif dans sa manière de présenter les données. Dans le monde des applications internet, il sert surtout comme format d’échange entre le navigateur et le serveur d’application.

L’extension des fichiers JSON est en général .json. Ainsi, il ne faut pas la confondre avec les .js de JavaScript. Son media type est simplement application/json

2. Syntaxe

Un objet JSON commence et finit toujours par { et }. Ainsi, {} définit un objet vide. Un objet JSON est défini par un ensemble de couples nom/valeur. Chaque couple est séparé par une virgule.

Pour réutiliser la classe TPersonne, la représentation JSON serait :

{  
   "LastName":"Dupont", 
   "FirstName":"Paul", 
   "Address":"12 rue du Labrador", 
   "City":"Paris", 
   "BirthDate":"25/12/1988" 
} 

On peut imbriquer des représentations JSON les unes dans les autres en suivant la règle de définition d’un objet avec les crochets { et }, comme dans l’exemple qui suit :

{  
   "LastName":"Dupont", 
   "FirstName":"Paul", 
   "Address":"12 rue du Labrador", 
   "City":"Paris", 
   "Car":{ 
         "ID":"123-AB-456", 
         "Brand":"RNO" 
        } 
} 

Ici nous avons défini un attribut Car et dans la valeur de cet attribut, on applique sa représentation (voiture de la marque RNO et dont l’immatriculation est AB-123-YZ).

Il est également possible de définir des tableaux. Un tableau commence par [ et finit...

Conclusion

Les routines permettant de manipuler des flux XML ou JSON ont été parcourues. Elles sont très utiles pour échanger des données entre différents programmes et très présentes dans les échanges sur Internet.

Le XML est utilisé lors des appels SOAP entre un webservice SOAP et un de ses clients. Le format JSON est le format le plus utilisé dans le cas d’appels REST/AJAX entre un client et un webservice REST.

Ces deux formats seront utilisés dans les chapitres suivants sur les communications interprocess et les applications en architecture REST.