L'objectif de ce projet est de développer un générateur de langages dédiés qui consomme une grammaire décrite par un schéma XML pour produire une librairie Scala dédiée pour manipuler les données représentables via ce schéma.
Par exemple le schéma XML suivant:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="personne">
<xs:complexType>
<xs:sequence>
<xs:element name="nom" type="xs:string" />
<xs:element name="prenom" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Devra donner lieu à la génération du langage dédié suivant:
case class personne entends Xml {
private var _elements = List[Xml]()
case class nom(value:String) extends Xml {
_elements ::= this
def toXML = <nom>{ value }</nom>
}
case class prenom(value:String) extends Xml {
_elements ::= this
def toXML = <prenom>{ prenom }</prenom>
}
def toXML = <personne>{ for(e <- _elements) yield e.toXML }</personne>
}
Le travail demandé consiste donc à i) comprendre ce qu'est un schéma XML pour comprendre les différentes constructions offertes par ce langage, puis ii) proposer un mapping entre les constructions des schémas XML et les constructions du langage de programmation Scala, pour iii) développer un programme qui lit un schéma XML «A» donné pour écrire un fichier Scala qui contient la définition du langage dédié pour «A». À partir de l'exemple donné ci-dessus, il sera donc possible d'utiliser le langage généré de la manière suivante:
val xml = personne {
prenom("Romain")
nom("Rouvoy")
}.toXml
System.out.println(xml)
//<personne xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="personne.xsd">
// <prenom>Romain</prenom>
// <nom>Rouvoy</nom>
// </personne>
Liens associés :
|