Séance 2 : formats de données

Introduction

Motivation

Lors de la séance précédente, vous avez utilisé des expressions régulières pour analyser le contenu des pages.

  • laborieux
  • limité au HTML
  • fragile

Type de contenu

Présentation

Il existe une taxonomie standard des formats de données, appelés types de contenu (media types).

Ces types de contenu ont une structure à deux niveaux ; exemples :

  • text/html
  • text/plain
  • image/png
  • audio/mpeg
  • video/H264
  • application/pdf

Type de contenu d’un message HTTP

Tout message HTTP qui comporte un contenu doit spécifier son format, à l’aide de l’en-tête Content-Type.

Content-Type: text/html; charset=utf-8

Négociation de contenu

Dans la requête, le client peut indiquer au serveur les types de contenu qu’il est capable de traiter, à l’aide du champs Accept.

Accept: text/html,application/xhtml+xml,
        application/xml;q=0.9,*/*;q=0.8

Le verbe HEAD

Lorsqu’on est intéressé uniquement par les en-têtes, et pas par le contenu, on peut utiliser le verbe HEAD au lieu du verbe GET.

Formats usuels

HTML : text/html

Format documentaire, surtout destiné à l’affichage.

Sauf pour les serveurs qui ne fournissent que ce format, on lui préférera des formats plus adaptés au traitement automatique.

HTML en Java

Bibliothèque Jsoup (installation maven).

XML : application/xml

Peut être vu comme une extension de HTML, autorisant n’importe quelle balise :

<commande no="12345">
  <client no="678-789"/>
  <articles>
    <article code="ab12">
      <quantité>2</quantité>
      <prix>10.10</prix>
    </article>
    <article code="cd34">
      <quantité>7</quantité>
      <prix>42.00</prix>
    </article>
  </articles>
</commande>

XML en Java

Disponible en standard : javax.xml.parsers.

DocumentBuilder db =
    DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document doc = db.parse(inputStream, urlString);

JSON

Sous-ensemble de Javascript, limité à la description de données :

{
  "no_commande": "12345",
  "no_client": "678-789",
  "articles": [
    {
      "code": "ab12",
      "quantite": 2,
      "prix": 10.10
    },
    {
      "code": "cd34",
      "quantite": 7,
      "prix": 42.10
    }
  ]
}

Pour en savoir plus

JSON en Java

Bibliothèque GSON (installation maven).

Votre travail

Votre travail

Améliorez le programme de la séance précédente :

  1. en remplaçant les expression régulières par un véritable parser HTML (par exemple JSoup) ;
  2. en vérifiant si l’URL passée au programme retourne bien du HTML, et en ne comptant les liens que dans ce cas ;
  3. en utilisant le verbe HEAD (au lieu de GET) pour vérifier la validité des liens ;
  4. en affichant le nombre de liens valides par grande catégorie de contenu (text, image, audio…).