XXP

mai 2016

lun. mar. mer. jeu. ven. sam. dim.
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31          

« Oslo : MSchema, MGrammar et MGraph | Accueil | Oslo : MSchema, MGrammar et MGraph »

02 février 2009

Oslo : MSchema, MGrammar et MGraph

L'article sur Oslo publié par Dan Vanderboom et pointé la semaine dernière par dotnetguru.com est clair et pédagogique. Pour ceux qui lisent le français mieux qu'ils ne lisent l'anglais, voici une traduction d'un extrait qui traite des différents dialectes du language M.


_______________________

[...]

Langages de description de modèles et d'instances

Pour définir des modèles nous avons besoin d'un outil. Avec Oslo cet outil est un langage textuel appelé MShema et un éditeur appelé Intellipad. Personnellement je pense qu'il est bien curieux de promouvoir sans cesse le terme "modèle" pour finalement utiliser le terme "schema" pour nommer le langage. Mais tous ces noms peuvent encore changer avant la livraison définitive d'Oslo.

Voici un exmple simple de document MSchema :

module MyModel
{
    type Person
    {
        LastName : Text;
        FirstName : Text;
    }

    People : Person*;
}

En passant ce document au compilateur "M", un script SQL est généré. Celui-ci construira les objets correspondant en base de données. Intellipad est capable de vérifier l'exactitude de votre schema, et ce qui est vraiment sympa c'est que vous n'avez même pas besoin de spécifier les types de données quand vous commencez à construire votre modèle. Des types par défaut sont définis implicitement, vous pouvez donc raffiner plus tard, quand votre modèle évolue.

MGraph est un langage de définition des instances des objets [NDT : "objet" est employé ici dans le sens "classe" de la programmation orientée objet], contraint par MSchema et à la syntaxe similaire.  En somme MSchema est à MGraph ce que XSD est à XML.

Dans cet article, Lars Corneliussen explique la vision de Microsoft qui consiste à rendre MGraph aussi commun qu'XML aujourd'hui.  Jetez un oeil à son article pour voir une comparaison d'un même objet représenté en XML, JSON et MGraph, et faites votre choix.

Il est plus facile et plus efficace de lire et écrire en MSchema et MGraph qu'en XML. Leur format ressemble aux langages de programmation structurés, et les développeurs sont déjà familiers de ces formats. XML est parfait pour un outil. Même si les humains peuvent le lire il est loin d'être spécialement adapté à l'Homme. A l'inverse un langage de type C est beaucoup mieux adapté à l'Homme qu'XML, handicqpé par les signes < et > et la rédondance (et la verbosité) des balises XML. Ne reste plus que JSON et MGraph.

En JSON, les propriétés/champs/attributs sont délimités par des guillemets, ce qui laisse entendre que toute la structure est un bête "sac à propriétés".

{
    “LastName” : “Vanderboom”,
    “FirstName” : “Dan”
}

MGraph a une syntaxe très proche, mais comme les noms des propriétés sont reconnues et validées par le parser généré par MSchema, les guillemets deviennent inutiles. Au final l'apparence de MGraph est plus naturelle que JSON et est légèrement plus concise.

{
    LastName : “Vanderboom”,
    FirstName : “Dan”
}

Parce que MGraph n'est qu'un format de message et que l'offre de Microsoft supporte déjà plusieurs formats (SOAP/POX/JSON/etc.), l'ajout d'un adaptateur MGraph devrait s'incrire sans rupture dans leur architecture. Je serais étonné de ne pas le voir apparaître à la prochaine version d'Oslo.

Meta-Langages et MGrammar

De même qu'Oslo inclut des meta-modèles pour nous permettre de définir des modèles, il inclut aussi un meta-langage pour nous permettre de définir des langages (tout comme le proposent YACC et ANTLR). Mais, à la manière de Pinkston qui pense que data et metadata devraient être traités de la même façon, il est cohérent de concevoir un langage de définition de langage comme un langage sans spécificité particulière. Il y a quelque chose de Zen là-dedans, les outils sont auto-référents à la façon des dessins d'Escher :

Escher-hands

Voici un example de langage défini en MGrammar et tiré du très bon article MSDN MGrammar in a Nutshell:

module SongSample
{
    language Song
    {
        // Notes
        token Rest = “-”;
        token Note = “A”..”G”;
        token Sharp = “#”;
        token Flat = “b”;
        token RestOrNote = Rest | Note (Sharp | Flat)?;

        syntax Bar = RestOrNote RestOrNote RestOrNote RestOrNote;
        syntax List(element)
          = e:element => [e]
          | es:List(element) e:element => [valuesof(es), e];

        // One or more bars (recursive technique)
        syntax Bars = bs:List(Bar) => Bars[valuesof(bs)];
        syntax ASong = Music bs:Bars => Song[Bars[valuesof(bs)]];
        syntax Songs = ss:List(ASong) => Songs[valuesof(ss)];

        // Main rule
        syntax Main = Album ss:Songs => Album[ss];

        // Keywords
        syntax Music = “Music”;
        syntax Album = “Album”;

        // Ignore whitespace
        syntax LF = “\u000A”;
        syntax CR = “\u000D”;
        syntax Space = “\u0020″;

        interleave Whitespace = LF | CR | Space;
    }
}

C'est une façon simple et intuitive de définir un langage et de générer un parser. Au-delà des mots-clés évidents de définition des règles et des séquences de mots (avec un format différent et plus lisible de définition des regular expressions), l'opérateur de projection => vous permet de définir la sortie de MGraph en fonction de vos besoins.

[...]


_______________________

Le reste vaut le coup d'être lu, au moins pour le schéma qui synthétise l'articulation des outils Oslo dans la construction d'une application qui embarque un DSL. Attention comme le note Dan il est possible qu'une bonne partie du vocabulaire (Intellipad, MGraph, MGrammar, MSchema, et même Oslo) disparaisse d'ici la version finale de l'atelier DSL de Microsoft.

TrackBack

URL TrackBack de cette note:
https://www.typepad.com/services/trackback/6a00d8341c871f53ef010536fefd7e970b

Listed below are links to weblogs that reference Oslo : MSchema, MGrammar et MGraph:

Commentaires

Je ne me suis pas encore intéressé à 0slo mais cette traduction donne envie. Merci Denis!

L'utilisation des commentaires est désactivée pour cette note.