1 / 57

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

Implémentation d’un parseur validant pour YML/DML. Travail de Master Présentation finale Catherine Pugin 21 avril 2005 catherine.pugin@unifr.ch. Plan. Introduction générale Rappel sur les langages YML et DML Aspects théoriques de la validation Conception du parseur

sema
Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Implémentation d’un 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

  3. Introduction générale (1) • Projet YML+ • Révision des langages de la famille XML.

  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.

  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 -->

  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"=>

  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é.

  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.

  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="é"=>

  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] "=>

  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=>

  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.

  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.

  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 2 1 child-1 child-2

  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.

  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

  17. ConceptionArchitecture générale Document YML Parseur conformant Modèle DML principal Parseur conformant Trois phases de validation

  18. ConceptionValidation en trois phases • Traitement du document DML • Création des automates • Validation de l’instance YML

  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.

  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. Modèle DML principal <=import prefix="per" uri="person.dml"=> Instance YML <=yml:dml uri="movie.dml"=> <=yml:dml prefix="person" uri="person.dml"=>

  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.

  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.

  23. Traitement du DMLRéférencement <=eltref name="director" ref="per:person"=> <=elt name="person"> <=elt name="director"> id per:id firstName familyName per:firstName per:familyName

  24. Traitement du DMLRésultat <=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=> <=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=> <=root> <=struct> <=structref ref="yml:prolog"=> <=eltref name="movie" ref="movie-ref"=> <struct=> <root=>

  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]"=>

  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.

  27. 0 1 0 1 0 1 0 1 Création des automatesAutomates simples • 4 automates simples pour chacune des 4 occurrences (once, optional, many, free). ONCE OPTIONAL FREE MANY

  28. Création des automatesIllustration (1) <=elt name="element"=> <=struct occurs="many"=> <=choice=> <=elt name="fils1"=> <=elt name="fils2"=> <=elt name="fils3"=>

  29. 0 1 Création des automatesIllustration (2) fils1

  30. Création des automatesIllustration (3) <=elt name="element"=> <=struct occurs="many"=> <=choice=> <=elt name="fils1"=> <=elt name="fils2"=> <=elt name="fils3"=>

  31. 2 4 3 5 Création des automatesIllustration (4) fils2 fils3

  32. Création des automatesIllustration (5) <=elt name="element"=> <=struct occurs="many"=> <=choice=> <=elt name="fils1"=> <=elt name="fils2"=> <=elt name="fils3"=>

  33. Création des automatesIllustration (6) fils2 2 3 6 4 5 fils3

  34. Création des automatesIllustration (7) <=elt name="element"=> <=struct occurs="many"=> <=choice=> <=elt name="fils1"=> <=elt name="fils2"=> <=elt name="fils3"=>

  35. Création des automatesIllustration (8) null fils2 3 fils1 6 1 0 5 fils3 null

  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=> per:firstName 0 0 3 1 textNode = true per:familyName

  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

  38. ConceptionRécupération des données (1) • Les attributs sont également stockés dans une table. <=attrs> <=attr name="per:id" type="int" use="required"=> <attrs=>

  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="é"=>

  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. <=elt name="element"> <=text type="text-type"=> <elt=>

  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

  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.

  43. Validation Illustration (1) <=movie> <=title>[Star Wars]<title=> <=director person:id="1"> <=person:firstName>[Georges]<person:firstName=> <=person:familyName>[Lucas]<person:familyName=> <director=> <movie=> • Choix de l’automate : état courant = 0. 3 0 1 title director

  44. Validation Illustration (2) <=movie> <=title>[Star Wars]<title=> <=director person:id="1"> <=person:firstName>[Georges]<person:firstName=> <=person:familyName>[Lucas]<person:familyName=> <director=> <movie=> • Itération sur les nœuds fils. • L’élément title est accepté par l’automate. 3 0 1 title director

  45. Validation Illustration (3) <=movie> <=title>[Star Wars]<title=> <=director person:id="1"> <=person:firstName>[Georges]<person:firstName=> <=person:familyName>[Lucas]<person:familyName=> <director=> <movie=> • L’élément director est accepté par l’automate. 3 0 1 title director

  46. Validation Illustration (4) <=movie> <=title>[Star Wars]<title=> <=director person:id="1"> <=person:firstName>[Georges]<person:firstName=> <=person:familyName>[Lucas]<person:familyName=> <director=> <movie=> • Validation des attributs. • Modification du préfixe : person:id -> per:id • Recherche de l’attribut dans la table.

  47. Validation Illustration (5) <=movie> <=title>[Star Wars]<title=> <=director person:id="1"> <=person:firstName>[Georges]<person:firstName=> <=person:familyName>[Lucas]<person:familyName=> <director=> <movie=> • Validation des attributs. • Vérification de la valeur de l’attribut • [0-9] -> 1

  48. Validation Illustration (6) <=movie> <=title>[Star Wars]<title=> <=director person:id="1"> <=person:firstName>[Georges]<person:firstName=> <=person:familyName>[Lucas]<person:familyName=> <director=> <movie=> • Validation du sous-arbre • Modification des préfixes • person:firstName -> per:firstName • person:familyName -> per:familyName per:firstName 0 3 1 per:familyName

  49. Validation Illustration (7) <=movie> <=title>[Star Wars]<title=> <=director person:id="1"> <=person:firstName>[Georges]<person:firstName=> <=person:familyName>[Lucas]<person:familyName=> <director=> <movie=> • L’état courant est terminal. Le sous-arbre est accepté. 3 0 2 title director

  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.

More Related