• Aucun résultat trouvé

2.4 Transformations actives et correspondances

2.4.2 Malan : Un langage de correspondances

Malan est un langage déclaratif permettant de mettre en correspondance un schéma source et un schéma cible. Il a été élaboré durant la thèse d'Arnaud Blouin [34]. Il est complémentaire d'eXAcT dans ce sens où il ne dénit pas comment la mise en correspondance peut être réalisée par une transformation active : il se focalise sur la spécication de correspondances.

Un état de l'art exhaustif des langages de correspondance a été réalisé pendant cette thèse [40]. Le langage Malan a alors été construit an de pallier aux insusances des langages de correspondance, ces derniers ne permettant pas de satisfaire les contraintes imposées par l'établissement et la gestion des liens entre les données D et leurs présentations P [39].

Les sections qui suivent présentent le concept de correspondance en le comparant à celui de trans-formation, puis comment Malan permet la modélisation des données des schémas sources et cibles ainsi que leur mise en correspondance.

Transformation versus correspondance

La gure 2.4.3 synthétise la diérence essentielle entre correspondance et transformation. Une transformation opère directement au niveau modèle, ce qui ore l'avantage de la simplicité. Par exemple, construire un programme XSLT transformant un document XML en un document HTML reste une tâche simple tant que la grammaire du document XML n'est pas trop complexe. Cette approche a cependant deux inconvénients. Premièrement, le programmeur doit lui-même s'assurer que la transformation fonctionne pour tous les documents XML sources conformes à la gram-maire source, et qu'elle génère des documents HTML cibles conformes à la gramgram-maire HTML. Deuxièmement, le programme XSLT reste dépendant de la plate-forme des données (XML) et de la plate-forme graphique (HTML), le rendant inutilisable dans d'autres contextes.

Figure 2.4.3  Correspondance et transformation active

L'utilisation d'une correspondance plutôt qu'une transformation permet de travailler au niveau méta-modèle, supprimant alors les deux inconvénients précédents.

Modèle de données

An d'assurer la validité des données manipulées, le langage Malan travaille au niveau des méta-modèles : une correspondance de schémas s'établit entre les méta-méta-modèles des données sources et celui des données cibles, tous deux décrits par des diagrammes de classes UML. En contre-partie, la passerelle entre les diagrammes de classes et les plates-formes de données est à la charge de l'implémentation de Malan.

Le choix des diagrammes de classes UML pour représenter les données se justie pour les raisons suivantes :

1. Le langage UML, et en particulier les diagrammes de classes, est dédié à la modélisation de systèmes et est devenu l'outil principal de l'IDM pour dénir les modèles et les méta-modèles. 2. Dans notre contexte, les données sources correspondent à des documents XML ou des données relationnelles, tandis que les données cibles représentent des graphes de scènes. L'utilisation d'UML dans le cadre d'XML et des données relationnelles a été largement étudiée sans présenter de limite majeure [108].

3. Les prols UML permettent d'étendre UML à la modélisation de domaines initialement non prévus.

L'exemple de la gure 2.4.4 décrit un Blog qui dénit un nom et se compose d'un ensemble de billets. A chaque Billet correspond une date, un numéro, un titre, un contenu et un auteur, lequel

Figure 2.4.4  Diagramme de classes d'un blog

possède un nom et un prénom. L'exemple du blog sera utilisé pour illustrer comment Malan permet de présenter à l'utilisateur les données d'un blog via une présentation décrite en SVG.

La manière dont Malan traite un méta-modèle exprimé par un diagramme de classe est détaillé dans la thèse [34]. Malan formalise un sous-ensemble des éléments entrant en jeu dans les diagrammes de classe UML (notion de classe, d'attribut, de relation, de cardinalité, d'héritage et de fonction), formalisation inspirée de [30].

Modèle de correspondance

Un modèle de correspondance de schémas dénit comment les éléments des schémas source et cible peuvent être mis en relation. Une correspondance de schémas se décompose en diérentes correspondances de classes, selon la dénition formelle suivante :

Soient S et T deux diagrammes de classes UML. Une correspondance de schémas est un prédicat CS(S, T , Σ) où S est appelé le schéma source et T le schéma cible. Σ est un ensemble des correspondances de classes décrites dans une logique L sur hS, T i et dont le but est de créer un lien entre les schémas source et cible.

Le modèle de données a introduit le prédicat C(c) qui précise si c est une classe ou non, prédicat utilisé dans la dénition formelle suivante de la correspondance de classe :

Soient S et T deux diagrammes de classes UML. Une correspondance de classes est un prédicat CC(c1, . . . , cn, t, Ω)tel que (c1, . . . , cn) ∈ S et C(ci), avec i de 1 à n, t ∈ T et C(t). Ω est un ensemble de prédicats, appelés  instructions , décrits dans une logique L sur hSn, T i, établissant des liens entre les classes sources (s1, . . . , sn) et la classe cible t.

Les correspondances sont dénies de manière déclarative, choix motivé par le fait que l'ordre des fonctions et des correspondances de classes à l'intérieur d'une correspondance de schémas n'a aucune incidence sur la sémantique de cette dernière. Il en est de même pour la dénition des instructions d'une correspondance de classes.

Syntaxe concrète par l'exemple

An d'illustrer la syntaxe concrète du langage Malan, l'exemple du blog, dont le modèle a été introduit précédemment, est utilisé dans la perspective d'acher son contenu en SVG. La vue d'ensemble de la correspondance entre un blog et une représentation SVG est donnée gure 2.4.5.

Figure 2.4.5  Vue d'ensemble de la correspondance de schéma pour le blog

Le code Malan fourni à la page suivante précise le détail de la correspondance de schémas associée. La correspondance de schémas commence par préciser les schémas UML source et cible (ligne 1), ainsi que le paramètre de couleur d'achage de chaque billet (ligne 2). Cette correspondance de compose de deux correspondances de classes, Blog2SVG (lignes 4 à 22) et Billet2G (lignes 24 à 49). La première correspondance met en relation (symbole ->) la classe Blog avec la classe SVG représentant l'ensemble du dessin vectoriel (ligne 4). Elle commence par déclarer cinq alias (lignes 5 à 9) qui permettent une meilleure lisibilité du code. Les diérents attributs UML sont ensuite mis en correspondance (symbole ->) : des valeurs littérales sont d'abord assignées (lignes 11 à 15), puis une mise en correspondance directe d'attributs est dénie (ligne 16), suivie de mises en correspondance utilisant diérents calculs (lignes 17 à 19). La correspondance Blog2SVG se termine par la mise en correspondance de relations à cardinalité multiple (lignes 20 à 21) : la relation gg possède la même cardinalité que la relation billets, et chaque billet[i] est mis en correspondance avec chaque groupe gg[i]. Cette dernière mise en correspondance sera alors établie par un nombre d'applications de la correspondance Billet2G égal à |billets|. La correspondance de classes Billet2G suit le même principe : dénition des alias (lignes 25 à 28), correspondances avec des constantes (lignes 30 à 39), correspondances simples d'attributs (lignes 40 à 43), et correspondances nécessitant des calculs (lignes 44 à 48).

Documents relatifs