Skip to content

Transformations

Compare
Choose a tag to compare
@laowantong laowantong released this 14 Oct 10:57
· 111 commits to master since this release

Full Changelog: 3.2.1...4.0.4

Parser séparé / nouvelle API / réécritures et conversions

L'analyse syntaxique du texte-source décrivant un MCD est désormais complètement séparée de son traitement (#77). Une conséquence immédiate est l'introduction de la coloration syntaxique dans Mocodo online, ainsi que la création du plugin Mocodo syntax highlighter pour VS-Code. Ce travail a également permis d'améliorer certaines fonctionnalités et de faciliter la création de nouvelles.

Transformations

Réécritures

Mocodo 4.0 introduit en particulier la notion de réécriture du texte-source. Elle regroupe toutes les opérations qui transforment un MCD syntaxiquement correct en un autre MCD. Par exemple :

  • la mise en miroir, le réarrangement et l'obfuscation d'un MCD, qui existaient déjà ;
  • l'effacement des attributs ou des cardinalités pour créer des « exercices à trous » ;
  • la rectification des cardinalités mal formées (qui se fait maintenant à la demande) ;
  • l'homogénéisation de la mise en forme (capitalisation, séparateurs, diacritiques, ...) ;
  • la décomposition d'un MCD donné pour n'employer que des DF sans attributs ;
  • la génération de MCD aléatoires, soit from scratch, soit par croissance stochastique sur un MCD existant.

Dans les versions précédentes, les quelques opérations de réécriture existantes étaient toutes terminales. Elles peuvent désormais être enchaînées en pipeline. Par exemple, vous pouvez décomposer les associations n-aires, convertir les libellés des attributs en minuscules et calculer un nouveau plongement d'un seul coup, sans avoir besoin de copier-coller le résultat d'une réécriture pour le fournir à la suivante.

Conversions

Mocodo désigne sous ce nom les transformations d'un MCD qui produisent autre chose qu'un MCD : un dictionnaire des données, un schéma relationnel, un DDL en SQL, une URL, etc. Une même commande peut inclure plusieurs conversions. Si elle comporte également des réécritures, celles-ci sont exécutées en pré-traitement, et les conversions s'appliquent au dernier état du texte-source réécrit. Un post-traitement est possible pour les formats de conversion que Mocodo ne sait pas visualiser directement (par exemple, le QR Code correspondant une URL) : leur rendu peut alors être automatiquement délégué (--defer) au service tiers approprié.


Nouveautés de Mocodo online

  • Un véritable éditeur de texte (ACE) : curseurs multiples, annulations, etc.
  • Coloration syntaxique.
  • Six boutons couvrant plus de trente opérations de réécriture.
  • Possibilité d'ouvrir un MCD codé dans l'URL.
  • Possibilité d'adapter les fonctionnalités au niveau de connaissances et aux besoins de l'utilisateur.
  • Tutoriel plus complet, en deux parties : élémentaire, plus avancé.
  • Suppression de l'outil de mesure d'audience (Google Analytics).
  • Remplacement des icônes Font Awesome par des créations maison.
  • Améliorations cosmétiques.
  • Mode nuit.

