XML&JSON

Origine

besoin d'échanger des données entre acteurs

  • Données bancaires
  • Données de remboursement de santé
  • Description d'une recherche d'itinéraire dans Google Maps
  • La réponse associée: description d'un itinéraire
  • ...

D'où la nécessité d'un format de structuration universel

  • Pour toutes sortes de données structurées
  • Lisible sur tous les systèmes
  • Le plus simple possible

XML

Généralisation de HTML

HTML

  • Document texte
  • Structure figée
  • Un langage

XML

  • Données arborescentes
  • Structure libre
  • Un meta-langage

XML versus HTML

Arbre XML

Syntaxe

  • Même syntaxe que HTML
  • Toute balise doit être refermée explicitement
  • Notion de bonne formation
    <a></b>   <!-- Non valide ! -->
  • Un prologue
    <?xml version="1.0" encoding="UTF-8"?>

Grammaire

  • Bonne formation = description d'un arbre
  • Mais pas nécessairement avec la bonne structure
  • Rôle d'une grammaire
    • Doctype (voir l'entête HTML)
    • Schéma XML (XSD)
  • Voir le tuto sur la validation XML

Espaces de Nom

  • Distinguer les éléments/attributs issus de divers vocabulaires
  • Cibler le processeur XML adapté au langage
  • Un espace de nom est une chaine de caractères
    XHTML
    "http://www.w3.org/1999/xhtml"
    MathML
    "http://www.w3.org/1998/Math/MathML"
    SVG
    "http://www.w3.org/2000/svg"
    RDF
    "http://www.w3.org/TR/REC-rdf-syntax#"
    Dublin Core
    "http://purl.org/dc"

Association

<?xml version=”1.0”?>
<catalog>
 <rdf:RDF xmlns:rdf=”http://www.w3.org/TR/REC-rdf-syntax#”>
  <rdf:Description about=”http://mon-catalogue” xmlns:dc=”http://purl.org/dc”>
   <dc:title>Tableaux impressionistes</dc:title>
   <dc:creator>Benoît</dc:creator>
   <dc:description>Liste de tableaux célèbres</dc:description>
   <dc:date>2009</dc:date>
  </rdf:Description>
 </rdf:RDF>
 <painting>
  <title>Souvenir d'un jardin à Eden</title>
  <artist>Van Gogh</artist>
  <date>1888</date>
  <description>Deux femmes regardent sur la gauche ;
    une troisième travaille au jardin.</description>
 </painting>
 ...
</catalog></code>

Quelques règles

  • Certains préfixes sont canoniques, comme dc, rdf, svg.
  • On peut aussi utiliser xmlns seul. Par exemple:
    <svg xmlns=”http://www.w3.org/2000/svg” width=”12cm” height=”10cm”>
      <ellipse rx=”110” ry=”130”/>
      <rect x=”4cm” y=”5cm” width=”3cm” height=”4cm”/>
    </svg>
  • Dans ce cas, tout le sous-arbre est dans l'espace de nom

JSON

  • Un format plus simple
  • Mais beaucoup moins riche
  • Issu d'un développement propriétaire en 2006, standardisé ensuite
  • Sous-ensemble de JavaScript (littéraux)
    • Chaines de caractères
    • Tableaux
    • Objets (tables d'association)
  • Pas de notion de validation

Exemple

{
  "firstName": "John",
  "lastName" : "Smith",
  "age"      : 25,
  "address"  : 
  {
    "streetAddress": "21 2nd Street",
    "city"         : "New York",
    "state"        : "NY",
    "postalCode"   : "10021"
  },
  "phoneNumber": 
  [
    { "type"  : "home", "number": "212 555-1234" },
    { "type"  : "fax",  "number": "646 555-4567" }
  ]
}

Utilisation

  • À l'origine: utilisation de la fonction eval() de javascript
  • Mais grosse faille de sécurité
  • Plutôt: utilisation d'une librairie
    • JSON.stringify(objet)
    • JSON.parse(chaine de caractères)