Master 1 Informatique, AMU Programmation Fonctionnelle 2015, Projet, p. 1
Le projet : un peu de XML
Version du 10 novembre 2015
Xml (Extensible Markup Language) est, à l’origine une généralisation de html et sgml. Vous pouvez consulter
la page Xml de Wikipedia
https://fr.wikipedia.org/wiki/Extensible_Markup_Language
pour plus d’information sur l’historique de ce langage comme pour toute autre information qui vous sera
nécessaire.
Commme pour html, un document Xml peut se représenter en forme arborescente. Par exemple, le document
suivant sur la gauche peut se représenter par l’arbre de droite :
<books >
< boo k language =" F renc h " >
< title > Dé sert </ title >
<author > Le Cl ézio </ author >
</ book >
<book >
<title >
Conte s du XIX è me si è cle
</ title >
< author > Flaubert </ author >
<author > Gautier </ author >
</ book >
</ books >
books
book book
title author title author author
Désert Le Clézio Contes ... Flaubert Gautier
On pense donc un document Xml comme un arbre enraciné. A chaque balise ouverte/fermée on lui fait
correspondre un noeud (un élément). Ce qui se trouve entre les balises ouvertes <??? ...> et fermées </???>
sont les fils ordonnés du du noeud. Chaque élément a un nom et, optionnellement, une liste d’attributs. Des
noeuds texte contiennent du texte et n’ont pas d’enfants.
Objectif. Nous nous proposons d’écrire un petit outil pour faire des recherches sur des documents Xml.
1 Types de données, transformations vers et depuis String
Exercice 1. Définir un type de données récursif XmlTree, adapté à coder les documents Xml en tant que
arbres.
Pour faire cela, on définira préalablement les types XmlAttribut,XmlNom et XmlText, ainsi que le type
polymorphe XmlElement a (un noeud Xml porteur d’une information de type a).
Exercice 2. Définir une fonction showXmlTree :: XmlTree -> String qui transforme un valeur de type
XmlTree dans une chaîne de caractères représentant le document Xml comme d’habitude (avec les balises).
On pourra définir préalablement des fonctions analagoues, comme
showXmlText :: XmlText -> String
showXmlNom :: XmlNom -> String
showXm lAttribu t :: XmlAttribut -> String
showXml Element :: (a -> String ) -> XmlElement a -> String
Exercice 3. Définir une fonction parseXmlTree :: String -> Maybe XmlTree, qui fait l’analyse syn-
taxique (le « parsing ») d’une chaine de caractères contenant un document Xml.
Remarque.