Implémentation dun parseur validant pour YML/DML Travail de Master Présentation finale Catherine...

57
Implémentation d’un parseur validant pour YML/DML Travail de Master Présentation finale Catherine Pugin 21 avril 2005 [email protected]

Transcript of Implémentation dun parseur validant pour YML/DML Travail de Master Présentation finale Catherine...

Page 1: Implémentation dun parseur validant pour YML/DML Travail de Master Présentation finale Catherine Pugin 21 avril 2005 catherine.pugin@unifr.ch.

Implémentation d’un parseur validant pour YML/DML

Travail de MasterPrésentation finale

Catherine Pugin21 avril 2005

[email protected]

Page 2: Implémentation dun parseur validant pour YML/DML Travail de Master Présentation finale Catherine Pugin 21 avril 2005 catherine.pugin@unifr.ch.

2

Plan

Introduction générale Rappel sur les langages YML et DML Aspects théoriques de la validation Conception du parseur Tests et gestion des erreurs Conclusion générale

Page 3: Implémentation dun parseur validant pour YML/DML Travail de Master Présentation finale Catherine Pugin 21 avril 2005 catherine.pugin@unifr.ch.

3

Introduction générale (1)

Projet YML+ Révision des langages de la famille XML.

Page 4: Implémentation dun parseur validant pour YML/DML Travail de Master Présentation finale Catherine Pugin 21 avril 2005 catherine.pugin@unifr.ch.

4

Introduction générale (2) Situation du projet

Révision du langage XML et des langages de modélisation (DTD / XML Schema).

Création du langage YML et du langage de modélisation DML.

Adaptation du parseur Xerces pour tester la conformité des documents.

Implémentation d’un parseur conformant spécifique aux langages YML et DML.

Implémentation du parseur validant spécifique.

Page 5: Implémentation dun parseur validant pour YML/DML Travail de Master Présentation finale Catherine Pugin 21 avril 2005 catherine.pugin@unifr.ch.

5

Le langage YML (1) Critiques adressées à XML

Nœuds textes• <element>

du texte sur deux lignes

<element/> Balises

• Asymétrie : <element> <element/>• Balises complexes :

• Entité : &eacute;• Commentaire : <!-- commentaire -->

Page 6: Implémentation dun parseur validant pour YML/DML Travail de Master Présentation finale Catherine Pugin 21 avril 2005 catherine.pugin@unifr.ch.

6

Le langage YML (2) Solutions apportées par YML

Balises symétriques• <=element> <element=> / <=element=>• <* commentaire *>• {entité}

Nœuds textes clairs• <=element>

[un texte][un texte]#

<element=> Relation entre instance et modèle simplifiée

• <=yml:dml uri="modele.dml"=>

Page 7: Implémentation dun parseur validant pour YML/DML Travail de Master Présentation finale Catherine Pugin 21 avril 2005 catherine.pugin@unifr.ch.

7

Le langage DML (1)

Critique des DTD Syntaxe non-XML. Aucune possibilité de typage. Mauvaise définition du contenu mixte.

Critique de XML Schema Manque de simplicité.

Page 8: Implémentation dun parseur validant pour YML/DML Travail de Master Présentation finale Catherine Pugin 21 avril 2005 catherine.pugin@unifr.ch.

8

Le langage DML (2) Objectifs du langage DML

Syntaxe simple, basée sur YML. Meilleure définition du contenu mixte Minimum de types prédéfinis

• Un seul type prédéfini : string• Possibilité de définir ses propres types.

Favoriser la modularité. Écrire un méta-modèle, un DML auto-

descriptif.

Page 9: Implémentation dun parseur validant pour YML/DML Travail de Master Présentation finale Catherine Pugin 21 avril 2005 catherine.pugin@unifr.ch.

9

Un exemple simple (1)movie.dml

<* déclarations préliminaires *>

<=yml:decl version="1.0" encoding="UTF-8"=> <=yml:dml uri="ymldml.dml"=> <=import prefix="yml" uri="yml.dml"=> <=import prefix="per" uri="person.dml"=>

<* racine du document *>

<=root> <=struct> <=structref ref="yml:prolog"=> <=eltref name="movie" ref="movie-ref"=> <struct=><root=>

<* définitions *>