Nouveautés de la commande magique Jupyter Notebook

  • Visualisation directe du diagramme relationnel.
  • Visualisation des sorties graphiques dans certains formats tiers (Graphviz, Mermaid, PlantUML).
  • Affichage du nom des fichiers de sortie.
  • L'appel de la commande magique peut être suivi d'un commentaire à la Python (#).
  • L'option -T permet de remplacer le contenu d'une cellule par le résultat d'une réécriture et/ou de copier dans le presse-papiers le résultat d'une conversion (remplace et étend l'ancienne option --replace).
  • L'option --select permet de passer outre la sélection par défaut des différentes sorties à afficher (diagramme conceptuel, texte-source réécrit, conversions).

Nouveautés de la commande mocodo

Syntaxe

  • Triage automatique des notes de pattes en rôles ou en messages à afficher au survol en fonction de la présence d'espaces. Possibilité de forcer l'interprétation en tant que rôle.
  • Si un nom de boîte se termine par un tiret (auparavant, seulement un chiffre), celui-ci n'apparaît pas dans la sortie graphique.
  • Possibilité d'avoir plusieurs DF sans devoir les suffixer par un numéro.
  • Positionnement d'une contrainte par alignement avec des boîtes (#80).
  • Possibilité d'utiliser n'importe quels caractères dans le nom d'une contrainte.
  • Possibilité de créer explicitement des boîtes invisibles en préfixant leur nom par un -. À la différence des fantômes (:), Mocodo ne peut pas les détruire lors du réarrangement. De plus, elles peuvent être référencées dans des associations ou des contraintes, ce qui permet de les utiliser pour fixer une position relative.
  • Messages d'erreurs de syntaxe beaucoup plus précis.

Réécritures

  • Nombreuses opérations de réécriture paramétrables.
  • Inférence des types de données SQL à partir des noms d'attributs ; des clauses de définition d'entités à partir des clauses de définition d'associations ; des CIFs à partir des agrégats; des DFs.
  • Génération de MCD aléatoires par croissance stochastique autour d'un MCD originel (éventuellement vide).
  • Révision et augmentation de la base de faux textes : mots français de 4 lettres, mots français de 5 lettres.
  • L'obfuscation d'un MCD peut maintenant porter sur certains éléments seulement.
  • Transposition automatique des MCD réarrangés plus hauts que larges.
  • Ajout du réarrangement des MCD sur des grilles sensiblement plus larges que hautes. Adapté aux graphes-chemins et aux exemples destinés à un document paginé.

Conversions

  • Conversions en crow's foot, dans la notation de Chen, en diagramme de classes UML, en arbre syntaxique abstrait, en URL encodant le MCD.
  • Visualisation et traitement des clés candidates (#79).
  • Génération des contraintes d'unicité (UNIQUE) et d'optionnalité (NULL et NOT NUL) aux niveaux relationnel et physique. Visualisation sur demande au niveau relationnel.
  • Ajout de trois options indépendantes : c (avec contraintes), e (avec explications) et b (avec boilerplate de document standalone) pour tous les gabarits produisant des schémas relationnels textuels (html, markdown, latex et text).
  • Nouveaux gabarits : DBML, Microsoft SQL Server, debug.
  • Nombreux aliases pour les gabarits.
  • Paramétrage fin de l'extraction du dictionnaire des données.

Autres

  • Plugin VS-Code pour la coloration syntaxique.
  • Réécriture complète de la documentation.

Corrections

  • Les positions des contraintes sont recalculées lors de l'inversion d'un MCD.
  • Les clés étrangères dans l'identification relative perdent leur caractère étranger lorsque l'entité d'origine ne donne pas lieu à une création de table (#86).
  • Le graphe des dépendances prend en charge les associations n-aires (#89).
  • Les DF qui ne sont pas des dépendances fonctionnelles lèvent une erreur.
  • Les attributs vides sont correctement ignorés lors du passage au relationnel.
  • Les agrégats multiples ne sont plus gérés par réduction de clé, mais par création de contraintes d'unicité (#88).
  • Remplacement de VARCHAR par VARCHAR2 dans la sortie Oracle.
  • --scale est maintenant compatible avec --input (#61).
  • Suppression des accents dans le nom des archives (#58).
  • Possibilité de passer des espaces dans la commande magique (#81).
  • L'obfuscation fonctionne en présence de tout type d'élément (#78).
  • Interdiction des agrégats sur les associations binaires et, de manière équivalente, de la configuration [E1] -- *N -- (DF) -- _11 -- [E2] lorsque l'entité faible E2 n'a pas de discriminateur.

Principaux changements internes

  • Parser dédié (Lark) et grammaire LALR (#77).
  • Réécriture des gabarits de passage au relationnel dans un sous-ensemble sain de YAML (et non plus en JSON).
  • Minimisation des duplications de code dans les gabarits par recours systématique à la dérivation des gabarits ancêtres. Ainsi, les gabarits HTML sont l'unique source de vérité pour les autres gabarits textuels, et tous les gabarits des dialectes de SQL dérivent du gabarit SQL (ANSI).
  • Ajout d'une option de transformation, dont les sous-options couvrent aussi bien les opérations de conversion (comme celles définies par les gabarits, et de façon générale toutes celles qui convertissent un MCD dans un autre format) que les opérations de réécriture d'un MCD en un autre (comme le réarrangement des clauses, la normalisation de la casse, la décomposition des associations, etc.).
  • La conversion en dictionnaire des données n'est plus spécifiée par un gabarit.
  • Remplacement de snapshot.md par un grand zoo de MCD avec toutes leurs transformations et réécritures, de façon à mieux prévenir les régressions.
  • L'initialisation du germe du générateur aléatoire est faite en un seul endroit.

Changements non rétro-compatibles

  • Permutation de la sémantique des rôles dans les associations réflexives.
  • Conversion forcée d'une association en table dénotée par un préfixe + et non plus par des crochets autour du nom de l'association.
  • Réécriture complète de l'API en ligne de commande.
  • Renommage de four_letter_words.txt en en4.txt.
  • Options --pdf et --png remplacées par des sous-options pdf et png d'une nouvelle option --svg_to.
  • Désactivation de l'embellissement des pattes d'un héritage : --> et ==> au lieu de ->> et =>>.

Fonctionnalités retirées

  • Options --disambiguation et --hide_notes rendues obsolètes par une meilleure gestion des notes de pattes. La désambiguïsation des clés étrangères par numérotation est devenue un fallback.
  • Le reformatage du MCD pour le faire entrer dans une grille minimale n'avait de sens que s'il était suivi d'un réarrangement du MCD. Il y est désormais intégré comme pré-traitement. L'option --fit est donc retirée.
  • Mocodo online n'essaie plus de donner un titre à votre MCD.
  • Gabarit json.
  • Gabarit txt2tags.
  • Gabarit html : le survol d'un champ n'affiche plus d'informations de déboggage. Utilisez le gabarit dédié debug.