<=elt name="movie-ref"  occurs="many"> <=struct> <=elt name="title"> <=text=> <elt=> <=eltref name="director" ref="per:person"=> <struct=><elt=><=entity name="eacute" value="é"=>

Page 10: Implémentation dun parseur validant pour YML/DML Travail de Master Présentation finale Catherine Pugin 21 avril 2005 catherine.pugin@unifr.ch.

10

Un exemple simple (2)person.dml

<=yml:decl version="1.0" encoding="UTF-8"=><=yml:dml uri="ymldml.dml"=> <=import prefix="yml" uri="yml.dml"=>

<=elt name="person"> <=attrs> <=attr name="id" type="int" use="required"=> <attrs=> <=struct> <=elt name="firstName"> <=text=> <elt=> <=elt name="familyName"> <=text=> <elt=> <struct=><elt=>

<=type name="int" pattern=" [0-9] "=>

Page 11: Implémentation dun parseur validant pour YML/DML Travail de Master Présentation finale Catherine Pugin 21 avril 2005 catherine.pugin@unifr.ch.

11

Un exemple simple (3)movie.yml

<=yml:decl version="1.0" encoding="UTF-8"=>

<* définition de l'espace de nommage du modèle *> <=yml:dml uri="movie.dml"=> <=yml:dml prefix="person" uri="person.dml"=>

<=movie> <=title>[Star Wars]<title=> <=director person:id="1"> <=person:firstName>[Georges]<person:firstName=> <=person:familyName>[Lucas]<person:familyName=> <director=> <movie=>

<=movie> <=title>[Indiana Jones]<title=> <=director person:id="2"> <=person:firstName>[Steven]<person:firstName=> <=person:familyName>[Spielberg]<person:familyName=> <director=> <movie=>

Page 12: Implémentation dun parseur validant pour YML/DML Travail de Master Présentation finale Catherine Pugin 21 avril 2005 catherine.pugin@unifr.ch.

12

La validation (1) Aspects théoriques

DML = langage formel. Les lettres de son alphabet sont les valeurs

des attributs name des déclarations d’élément.<=elt name="movie"=>

Un document DML peut donc être représenté par une grammaire d’arbre et à partir de là par un automate d’arbre.

Page 13: Implémentation dun parseur validant pour YML/DML Travail de Master Présentation finale Catherine Pugin 21 avril 2005 catherine.pugin@unifr.ch.

13

La validation (2) L’implémentation des automates d’arbres est

relativement complexe. On utilise donc à la place une hiérarchie

d’automates déterministes à états finis. Un automate est construit pour chaque

déclaration d’élément <=elt=> et pour la déclaration de la racine <=root=>.

Il représente le sous-arbre de la déclaration qui s’étend jusqu’aux premières déclarations d’élément.

Page 14: Implémentation dun parseur validant pour YML/DML Travail de Master Présentation finale Catherine Pugin 21 avril 2005 catherine.pugin@unifr.ch.

14

La validation (3) Un automate est décrit par

<Q, Σ, δ, q0, F>

<=elt name="element"> <=struct> <=elt name="child-1"=> <=elt name="child-2"=> <struct=><elt=>

Q = {0,1,2}

Σ = {child-1, child-2}

δ = 0 x child-1 -> 1 ; 1 x child-2 -> 2

q0 = 0;

F = {2}

0 1

child-1

2

child-2

Page 15: Implémentation dun parseur validant pour YML/DML Travail de Master Présentation finale Catherine Pugin 21 avril 2005 catherine.pugin@unifr.ch.

15

La validation (4)

L’instance YML est le mot qui doit être accepté par l’ensemble des automates.

Chaque automate accepte un sous-mot, une partie de l’instance.

Quand tous les sous-mots sont acceptés, l’instance est validée.

Page 16: Implémentation dun parseur validant pour YML/DML Travail de Master Présentation finale Catherine Pugin 21 avril 2005 catherine.pugin@unifr.ch.

16

Conception Informations nécessaires

Quelles sont les informations utiles dans un document DML ? Séquence et occurrence des éléments Attributs associés à chaque élément Types définis Entités définies Importations

Page 17: Implémentation dun parseur validant pour YML/DML Travail de Master Présentation finale Catherine Pugin 21 avril 2005 catherine.pugin@unifr.ch.

17

ConceptionArchitecture générale

Document

YMLParseur conformant

Modèle DML principal

Trois phases de validation

Parseur conformant

Page 18: Implémentation dun parseur validant pour YML/DML Travail de Master Présentation finale Catherine Pugin 21 avril 2005 catherine.pugin@unifr.ch.

18

ConceptionValidation en trois phases

Traitement du document DML Création des automates Validation de l’instance YML

Page 19: Implémentation dun parseur validant pour YML/DML Travail de Master Présentation finale Catherine Pugin 21 avril 2005 catherine.pugin@unifr.ch.

19

ConceptionPhase 1 : Traitement du DML

But : récupération des informations contenues dans les documents importés. Référencement d’élément, de structure,

d’attributs. Définitions de types, d’entités.

Gestion des préfixes. Construction d’un arbre complet à partir

de la racine root.

Page 20: Implémentation dun parseur validant pour YML/DML Travail de Master Présentation finale Catherine Pugin 21 avril 2005 catherine.pugin@unifr.ch.

20

Traitement du DMLCorrespondance entre préfixes (1)

Les documents importés dans le modèle principal doivent être définis comme espaces de nommage dans l’instance.

Instance YML

<=yml:dml uri="movie.dml"=>

<=yml:dml prefix="person" uri="person.dml"=>

Modèle DML principal

<=import prefix="per" uri="person.dml"=>

Page 21: Implémentation dun parseur validant pour YML/DML Travail de Master Présentation finale Catherine Pugin 21 avril 2005 catherine.pugin@unifr.ch.

21

Traitement du DMLCorrespondance entre préfixes (2)

Les préfixes ne sont pas obligatoirement les mêmes.

Il faut garder une table de correspondance entre les préfixes.

Préfixe YML Préfixe DML URI

person per person.dml

Page 22: Implémentation dun parseur validant pour YML/DML Travail de Master Présentation finale Catherine Pugin 21 avril 2005 catherine.pugin@unifr.ch.

22

Traitement du DMLRéférencement Les référencements concernent :

Les structures Les listes d’attributs Les éléments

Quand on rencontre une déclaration de type <=structref=>, <=attrsref=> ou <=eltref=>, il faut la remplacer par la définition correspondante.

La correspondance se fait entre l’attribut ref de la déclaration appelante et l’attribut name de la définition.

Page 23: Implémentation dun parseur validant pour YML/DML Travail de Master Présentation finale Catherine Pugin 21 avril 2005 catherine.pugin@unifr.ch.

23

Traitement du DMLRéférencement

<=eltref name="director" ref="per:person"=>

<=elt name="person">

per:firstName per:familyName

firstName familyName

id

per:id

<=elt name="director">

Page 24: Implémentation dun parseur validant pour YML/DML Travail de Master Présentation finale Catherine Pugin 21 avril 2005 catherine.pugin@unifr.ch.

24

<=root> <=struct> <=structref ref="yml:prolog"=> <=elt name="movie"> <=struct> <=elt name="title"><=text=><elt=> <=elt name="director"> <=attrs> <=attr name="per:id" type="int" use="required"=> <attrs=> <=struct> <=elt name="per:firstName"><=text=><elt=> <=elt name="per:familyName"><=text=><elt=> <struct=> <elt=> <struct=> <elt=> <struct=><root=>

Traitement du DMLRésultat

<=root> <=struct> <=structref ref="yml:prolog"=> <=eltref name="movie" ref="movie-ref"=><struct=><root=>

<=root> <=struct> <=structref ref="yml:prolog"=> <=elt name="movie"> <=struct> <=elt name="title"><=text=><elt=> <=eltref name="director"  ref="per:person"=> <struct=> <elt=> <struct=><root=>

Page 25: Implémentation dun parseur validant pour YML/DML Travail de Master Présentation finale Catherine Pugin 21 avril 2005 catherine.pugin@unifr.ch.

25

Traitement du DMLTypes

<=attrs>

<=attr name="id" type="int" use="required"=>

<=attr name="id2" type="yml:string" use="implied"=>

<attrs=>

<=type name="int" pattern="[0-9]"=>

Name Pattern

int [0-9]

yml:string \w*

Page 26: Implémentation dun parseur validant pour YML/DML Travail de Master Présentation finale Catherine Pugin 21 avril 2005 catherine.pugin@unifr.ch.

26

ConceptionPhase 2 : Création des automates

But : représentation de la séquentialité et de l’occurrence des déclarations d’éléments.

Un automate est construit pour chaque déclaration <=elt=>. Il représente le sous-arbre de l’élément, qui s’étend jusqu’aux premières déclarations d’élément.

Construction récursive des automates.

Page 27: Implémentation dun parseur validant pour YML/DML Travail de Master Présentation finale Catherine Pugin 21 avril 2005 catherine.pugin@unifr.ch.

27

Création des automatesAutomates simples

4 automates simples pour chacune des 4 occurrences (once, optional, many, free).

0 1

0 1

0 1

0 1

ONCE OPTIONAL

MANY FREE

Page 28: Implémentation dun parseur validant pour YML/DML Travail de Master Présentation finale Catherine Pugin 21 avril 2005 catherine.pugin@unifr.ch.

28

Création des automatesIllustration (1)

<=elt name="element"=>

<=elt name="fils2"=> <=elt name="fils3"=>

<=choice=>

<=struct occurs="many"=>

<=elt name="fils1"=>

Page 29: Implémentation dun parseur validant pour YML/DML Travail de Master Présentation finale Catherine Pugin 21 avril 2005 catherine.pugin@unifr.ch.

29

Création des automatesIllustration (2)

0 1

fils1

Page 30: Implémentation dun parseur validant pour YML/DML Travail de Master Présentation finale Catherine Pugin 21 avril 2005 catherine.pugin@unifr.ch.

30

Création des automatesIllustration (3)

<=elt name="element"=>

<=elt name="fils2"=> <=elt name="fils3"=>

<=choice=>

<=struct occurs="many"=>

<=elt name="fils1"=>

Page 31: Implémentation dun parseur validant pour YML/DML Travail de Master Présentation finale Catherine Pugin 21 avril 2005 catherine.pugin@unifr.ch.

31

Création des automatesIllustration (4)

2 3

fils2

4 5

fils3

Page 32: Implémentation dun parseur validant pour YML/DML Travail de Master Présentation finale Catherine Pugin 21 avril 2005 catherine.pugin@unifr.ch.

32

Création des automatesIllustration (5)

<=elt name="element"=>

<=elt name="fils2"=> <=elt name="fils3"=>

<=choice=>

<=struct occurs="many"=>

<=elt name="fils1"=>

Page 33: Implémentation dun parseur validant pour YML/DML Travail de Master Présentation finale Catherine Pugin 21 avril 2005 catherine.pugin@unifr.ch.

33

Création des automatesIllustration (6)

2 3

fils2

4 5

fils3

6

Page 34: Implémentation dun parseur validant pour YML/DML Travail de Master Présentation finale Catherine Pugin 21 avril 2005 catherine.pugin@unifr.ch.

34

Création des automatesIllustration (7)

<=elt name="element"=>

<=elt name="fils2"=> <=elt name="fils3"=>

<=choice=>

<=struct occurs="many"=>

<=elt name="fils1"=>

Page 35: Implémentation dun parseur validant pour YML/DML Travail de Master Présentation finale Catherine Pugin 21 avril 2005 catherine.pugin@unifr.ch.

35

Création des automatesIllustration (8)

3fils2

5fils3

0 1

fils1

null

null

6

Page 36: Implémentation dun parseur validant pour YML/DML Travail de Master Présentation finale Catherine Pugin 21 avril 2005 catherine.pugin@unifr.ch.

36

Création des automatesApplication à l’exemple

<=elt name="director"> <=attrs> <=attr name="per:id" type="int" use="required"=> <attrs=> <=struct> <=elt name="per:firstName"><=text=><elt=> <=elt name="per:familyName"><=text=><elt=> <struct=><elt=>

0 1

per:firstName

3

per:familyName

0textNode = true

Page 37: Implémentation dun parseur validant pour YML/DML Travail de Master Présentation finale Catherine Pugin 21 avril 2005 catherine.pugin@unifr.ch.

37

Création des automates

Les automates sont stockés dans une table avec : Le nom de l’élément qu’ils représentent. Le nom du père de cet élément.

0

Nom de l’élément Nom du père Automate

per:firstName director

Page 38: Implémentation dun parseur validant pour YML/DML Travail de Master Présentation finale Catherine Pugin 21 avril 2005 catherine.pugin@unifr.ch.

38

ConceptionRécupération des données (1)

Les attributs sont également stockés dans une table.

Nom de l’attribut

Nom de l’élément

Nom de l’élément père

Type Pattern Utilisation

per:id director movie int [0-9] required

<=attrs> <=attr name="per:id" type="int" use="required"=><attrs=>

Page 39: Implémentation dun parseur validant pour YML/DML Travail de Master Présentation finale Catherine Pugin 21 avril 2005 catherine.pugin@unifr.ch.

39

ConceptionRécupération des données (2)

Les entités définies dans le DML principal sont stockées dans une table.

<=entity name="eacute" value="é"=>

Nom de l’entité Valeur

eacute é

Page 40: Implémentation dun parseur validant pour YML/DML Travail de Master Présentation finale Catherine Pugin 21 avril 2005 catherine.pugin@unifr.ch.

40

ConceptionRécupération des données (3)

Les nœuds textes peuvent être typés. On stocke dans une table l’élément père du

nœud texte et le type.

Nom de l’élément Type du texte

element text-type

<=elt name="element"> <=text type="text-type"=><elt=>

Page 41: Implémentation dun parseur validant pour YML/DML Travail de Master Présentation finale Catherine Pugin 21 avril 2005 catherine.pugin@unifr.ch.

41

ConceptionPhase 3 : Validation

Pour la validation de l’instance, nous disposons : des automates des différentes tables

• Attributs• Entités• Correspondance entre les préfixes• Nœuds textes

Page 42: Implémentation dun parseur validant pour YML/DML Travail de Master Présentation finale Catherine Pugin 21 avril 2005 catherine.pugin@unifr.ch.

42

Validation Généralités

Le parcours de l’arbre YML se fait de manière top-down.

Pour chaque noeud : Choix de l’automate correspondant. Itération sur les fils du nœud. Modification du préfixe si nécessaire. Validation de l’élément. Validation des attributs.

Page 43: Implémentation dun parseur validant pour YML/DML Travail de Master Présentation finale Catherine Pugin 21 avril 2005 catherine.pugin@unifr.ch.

43

Validation Illustration (1)

Choix de l’automate : état courant = 0.

<=movie> <=title>[Star Wars]<title=> <=director person:id="1"> <=person:firstName>[Georges]<person:firstName=> <=person:familyName>[Lucas]<person:familyName=> <director=> <movie=>

0 1

title

3

director

Page 44: Implémentation dun parseur validant pour YML/DML Travail de Master Présentation finale Catherine Pugin 21 avril 2005 catherine.pugin@unifr.ch.

44

Validation Illustration (2)

Itération sur les nœuds fils. L’élément title est accepté par l’automate.

<=movie> <=title>[Star Wars]<title=> <=director person:id="1"> <=person:firstName>[Georges]<person:firstName=> <=person:familyName>[Lucas]<person:familyName=> <director=> <movie=>

0 1

title

3

director

Page 45: Implémentation dun parseur validant pour YML/DML Travail de Master Présentation finale Catherine Pugin 21 avril 2005 catherine.pugin@unifr.ch.

45

Validation Illustration (3)

L’élément director est accepté par l’automate.

<=movie> <=title>[Star Wars]<title=> <=director person:id="1"> <=person:firstName>[Georges]<person:firstName=> <=person:familyName>[Lucas]<person:familyName=> <director=> <movie=>

0 1

title

3

director

Page 46: Implémentation dun parseur validant pour YML/DML Travail de Master Présentation finale Catherine Pugin 21 avril 2005 catherine.pugin@unifr.ch.

46

Validation Illustration (4)

Validation des attributs. Modification du préfixe : person:id -> per:id Recherche de l’attribut dans la table.

<=movie> <=title>[Star Wars]<title=> <=director person:id="1"> <=person:firstName>[Georges]<person:firstName=> <=person:familyName>[Lucas]<person:familyName=> <director=> <movie=>

per:id director movie int [0-9] required

Page 47: Implémentation dun parseur validant pour YML/DML Travail de Master Présentation finale Catherine Pugin 21 avril 2005 catherine.pugin@unifr.ch.

47

Validation Illustration (5)

Validation des attributs. Vérification de la valeur de l’attribut [0-9] -> 1

<=movie> <=title>[Star Wars]<title=> <=director person:id="1"> <=person:firstName>[Georges]<person:firstName=> <=person:familyName>[Lucas]<person:familyName=> <director=> <movie=>

per:id director movie int [0-9] required

Page 48: Implémentation dun parseur validant pour YML/DML Travail de Master Présentation finale Catherine Pugin 21 avril 2005 catherine.pugin@unifr.ch.

48

<=movie> <=title>[Star Wars]<title=> <=director person:id="1"> <=person:firstName>[Georges]<person:firstName=> <=person:familyName>[Lucas]<person:familyName=> <director=> <movie=>

Validation Illustration (6)

Validation du sous-arbre Modification des préfixes

• person:firstName

-> per:firstName• person:familyName

-> per:familyName

0 1

per:firstName

3

per:familyName

Page 49: Implémentation dun parseur validant pour YML/DML Travail de Master Présentation finale Catherine Pugin 21 avril 2005 catherine.pugin@unifr.ch.

49

Validation Illustration (7)

L’état courant est terminal. Le sous-arbre est accepté.

<=movie> <=title>[Star Wars]<title=> <=director person:id="1"> <=person:firstName>[Georges]<person:firstName=> <=person:familyName>[Lucas]<person:familyName=> <director=> <movie=>

0 2

title

3

director

Page 50: Implémentation dun parseur validant pour YML/DML Travail de Master Présentation finale Catherine Pugin 21 avril 2005 catherine.pugin@unifr.ch.

50

Implémentation en 2 mots

Implémentation en Java. Utilisation de l’API JDOM. Quelques adaptations sont nécessaires :

Nœud root supérieur : YML_ROOT. Séquence -- interdite dans les

commentaires. Output XML.

Page 51: Implémentation dun parseur validant pour YML/DML Travail de Master Présentation finale Catherine Pugin 21 avril 2005 catherine.pugin@unifr.ch.

51

Gestion des erreurs

2 gestions des erreurs possibles : Arrêt à la première erreur Lors d’une erreur, on remonte d’un niveau et

on continue la validation sur les frères. La seconde solution a été choisie.

Vision globale du document.

Page 52: Implémentation dun parseur validant pour YML/DML Travail de Master Présentation finale Catherine Pugin 21 avril 2005 catherine.pugin@unifr.ch.

52

Tests Une base de test a été créée spécialement pour

le parseur. Elle comporte une série d’applications YML

pour tester les différentes erreurs possibles. Une application complète et réaliste traitant de

la Formule 1 en fait également partie. Créée initialement en XML et XML Schema. Traduite et adaptée aux langages YML et DML.

Page 53: Implémentation dun parseur validant pour YML/DML Travail de Master Présentation finale Catherine Pugin 21 avril 2005 catherine.pugin@unifr.ch.

53

Tests (erreurs)

La difficulté de tester un parseur validant vient du fait qu’il faut répertorier toutes les erreurs possibles.

Une très bonne connaissance du DML est donc indispensable.

Page 54: Implémentation dun parseur validant pour YML/DML Travail de Master Présentation finale Catherine Pugin 21 avril 2005 catherine.pugin@unifr.ch.

54

Conclusion générale (1) Des modifications ont été apportées au DML en

cours de route afin de rendre le méta-modèle déterministe.

On a ainsi pu constater la simplicité d’adaptation du parseur.

On peut donc valider une instance par rapport à son modèle DML, ou un modèle DML par rapport au méta-modèle de la même manière.

Page 55: Implémentation dun parseur validant pour YML/DML Travail de Master Présentation finale Catherine Pugin 21 avril 2005 catherine.pugin@unifr.ch.

55

Conclusion générale (2)

Des améliorations sont encore envisageables pour le parseur : Meilleure gestion des préfixes. Meilleure localisation des automates. Meilleure relation entre les 2 parseurs.

Les versions futures des langages YML et DML entraîneront bien évidemment des modifications pour les deux parseurs.

Page 56: Implémentation dun parseur validant pour YML/DML Travail de Master Présentation finale Catherine Pugin 21 avril 2005 catherine.pugin@unifr.ch.

56

Conclusion générale (3)

Malgré ces remarques, la combinaison des deux parseurs rend les langages YML et DML complètement fonctionnels.

Ils répondent complètement à l’utilisation requise actuellement qui est la validation des instances et des modèles.

Page 57: Implémentation dun parseur validant pour YML/DML Travail de Master Présentation finale Catherine Pugin 21 avril 2005 catherine.pugin@unifr.ch.

57

Merci de votre attention !