<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
	<id>https://wiki.bht.fr/api.php?hidebots=1&amp;urlversion=1&amp;days=7&amp;limit=50&amp;action=feedrecentchanges&amp;feedformat=atom</id>
	<title>Wikip  - Modifications récentes [fr]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.bht.fr/api.php?hidebots=1&amp;urlversion=1&amp;days=7&amp;limit=50&amp;action=feedrecentchanges&amp;feedformat=atom"/>
	<link rel="alternate" type="text/html" href="https://wiki.bht.fr/index.php/Sp%C3%A9cial:Modifications_r%C3%A9centes"/>
	<updated>2026-07-30T21:23:23Z</updated>
	<subtitle>Suivez les dernières modifications du wiki dans ce flux.</subtitle>
	<generator>MediaWiki 1.36.1</generator>
	<entry>
		<id>https://wiki.bht.fr/index.php?title=Mod%C3%A8le:EnConstruction&amp;diff=5004&amp;oldid=0</id>
		<title>Modèle:EnConstruction</title>
		<link rel="alternate" type="text/html" href="https://wiki.bht.fr/index.php?title=Mod%C3%A8le:EnConstruction&amp;diff=5004&amp;oldid=0"/>
		<updated>2026-07-24T17:08:53Z</updated>

		<summary type="html">&lt;p&gt;&lt;a href=&quot;/index.php?title=Utilisateur:WikiAdmin&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;Utilisateur:WikiAdmin (page inexistante)&quot;&gt;&lt;bdi&gt;WikiAdmin&lt;/bdi&gt;&lt;/a&gt; a importé &lt;a href=&quot;/index.php/Mod%C3%A8le:EnConstruction&quot; title=&quot;Modèle:EnConstruction&quot;&gt;Modèle:EnConstruction&lt;/a&gt; par téléversement de fichier (1 version) dfg&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;includeonly&amp;gt;{{Ligne_exergue&lt;br /&gt;
|gaucheW=width:32px;&lt;br /&gt;
|gauche=&amp;lt;span style='font-size:32px;'&amp;gt;🚧&amp;lt;/span&amp;gt;&lt;br /&gt;
|texte={{fr§en|Cet article est en travaux. Son contenu encore incomplet, est temporaire.|This article is under construction. Its content is still incomplete and temporary.}}&lt;br /&gt;
|color=#FFFF20 &lt;br /&gt;
}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{Model&lt;br /&gt;
|class=page&lt;br /&gt;
|texte=Ce modèle informe le lecteur que la page est en cours de modification, que sa rédaction n'est pas terminée.&lt;br /&gt;
|syntaxe=&amp;lt;nowiki&amp;gt;{{EnConstruction |image=[construction32.png] }}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|specification=&lt;br /&gt;
;image&lt;br /&gt;
:L'image ou l'icône apparaissant à gauche du texte expliquant que la page est en cours de rédaction. Par défaut l'image est [[Image:construction16.png]].&lt;br /&gt;
}}&lt;br /&gt;
Exemple :&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;{{EnConstruction}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
donnera :&lt;br /&gt;
&lt;br /&gt;
{{EnConstruction}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>WikiAdmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.bht.fr/index.php?title=Mod%C3%A8le:Minitodo&amp;diff=5006&amp;oldid=0</id>
		<title>Modèle:Minitodo</title>
		<link rel="alternate" type="text/html" href="https://wiki.bht.fr/index.php?title=Mod%C3%A8le:Minitodo&amp;diff=5006&amp;oldid=0"/>
		<updated>2026-07-24T17:08:53Z</updated>

		<summary type="html">&lt;p&gt;&lt;a href=&quot;/index.php?title=Utilisateur:WikiAdmin&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;Utilisateur:WikiAdmin (page inexistante)&quot;&gt;&lt;bdi&gt;WikiAdmin&lt;/bdi&gt;&lt;/a&gt; a importé &lt;a href=&quot;/index.php/Mod%C3%A8le:Minitodo&quot; title=&quot;Modèle:Minitodo&quot;&gt;Modèle:Minitodo&lt;/a&gt; par téléversement de fichier (1 version) dfg&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;includeonly&amp;gt;&amp;lt;div style=&amp;quot;margin:0em;padding:0.1em;&amp;quot;&amp;gt;&amp;lt;span style='background-color:#404010;font-size:60%;'&amp;gt;{{atCount|name=todo_count|prefix=todo&amp;amp;nbsp;|id={{{2|}}}}}&amp;lt;/span&amp;gt;&amp;amp;nbsp;:&amp;amp;nbsp;&amp;lt;span style='font-size:80%;'&amp;gt;{{{1}}}&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{Model&lt;br /&gt;
|class=§&lt;br /&gt;
|texte= &lt;br /&gt;
|syntaxe=&amp;lt;nowiki&amp;gt;{{minitodo |texte|id}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|specification=&lt;br /&gt;
;texte &lt;br /&gt;
:Le texte décrivant le travail restant à faire.&lt;br /&gt;
;id 2&lt;br /&gt;
: l'id est un identifiant unique dans la page. &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Exemple :  &lt;br /&gt;
   &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;{{minitodo |Il ne faut pas oublier de finir …}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
donnera :&lt;br /&gt;
&lt;br /&gt;
{{minitodo |Il ne faut pas oublier de finir …}}&lt;br /&gt;
&lt;br /&gt;
{{#atallref:}} &lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>WikiAdmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.bht.fr/index.php?title=Les_paragraphes_tagu%C3%A9s_et/ou_num%C3%A9rot%C3%A9s_-_bases&amp;diff=5008&amp;oldid=0</id>
		<title>Les paragraphes tagués et/ou numérotés - bases</title>
		<link rel="alternate" type="text/html" href="https://wiki.bht.fr/index.php?title=Les_paragraphes_tagu%C3%A9s_et/ou_num%C3%A9rot%C3%A9s_-_bases&amp;diff=5008&amp;oldid=0"/>
		<updated>2026-07-24T17:08:53Z</updated>

		<summary type="html">&lt;p&gt;&lt;a href=&quot;/index.php?title=Utilisateur:WikiAdmin&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;Utilisateur:WikiAdmin (page inexistante)&quot;&gt;&lt;bdi&gt;WikiAdmin&lt;/bdi&gt;&lt;/a&gt; a importé &lt;a href=&quot;/index.php/Les_paragraphes_tagu%C3%A9s_et/ou_num%C3%A9rot%C3%A9s_-_bases&quot; title=&quot;Les paragraphes tagués et/ou numérotés - bases&quot;&gt;Les paragraphes tagués et/ou numérotés - bases&lt;/a&gt; par téléversement de fichier (1 version) dfg&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;noinclude&amp;gt;{{IntroductionNotation&lt;br /&gt;
|texte=&lt;br /&gt;
|index=Accueil&lt;br /&gt;
}}&amp;lt;/noinclude&amp;gt;{{Not|{{m|§-n|class=cNumParTag}}  : Paragraphe numéroté de 15cm de large ☞[[Modèle:Par|§-n]] |not_§1}}  &lt;br /&gt;
{{Not|{{m|§-n|class=cNumParTag2}} : Paragraphe numéroté de 18cm de large ☞[[Modèle:Par2|§-n]] |not_§2}}  &lt;br /&gt;
{{Not|{{m|§|class=parTag}}      : Paragraphe non numéroté de 15cm de large ☞[[Modèle:ParW|§]] |not_§}}&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
Classement par domaine:&lt;br /&gt;
* [[Les paragraphes tagués et/ou numérotés - Tous|Tous]]&lt;br /&gt;
* [[Les paragraphes tagués et/ou numérotés - bases|Les bases]]&lt;br /&gt;
* [[Les paragraphes tagués et/ou numérotés - généraux|Les généraux]]&lt;br /&gt;
* [[Les paragraphes tagués et/ou numérotés - d'informatique|Les informatiques]]&lt;br /&gt;
* [[Les paragraphes tagués et/ou numérotés - des mathématiques|Les mathématique]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>WikiAdmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.bht.fr/index.php?title=Mod%C3%A8le:Code&amp;diff=5002&amp;oldid=0</id>
		<title>Modèle:Code</title>
		<link rel="alternate" type="text/html" href="https://wiki.bht.fr/index.php?title=Mod%C3%A8le:Code&amp;diff=5002&amp;oldid=0"/>
		<updated>2026-07-24T17:08:52Z</updated>

		<summary type="html">&lt;p&gt;&lt;a href=&quot;/index.php?title=Utilisateur:WikiAdmin&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;Utilisateur:WikiAdmin (page inexistante)&quot;&gt;&lt;bdi&gt;WikiAdmin&lt;/bdi&gt;&lt;/a&gt; a importé &lt;a href=&quot;/index.php/Mod%C3%A8le:Code&quot; title=&quot;Modèle:Code&quot;&gt;Modèle:Code&lt;/a&gt; par téléversement de fichier (1 version) dfg&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;includeonly&amp;gt;{{AtIfNotNul|1={{{line|}}}|2={{#tag:syntaxhighlight|{{{code|}}}|lang={{{lang|text}}}|style=&amp;quot;font-family: monospace; font-size:10pt; padding:0.1ch;margin:0.0ch;{{{colNb|80.5}}}ch;&amp;quot;|line=|lineStart={{{lineStart|1}}}}}|3={{#tag:syntaxhighlight|{{{code|}}}|lang={{{lang|text}}}|style=&amp;quot;font-family: monospace; font-size:10pt;padding:0.1ch;width:{{{colNb|80}}}ch;&amp;quot;}}}}&lt;br /&gt;
&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{Model  &lt;br /&gt;
|class=lang &lt;br /&gt;
|texte=Ce modèle sert présenter un code programmation. Si le code utilise le caractère {{dq|{{!}}}} alors utiliser la balise (tag sgml) {{mmm|&amp;amp;lt;syntaxhighlight&amp;amp;gt;}}.     &lt;br /&gt;
|auteurs=&lt;br /&gt;
|syntaxe=&amp;lt;nowiki&amp;gt;{{code|lang=|code=}}&amp;lt;/nowiki&amp;gt; &lt;br /&gt;
|specification=   &lt;br /&gt;
;lang= &lt;br /&gt;
:c++ php …  &lt;br /&gt;
;code=  &lt;br /&gt;
: le code &lt;br /&gt;
; colNb&lt;br /&gt;
: nombre de caractères en largeur (nombre de colonnes)&lt;br /&gt;
; line&lt;br /&gt;
: active la numérotation, mettre n'importe quelle valeur&lt;br /&gt;
; lineStart&lt;br /&gt;
: numéro de ligne de départ, par défaut 1&lt;br /&gt;
}} &lt;br /&gt;
Exemple :   &lt;br /&gt;
  &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;{{parW|1=&lt;br /&gt;
{{code|colNb=80.5|lang=cpp|style=border:3px dashed blue;|code=     &lt;br /&gt;
#2345678901234567890123456789012345678901234567890123456789012345678901234567890&lt;br /&gt;
#        1         2         3         4         5         6         7         8&lt;br /&gt;
    #include &amp;lt;time.h&amp;gt;&lt;br /&gt;
    #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
    void sleep( time_t nb_sec  )&lt;br /&gt;
    {&lt;br /&gt;
        time_t limit, top;            time(&amp;amp;top);          limit = top + nb_sec ;&lt;br /&gt;
        while (top &amp;lt; limit)&lt;br /&gt;
        {&lt;br /&gt;
            time(&amp;amp;top);&lt;br /&gt;
        }&lt;br /&gt;
    };&lt;br /&gt;
    int main( int argc, char * argv[] )&lt;br /&gt;
    { &lt;br /&gt;
        time_t start, stop;  time(&amp;amp;start); sleep( 5  ) ; time(&amp;amp;stop); printf(&amp;quot;start : %ld\n&amp;quot;,start ); printf(&amp;quot;stop  : %ld\n&amp;quot;,stop ); printf(&amp;quot;in seconds: %f\n&amp;quot;,difftime(stop,start));&lt;br /&gt;
    } &lt;br /&gt;
}}&lt;br /&gt;
}}{{parW|1=&lt;br /&gt;
{{code|lang=cpp|colNb=86.5|code=     &lt;br /&gt;
#2345678901234567890123456789012345678901234567890123456789012345678901234567890123456&lt;br /&gt;
#        1         2         3         4         5         6         7         8&lt;br /&gt;
    #include &amp;lt;time.h&amp;gt;&lt;br /&gt;
    #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
    void sleep( time_t nb_sec  )&lt;br /&gt;
    {&lt;br /&gt;
        time_t limit, top;            time(&amp;amp;top);          limit = top + nb_sec ;&lt;br /&gt;
        while (top &amp;lt; limit)&lt;br /&gt;
        {&lt;br /&gt;
            time(&amp;amp;top);&lt;br /&gt;
        }&lt;br /&gt;
    };&lt;br /&gt;
    int main( int argc, char * argv[] )&lt;br /&gt;
    {&lt;br /&gt;
        time_t start, stop;  time(&amp;amp;start); sleep( 5  ) ; time(&amp;amp;stop); printf(&amp;quot;start : %ld\n&amp;quot;,start ); printf(&amp;quot;stop  : %ld\n&amp;quot;,stop ); printf(&amp;quot;in seconds: %f\n&amp;quot;,difftime(stop,start));&lt;br /&gt;
    }&lt;br /&gt;
}}&lt;br /&gt;
}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
donnera :&lt;br /&gt;
&lt;br /&gt;
{{parW|1=&lt;br /&gt;
{{code|colNb=80.5|lang=cpp|style=border:3px dashed blue;|code=     &lt;br /&gt;
#2345678901234567890123456789012345678901234567890123456789012345678901234567890&lt;br /&gt;
#        1         2         3         4         5         6         7         8&lt;br /&gt;
    #include &amp;lt;time.h&amp;gt;&lt;br /&gt;
    #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
    void sleep( time_t nb_sec  )&lt;br /&gt;
    {&lt;br /&gt;
        time_t limit, top;            time(&amp;amp;top);          limit = top + nb_sec ;&lt;br /&gt;
        while (top &amp;lt; limit)&lt;br /&gt;
        {&lt;br /&gt;
            time(&amp;amp;top);&lt;br /&gt;
        }&lt;br /&gt;
    };&lt;br /&gt;
    int main( int argc, char * argv[] )&lt;br /&gt;
    { &lt;br /&gt;
        time_t start, stop;  time(&amp;amp;start); sleep( 5  ) ; time(&amp;amp;stop); printf(&amp;quot;start : %ld\n&amp;quot;,start ); printf(&amp;quot;stop  : %ld\n&amp;quot;,stop ); printf(&amp;quot;in seconds: %f\n&amp;quot;,difftime(stop,start));&lt;br /&gt;
    } &lt;br /&gt;
}}&lt;br /&gt;
}}{{parW|1=&lt;br /&gt;
{{code|lang=cpp|colNb=86.5|code=     &lt;br /&gt;
#2345678901234567890123456789012345678901234567890123456789012345678901234567890123456&lt;br /&gt;
#        1         2         3         4         5         6         7         8&lt;br /&gt;
    #include &amp;lt;time.h&amp;gt;&lt;br /&gt;
    #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
    void sleep( time_t nb_sec  )&lt;br /&gt;
    {&lt;br /&gt;
        time_t limit, top;            time(&amp;amp;top);          limit = top + nb_sec ;&lt;br /&gt;
        while (top &amp;lt; limit)&lt;br /&gt;
        {&lt;br /&gt;
            time(&amp;amp;top);&lt;br /&gt;
        }&lt;br /&gt;
    };&lt;br /&gt;
    int main( int argc, char * argv[] )&lt;br /&gt;
    {&lt;br /&gt;
        time_t start, stop;  time(&amp;amp;start); sleep( 5  ) ; time(&amp;amp;stop); printf(&amp;quot;start : %ld\n&amp;quot;,start ); printf(&amp;quot;stop  : %ld\n&amp;quot;,stop ); printf(&amp;quot;in seconds: %f\n&amp;quot;,difftime(stop,start));&lt;br /&gt;
    }&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>WikiAdmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.bht.fr/index.php?title=Dfg_txt_like_uml_language&amp;diff=5000&amp;oldid=0</id>
		<title>Dfg txt like uml language</title>
		<link rel="alternate" type="text/html" href="https://wiki.bht.fr/index.php?title=Dfg_txt_like_uml_language&amp;diff=5000&amp;oldid=0"/>
		<updated>2026-07-24T17:08:50Z</updated>

		<summary type="html">&lt;p&gt;&lt;a href=&quot;/index.php?title=Utilisateur:WikiAdmin&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;Utilisateur:WikiAdmin (page inexistante)&quot;&gt;&lt;bdi&gt;WikiAdmin&lt;/bdi&gt;&lt;/a&gt; a importé &lt;a href=&quot;/index.php/Dfg_txt_like_uml_language&quot; title=&quot;Dfg txt like uml language&quot;&gt;Dfg txt like uml language&lt;/a&gt; par téléversement de fichier (1 version) dfg&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{IntroductionDFG&lt;br /&gt;
|keyWords= uml text txt language langage dfg&lt;br /&gt;
|texte=&lt;br /&gt;
|auteurs=Arthur TOROSSIAN&lt;br /&gt;
|index=DataFlowGenerator&lt;br /&gt;
}}&lt;br /&gt;
== Exemples ==&lt;br /&gt;
=== Dfg grammar ===&lt;br /&gt;
{{parW|1=&lt;br /&gt;
{{code|lang=text|code=&lt;br /&gt;
CEl &lt;br /&gt;
    ? help : CStr&lt;br /&gt;
    ? longHelp : CStr&lt;br /&gt;
    ? shortHelp : CStr&lt;br /&gt;
CAss &lt;br /&gt;
    ? card : CStr&lt;br /&gt;
    name : CStr&lt;br /&gt;
CLeave  (CEl,CAss,)&lt;br /&gt;
    ? admVals : CStr&lt;br /&gt;
    ? defVal : CStr&lt;br /&gt;
    ? isAttr : CBool&lt;br /&gt;
CScalarLeave  (CLeave,)&lt;br /&gt;
    ? unit : CStr&lt;br /&gt;
CClBase  (CEl,)&lt;br /&gt;
    ? accept : CStr&lt;br /&gt;
    type : CStr&lt;br /&gt;
CClass  (CClBase,)&lt;br /&gt;
    ? her : CStr&lt;br /&gt;
    * bool :  CBool  (CLeave,)&lt;br /&gt;
    * clDef :  CClDef  (CClass,)&lt;br /&gt;
    * clDefInst :  CClDefInst  (CClDef,CAss,)&lt;br /&gt;
    * clInst :  CClInst  (CClBase,CAss,)&lt;br /&gt;
    * clRef :  CClRef  (CClBase,CAss,)&lt;br /&gt;
    * date :  CDate  (CLeave,)&lt;br /&gt;
    * flt :  CFlt  (CScalarLeave,)&lt;br /&gt;
    * int :  CInt  (CScalarLeave,)&lt;br /&gt;
    * map :  CMap  (CEl,CAss,)&lt;br /&gt;
        keyType : CStr&lt;br /&gt;
        valType : CStr&lt;br /&gt;
    * method :  CMethod &lt;br /&gt;
        name : CStr&lt;br /&gt;
        * arg :  CArg &lt;br /&gt;
            dir : CStr&lt;br /&gt;
            name : CStr&lt;br /&gt;
            type : CStr&lt;br /&gt;
            ? unit : CStr&lt;br /&gt;
    * str :  CStr  (CLeave,)&lt;br /&gt;
dfg :  CDfg  (CClass,)&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
=== Load curve ===&lt;br /&gt;
{{parW|1=&lt;br /&gt;
{{code|lang=text|code=&lt;br /&gt;
consumption : CLoadCurve&lt;br /&gt;
    energyUnit : CStr&lt;br /&gt;
    timeStep : CFlt&lt;br /&gt;
    timeUnit : CStr&lt;br /&gt;
    * values : CFlt&lt;br /&gt;
    0:1 comment : CComment&lt;br /&gt;
        ligne : CStr&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
=== Surface dépôt ===&lt;br /&gt;
{{parW|1=&lt;br /&gt;
{{code|lang=text|code=&lt;br /&gt;
surfaceDepot : CSurfaceDepot&lt;br /&gt;
    ? highWaterLevel : CFlt&lt;br /&gt;
    * profileData : CProfileData&lt;br /&gt;
        num : CInt&lt;br /&gt;
        surface : CFlt&lt;br /&gt;
        form : CForm&lt;br /&gt;
            * coef : CFlt&lt;br /&gt;
        ? highWaterLevel : CFlt&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
=== ihm calcul data ===&lt;br /&gt;
{{parW|1=&lt;br /&gt;
{{code|lang=text|code=&lt;br /&gt;
ihmCalculData : CIhmCalculData&lt;br /&gt;
    calculMode : CInt # 1 -&amp;gt; production, 2-&amp;gt; Sûreté, 0 -&amp;gt; non défini&lt;br /&gt;
    bathyDate : CDate&lt;br /&gt;
    tidalDate : CDate&lt;br /&gt;
    # projectionDuration&lt;br /&gt;
    tidalGap : CFlt # [m] déôte de marée&lt;br /&gt;
    lowSeaLevel : CFlt # [m]CM  niveau de basse mer&lt;br /&gt;
    * pump : CPump&lt;br /&gt;
        ref : CStr&lt;br /&gt;
        active : CBool&lt;br /&gt;
    ? pbes : CFlt # [m]CM&lt;br /&gt;
    sedimentaryDynamics : CSedimentaryDynamics&lt;br /&gt;
        sedimentaryDynamicType : 1-&amp;gt;auto, 2-&amp;gt;null, 2-&amp;gt;manual&lt;br /&gt;
        autoCalculMode : CInt &lt;br /&gt;
            # 1 -&amp;gt; Prédéfinie,&lt;br /&gt;
            # 2 -&amp;gt; Prorata&lt;br /&gt;
        autoPredefinedMode : CInt # 1-&amp;gt; maximum, 2-&amp;gt; quantil75, 3-&amp;gt;moyen&lt;br /&gt;
        siltingPeriod : CInt &lt;br /&gt;
            # 1-&amp;gt; après dragage à septembre, &lt;br /&gt;
            # 2-&amp;gt; octobre à dragage d'hiver,&lt;br /&gt;
            # 3-&amp;gt; dragage d'hiver à dragage été&lt;br /&gt;
        manualDynamic : CManualDynamic&lt;br /&gt;
            * profileData : CProfileData&lt;br /&gt;
                num : CInt&lt;br /&gt;
                surface : CFlt&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>WikiAdmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.bht.fr/index.php?title=Dfg1_reference_manual_-_xml_-_dfguml&amp;diff=4996&amp;oldid=0</id>
		<title>Dfg1 reference manual - xml - dfguml</title>
		<link rel="alternate" type="text/html" href="https://wiki.bht.fr/index.php?title=Dfg1_reference_manual_-_xml_-_dfguml&amp;diff=4996&amp;oldid=0"/>
		<updated>2026-07-24T17:08:49Z</updated>

		<summary type="html">&lt;p&gt;&lt;a href=&quot;/index.php?title=Utilisateur:WikiAdmin&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;Utilisateur:WikiAdmin (page inexistante)&quot;&gt;&lt;bdi&gt;WikiAdmin&lt;/bdi&gt;&lt;/a&gt; a importé &lt;a href=&quot;/index.php/Dfg1_reference_manual_-_xml_-_dfguml&quot; title=&quot;Dfg1 reference manual - xml - dfguml&quot;&gt;Dfg1 reference manual - xml - dfguml&lt;/a&gt; par téléversement de fichier (1 version) dfg&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;noinclude&amp;gt;{{IntroductionDFG}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
[[Catégorie:Dfg1RefManual]]{{proj_p|L'élément {{m|&amp;lt;?xml … ?&amp;gt;}} fait partie du langage XML même. Il possède les attributs {{m|version}}{{clink|ref_xml_version}} et {{m|encoding}}{{clink|ref_xml_encoding}}. &lt;br /&gt;
|par_xml_ref}}&lt;/div&gt;</summary>
		<author><name>WikiAdmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.bht.fr/index.php?title=Dfg1_reference_manual_-_xml_-_plantuml&amp;diff=4998&amp;oldid=0</id>
		<title>Dfg1 reference manual - xml - plantuml</title>
		<link rel="alternate" type="text/html" href="https://wiki.bht.fr/index.php?title=Dfg1_reference_manual_-_xml_-_plantuml&amp;diff=4998&amp;oldid=0"/>
		<updated>2026-07-24T17:08:49Z</updated>

		<summary type="html">&lt;p&gt;&lt;a href=&quot;/index.php?title=Utilisateur:WikiAdmin&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;Utilisateur:WikiAdmin (page inexistante)&quot;&gt;&lt;bdi&gt;WikiAdmin&lt;/bdi&gt;&lt;/a&gt; a importé &lt;a href=&quot;/index.php/Dfg1_reference_manual_-_xml_-_plantuml&quot; title=&quot;Dfg1 reference manual - xml - plantuml&quot;&gt;Dfg1 reference manual - xml - plantuml&lt;/a&gt; par téléversement de fichier (1 version) dfg&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;noinclude&amp;gt;{{IntroductionDFG}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
[[Catégorie:Dfg1RefManual]]{{proj_p|Le diagramme UML de l'exemple {{clink|dfgumlr_xml}} est donné par {{clink|plantumlr_xml}}, qui n'est réduit qu'une seule classe; la classe racine.}}&lt;/div&gt;</summary>
		<author><name>WikiAdmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.bht.fr/index.php?title=Dfg1_reference_manual_-_xmlEncoding_-_dfguml&amp;diff=4992&amp;oldid=0</id>
		<title>Dfg1 reference manual - xmlEncoding - dfguml</title>
		<link rel="alternate" type="text/html" href="https://wiki.bht.fr/index.php?title=Dfg1_reference_manual_-_xmlEncoding_-_dfguml&amp;diff=4992&amp;oldid=0"/>
		<updated>2026-07-24T17:08:48Z</updated>

		<summary type="html">&lt;p&gt;&lt;a href=&quot;/index.php?title=Utilisateur:WikiAdmin&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;Utilisateur:WikiAdmin (page inexistante)&quot;&gt;&lt;bdi&gt;WikiAdmin&lt;/bdi&gt;&lt;/a&gt; a importé &lt;a href=&quot;/index.php/Dfg1_reference_manual_-_xmlEncoding_-_dfguml&quot; title=&quot;Dfg1 reference manual - xmlEncoding - dfguml&quot;&gt;Dfg1 reference manual - xmlEncoding - dfguml&lt;/a&gt; par téléversement de fichier (1 version) dfg&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;noinclude&amp;gt;{{IntroductionDFG}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
[[Catégorie:Dfg1RefManual]]{{proj_p|Et l'attribut {{m|encoding}} du nœud «?xml»{{clink|par_xml_ref}} est le type de l'encodage du fichier texte, ce type a toujours la valeur «UTF-8».&lt;br /&gt;
|ref_xml_encoding}}&lt;/div&gt;</summary>
		<author><name>WikiAdmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.bht.fr/index.php?title=Dfg1_reference_manual_-_xmlVersion_-_dfguml&amp;diff=4994&amp;oldid=0</id>
		<title>Dfg1 reference manual - xmlVersion - dfguml</title>
		<link rel="alternate" type="text/html" href="https://wiki.bht.fr/index.php?title=Dfg1_reference_manual_-_xmlVersion_-_dfguml&amp;diff=4994&amp;oldid=0"/>
		<updated>2026-07-24T17:08:48Z</updated>

		<summary type="html">&lt;p&gt;&lt;a href=&quot;/index.php?title=Utilisateur:WikiAdmin&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;Utilisateur:WikiAdmin (page inexistante)&quot;&gt;&lt;bdi&gt;WikiAdmin&lt;/bdi&gt;&lt;/a&gt; a importé &lt;a href=&quot;/index.php/Dfg1_reference_manual_-_xmlVersion_-_dfguml&quot; title=&quot;Dfg1 reference manual - xmlVersion - dfguml&quot;&gt;Dfg1 reference manual - xmlVersion - dfguml&lt;/a&gt; par téléversement de fichier (1 version) dfg&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;noinclude&amp;gt;{{IntroductionDFG}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
[[Catégorie:Dfg1RefManual]]{{proj_p|L'attribut {{m|version}} du nœud {{clinkn|par_xml_ref|«?xml»}} est la version du XML utilisé, sa valeur est toujours «1.0».&lt;br /&gt;
|ref_xml_version}}&lt;/div&gt;</summary>
		<author><name>WikiAdmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.bht.fr/index.php?title=Manuel_utilisateur_de_Data_Flow_Generator_V1&amp;diff=4986&amp;oldid=0</id>
		<title>Manuel utilisateur de Data Flow Generator V1</title>
		<link rel="alternate" type="text/html" href="https://wiki.bht.fr/index.php?title=Manuel_utilisateur_de_Data_Flow_Generator_V1&amp;diff=4986&amp;oldid=0"/>
		<updated>2026-07-24T17:08:47Z</updated>

		<summary type="html">&lt;p&gt;&lt;a href=&quot;/index.php?title=Utilisateur:WikiAdmin&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;Utilisateur:WikiAdmin (page inexistante)&quot;&gt;&lt;bdi&gt;WikiAdmin&lt;/bdi&gt;&lt;/a&gt; a importé &lt;a href=&quot;/index.php/Manuel_utilisateur_de_Data_Flow_Generator_V1&quot; title=&quot;Manuel utilisateur de Data Flow Generator V1&quot;&gt;Manuel utilisateur de Data Flow Generator V1&lt;/a&gt; par téléversement de fichier (1 version) dfg&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{IntroductionDFG}}&lt;br /&gt;
{{Modèle:EnConstruction}}&lt;br /&gt;
== Exemple de script d'utilisation ==&lt;br /&gt;
{{parW|1=&lt;br /&gt;
{{code|lang=bash|code=&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
dataName=&amp;quot;chenalData&amp;quot;&lt;br /&gt;
dfgCheck=/home/atoross/dvlp/tools/svn/dfg1dvlp/dfgGrammarCheck.py&lt;br /&gt;
dfgPath=/home/atoross/dvlp/tools/svn/dfg1dvlp/dfg_V1PythonGenDriver.py&lt;br /&gt;
&lt;br /&gt;
rm -Rf ./generated/*&lt;br /&gt;
#python ${dfgPath} -h&lt;br /&gt;
python ${dfgCheck} -c ${dataName}Model.xml -o generated/${dataName}ModelGr.xml&lt;br /&gt;
python ${dfgPath}  --pathGrammarfile ${dataName}Model.xml \&lt;br /&gt;
			--dataName ${dataName} \&lt;br /&gt;
			--pathGen generated \&lt;br /&gt;
            --exportTxt \&lt;br /&gt;
            --plantuml&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# chenalDataPlantUml.puml&lt;br /&gt;
plantUml=/home/atoross/exe/bin/plantuml.jar&lt;br /&gt;
java -jar ${plantUml} -charset 'UTF-8' -tsvg  \&lt;br /&gt;
                                            generated/${dataName}PlantUml.puml&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>WikiAdmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.bht.fr/index.php?title=Data_Flow_Generator_-_Historique&amp;diff=4988&amp;oldid=0</id>
		<title>Data Flow Generator - Historique</title>
		<link rel="alternate" type="text/html" href="https://wiki.bht.fr/index.php?title=Data_Flow_Generator_-_Historique&amp;diff=4988&amp;oldid=0"/>
		<updated>2026-07-24T17:08:47Z</updated>

		<summary type="html">&lt;p&gt;&lt;a href=&quot;/index.php?title=Utilisateur:WikiAdmin&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;Utilisateur:WikiAdmin (page inexistante)&quot;&gt;&lt;bdi&gt;WikiAdmin&lt;/bdi&gt;&lt;/a&gt; a importé &lt;a href=&quot;/index.php/Data_Flow_Generator_-_Historique&quot; title=&quot;Data Flow Generator - Historique&quot;&gt;Data Flow Generator - Historique&lt;/a&gt; par téléversement de fichier (1 version) dfg&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{IntroductionDFG}}&lt;br /&gt;
{{proj_p|Je tiens à apporter des éclaircissements du discours donné à Samuel et Olivier vendredi dernier, car j'ai l'impression que je les ai un peu choqué. Je me rend compte que tout le monde n'est pas forcément au courant de ce qu'est Data Flow Generator qui est intimement lié au langage pivot. Il a été déjà présenté à I2A et je remercie Pierre pour cela, c'est la seule fois où l'on m'a permis d'en parler devant le groupe. Aussi vous y verrez quelques {{m|alertes|#FF8080}} disséminé ici et là.}}&lt;br /&gt;
{{proj_p|D'abord il faut distinguer le {{m|langage pivot}}({{clink|langage pivot}}), {{m|le moteur de simulation par évènement discret}}({{clink|Une simulation à événements discrets}}) et {{m|les outils de génération de codes}} que j'ai nommé {{m|Data Flow Generator}} noté {{m|DFG}} dont la version est 0.X.X (http://dfg.bht.fr/). Je le développe depuis des années. Aujourd'hui je le présente sous le nom de {{m|Discrete Event Simulator Generator}} - noté {{m|DisEvtSimGen}} ou {{m|DFG1}} dont version est 1.X.X - car je lui ai adjoint le moteur de simulation par évènement discret, &lt;br /&gt;
{{Rq|On peut lui adjoindre une infinité de moteurs en réalité, notamment mon futur simulateur de combat aérien, histoire de se faire plaisir sur le plan technique.}}&lt;br /&gt;
Ces générateurs de code (DFG) n'appartiennent pas à EDF, je pense même qu'ils sont interdits d'existence en son sein. En effet j'ai au moins 3 fois proposé de faire leur développement au sein d'EDF, dans le cadre des 5% d’innovation par exemple, ou dans un projet, mais j'ai eu à chaque fois un refus non expliqué. &lt;br /&gt;
&lt;br /&gt;
Depuis je ne propose plus rien, d'autant plus que le projet {{m|FAROS}}(http://www2.lifl.fr/faros/) a été arrêté pour la partie EDF, un projet dont l'objectif était de fournir justement un langage pivot. &lt;br /&gt;
&lt;br /&gt;
Notre langage pivot va peut être sauver ForCity (je l'ai cru entendre un jour, j'ai dû rêvé) ! Mais soyons modeste et surtout miséreux; le projet ForCity va être une réussite et j'en suis sûr grâce à COSMO. &lt;br /&gt;
&lt;br /&gt;
Je serai même content si on ne parle plus de langage pivot dans ce projet car sinon j'ai l'impression que je vais avoir des problèmes. J'ai accepté cet exercice en me servant de mes outils pour aller très vite, parce que David me l'a demandé et David est quelqu'un de bien ou du moins jusqu'à présent. &lt;br /&gt;
&lt;br /&gt;
En tout cas ce n'est pas moi qui irai le crier sur le toit pour l'utiliser dans tout projet quel qu’il soit.}}&lt;br /&gt;
{{proj_p|La spécification du {{m|langage pivot}} sous forme d'un document (note H SINETICS) sera fourni au projet, c'est le travail prioritaire qui m'a été demandé depuis mi-juillet par David. &lt;br /&gt;
&lt;br /&gt;
Une version plus short incluant les API du moteur, maintenant qu'il est stabilisé, sera fournie le 10 octobre 2012.}}&lt;br /&gt;
{{Rq|Pour concevoir le moteur j'ai été grandement aidé par Olivier, le grand gourou du domaine, en échangeant beaucoup sur {{m|Sim-Diasca}} depuis octobre 2011 (http://innovation.edf.com/recherche-et-communaute-scientifique/logiciels/sim-diasca-80703.html). Aussi les échanges avec Jingxuan et Samuel ont permis de compléter les réflexions. Des réflexions qui ont même conduit à une évolution de {{m|Sim-Diasca}} (exemple : le temps fuji).}}&lt;br /&gt;
{{proj_p|Les sources du {{m|moteur de simulation par évènement discret}} sera forcément fourni au projet !}} &lt;br /&gt;
{{RqI|On peut difficilement dissocier le moteur du {{m|langage pivot}} qui forcément utilise son API. Et de plus et c'est le plus important, le langage doit fournir l'API requis du moteur. Sinon on revient au cas des langages généraux tels que c++ auxquels on associerait un digramme de classes et c'est le cas de COSMO avec des inconvénients en plus.}}&lt;br /&gt;
{{Rq|Dailleurs je ne comprends pas comment {{m|COSMO}} peut prétendre définir un langage de simulation des systèmes complexes (de même nature qu'un langage pivot) sans fournir au moins un exemple de moteur de simulation (ce que nous appelons dans le projet {{m|scheduler}}). De plus c'est nous qui devons spécifier ce moteur en sachant beaucoup moins que les experts de COSMO (on n'est même pas encore formé). Je souhaite bien du courage à Samuel. Pour le rédiger il faut d'abord parfaitement maitriser leur langage de conception COSMO et surtout {{m|leurs paradigmes de programmation}} sinon on va aller vers de gros problèmes plus tard. &lt;br /&gt;
&lt;br /&gt;
Le risque de non applicabilité à l'existant sera très grand, sauf si l'on veut tout refaire.}}&lt;br /&gt;
{{RqI|Souvent quand on parle de simulateur on parle de moteur de simulation. Et ce qui fait sa valeur c'est surtout son moteur. Achèteriez vous une voiture sans moteur ?}} &lt;br /&gt;
{{proj_p|{{m|DFG}} n'est pas open source ni même gratuit, par contre les sources générées par DFG le sont sous la licence http://www.mozilla.org/MPL. Même si j'avais la volonté de le rendre open source, il ne serait pas présentable de toute façon; pas le temps chez moi d'appliquer des règles d'assurance qualité quand il s'agit de développer dans l'urgence, dans un temps limité et ponctuellement au fil de bon nombre d'années. Par contre une interface web permet gratuitement de générer des sources, autant qu'il le faut ; voir http://dfg.bht.fr et celui du pivot avec le moteur sur http://dfg1.bht.fr, en bonus sur http://at.bht.fr/ vous trouverez mes dessins et photos.&lt;br /&gt;
&lt;br /&gt;
Voici (documentation non mise à jour par rapport à la version actuelle, elle le sera peut être pendant mes futures vacances ou RTT) :&lt;br /&gt;
* Manuel d'utilisation de DFG http://wiki.bht.fr/index.php/Manuel_d%27utilisation_de_Data_Flow_Generator ;&lt;br /&gt;
* Manuel de référence de la grammaire de DFG  http://wiki.bht.fr/index.php/Manuel_de_r%C3%A9f%C3%A9rence_de_la_grammaire_de_Data_Flow_Generator ;&lt;br /&gt;
* Manuel de référence des fichiers au format XML utilisés par les drivers générés par DFG http://wiki.bht.fr/index.php/Manuel_de_r%C3%A9f%C3%A9rence_des_fichiers_au_format_XML_utilis%C3%A9s_par_les_drivers_g%C3%A9n%C3%A9r%C3%A9s_par_Data_Flow_Generator .&lt;br /&gt;
}}&lt;br /&gt;
{{Rq|N'oublions pas que {{m|DFG}} génère aussi du C++ utilisant {{m|XERCES}} pour parser le XML (voir la possibilité de génération en ligne sur http://dfg.bht.fr). XERCES m'a été imposé dans le projet {{m|PARAD}}, proposition de Stéphane PLOIX, pour lequel il n'était pas le plus compétent d'après moi et ils n'ont pas pensé me consulter ou même consulter I2A. Par contre moi, j'ai même consulté les experts C++ de I2A, l'un d'entre eux avait déjà testé {{m|XERECES}} et il me l'avait fortement déconseillé. Et pour cause l'API XERCES ne faisait pas appel à c++ mais du c version pointeur de chaine de caractère 16 bits, à la mode des années 80! Or j'ai rejoint ce projet dans l'urgence et il fallait fournir rapidement les pilotes; j'aime ce genre de défit dans lequel j'ai toutes les excuses pour moi. &lt;br /&gt;
&lt;br /&gt;
Et c'est pour éviter d'utiliser l'API XERCES directement que j'ai pensé utiliser mes outils de génération de code pour générer son wrapping (une couche d'encapsulation c++, à l'époque mes outils  étaient dans un état primaire, aujourd'hui je ne suis pas loin de finir mon parseur/compilateur universel …)). &lt;br /&gt;
{{Ex|Il faut dire que j'avais une première expérience dans le projet {{m|PERFECT}}. Contraint par des conditions similaires, en 2005, j'ai écrit un générateur d'intégration de solveurs, que j'ai appelé {{m|PERFECT_Maker}}, dans le projet {{m|SALOME}} ; voir http://www.irisa.fr/orap/Forums/Forum18/programme.html le pdf http://www.irisa.fr/orap/Forums/Forum18/Expo_Torossian_EDF.pdf. &lt;br /&gt;
&lt;br /&gt;
Je remercie Jean-Yves BERTHOU  pour m'avoir demandé de faire cette présentation. &lt;br /&gt;
&lt;br /&gt;
Une approche et des idées qui se retrouvent plus tard dans {{m|YACS}} de SALOME développé par André (SINETICS-I2A) (http://www.salome-platform.org/about/yacs) et le {{m|Wrappeur de OpenTurn}} développé par Ivan (SINETICS-I2A) (http://doc.openturns.org/openturns-latest/html/WrapperGuide/cid3.xhtml).}}&lt;br /&gt;
Quelques mois après, la société de sous traitement du projet PARAD a adopté {{m|DFG}} pour produire les sources des classes et leur structure c++ de la partie métier de la radio protection. Je remercie ce projet pour m'avoir forcé à donner naissance à {{m|DFG}}. Merci, merci, merci, …}}&lt;br /&gt;
{{RqI|Pourquoi faire ce petit REX historique ? En fait, {{m|l'agent EDF qui j'étais, était devenu le sous-traitant}} de notre sous traitant pour ce travail. Et le constat le plus grave est que ce sous traitant {{m|faisait plus confiance à moi}} que les responsables du projet et je pourrai même dire qu'en général on fait plus confiance à un sous traitant qu'à un agent EDF, la non prise en compte de notre note sur notre position sur COSMO en est un très bon exemple !? Dans le cadre du projet ForCity j'ai l'impression que nous vivons la même histoire mais à la puisse 10. Pour pouvoir développer et maintenir du code dans COSMO dans des temps acceptables, j'ai dit dès le début que je génèrerai le code COSMO (le code généré par DFG est fait pour être maintenu manuellement aussi, ainsi on ne peut faire la différence entre un code écrit manuellement). L'idée du langage pivot est venu à ce moment. Et depuis Olivier a fortement diffusé cette idée je ne sais pour quelle raison.}}&lt;br /&gt;
{{RqI|Sans l'existence préalable de  {{m|DFG}}, le {{m|langage pivot}} ne pouvait pas être mis au point en quelques mois, il n'est qu'une copie du méta modèle (avec un renommage des tags plus règlementaire) de {{m|DFG}}. Par contre le temps passé a permis de mettre {{m|rapidement}} au point le {{m|le moteur de simulation par évènement discret}}. Je défis quiconque, sous traitant ou pas, de fournir l'équivalent en si peu de temps. Nous pouvons donc remercier TheArthurCompany pour avoir offert le langage pivot au projet {{m|ForCity}} ainsi que bon nombre de lignes de code généré gratuitement pour le projet {{m|PARAD}} et son sous traitant. Et je fournirai l'exemple du distributeur de soda en ne chiffrant pas le temps qu'il faut pour le réaliser; je vous laisserai la bonne surprise quand vous aurez vu son modèle. Le simulateur simplifié des transports aérien sera fourni à titre d'exemple sur http://dfg1.bht.fr}}  &lt;br /&gt;
{{Def|Le langage pivot est un langage permettant d'écrire un programme en le projetant vers un langage cible tel que le c++, en partant de modèles de conception faisant appel par exemple au langage {{m|UML}}. Dans notre cas le programme est à priori un programme de simulation des villes de type simulation de systèmes complexes contraint par le choix de {{m|COSMO}}.|langage pivot|langage pivot}}&lt;br /&gt;
{{Def|Une simulation à événements discrets est une modélisation informatique où l'état d'un système est représenté par une séquence chronologique d'événements discrets. Chaque événement arrive à un instant donné et modifie l'état du système (source http://fr.wikipedia.org/wiki/Simulation_%C3%A0_%C3%A9v%C3%A9nements_discrets).|Une simulation à événements discrets|Une simulation à événements discrets}}&lt;/div&gt;</summary>
		<author><name>WikiAdmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.bht.fr/index.php?title=Dfg1_reference_manual_-_grammar_-_dfguml&amp;diff=4990&amp;oldid=0</id>
		<title>Dfg1 reference manual - grammar - dfguml</title>
		<link rel="alternate" type="text/html" href="https://wiki.bht.fr/index.php?title=Dfg1_reference_manual_-_grammar_-_dfguml&amp;diff=4990&amp;oldid=0"/>
		<updated>2026-07-24T17:08:47Z</updated>

		<summary type="html">&lt;p&gt;&lt;a href=&quot;/index.php?title=Utilisateur:WikiAdmin&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;Utilisateur:WikiAdmin (page inexistante)&quot;&gt;&lt;bdi&gt;WikiAdmin&lt;/bdi&gt;&lt;/a&gt; a importé &lt;a href=&quot;/index.php/Dfg1_reference_manual_-_grammar_-_dfguml&quot; title=&quot;Dfg1 reference manual - grammar - dfguml&quot;&gt;Dfg1 reference manual - grammar - dfguml&lt;/a&gt; par téléversement de fichier (1 version) dfg&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;noinclude&amp;gt;{{IntroductionDFG}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
[[Catégorie:Dfg1RefManual]]&lt;br /&gt;
{{proj_p|Le nœud {{m|grammar}} (définit la grammaire du langage) est la racine du meta-modèle de Data Flow Generator. Ce nœud doit être toujours présent dans tout modèle.&lt;br /&gt;
|par_grammar_ref}}&lt;br /&gt;
{{proj_p|Il possède les attributs type, version et fileFormatVersion.}}&lt;br /&gt;
{{proj_p|L'attribut {{m|type}} est le nom de la classe correspondante qui a toujours la valeur {{m|xml}}.}}&lt;br /&gt;
{{proj_p|L'attribut {{m|version}} est la version du méta-modèle (ou grammaire). La version actuelle est «2.0.0».}}&lt;br /&gt;
{{proj_p|L'attribut {{m|fileFormatVersion}} est la version du format de fichier. Sa valeur est gérée par le modélisateur. Pour plus d'information sur le versionnement voir [[#Grammar.2FFile_Format_versioning|Annexe]].&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>WikiAdmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.bht.fr/index.php?title=Comment_utiliser_les_fichiers_de_Dia_comme_fichier_d%27entr%C3%A9e_de_Data_Flow_Generator_V1&amp;diff=4982&amp;oldid=0</id>
		<title>Comment utiliser les fichiers de Dia comme fichier d'entrée de Data Flow Generator V1</title>
		<link rel="alternate" type="text/html" href="https://wiki.bht.fr/index.php?title=Comment_utiliser_les_fichiers_de_Dia_comme_fichier_d%27entr%C3%A9e_de_Data_Flow_Generator_V1&amp;diff=4982&amp;oldid=0"/>
		<updated>2026-07-24T17:08:46Z</updated>

		<summary type="html">&lt;p&gt;&lt;a href=&quot;/index.php?title=Utilisateur:WikiAdmin&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;Utilisateur:WikiAdmin (page inexistante)&quot;&gt;&lt;bdi&gt;WikiAdmin&lt;/bdi&gt;&lt;/a&gt; a importé &lt;a href=&quot;/index.php/Comment_utiliser_les_fichiers_de_Dia_comme_fichier_d%27entr%C3%A9e_de_Data_Flow_Generator_V1&quot; title=&quot;Comment utiliser les fichiers de Dia comme fichier d&amp;#039;entrée de Data Flow Generator V1&quot;&gt;Comment utiliser les fichiers de Dia comme fichier d&amp;#039;entrée de Data Flow Generator V1&lt;/a&gt; par téléversement de fichier (1 version) dfg&lt;/p&gt;
&lt;a href=&quot;https://wiki.bht.fr/index.php?title=Comment_utiliser_les_fichiers_de_Dia_comme_fichier_d%27entr%C3%A9e_de_Data_Flow_Generator_V1&amp;amp;diff=4982&quot;&gt;Voir les modifications&lt;/a&gt;</summary>
		<author><name>WikiAdmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.bht.fr/index.php?title=Guide_de_R%C3%A9f%C3%A9rence_de_DfgBehaviour&amp;diff=4984&amp;oldid=0</id>
		<title>Guide de Référence de DfgBehaviour</title>
		<link rel="alternate" type="text/html" href="https://wiki.bht.fr/index.php?title=Guide_de_R%C3%A9f%C3%A9rence_de_DfgBehaviour&amp;diff=4984&amp;oldid=0"/>
		<updated>2026-07-24T17:08:46Z</updated>

		<summary type="html">&lt;p&gt;&lt;a href=&quot;/index.php?title=Utilisateur:WikiAdmin&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;Utilisateur:WikiAdmin (page inexistante)&quot;&gt;&lt;bdi&gt;WikiAdmin&lt;/bdi&gt;&lt;/a&gt; a importé &lt;a href=&quot;/index.php/Guide_de_R%C3%A9f%C3%A9rence_de_DfgBehaviour&quot; title=&quot;Guide de Référence de DfgBehaviour&quot;&gt;Guide de Référence de DfgBehaviour&lt;/a&gt; par téléversement de fichier (1 version) dfg&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{IntroductionDFG}}&lt;br /&gt;
{{Modèle:EnConstruction}}&lt;/div&gt;</summary>
		<author><name>WikiAdmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.bht.fr/index.php?title=Guide_de_R%C3%A9f%C3%A9rence_de_DfgUml&amp;diff=4978&amp;oldid=0</id>
		<title>Guide de Référence de DfgUml</title>
		<link rel="alternate" type="text/html" href="https://wiki.bht.fr/index.php?title=Guide_de_R%C3%A9f%C3%A9rence_de_DfgUml&amp;diff=4978&amp;oldid=0"/>
		<updated>2026-07-24T17:08:38Z</updated>

		<summary type="html">&lt;p&gt;&lt;a href=&quot;/index.php?title=Utilisateur:WikiAdmin&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;Utilisateur:WikiAdmin (page inexistante)&quot;&gt;&lt;bdi&gt;WikiAdmin&lt;/bdi&gt;&lt;/a&gt; a importé &lt;a href=&quot;/index.php/Guide_de_R%C3%A9f%C3%A9rence_de_DfgUml&quot; title=&quot;Guide de Référence de DfgUml&quot;&gt;Guide de Référence de DfgUml&lt;/a&gt; par téléversement de fichier (1 version) dfg&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{IntroductionDFG}}&lt;br /&gt;
{{parW|&lt;br /&gt;
{{Modèle:EnConstruction}}&lt;br /&gt;
}}&lt;br /&gt;
[[Catégorie:dfg1RefManual]]&lt;br /&gt;
== Notations et abréviations ==&lt;br /&gt;
{{:Les paragraphes tagués et/ou numérotés - bases}}&lt;br /&gt;
{{:Les paragraphes tagués et/ou numérotés - généraux}}&lt;br /&gt;
{{:Les paragraphes tagués et/ou numérotés - d'informatique}}&lt;br /&gt;
&lt;br /&gt;
== Les prérequis pour lire ce document ==&lt;br /&gt;
{{proj_p|Le meta-modèle utilise le langage {{m|XML}} ([http://www.w3schools.com/xml/ Lien vers un tutoriel sur XML]).}}&lt;br /&gt;
{{proj_p|Au dessus du langage XML le méta-modèle décrit des diagrammes de classes du langage {{m|UML}} ([http://www.sparxsystems.com/uml-tutorial.html Lien vers un tutoriel sur UML]).}}&lt;br /&gt;
{{proj_p|Il faut donc connaître les langages {{m|XML}} et {{m|UML}} pour lire ce document.}}&lt;br /&gt;
&lt;br /&gt;
== Le langage XML == &lt;br /&gt;
{{proj_p|Même si la connaissance du langage XML est un prérequis pour lire ce document, il est utile de rappeler ici quelques notions. Le but étant de préciser le vocabulaire et les notations que nous utiliserons dans la suite.}}&lt;br /&gt;
{{proj_p|La langage XML permet de définir des langages et ce pourquoi il est un métalangage. Ces langages permettent de créer des documents au format texte structurés à l'aide de {{m|balises}}({{m|tags}}). &lt;br /&gt;
}}&lt;br /&gt;
=== Balise ouvrante ===&lt;br /&gt;
{{Def&lt;br /&gt;
|1=&lt;br /&gt;
Une balise dite ouvrante est un texte commençant le symbole {{m|&amp;lt;}}(plus petit), suivi du nom de balise puis des attributs de la balise. Elle se termine par le symbole {{m|&amp;gt;}}(plus grand). &lt;br /&gt;
&lt;br /&gt;
Les attributs suivent la syntaxe suivante :&lt;br /&gt;
{{code|lang=xml|code=attributeName2=&amp;quot;AttributeValue2&amp;quot;}}&lt;br /&gt;
par exemple :&lt;br /&gt;
{{code|lang=xml|code=color=&amp;quot;green&amp;quot;}}&lt;br /&gt;
Et la structure générale d'une balise ouvrante est :&lt;br /&gt;
{{code|lang=xml|code=&lt;br /&gt;
&amp;lt;baliseName attributeName1=&amp;quot;AttributeValue1&amp;quot;  &lt;br /&gt;
            attributeName2=&amp;quot;AttributeValue2&amp;quot; &lt;br /&gt;
            … &lt;br /&gt;
            attributeNamen=&amp;quot;AttributeValuen&amp;quot;&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
|2=|3=balise ouvrante}}&lt;br /&gt;
{{Ex|1={{code|lang=xml|code=&amp;lt;city name=&amp;quot;Paris&amp;quot;&amp;gt;}}|2=|3=}}&lt;br /&gt;
&lt;br /&gt;
=== Balise fermante ===&lt;br /&gt;
{{Def&lt;br /&gt;
|1=&lt;br /&gt;
Une balise dite fermante est un texte commençant le symbole {{m|&amp;lt;}}, puis {{m|/}}, suivi du nom de balise et se terminant par le symbole {{m|&amp;gt;}}(plus grand).&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&amp;lt;/baliseName&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
|2=&lt;br /&gt;
|3=balise fermante}}&lt;br /&gt;
{{Ex|1=&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&amp;lt;/city&amp;gt;&amp;lt;/source&amp;gt;|2=|3=}}&lt;br /&gt;
&lt;br /&gt;
=== Balise ouvrante et fermante ===&lt;br /&gt;
{{Def&lt;br /&gt;
|1=Une balise ouvrante et fermante est une balise ouvrante qui ne se termine pas par {{m|&amp;gt;}} mais par {{m|/&amp;gt;}}.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;baliseName attributeName1=&amp;quot;AttributeValue1&amp;quot;  attributeName2=&amp;quot;AttributeValue2&amp;quot; … attributeNamen=&amp;quot;AttributeValuen&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|2=&lt;br /&gt;
|3=balise ouvrante et fermante}}&lt;br /&gt;
{{Ex|1=&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&amp;lt;city name=&amp;quot;Paris&amp;quot;/&amp;gt;&amp;lt;/source&amp;gt;|2=|3=}}&lt;br /&gt;
&lt;br /&gt;
=== Nœud ===&lt;br /&gt;
{{Def|Un nœud XML est l'ensemble du texte commençant par une balise ouvrante et se terminant par la balise correspondante fermante. Le nom du nœud est le nom de la balise correspondante&lt;br /&gt;
|Nœud XML|Nœud XML}}&lt;br /&gt;
{{Ex|1=Un nœud XML appelé city : &amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&amp;lt;city id=&amp;quot;AR32&amp;quot;&amp;gt; &amp;lt;name&amp;gt;Paris&amp;lt;/name&amp;gt; … &amp;lt;/city&amp;gt;&amp;lt;/source&amp;gt;|2=|3=}}&lt;br /&gt;
{{Def|L'en-tête d'un nœud est l'ensemble des attributs de la balise.&lt;br /&gt;
|En-tête de nœud|En-tête de nœud}}&lt;br /&gt;
{{Def|Le corps d'un nœud est la partie du texte qui se trouve entre la balise ouvrante et la balise fermante correspondante.&lt;br /&gt;
|Corps de nœud|Corps de nœud}}&lt;br /&gt;
{{Rq|Le corps d'un nœud où la balise est ouvrante et fermante possède un corps vide.}}&lt;br /&gt;
{{Rq|Le corps de nœud peut aussi contenir d'autres nœuds. L'en-tête et le corps d'un nœud définissent sa structure. Cette  structure est arborescente. }}&lt;br /&gt;
{{Ex|1=&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;    &amp;lt;russian_doll name=&amp;quot;Galina&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;russian_doll name=&amp;quot; Anastasiya&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;russian_doll name=&amp;quot; Marta&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;/russian_doll&amp;gt;&lt;br /&gt;
    &amp;lt;/russian_doll&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;|2=|3=Les poupées russes}}&lt;br /&gt;
{{Rq|Dans certains cas un élément d'un nœud peut se mettre sous la forme d'un attribut ou sous la forme d'un nœud. Cela peut être le cas par exemple pour nommer un nœud.}}&lt;br /&gt;
{{Ex|1=&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&amp;lt;city name=&amp;quot;Paris&amp;quot;&amp;gt; … &amp;lt;/city&amp;gt;&amp;lt;/source&amp;gt; ou &amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&amp;lt;city&amp;gt; &amp;lt;name&amp;gt;Paris&amp;lt;/name&amp;gt; … &amp;lt;/city&amp;gt;&amp;lt;/source&amp;gt;|2=|3=}}&lt;br /&gt;
&lt;br /&gt;
== Le modèle vide ==&lt;br /&gt;
{{proj_p|Le modèle minimal de Data Flow Generator est donné par l'exemple {{clink|empty_model_ref}}&lt;br /&gt;
}}&lt;br /&gt;
{{ex|&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;grammar type=&amp;quot;xml&amp;quot; version=&amp;quot;2.0.0&amp;quot; fileFormatVersion=&amp;quot;1.0.0&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/grammar&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;|empty_model_ref}}&lt;br /&gt;
{{proj_p|Ce modèle est composé de deux éléments XML; {{m|?xml}}{{clink|par_xml_ref}} et {{m|grammar}}{{clink|par_grammar_ref}}.}} &lt;br /&gt;
{{proj_p|Le document DfgUml doit comporter un unique nœud racine nommé {{m|grammar}}{{clink|par_grammar_ref}}.}}&lt;br /&gt;
{{proj_p|Le diagramme de classes de ce modèle est le diagramme vide.}}&lt;br /&gt;
&lt;br /&gt;
== Le modèle minimal ==&lt;br /&gt;
{{proj_p|Tout modèle doit définir un unique nœud racine à l'aide du nœud nommé {{m|clDefInst}}.}} &lt;br /&gt;
{{proj_p|Dans les exemples {{clink|dfguml_minimal_model}} et {{clink|dfg_ex_minimal}}, qui illustrent le modèle minimal, la racine a pour nom «model» et nous avons nommé sa classe «CModel».}}&lt;br /&gt;
{{ex|&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;grammar type=&amp;quot;xml&amp;quot; version=&amp;quot;2.0.0&amp;quot; fileFormatVersion=&amp;quot;1.0.0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;clDefInst type='CModel' name=&amp;quot;model&amp;quot; &amp;gt;&lt;br /&gt;
    &amp;lt;/clDefInst&amp;gt;&lt;br /&gt;
&amp;lt;/grammar&amp;gt; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|dfguml_minimal_model}}&lt;br /&gt;
{{figuml|UML diagramme équivalent|class CModel {&lt;br /&gt;
}&lt;br /&gt;
|dfg_ex_minimal}}&lt;br /&gt;
&lt;br /&gt;
== Les nœuds, associations et héritages du méta-modèle ==&lt;br /&gt;
=== Liste des nœuds ===&lt;br /&gt;
{{proj_p|Pour commencer nous donnons seulement la liste des nœuds utilisés dans le méta-modèle, chaque nœud sera plus loin étudié de près : {{m|bool}}, {{m|int}}, {{m|flt}}, {{m|str}}, {{m|date}}, {{m|clDefInst}}, {{m|clInst}}, {{m|clRef}}, {{m|clDef}}, {{m|method}}, {{m|arg}}. Les types primitives sont {{m|bool}} (booléen), {{m|int}}(entier), {{m|flt}}(réel), {{m|str}}(chaîne de caractères), {{m|date}}(date).}}&lt;br /&gt;
&lt;br /&gt;
=== Association entre classes ===&lt;br /&gt;
{{proj_p|L'association entre classes est définie par l'inclusion d'un nœud (enfant) dans un autre nœud (parent). Côté parent la cardinalité est toujours {{m|1}} et côté enfant l'attribut {{m|card}} permet de le définir avec la convention suivante :&lt;br /&gt;
&lt;br /&gt;
Soient n, n1, n2 des entiers&lt;br /&gt;
{{tab|Notation de cardinalité|| &lt;br /&gt;
{{line| {{col_t|notation dans les doubles quottes}} {{col_t|description}} }} &lt;br /&gt;
{{line| {{col|&amp;quot;n1:n2&amp;quot;}} {{col|de n1 à n2}} }} &lt;br /&gt;
{{line| {{col|&amp;quot;?&amp;quot; or &amp;quot;0:1&amp;quot;}} {{col|de 0 à 1, optionnel}} }} &lt;br /&gt;
{{line| {{col|&amp;quot;*&amp;quot; or &amp;quot;0:*&amp;quot;}} {{col|de 0 à l'infini}} }} &lt;br /&gt;
{{line| {{col|&amp;quot;+&amp;quot; or &amp;quot;1:*&amp;quot;}} {{col|de 1 à l'infini}} }} &lt;br /&gt;
{{line| {{col|&amp;quot;n:&amp;quot; or &amp;quot;n:*&amp;quot;}} {{col|de n à l'infini}} }} &lt;br /&gt;
{{line| {{col|&amp;quot;n&amp;quot; or &amp;quot;n:n&amp;quot;}} {{col|de n à n, exactement n}} }} &lt;br /&gt;
{{line| {{col|si non présent}} {{col|valeur de défaut : exactement 1 }} }} &lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
{{Ex|Voici un exemple d'associations entre la classe A et les classes B,C,D,E,F,G.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;grammar type=&amp;quot;xml&amp;quot; version=&amp;quot;2.0.0&amp;quot; fileFormatVersion=&amp;quot;1.0.0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;clDefInst type='A' name=&amp;quot;a&amp;quot; &amp;gt;&lt;br /&gt;
        &amp;lt;clDefInst type='B' name=&amp;quot;b&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;clDefInst type='C' name=&amp;quot;c&amp;quot; card=&amp;quot;4&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;clDefInst type='D' name=&amp;quot;d&amp;quot; card=&amp;quot;?&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;clDefInst type='E' name=&amp;quot;e&amp;quot; card=&amp;quot;*&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;clDefInst type='F' name=&amp;quot;f&amp;quot; card=&amp;quot;+&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;clDefInst type='G' name=&amp;quot;g&amp;quot; card=&amp;quot;3:45&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/clDefInst&amp;gt;&lt;br /&gt;
&amp;lt;/grammar&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Le diagramme UML équivalent est le suivant :&lt;br /&gt;
{{figuml|Association|&lt;br /&gt;
class A {&lt;br /&gt;
}&lt;br /&gt;
A  *-- &amp;quot;1&amp;quot; B : b&lt;br /&gt;
class B {&lt;br /&gt;
}&lt;br /&gt;
A  *-- &amp;quot;4&amp;quot; C : c&lt;br /&gt;
class C {&lt;br /&gt;
}&lt;br /&gt;
A  *-- &amp;quot;0..1&amp;quot; D : d&lt;br /&gt;
class D {&lt;br /&gt;
}&lt;br /&gt;
A  *-- &amp;quot;0..*&amp;quot; E : e&lt;br /&gt;
class E {&lt;br /&gt;
}&lt;br /&gt;
A  *-- &amp;quot;1..*&amp;quot; F : f&lt;br /&gt;
class F {&lt;br /&gt;
}&lt;br /&gt;
A  *-- &amp;quot;3..45&amp;quot; G : g&lt;br /&gt;
class G {&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
Et une instance persitante possible de ce modèle utilisant le format XML peut être le fichier suivant :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;grammar driverName=&amp;quot;DataFlowGenerator_XML_DOM_MINIDOOM&amp;quot; driverVersion=&amp;quot;1.0.0&amp;quot; fileFormatVersion=&amp;quot;1.0.0&amp;quot; type=&amp;quot;xml&amp;quot; version=&amp;quot;2.0.0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;a&amp;gt;&lt;br /&gt;
        &amp;lt;b/&amp;gt;&lt;br /&gt;
        &amp;lt;c/&amp;gt;&lt;br /&gt;
        &amp;lt;c/&amp;gt;&lt;br /&gt;
        &amp;lt;c/&amp;gt;&lt;br /&gt;
        &amp;lt;c/&amp;gt;&lt;br /&gt;
        &amp;lt;f/&amp;gt;&lt;br /&gt;
        &amp;lt;g/&amp;gt;&lt;br /&gt;
        &amp;lt;g/&amp;gt;&lt;br /&gt;
        &amp;lt;g/&amp;gt;&lt;br /&gt;
    &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/grammar&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Héritage ===&lt;br /&gt;
{{Ex|Prenons le cas d'une classe CRoot qui est associée (agrégation) à un classe C qui hérite de la classe B qui hérite de la classe A. Ce cas est décrit par diagramme {{clink|Héritage simple}}.&lt;br /&gt;
{{figuml|Héritage simple|class CRoot {&lt;br /&gt;
}&lt;br /&gt;
abstract class A {&lt;br /&gt;
}&lt;br /&gt;
A : CInt a&lt;br /&gt;
abstract class B {&lt;br /&gt;
}&lt;br /&gt;
B --{{!}}&amp;gt; A&lt;br /&gt;
B : CInt b&lt;br /&gt;
CRoot  *-- &amp;quot;3&amp;quot; C : c&lt;br /&gt;
class C {&lt;br /&gt;
}&lt;br /&gt;
C --{{!}}&amp;gt; B&lt;br /&gt;
C : CInt c&lt;br /&gt;
|Héritage simple}}&lt;br /&gt;
L'équivalent en modèle DFGUML sécrira :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;grammar type=&amp;quot;xml&amp;quot; version=&amp;quot;2.0.0&amp;quot; fileFormatVersion=&amp;quot;1.0.0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;clDefInst type='CRoot' name=&amp;quot;root&amp;quot; &amp;gt;&lt;br /&gt;
        &amp;lt;clDef type='A' name=&amp;quot;a&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;int name=&amp;quot;a&amp;quot; defVal=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;/clDef&amp;gt;&lt;br /&gt;
        &amp;lt;clDef type='B' name=&amp;quot;b&amp;quot; her=&amp;quot;A&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;int name=&amp;quot;b&amp;quot;  defVal=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;/clDef&amp;gt;&lt;br /&gt;
        &amp;lt;clDefInst type='C' name=&amp;quot;c&amp;quot; her=&amp;quot;B&amp;quot; card=&amp;quot;3&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;int name=&amp;quot;c&amp;quot;  defVal=&amp;quot;3&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;/clDefInst&amp;gt;&lt;br /&gt;
    &amp;lt;/clDefInst&amp;gt;&lt;br /&gt;
&amp;lt;/grammar&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Et une instance possible de ce modèle est la suivante :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;grammar driverName=&amp;quot;DataFlowGenerator_XML_DOM_MINIDOOM&amp;quot; driverVersion=&amp;quot;1.0.0&amp;quot; fileFormatVersion=&amp;quot;1.0.0&amp;quot; type=&amp;quot;xml&amp;quot; version=&amp;quot;2.0.0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;root&amp;gt;&lt;br /&gt;
        &amp;lt;c&amp;gt;&lt;br /&gt;
            &amp;lt;a&amp;gt;1&amp;lt;/a&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;2&amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;c&amp;gt;3&amp;lt;/c&amp;gt;&lt;br /&gt;
        &amp;lt;/c&amp;gt;&lt;br /&gt;
        &amp;lt;c&amp;gt;&lt;br /&gt;
            &amp;lt;a&amp;gt;1&amp;lt;/a&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;2&amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;c&amp;gt;3&amp;lt;/c&amp;gt;&lt;br /&gt;
        &amp;lt;/c&amp;gt;&lt;br /&gt;
        &amp;lt;c&amp;gt;&lt;br /&gt;
            &amp;lt;a&amp;gt;1&amp;lt;/a&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;2&amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;c&amp;gt;3&amp;lt;/c&amp;gt;&lt;br /&gt;
        &amp;lt;/c&amp;gt;&lt;br /&gt;
    &amp;lt;/root&amp;gt;&lt;br /&gt;
&amp;lt;/grammar&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{proj_p|L'héritage est définie avec l'attribut {{m|her}} dont la valeur est la classe parente. Afin de ne pas associer une définition de classe, qui est un nœud donné avec la classe parent qui lui-même est le nœud parent associé on utilise la balise {{m|clDef}} comme c'est le cas des classes A et B dans notre cas précédent.}}&lt;br /&gt;
&lt;br /&gt;
== Les éléments ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== {{fr§en|Le nœud «?xml»|The «?xml» node}} ===&lt;br /&gt;
{{:dfg1 reference manual - xml - dfguml}}&lt;br /&gt;
{{ex|  &lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;grammar  type=&amp;quot;xml&amp;quot; version=&amp;quot;2.0.0&amp;quot; fileFormatVersion=&amp;quot;1.0.0&amp;quot;&amp;gt; &lt;br /&gt;
    &amp;lt;clDefInst name=&amp;quot;root&amp;quot; type=&amp;quot;CRoot&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/clDefInst&amp;gt;&lt;br /&gt;
&amp;lt;/grammar&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;   &lt;br /&gt;
|dfgumlr_xml&lt;br /&gt;
}}&lt;br /&gt;
{{:dfg1 reference manual - xml - plantuml}}  &lt;br /&gt;
{{figuml&lt;br /&gt;
|&lt;br /&gt;
|class CRoot {&lt;br /&gt;
}&lt;br /&gt;
@enduml&lt;br /&gt;
|plantumlr_xml}}&lt;br /&gt;
&lt;br /&gt;
=== {{fr§en|L'attribut «version» du nœud «?xml»|The attribute named «version» of the «?xml» node| -◊- }} ===&lt;br /&gt;
{{:dfg1 reference manual - xmlVersion - dfguml}}&lt;br /&gt;
&lt;br /&gt;
=== {{fr§en|L'attribut «encoding» du nœud «?xml»|The attribute named «encoding» of the «?xml» node| -◊- }} ===&lt;br /&gt;
{{:dfg1 reference manual - xmlEncoding - dfguml}}&lt;br /&gt;
&lt;br /&gt;
=== {{fr§en|Le nœud «grammar»|The «grammar» node}} ===&lt;br /&gt;
{{:dfg1 reference manual - grammar - dfguml}}&lt;br /&gt;
{{ex|  &lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;grammar driverName=&amp;quot;DataFlowGenerator_XML_DOM_MINIDOOM&amp;quot; driverVersion=&amp;quot;1.0.0&amp;quot; fileFormatVersion=&amp;quot;1.0.0&amp;quot; type=&amp;quot;xml&amp;quot; version=&amp;quot;2.0.0&amp;quot;&amp;gt; &lt;br /&gt;
    &amp;lt;clDefInst name=&amp;quot;root&amp;quot; type=&amp;quot;CRoot&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/clDefInst&amp;gt;&lt;br /&gt;
&amp;lt;/grammar&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;   &lt;br /&gt;
|dfgumlr_grammar&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Annexe ==&lt;br /&gt;
=== Description du mét-modèle par lui-même ===&lt;br /&gt;
{{parW|1=&lt;br /&gt;
{{code|lang=xml|code=&lt;br /&gt;
&amp;lt;dfg dfgDrvName=&amp;quot;DataFlowGenerator_XML_DOM_MINIDOOM&amp;quot; dfgDrvVer=&amp;quot;3.0.0&amp;quot; dfgModelVer=&amp;quot;3.0.0&amp;quot; dfgMetaModelVer=&amp;quot;3.0.0&amp;quot; type=&amp;quot;CDfg&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;!--&lt;br /&gt;
    the root node must have the following attributes :&lt;br /&gt;
    dfgDrvName      (driver_name) example  dfgDrvName=&amp;quot;DataFlowGenerator_XML_DOM_MINIDOOM&amp;quot;&lt;br /&gt;
    dfgDrvVer       (driverVersion) example  dfgDrvVer=&amp;quot;1.0.0&amp;quot;&lt;br /&gt;
    dfgModelVer     (fileformatVersion)&lt;br /&gt;
    dfgMetaModelVer (grammarVersion)&lt;br /&gt;
&lt;br /&gt;
    those attributes are herited from a base root node.&lt;br /&gt;
    --&amp;gt;&lt;br /&gt;
    &amp;lt;clDef type=&amp;quot;CEl&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;str name=&amp;quot;help&amp;quot;  card=&amp;quot;?&amp;quot; isAttr=&amp;quot;True&amp;quot;  /&amp;gt;&lt;br /&gt;
        &amp;lt;str name=&amp;quot;shortHelp&amp;quot; card=&amp;quot;?&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;str name=&amp;quot;longHelp&amp;quot; card=&amp;quot;?&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/clDef&amp;gt;&lt;br /&gt;
    &amp;lt;clDef type=&amp;quot;CAss&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;str name=&amp;quot;name&amp;quot; help=&amp;quot;python_re_pattern='^[a-zA-Z_][a-zA-Z0-9_]*$'&amp;quot; isAttr=&amp;quot;True&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;str name=&amp;quot;card&amp;quot; card=&amp;quot;?&amp;quot; isAttr=&amp;quot;True&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/clDef&amp;gt;&lt;br /&gt;
    &amp;lt;clDef type=&amp;quot;CLeave&amp;quot; her=&amp;quot;CEl:CAss&amp;quot; &amp;gt;&lt;br /&gt;
        &amp;lt;str name=&amp;quot;defVal&amp;quot;  card=&amp;quot;?&amp;quot; isAttr=&amp;quot;True&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;str name=&amp;quot;admVals&amp;quot; card=&amp;quot;?&amp;quot; isAttr=&amp;quot;True&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;bool name=&amp;quot;isAttr&amp;quot;  card=&amp;quot;?&amp;quot; isAttr=&amp;quot;True&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/clDef&amp;gt;&lt;br /&gt;
    &amp;lt;clDef type=&amp;quot;CScalarLeave&amp;quot; her=&amp;quot;CLeave&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;str name=&amp;quot;unit&amp;quot; card=&amp;quot;?&amp;quot; isAttr=&amp;quot;True&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/clDef&amp;gt;&lt;br /&gt;
    &amp;lt;clDef type=&amp;quot;CClBase&amp;quot; her=&amp;quot;CEl&amp;quot; &amp;gt;&lt;br /&gt;
        &amp;lt;str name=&amp;quot;type&amp;quot; isAttr=&amp;quot;True&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;str name=&amp;quot;accept&amp;quot; card=&amp;quot;?&amp;quot; isAttr=&amp;quot;True&amp;quot; /&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
        &amp;lt;!-- added by dfg &amp;lt;str name=&amp;quot;dfgId&amp;quot; card=&amp;quot;?&amp;quot; isAttr=&amp;quot;True&amp;quot; help=&amp;quot;in order to be linked&amp;quot;/&amp;gt; --&amp;gt;&lt;br /&gt;
        &amp;lt;!-- added by dfg &amp;lt;str name=&amp;quot;dfgClName&amp;quot; card=&amp;quot;?&amp;quot; isAttr=&amp;quot;True&amp;quot; help=&amp;quot;in order to set polymorphism class type associated with 'accept'&amp;quot;/&amp;gt; --&amp;gt;&lt;br /&gt;
        &amp;lt;!-- Experimental &lt;br /&gt;
        &amp;lt;str name=&amp;quot;dfgClConstructor&amp;quot; card=&amp;quot;?&amp;quot; isAttr=&amp;quot;True&amp;quot; help=&amp;quot;in order to set polymorphism class type&amp;quot;/&amp;gt;&lt;br /&gt;
        --&amp;gt;&lt;br /&gt;
    &amp;lt;/clDef&amp;gt;&lt;br /&gt;
    &amp;lt;clDef type=&amp;quot;CClass&amp;quot; her=&amp;quot;CClBase&amp;quot; &amp;gt;&lt;br /&gt;
        &amp;lt;str name=&amp;quot;her&amp;quot;    card=&amp;quot;?&amp;quot; isAttr=&amp;quot;True&amp;quot; /&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
        &amp;lt;clDefInst name=&amp;quot;str&amp;quot;    type=&amp;quot;CStr&amp;quot;    her=&amp;quot;CLeave&amp;quot;       card=&amp;quot;*&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;clDefInst name=&amp;quot;int&amp;quot;    type=&amp;quot;CInt&amp;quot;    her=&amp;quot;CScalarLeave&amp;quot; card=&amp;quot;*&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;clDefInst name=&amp;quot;bool&amp;quot;   type=&amp;quot;CBool&amp;quot;   her=&amp;quot;CLeave&amp;quot; card=&amp;quot;*&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;clDefInst name=&amp;quot;date&amp;quot;   type=&amp;quot;CDate&amp;quot;   her=&amp;quot;CLeave&amp;quot; card=&amp;quot;*&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;clDefInst name=&amp;quot;flt&amp;quot;    type=&amp;quot;CFlt&amp;quot;    her=&amp;quot;CScalarLeave&amp;quot; card=&amp;quot;*&amp;quot;/&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
        &amp;lt;clDefInst name=&amp;quot;clDef&amp;quot;  type=&amp;quot;CClDef&amp;quot;  her=&amp;quot;CClass&amp;quot;       card=&amp;quot;*&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;clDefInst name=&amp;quot;clInst&amp;quot;  type=&amp;quot;CClInst&amp;quot;  her=&amp;quot;CClBase:CAss&amp;quot; card=&amp;quot;*&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;clDefInst name=&amp;quot;clDefInst&amp;quot; type=&amp;quot;CClDefInst&amp;quot; her=&amp;quot;CClDef:CAss&amp;quot;  card=&amp;quot;*&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;clDefInst name=&amp;quot;clRef&amp;quot;  type=&amp;quot;CClRef&amp;quot;    her=&amp;quot;CClBase:CAss&amp;quot; card=&amp;quot;*&amp;quot;/&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
        &amp;lt;!-- new start --&amp;gt;&lt;br /&gt;
        &amp;lt;clDefInst name=&amp;quot;map&amp;quot;  type=&amp;quot;CMap&amp;quot;  her=&amp;quot;CEl:CAss&amp;quot; card=&amp;quot;*&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;!--&lt;br /&gt;
	  &lt;br /&gt;
	model :  &lt;br /&gt;
        &amp;lt;clDef type=&amp;quot;CAgent&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;str name=&amp;quot;name&amp;quot;  card=&amp;quot;?&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;int name=&amp;quot;age&amp;quot;  card=&amp;quot;?&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/clDef&amp;gt;        &lt;br /&gt;
        &amp;lt;map name=&amp;quot;agent&amp;quot; keyType=&amp;quot;str&amp;quot; valType='CAgent'/&amp;gt;&lt;br /&gt;
	  &lt;br /&gt;
	instance :  &lt;br /&gt;
        --&amp;gt;&lt;br /&gt;
                &amp;lt;str name=&amp;quot;valType&amp;quot; isAttr=&amp;quot;True&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;str name=&amp;quot;keyType&amp;quot; isAttr=&amp;quot;True&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/clDefInst&amp;gt;&lt;br /&gt;
        &amp;lt;!-- new end --&amp;gt;    &lt;br /&gt;
        &lt;br /&gt;
        &amp;lt;!-- Experimental &lt;br /&gt;
        &lt;br /&gt;
        &amp;lt;clDefInst name=&amp;quot;constructor&amp;quot; type=&amp;quot;CConstructor&amp;quot; card=&amp;quot;*&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;str name=&amp;quot;name&amp;quot; isAttr=&amp;quot;True&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;clInst name=&amp;quot;args&amp;quot; type=&amp;quot;CClass&amp;quot; card=&amp;quot;*&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;/clDefInst&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
        &amp;lt;!- - ************************************** - -&amp;gt;&lt;br /&gt;
        &amp;lt;!- - model - -&amp;gt;&lt;br /&gt;
        &amp;lt;clDef type=&amp;quot;CMateriau&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;int name=&amp;quot;protegee&amp;quot;  card=&amp;quot;?&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;int name=&amp;quot;densite&amp;quot;  card=&amp;quot;?&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/clDef&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;map name= &amp;quot;myDico&amp;quot; keyType=&amp;quot;int&amp;quot; valType=&amp;quot;CMateriau&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;!- - ************************************** - -&amp;gt;                                    &lt;br /&gt;
        &amp;lt;!- - instance - -&amp;gt;&lt;br /&gt;
        &amp;lt;myDico key=&amp;quot;512&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;!- - &amp;lt;materieau&amp;gt; no need because we know the type - -&amp;gt;&lt;br /&gt;
            &amp;lt;protegee&amp;gt;1&amp;lt;/protegee&amp;gt;&lt;br /&gt;
            &amp;lt;densite&amp;gt;1.3&amp;lt;/densite&amp;gt;&lt;br /&gt;
            &amp;lt;!- - &amp;lt;/materieau&amp;gt; - -&amp;gt;&lt;br /&gt;
        &amp;lt;/myDico&amp;gt;&lt;br /&gt;
        &amp;lt;!- - ************************************** - -&amp;gt;        &lt;br /&gt;
        --&amp;gt;&lt;br /&gt;
        &amp;lt;clDefInst name=&amp;quot;method&amp;quot; type=&amp;quot;CMethod&amp;quot; card=&amp;quot;*&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;str name=&amp;quot;name&amp;quot; isAttr=&amp;quot;True&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;clDefInst name=&amp;quot;arg&amp;quot; type=&amp;quot;CArg&amp;quot; card=&amp;quot;*&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;str name=&amp;quot;type&amp;quot; isAttr=&amp;quot;True&amp;quot; help=&amp;quot;python_re_pattern='^[a-zA-Z_][a-zA-Z0-9_]*$'&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;str name=&amp;quot;dir&amp;quot;  isAttr=&amp;quot;True&amp;quot; admVals=&amp;quot;in:out:inout&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;str name=&amp;quot;name&amp;quot; isAttr=&amp;quot;True&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;str name=&amp;quot;unit&amp;quot; isAttr=&amp;quot;True&amp;quot; card=&amp;quot;?&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/clDefInst&amp;gt;&lt;br /&gt;
        &amp;lt;/clDefInst&amp;gt;&lt;br /&gt;
    &amp;lt;/clDef&amp;gt;&lt;br /&gt;
    &amp;lt;clDefInst name=&amp;quot;dfg&amp;quot; type=&amp;quot;CDfg&amp;quot; her=&amp;quot;CClass&amp;quot; &amp;gt;&lt;br /&gt;
        &amp;lt;!-- added by dfg &amp;lt;str name=&amp;quot;dfgVer&amp;quot;              isAttr=&amp;quot;True&amp;quot; defVal=&amp;quot;2.0.0&amp;quot;/&amp;gt; --&amp;gt;&lt;br /&gt;
        &amp;lt;!-- added by dfg &amp;lt;str name=&amp;quot;dfgModelVer&amp;quot;          isAttr=&amp;quot;True&amp;quot; defVal=&amp;quot;1.0.0&amp;quot;/&amp;gt; --&amp;gt;&lt;br /&gt;
        &amp;lt;!-- added by dfg &amp;lt;str name=&amp;quot;dfgDrvName&amp;quot; card=&amp;quot;?&amp;quot; isAttr=&amp;quot;True&amp;quot;  defVal=&amp;quot;dfgPyXmlMiniDom&amp;quot;/&amp;gt; --&amp;gt;&lt;br /&gt;
        &amp;lt;!-- added by dfg &amp;lt;str name=&amp;quot;dfgDrvVer&amp;quot;  card=&amp;quot;?&amp;quot; isAttr=&amp;quot;True&amp;quot; defVal=&amp;quot;1.0.0&amp;quot;/&amp;gt; --&amp;gt;&lt;br /&gt;
                &lt;br /&gt;
        &amp;lt;!-- Experimental  &lt;br /&gt;
        &amp;lt;clDefInst name=&amp;quot;primTypeAlias&amp;quot;  type=&amp;quot;CPrimTypeAlias&amp;quot;  card=&amp;quot;*&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;str name=&amp;quot;name&amp;quot; isAttr=&amp;quot;True&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;str name=&amp;quot;primTypeName&amp;quot; isAttr=&amp;quot;True&amp;quot; /&amp;gt;  &lt;br /&gt;
        &amp;lt;/clDefInst&amp;gt;&lt;br /&gt;
        &amp;lt;clDefInst name=&amp;quot;enum&amp;quot;  type=&amp;quot;CEnum&amp;quot;  card=&amp;quot;*&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;str name=&amp;quot;typeName&amp;quot; isAttr=&amp;quot;True&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;str name=&amp;quot;val&amp;quot; card=&amp;quot;*&amp;quot;/&amp;gt;  &lt;br /&gt;
        &amp;lt;/clDefInst&amp;gt;&lt;br /&gt;
        --&amp;gt;        &lt;br /&gt;
    &amp;lt;/clDefInst&amp;gt;&lt;br /&gt;
&amp;lt;/dfg&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Sous forme texte:&lt;br /&gt;
{{code|lang=text|code=&lt;br /&gt;
   CEl &lt;br /&gt;
.   ? help : CStr&lt;br /&gt;
.   ? longHelp : CStr&lt;br /&gt;
.   ? shortHelp : CStr&lt;br /&gt;
   CAss &lt;br /&gt;
.   ? card : CStr&lt;br /&gt;
.     name : CStr&lt;br /&gt;
   CLeave  (CEl,CAss,)&lt;br /&gt;
.   ? admVals : CStr&lt;br /&gt;
.   ? defVal : CStr&lt;br /&gt;
.   ? isAttr : CBool&lt;br /&gt;
   CScalarLeave  (CLeave,)&lt;br /&gt;
.   ? unit : CStr&lt;br /&gt;
   CClBase  (CEl,)&lt;br /&gt;
.   ? accept : CStr&lt;br /&gt;
.     type : CStr&lt;br /&gt;
   CClass  (CClBase,)&lt;br /&gt;
.   ? her : CStr&lt;br /&gt;
.   * bool :  CBool  (CLeave,)&lt;br /&gt;
.   * clDef :  CClDef  (CClass,)&lt;br /&gt;
.   * clDefInst :  CClDefInst  (CClDef,CAss,)&lt;br /&gt;
.   * clInst :  CClInst  (CClBase,CAss,)&lt;br /&gt;
.   * clRef :  CClRef  (CClBase,CAss,)&lt;br /&gt;
.   * date :  CDate  (CLeave,)&lt;br /&gt;
.   * flt :  CFlt  (CScalarLeave,)&lt;br /&gt;
.   * int :  CInt  (CScalarLeave,)&lt;br /&gt;
.   * map :  CMap  (CEl,CAss,)&lt;br /&gt;
.   .     keyType : CStr&lt;br /&gt;
.   .     valType : CStr&lt;br /&gt;
.   * method :  CMethod &lt;br /&gt;
.   .     name : CStr&lt;br /&gt;
.   .   * arg :  CArg &lt;br /&gt;
.   .   .     dir : CStr&lt;br /&gt;
.   .   .     name : CStr&lt;br /&gt;
.   .   .     type : CStr&lt;br /&gt;
.   .   .   ? unit : CStr&lt;br /&gt;
.   * str :  CStr  (CLeave,)&lt;br /&gt;
 dfg :  CDfg  (CClass,)&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
{{:DataFlowGenerator:Versionnement}}&lt;br /&gt;
&lt;br /&gt;
=== Liens externes ===&lt;br /&gt;
* Structure d'un document XML&lt;br /&gt;
: http://www.commentcamarche.net/contents/xml/xmlstruc.php3&lt;/div&gt;</summary>
		<author><name>WikiAdmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.bht.fr/index.php?title=DataFlowGenerator:see_too&amp;diff=4980&amp;oldid=0</id>
		<title>DataFlowGenerator:see too</title>
		<link rel="alternate" type="text/html" href="https://wiki.bht.fr/index.php?title=DataFlowGenerator:see_too&amp;diff=4980&amp;oldid=0"/>
		<updated>2026-07-24T17:08:38Z</updated>

		<summary type="html">&lt;p&gt;&lt;a href=&quot;/index.php?title=Utilisateur:WikiAdmin&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;Utilisateur:WikiAdmin (page inexistante)&quot;&gt;&lt;bdi&gt;WikiAdmin&lt;/bdi&gt;&lt;/a&gt; a importé &lt;a href=&quot;/index.php/DataFlowGenerator:see_too&quot; title=&quot;DataFlowGenerator:see too&quot;&gt;DataFlowGenerator:see too&lt;/a&gt; par téléversement de fichier (1 version) dfg&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;noinclude&amp;gt;[[Category:DataFlowGenerator|{{PAGENAME}}]]&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
== Voir aussi ==&lt;br /&gt;
{{parW|&lt;br /&gt;
* [[Tutoriel de Data Flow Generator V0]]&lt;br /&gt;
* [[Manuel d'utilisation de Data Flow Generator V0]]&lt;br /&gt;
* [[Manuel de référence de la grammaire de Data Flow Generator V0]]&lt;br /&gt;
* [[Manuel de référence des fichiers au format XML utilisés par les drivers générés par Data Flow Generator V0]]&lt;br /&gt;
* [http://dfg.bht-diffusion.com Lancer Data Flow Generator]&lt;br /&gt;
:*[http://dfg.bht-diffusion.com/ Générer les drivers c++ et python en ligne sur http://dfg.bht-diffusion.com]&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>WikiAdmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.bht.fr/index.php?title=DataFlowGenerator:Versionnement&amp;diff=4976&amp;oldid=0</id>
		<title>DataFlowGenerator:Versionnement</title>
		<link rel="alternate" type="text/html" href="https://wiki.bht.fr/index.php?title=DataFlowGenerator:Versionnement&amp;diff=4976&amp;oldid=0"/>
		<updated>2026-07-24T17:08:31Z</updated>

		<summary type="html">&lt;p&gt;&lt;a href=&quot;/index.php?title=Utilisateur:WikiAdmin&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;Utilisateur:WikiAdmin (page inexistante)&quot;&gt;&lt;bdi&gt;WikiAdmin&lt;/bdi&gt;&lt;/a&gt; a importé &lt;a href=&quot;/index.php/DataFlowGenerator:Versionnement&quot; title=&quot;DataFlowGenerator:Versionnement&quot;&gt;DataFlowGenerator:Versionnement&lt;/a&gt; par téléversement de fichier (1 version) dfg&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;=== Application versioning === &lt;br /&gt;
{{parW|&lt;br /&gt;
;R-V1.V2.V3.V4&lt;br /&gt;
:The identification consists of:&lt;br /&gt;
::{{m|R}} (release) xn pre-alpha alpha beta gamma/rcn prod/gold/live_release &lt;br /&gt;
:::The release is the qualification of software distribution or delivery often as a file or set of files, called a package. Here are the qualifications in the logical order of software development project (http://en.wikipedia.org/wiki/Software_testing):&lt;br /&gt;
:::{{m|xn}} or x1,x2, ...&lt;br /&gt;
::::delivery made during the development after unit tests. Distribution can be used between development teams who do not share the same basic sources;&lt;br /&gt;
:::{{m|pre-alpha}} or {{m|rpa}}&lt;br /&gt;
::::delivery made before the end of development and after integration tests. Distribution can be used between development integration testing teams;&lt;br /&gt;
:::{{m|alpha}} or {{m|ra}}&lt;br /&gt;
::::delivery made to the test team for System tests;&lt;br /&gt;
:::{{m|beta}} or {{m|rb}}&lt;br /&gt;
::::delivery made to a small number of users for User Acceptance Tests(UAT);&lt;br /&gt;
:::{{m|gamma_n}} or {{m|rcn}}&lt;br /&gt;
::::delivery also called &amp;quot;Release Candidate&amp;quot; number n, after nth UAT;&lt;br /&gt;
:::{{m|prod}}, {{m|gold}}, ou {{m|lr}} (live release)&lt;br /&gt;
::::delivery called &amp;quot;live release&amp;quot; which is considered to be very stable and relatively bug-free with a quality suitable for wide distribution and use by end users (http://en.wikipedia.org/wiki/Software_release_life_cycle).&lt;br /&gt;
::{{m|V1}}&lt;br /&gt;
:::a number that indicates the evolution of the system architecture and/or a large number of functional changes;&lt;br /&gt;
::{{m|V2}}&lt;br /&gt;
:::a number that indicates the evolution of the functions provided by the application;&lt;br /&gt;
::{{m|V3}}&lt;br /&gt;
:::a number that indicates the evolution of implementations of functions;&lt;br /&gt;
::{{m|V4}} &lt;br /&gt;
:::a number, optional, which indicates the integration of bugfixes.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Grammar/File Format versioning ===&lt;br /&gt;
{{parW|&lt;br /&gt;
;gr{{m|V1}}.gr{{m|V2}}.gr{{m|V3}} / fl{{m|V1}}.fl{{m|V2}}.fl{{m|V3}}&lt;br /&gt;
:xx{{m|V1}} changes that can not keep backward compatibility when reading&lt;br /&gt;
:xx{{m|V2}} developments that maintain backward compatibility when reading&lt;br /&gt;
:xx{{m|V3}} changes such as additions, comments or additional support in the grammar that have no impact on reading&lt;br /&gt;
&lt;br /&gt;
Le format du fichier et le modèle définit par le fichier même, cette version est celle du modèle.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Driver versioning (python or c++)===&lt;br /&gt;
{{parW|1=&lt;br /&gt;
*For each grammar main version number, which is grV1, a new driver versioning starts.&lt;br /&gt;
;{{m|drV1}}.{{m|drV2}}.{{m|drV3}}&lt;br /&gt;
:{{m|drV1}} major modifications&lt;br /&gt;
:{{m|drV2}} minor modifications&lt;br /&gt;
:{{m|drV3}} bug corrections&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;noinclude&amp;gt;[[Category:All]][[Category:DataFlowGenerator|{{PAGENAME}}]]&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
== Scripts d'utilisation ==&lt;br /&gt;
{{parW|textStyle=width:72ch;|1=&lt;br /&gt;
{{codeTr|lang=bash|colNb=70|code=&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
cafile=~/scratch/change/doc/certificat/cacert.cer&lt;br /&gt;
if [ -f $cafile ] ; then&lt;br /&gt;
    echo &amp;quot;&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
    cafile=~/cacert.cer&lt;br /&gt;
fi ;&lt;br /&gt;
rm -Rf ./generated/*&lt;br /&gt;
python ~/scratch/svnDvlp/dfg1/dfg_V1PythonGenDriver.py \&lt;br /&gt;
 --pathGrammarfile doc/dvlp/spec/fileModel/graphGenFileModel.xml \&lt;br /&gt;
 --dataName graphGenhFile \&lt;br /&gt;
 --cartridgeFile tool/data/cartridge.txt \&lt;br /&gt;
 --licenceFile tool/data/licence.txt \&lt;br /&gt;
 --driverVersion &amp;quot;0.0.0&amp;quot; \&lt;br /&gt;
 --fileformatVersion &amp;quot;0.0.0&amp;quot; \&lt;br /&gt;
 --pathGen modFileDrv/api/impl&lt;br /&gt;
}}&lt;br /&gt;
{{codeTr|lang=bash|colNb=70|code=&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
cafile=~/scratch/change/doc/certificat/cacert.cer&lt;br /&gt;
if [ -f $cafile ] ; then&lt;br /&gt;
    echo &amp;quot;&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
    cafile=~/cacert.cer&lt;br /&gt;
fi ;&lt;br /&gt;
rm -Rf ./generated/*&lt;br /&gt;
python ~/scratch/svnDvlp/dfg1/dfg_V1PythonGenDriver.py \&lt;br /&gt;
  --pathGrammarfile doc/dvlp/spec/fileModel/calibrationModel.xml \&lt;br /&gt;
  --dataName calibrationConfig \&lt;br /&gt;
  --cartridgeFile tool/data/cartridge.txt \&lt;br /&gt;
  --licenceFile tool/data/licence.txt \&lt;br /&gt;
  --driverVersion 0.0.0 \&lt;br /&gt;
  --fileformatVersion 0.0.0 \&lt;br /&gt;
  --pathGen modFileDrv/api/impl&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>WikiAdmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.bht.fr/index.php?title=DataFlowGenerator:lhelp&amp;diff=4968&amp;oldid=0</id>
		<title>DataFlowGenerator:lhelp</title>
		<link rel="alternate" type="text/html" href="https://wiki.bht.fr/index.php?title=DataFlowGenerator:lhelp&amp;diff=4968&amp;oldid=0"/>
		<updated>2026-07-24T17:08:30Z</updated>

		<summary type="html">&lt;p&gt;&lt;a href=&quot;/index.php?title=Utilisateur:WikiAdmin&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;Utilisateur:WikiAdmin (page inexistante)&quot;&gt;&lt;bdi&gt;WikiAdmin&lt;/bdi&gt;&lt;/a&gt; a importé &lt;a href=&quot;/index.php/DataFlowGenerator:lhelp&quot; title=&quot;DataFlowGenerator:lhelp&quot;&gt;DataFlowGenerator:lhelp&lt;/a&gt; par téléversement de fichier (1 version) dfg&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;*{{m|lhelp}}&lt;br /&gt;
: cardinalité : ?&lt;br /&gt;
: Ce tag définit une documentation plus fournie, complémentaire à celle de {{m|shelp}}, du tag parent qui le contient. Il ne possède pas d'attribut. Son contenu délimité par le tag {{m|shelp}} ouvrant et fermant.&lt;br /&gt;
: Exemple :&lt;br /&gt;
: &amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;lhelp&amp;gt; Ce texte est une documentation étoffée &amp;lt;/lhelp&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;[[Category:All]][[Category:DataFlowGenerator|{{PAGENAME}}]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>WikiAdmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.bht.fr/index.php?title=DataFlowGenerator:heritances&amp;diff=4970&amp;oldid=0</id>
		<title>DataFlowGenerator:heritances</title>
		<link rel="alternate" type="text/html" href="https://wiki.bht.fr/index.php?title=DataFlowGenerator:heritances&amp;diff=4970&amp;oldid=0"/>
		<updated>2026-07-24T17:08:30Z</updated>

		<summary type="html">&lt;p&gt;&lt;a href=&quot;/index.php?title=Utilisateur:WikiAdmin&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;Utilisateur:WikiAdmin (page inexistante)&quot;&gt;&lt;bdi&gt;WikiAdmin&lt;/bdi&gt;&lt;/a&gt; a importé &lt;a href=&quot;/index.php/DataFlowGenerator:heritances&quot; title=&quot;DataFlowGenerator:heritances&quot;&gt;DataFlowGenerator:heritances&lt;/a&gt; par téléversement de fichier (1 version) dfg&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;*{{m|heritances}}&lt;br /&gt;
: cardinalité : ?&lt;br /&gt;
: liste les types des classes ancêtres. Avec cet attribut renseigné la classe hérite des propriétés du ou des classes ancêtres.&lt;br /&gt;
: Voici un exemple :&lt;br /&gt;
{{codeTr|lang=xml|code=&lt;br /&gt;
&amp;lt;el name=&amp;quot;vecteur&amp;quot; type=&amp;quot;CVecteur&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;el name=&amp;quot;x&amp;quot; type=&amp;quot;float&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;el name=&amp;quot;y&amp;quot; type=&amp;quot;float&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/el&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;el name=&amp;quot;objet&amp;quot; type=&amp;quot;CObjetGraphique&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;el name=&amp;quot;nom&amp;quot; type=&amp;quot;string&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/el&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;el name=&amp;quot;point&amp;quot; type=&amp;quot;CPoint&amp;quot; heritances=&amp;quot;CVecteur:CObjetGraphique&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;el name=&amp;quot;droite&amp;quot; type=&amp;quot;CDroite&amp;quot; heritances=&amp;quot;CPoint&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;el name=&amp;quot;direction&amp;quot; type=&amp;quot;@CVecteur&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/el&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
: Dans cette exemple la classe CDroite hérite de CPoint qui lui hérite de CVecteur et CObjetGraphique et donc la classe CDroite aura les attributs x,y,nom et direction.&lt;br /&gt;
&amp;lt;noinclude&amp;gt;[[Category:All]][[Category:DataFlowGenerator|{{PAGENAME}}]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>WikiAdmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.bht.fr/index.php?title=DataFlowGenerator:accept&amp;diff=4972&amp;oldid=0</id>
		<title>DataFlowGenerator:accept</title>
		<link rel="alternate" type="text/html" href="https://wiki.bht.fr/index.php?title=DataFlowGenerator:accept&amp;diff=4972&amp;oldid=0"/>
		<updated>2026-07-24T17:08:30Z</updated>

		<summary type="html">&lt;p&gt;&lt;a href=&quot;/index.php?title=Utilisateur:WikiAdmin&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;Utilisateur:WikiAdmin (page inexistante)&quot;&gt;&lt;bdi&gt;WikiAdmin&lt;/bdi&gt;&lt;/a&gt; a importé &lt;a href=&quot;/index.php/DataFlowGenerator:accept&quot; title=&quot;DataFlowGenerator:accept&quot;&gt;DataFlowGenerator:accept&lt;/a&gt; par téléversement de fichier (1 version) dfg&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;*{{m|accept}}&lt;br /&gt;
: cardinalité : ?&lt;br /&gt;
: L'attribut {{m|accept}} permet d'activer le polymorphisme des classes et en plus il permet de contrôler les classes dérivées acceptables. Cet attribut contient la liste des classes dérivées qui doivent être acceptées par le driver. Les noms des classes sont séparés par le caractère &amp;quot;{{m|:}}&amp;quot;. &lt;br /&gt;
: Exemple :&lt;br /&gt;
{{codeTr|lang=xml|code=&lt;br /&gt;
&amp;lt;el name=&amp;quot;A&amp;quot; type=&amp;quot;ClassA&amp;quot; accept=&amp;quot;ClassB:ClassC&amp;quot; cardinality=&amp;quot;*&amp;quot;&amp;gt; ... &amp;lt;/el&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;el name=&amp;quot;B&amp;quot; type=&amp;quot;ClassB&amp;quot; heritances=&amp;quot;ClassA&amp;quot; OnlyDefinition=&amp;quot;1&amp;quot;&amp;gt; ... &amp;lt;/el&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;el name=&amp;quot;C&amp;quot; type=&amp;quot;ClassC&amp;quot; heritances=&amp;quot;ClassB&amp;quot; OnlyDefinition=&amp;quot;1&amp;quot;&amp;gt; ... &amp;lt;/el&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;noinclude&amp;gt;[[Category:All]][[Category:DataFlowGenerator|{{PAGENAME}}]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>WikiAdmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.bht.fr/index.php?title=DataFlowGenerator&amp;diff=4974&amp;oldid=0</id>
		<title>DataFlowGenerator</title>
		<link rel="alternate" type="text/html" href="https://wiki.bht.fr/index.php?title=DataFlowGenerator&amp;diff=4974&amp;oldid=0"/>
		<updated>2026-07-24T17:08:30Z</updated>

		<summary type="html">&lt;p&gt;&lt;a href=&quot;/index.php?title=Utilisateur:WikiAdmin&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;Utilisateur:WikiAdmin (page inexistante)&quot;&gt;&lt;bdi&gt;WikiAdmin&lt;/bdi&gt;&lt;/a&gt; a importé &lt;a href=&quot;/index.php/DataFlowGenerator&quot; title=&quot;DataFlowGenerator&quot;&gt;DataFlowGenerator&lt;/a&gt; par téléversement de fichier (1 version) dfg&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{IntroductionDFG}}&lt;br /&gt;
== Data Flow Generator V1 ==&lt;br /&gt;
{{parW|1=&lt;br /&gt;
* Version de développement : [[Les versions de DataFlowGenerator]]&lt;br /&gt;
}}&lt;br /&gt;
{{fr§en|[[Comment utiliser les fichiers de Dia comme fichier d'entrée de Data Flow Generator V1]]|[[How to use Dia files as input for Data Flow Generator V1]]}}&lt;br /&gt;
{{fr§en|[[Manuel utilisateur de Data Flow Generator V1]]{{minitodo|vide}}|[[User guide of Data Flow Generator V1]]}}&lt;br /&gt;
{{fr§en|[[Guide de Référence de DfgUml]]{{minitodo|non terminé}}|[[DfgUml Reference Guide]]}}&lt;br /&gt;
{{fr§en|[[Guide de Référence de DfgBehaviour]]{{minitodo|vide}}|[[DfgBehaviour Reference Guide]]}}&lt;br /&gt;
&lt;br /&gt;
{{parW|1=&lt;br /&gt;
* [[dfg txt like uml language]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Data Flow Generator V0 ==&lt;br /&gt;
{{parW|1=&lt;br /&gt;
Version de développement : [[Les versions de DataFlowGenerator]]&lt;br /&gt;
}}{{parW|1=&lt;br /&gt;
*[[Tutoriel de Data Flow Generator V0]]&lt;br /&gt;
*[[Manuel d'utilisation de Data Flow Generator V0]]&lt;br /&gt;
*[[Manuel de référence de la grammaire de Data Flow Generator V0]]&lt;br /&gt;
*[[Manuel de référence des fichiers au format XML utilisés par les drivers générés par Data Flow Generator V0]]&lt;br /&gt;
*[http://dfg.bht.fr Lancer Data Flow Generator V0]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== [[Les versions de DataFlowGenerator]] ==&lt;br /&gt;
== Versionnement ==&lt;br /&gt;
{{:DataFlowGenerator:Versionnement}}&lt;/div&gt;</summary>
		<author><name>WikiAdmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.bht.fr/index.php?title=DataFlowGenerator:opt&amp;diff=4960&amp;oldid=0</id>
		<title>DataFlowGenerator:opt</title>
		<link rel="alternate" type="text/html" href="https://wiki.bht.fr/index.php?title=DataFlowGenerator:opt&amp;diff=4960&amp;oldid=0"/>
		<updated>2026-07-24T17:08:29Z</updated>

		<summary type="html">&lt;p&gt;&lt;a href=&quot;/index.php?title=Utilisateur:WikiAdmin&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;Utilisateur:WikiAdmin (page inexistante)&quot;&gt;&lt;bdi&gt;WikiAdmin&lt;/bdi&gt;&lt;/a&gt; a importé &lt;a href=&quot;/index.php/DataFlowGenerator:opt&quot; title=&quot;DataFlowGenerator:opt&quot;&gt;DataFlowGenerator:opt&lt;/a&gt; par téléversement de fichier (1 version) dfg&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;*{{m|opt}}&lt;br /&gt;
:cardinalité : ?&lt;br /&gt;
: Le tag {{m|attr}} ne possédant pas de cardinalité pouvant aller au delà de 1, sa cardinalité se restreint alors à 0 ou 1, ce qui le rend occasionnellement optionnel, d'où l'attribut {{m|opt}}. Si {{m|opt}} est omis alors le tag a une cardinalité de {{m|1}}, si {{m|opt}} a n'importe quelle valeurs alors la cardinalité tag est {{m|0:1}}. &lt;br /&gt;
&amp;lt;noinclude&amp;gt;[[Category:All]][[Category:DataFlowGenerator|{{PAGENAME}}]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>WikiAdmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.bht.fr/index.php?title=DataFlowGenerator:cardinality&amp;diff=4962&amp;oldid=0</id>
		<title>DataFlowGenerator:cardinality</title>
		<link rel="alternate" type="text/html" href="https://wiki.bht.fr/index.php?title=DataFlowGenerator:cardinality&amp;diff=4962&amp;oldid=0"/>
		<updated>2026-07-24T17:08:29Z</updated>

		<summary type="html">&lt;p&gt;&lt;a href=&quot;/index.php?title=Utilisateur:WikiAdmin&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;Utilisateur:WikiAdmin (page inexistante)&quot;&gt;&lt;bdi&gt;WikiAdmin&lt;/bdi&gt;&lt;/a&gt; a importé &lt;a href=&quot;/index.php/DataFlowGenerator:cardinality&quot; title=&quot;DataFlowGenerator:cardinality&quot;&gt;DataFlowGenerator:cardinality&lt;/a&gt; par téléversement de fichier (1 version) dfg&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;*{{m|cardinality}}&lt;br /&gt;
: cardinalité : ?&lt;br /&gt;
: décrit la cardinalité du tag par rapport au tag parent. Puisque cet attribut est optionnelle s'il est omis alors la cardinalité est 1 par defaut. La syntaxe utilisé est définie dans le § &amp;amp;laquo;Notation : cardinalité ou multiplicité&amp;amp;raquo;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;[[Category:All]][[Category:DataFlowGenerator|{{PAGENAME}}]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>WikiAdmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.bht.fr/index.php?title=DataFlowGenerator:unit&amp;diff=4964&amp;oldid=0</id>
		<title>DataFlowGenerator:unit</title>
		<link rel="alternate" type="text/html" href="https://wiki.bht.fr/index.php?title=DataFlowGenerator:unit&amp;diff=4964&amp;oldid=0"/>
		<updated>2026-07-24T17:08:29Z</updated>

		<summary type="html">&lt;p&gt;&lt;a href=&quot;/index.php?title=Utilisateur:WikiAdmin&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;Utilisateur:WikiAdmin (page inexistante)&quot;&gt;&lt;bdi&gt;WikiAdmin&lt;/bdi&gt;&lt;/a&gt; a importé &lt;a href=&quot;/index.php/DataFlowGenerator:unit&quot; title=&quot;DataFlowGenerator:unit&quot;&gt;DataFlowGenerator:unit&lt;/a&gt; par téléversement de fichier (1 version) dfg&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;*{{m|unit}}&lt;br /&gt;
: cardinalité : ?&lt;br /&gt;
: Ce tag définit l'unité du tag parent qui le contient. Il ne possède pas d'attribut. Son contenu délimité par le tag {{m|unit}} ouvrant et fermant.&lt;br /&gt;
: Exemple :&lt;br /&gt;
: &amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;unit&amp;gt; kg &amp;lt;/unit&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;[[Category:All]][[Category:DataFlowGenerator|{{PAGENAME}}]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>WikiAdmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.bht.fr/index.php?title=DataFlowGenerator:shelp&amp;diff=4966&amp;oldid=0</id>
		<title>DataFlowGenerator:shelp</title>
		<link rel="alternate" type="text/html" href="https://wiki.bht.fr/index.php?title=DataFlowGenerator:shelp&amp;diff=4966&amp;oldid=0"/>
		<updated>2026-07-24T17:08:29Z</updated>

		<summary type="html">&lt;p&gt;&lt;a href=&quot;/index.php?title=Utilisateur:WikiAdmin&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;Utilisateur:WikiAdmin (page inexistante)&quot;&gt;&lt;bdi&gt;WikiAdmin&lt;/bdi&gt;&lt;/a&gt; a importé &lt;a href=&quot;/index.php/DataFlowGenerator:shelp&quot; title=&quot;DataFlowGenerator:shelp&quot;&gt;DataFlowGenerator:shelp&lt;/a&gt; par téléversement de fichier (1 version) dfg&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;*{{m|shelp}}&lt;br /&gt;
: cardinalité : ?&lt;br /&gt;
: Ce tag définit une documentation minimale du tag parent qui le contient. Il ne possède pas d'attribut. Son contenu délimité par le tag {{m|shelp}} ouvrant et fermant.&lt;br /&gt;
: Exemple :&lt;br /&gt;
: &amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;shelp&amp;gt; Ce texte est une documentation minimale &amp;lt;/shelp&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;[[Category:All]][[Category:DataFlowGenerator|{{PAGENAME}}]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>WikiAdmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.bht.fr/index.php?title=DataFlowGenerator:reference&amp;diff=4948&amp;oldid=0</id>
		<title>DataFlowGenerator:reference</title>
		<link rel="alternate" type="text/html" href="https://wiki.bht.fr/index.php?title=DataFlowGenerator:reference&amp;diff=4948&amp;oldid=0"/>
		<updated>2026-07-24T17:08:28Z</updated>

		<summary type="html">&lt;p&gt;&lt;a href=&quot;/index.php?title=Utilisateur:WikiAdmin&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;Utilisateur:WikiAdmin (page inexistante)&quot;&gt;&lt;bdi&gt;WikiAdmin&lt;/bdi&gt;&lt;/a&gt; a importé &lt;a href=&quot;/index.php/DataFlowGenerator:reference&quot; title=&quot;DataFlowGenerator:reference&quot;&gt;DataFlowGenerator:reference&lt;/a&gt; par téléversement de fichier (1 version) dfg&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Les références de classes évitent de redéfinir des noms de classes et de dupliquer la structure d'une classe existante.&lt;br /&gt;
&lt;br /&gt;
Exemple d'utilisation de référence de classe :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;el name=&amp;quot;vecteur&amp;quot; type=&amp;quot;CVecteur&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;el name=&amp;quot;x&amp;quot; type=&amp;quot;float&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;el name=&amp;quot;y&amp;quot; type=&amp;quot;float&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/el&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;el name=&amp;quot;vitesse&amp;quot; type=&amp;quot;@CVecteur&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
En l'utilisation des types {{m|primitifs}} revient à utiliser des références mais sans le caractère &amp;quot;{{m|@}}&amp;quot;. Dans ce cas pourquoi utiliser ce caractère pour les autres types ? C'est parce que nous n'aurions aucun moyen de distinguer une classe vide d'une référence de classe. L'exemple suivant :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;el name=&amp;quot;vecteur&amp;quot; type=&amp;quot;CVecteur&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;el name=&amp;quot;vitesse&amp;quot; type=&amp;quot;@CVecteur&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
donnerait :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;el name=&amp;quot;vecteur&amp;quot; type=&amp;quot;CVecteur&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;el name=&amp;quot;vitesse&amp;quot; type=&amp;quot;CVecteur&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Nous pourrions aussi dire que toute classe vide est une référence de classe, mais ceci n'a pas été retenu comme solution.&lt;br /&gt;
{{Remarque|texte=Dans un langage de programmation cette question ne se pose pas, car on sépare en général la définition d'une classe  des instanciations de celle-ci. Dans notre grammaire la première définition est une instaciation sauf si l'attribut {{m|OnlyDefinition}} est positionné.}}&lt;br /&gt;
&lt;br /&gt;
Les références permettent aussi définir récursivement. Voici un exemple :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;el name=&amp;quot;recurence&amp;quot; type=&amp;quot;CRecurence&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;el name=&amp;quot;sub1&amp;quot; type='@CRecurence' cardinality=&amp;quot;?&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;el name=&amp;quot;subn&amp;quot; type='@CRecurence' cardinality=&amp;quot;*&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/el&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{Alerte|texte=Attention, ne faites pas l'erreur suivante :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;el name=&amp;quot;recurence&amp;quot; type=&amp;quot;CRecurence&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;el name=&amp;quot;sub1&amp;quot; type='@CRecurence'/&amp;gt;&lt;br /&gt;
&amp;lt;/el&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Car, une fois le code du driver généré, quand le code sera exécuté, si la compilation est acceptée, il y aura une erreur de récursion infinie.}}&lt;br /&gt;
&amp;lt;noinclude&amp;gt;[[Category:All]][[Category:DataFlowGenerator|{{PAGENAME}}]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>WikiAdmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.bht.fr/index.php?title=DataFlowGenerator:type&amp;diff=4950&amp;oldid=0</id>
		<title>DataFlowGenerator:type</title>
		<link rel="alternate" type="text/html" href="https://wiki.bht.fr/index.php?title=DataFlowGenerator:type&amp;diff=4950&amp;oldid=0"/>
		<updated>2026-07-24T17:08:28Z</updated>

		<summary type="html">&lt;p&gt;&lt;a href=&quot;/index.php?title=Utilisateur:WikiAdmin&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;Utilisateur:WikiAdmin (page inexistante)&quot;&gt;&lt;bdi&gt;WikiAdmin&lt;/bdi&gt;&lt;/a&gt; a importé &lt;a href=&quot;/index.php/DataFlowGenerator:type&quot; title=&quot;DataFlowGenerator:type&quot;&gt;DataFlowGenerator:type&lt;/a&gt; par téléversement de fichier (1 version) dfg&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;*{{m|type}}&lt;br /&gt;
: cardinalité : 1&lt;br /&gt;
: décrit le type du tag. Les types doivent suivre la syntaxe &amp;quot;{{m|[a-z_][a-zA-Z0-9_]*$}}&amp;quot; qui est écrite dans la langage des expressions régulière de la librairie re du langage PYTHON.&lt;br /&gt;
: le type peut renvoyer aussi à une référence de classe (seulement pour les tags el) qui lui suite la syntaxe &amp;quot;@{{m|[A-Z_][a-zA-Z0-9]+$}}&amp;quot;, c.a.d. &amp;quot;{{m|@}}&amp;quot; suivi du nom de la classe.&lt;br /&gt;
&amp;lt;noinclude&amp;gt;[[Category:All]][[Category:DataFlowGenerator|{{PAGENAME}}]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>WikiAdmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.bht.fr/index.php?title=DataFlowGenerator:name&amp;diff=4952&amp;oldid=0</id>
		<title>DataFlowGenerator:name</title>
		<link rel="alternate" type="text/html" href="https://wiki.bht.fr/index.php?title=DataFlowGenerator:name&amp;diff=4952&amp;oldid=0"/>
		<updated>2026-07-24T17:08:28Z</updated>

		<summary type="html">&lt;p&gt;&lt;a href=&quot;/index.php?title=Utilisateur:WikiAdmin&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;Utilisateur:WikiAdmin (page inexistante)&quot;&gt;&lt;bdi&gt;WikiAdmin&lt;/bdi&gt;&lt;/a&gt; a importé &lt;a href=&quot;/index.php/DataFlowGenerator:name&quot; title=&quot;DataFlowGenerator:name&quot;&gt;DataFlowGenerator:name&lt;/a&gt; par téléversement de fichier (1 version) dfg&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;*{{m|name}}&lt;br /&gt;
: cardinalité : 1&lt;br /&gt;
: definit le nom du tag. Les noms doivent suivre la syntaxe &amp;quot;{{m|[a-z_][a-zA-Z0-9_]*$}}&amp;quot; qui est écrite dans la langage des expressions régulière de la librairie re du langage PYTHON.&lt;br /&gt;
: Le nom doit être unique dans toute la grammaire.&lt;br /&gt;
&amp;lt;noinclude&amp;gt;[[Category:All]][[Category:DataFlowGenerator|{{PAGENAME}}]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>WikiAdmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.bht.fr/index.php?title=DataFlowGenerator:help&amp;diff=4954&amp;oldid=0</id>
		<title>DataFlowGenerator:help</title>
		<link rel="alternate" type="text/html" href="https://wiki.bht.fr/index.php?title=DataFlowGenerator:help&amp;diff=4954&amp;oldid=0"/>
		<updated>2026-07-24T17:08:28Z</updated>

		<summary type="html">&lt;p&gt;&lt;a href=&quot;/index.php?title=Utilisateur:WikiAdmin&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;Utilisateur:WikiAdmin (page inexistante)&quot;&gt;&lt;bdi&gt;WikiAdmin&lt;/bdi&gt;&lt;/a&gt; a importé &lt;a href=&quot;/index.php/DataFlowGenerator:help&quot; title=&quot;DataFlowGenerator:help&quot;&gt;DataFlowGenerator:help&lt;/a&gt; par téléversement de fichier (1 version) dfg&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;*{{m|help}}&lt;br /&gt;
:cardinalité : ?&lt;br /&gt;
: A ne pas confondre avec {{m|shelp}} et {{m|lhelp}} qui elles seront transférées dans les pilotes générées. {{m|help}} permet d'écrire une aide utile au concepteur de la grammaire sur le tag concerné. Cet attribut est complémentaire aux commentaires XML qui peuvent être ajoutée dans le fichier XML. &lt;br /&gt;
&amp;lt;noinclude&amp;gt;[[Category:All]][[Category:DataFlowGenerator|{{PAGENAME}}]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>WikiAdmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.bht.fr/index.php?title=DataFlowGenerator:default_value&amp;diff=4956&amp;oldid=0</id>
		<title>DataFlowGenerator:default value</title>
		<link rel="alternate" type="text/html" href="https://wiki.bht.fr/index.php?title=DataFlowGenerator:default_value&amp;diff=4956&amp;oldid=0"/>
		<updated>2026-07-24T17:08:28Z</updated>

		<summary type="html">&lt;p&gt;&lt;a href=&quot;/index.php?title=Utilisateur:WikiAdmin&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;Utilisateur:WikiAdmin (page inexistante)&quot;&gt;&lt;bdi&gt;WikiAdmin&lt;/bdi&gt;&lt;/a&gt; a importé &lt;a href=&quot;/index.php/DataFlowGenerator:default_value&quot; title=&quot;DataFlowGenerator:default value&quot;&gt;DataFlowGenerator:default value&lt;/a&gt; par téléversement de fichier (1 version) dfg&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;*{{m|default_value}}&lt;br /&gt;
:cardinalité : ?&lt;br /&gt;
:C'est la valeur prise à la création de la donnée.&lt;br /&gt;
&amp;lt;noinclude&amp;gt;[[Category:All]][[Category:DataFlowGenerator|{{PAGENAME}}]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>WikiAdmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.bht.fr/index.php?title=DataFlowGenerator:admissible_values&amp;diff=4958&amp;oldid=0</id>
		<title>DataFlowGenerator:admissible values</title>
		<link rel="alternate" type="text/html" href="https://wiki.bht.fr/index.php?title=DataFlowGenerator:admissible_values&amp;diff=4958&amp;oldid=0"/>
		<updated>2026-07-24T17:08:28Z</updated>

		<summary type="html">&lt;p&gt;&lt;a href=&quot;/index.php?title=Utilisateur:WikiAdmin&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;Utilisateur:WikiAdmin (page inexistante)&quot;&gt;&lt;bdi&gt;WikiAdmin&lt;/bdi&gt;&lt;/a&gt; a importé &lt;a href=&quot;/index.php/DataFlowGenerator:admissible_values&quot; title=&quot;DataFlowGenerator:admissible values&quot;&gt;DataFlowGenerator:admissible values&lt;/a&gt; par téléversement de fichier (1 version) dfg&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;*{{m|admissible_values}}&lt;br /&gt;
:cardinalité : ?&lt;br /&gt;
:Pour certains cas, par exemple pour des tests on peut restreindre les valeurs admissibles à une liste finie de valeurs. Les valeurs admissibles sont séparées par le caractère &amp;quot;{{m|:}}&amp;quot;. Cependant pour l'instant la prise en compte de cet attribut n'est pas complètement terminée ; il faut donc éviter de l'utiliser surtout que sa syntaxe est très pauvre.&lt;br /&gt;
&amp;lt;noinclude&amp;gt;[[Category:All]][[Category:DataFlowGenerator|{{PAGENAME}}]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>WikiAdmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.bht.fr/index.php?title=DataFlowGenerator:OnlyDefinition&amp;diff=4946&amp;oldid=0</id>
		<title>DataFlowGenerator:OnlyDefinition</title>
		<link rel="alternate" type="text/html" href="https://wiki.bht.fr/index.php?title=DataFlowGenerator:OnlyDefinition&amp;diff=4946&amp;oldid=0"/>
		<updated>2026-07-24T17:08:27Z</updated>

		<summary type="html">&lt;p&gt;&lt;a href=&quot;/index.php?title=Utilisateur:WikiAdmin&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;Utilisateur:WikiAdmin (page inexistante)&quot;&gt;&lt;bdi&gt;WikiAdmin&lt;/bdi&gt;&lt;/a&gt; a importé &lt;a href=&quot;/index.php/DataFlowGenerator:OnlyDefinition&quot; title=&quot;DataFlowGenerator:OnlyDefinition&quot;&gt;DataFlowGenerator:OnlyDefinition&lt;/a&gt; par téléversement de fichier (1 version) dfg&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;*{{m|OnlyDefinition}}&lt;br /&gt;
: cardinalité : ?&lt;br /&gt;
: Si l'attribut OnlyDefinition est présent alors la classe ne sera pas utilisé à l'endroit où elle est définie dans la structure grammaticale. &lt;br /&gt;
: Par exemple les classes OnlyDefinition peuvent servir comme classe de base à ses classes dérivées sans pour autant exister dans les instances.&lt;br /&gt;
: Exemple de classe OnlyDefinition : &lt;br /&gt;
&lt;br /&gt;
{{PAGENAME}}&lt;br /&gt;
&lt;br /&gt;
{{codeTr|lang=xml|code=&lt;br /&gt;
&amp;lt;el name=&amp;quot;LeCamion&amp;quot; type=&amp;quot;CCamion&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;el name=&amp;quot;UneRoue&amp;quot; type=&amp;quot;CRoue&amp;quot; OnlyDefinition=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;el name=&amp;quot;rayon&amp;quot; type=&amp;quot;float&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/el&amp;gt;&lt;br /&gt;
  &amp;lt;el name=&amp;quot;rouesAvant&amp;quot; type=&amp;quot;CRoueAvecEcart&amp;quot; heritances=&amp;quot;CRoue&amp;quot; cardinality=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;el name=&amp;quot;ecart&amp;quot; type=&amp;quot;float&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/el&amp;gt;&lt;br /&gt;
  &amp;lt;el name=&amp;quot;rouesArrieres&amp;quot; type=&amp;quot;@CRoueAvecEcart&amp;quot; cardinality=&amp;quot;4&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;el name=&amp;quot;roueDeSecour&amp;quot; type=&amp;quot;@CRoue&amp;quot; cardinality=&amp;quot;?&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/el&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
: La classe CRoue est la classe qui ne donnera pas à une instance de cette classe dans sa position de définition, elle sert surtout d'ancêtre à la classe CRoueAvecEcart. &lt;br /&gt;
{{Alerte|texte=On peut remarquer que la classe CRoue aura quand même l'instance &amp;quot;roueDeSecour&amp;quot; avec l'utilisation des références de classe; il faut donc avoir à l'esprit que l'attribut {{m|OnlyDefinition}} ne s'applique qu'à la balise ou tag qui la contient.}}&lt;br /&gt;
&amp;lt;noinclude&amp;gt;[[Category:All]][[Category:DataFlowGenerator|{{PAGENAME}}]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>WikiAdmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.bht.fr/index.php?title=Manuel_d%27utilisation_de_Data_Flow_Generator_V0&amp;diff=4940&amp;oldid=0</id>
		<title>Manuel d'utilisation de Data Flow Generator V0</title>
		<link rel="alternate" type="text/html" href="https://wiki.bht.fr/index.php?title=Manuel_d%27utilisation_de_Data_Flow_Generator_V0&amp;diff=4940&amp;oldid=0"/>
		<updated>2026-07-24T17:08:26Z</updated>

		<summary type="html">&lt;p&gt;&lt;a href=&quot;/index.php?title=Utilisateur:WikiAdmin&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;Utilisateur:WikiAdmin (page inexistante)&quot;&gt;&lt;bdi&gt;WikiAdmin&lt;/bdi&gt;&lt;/a&gt; a importé &lt;a href=&quot;/index.php/Manuel_d%27utilisation_de_Data_Flow_Generator_V0&quot; title=&quot;Manuel d&amp;#039;utilisation de Data Flow Generator V0&quot;&gt;Manuel d&amp;#039;utilisation de Data Flow Generator V0&lt;/a&gt; par téléversement de fichier (1 version) dfg&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{IntroductionDFG}}&lt;br /&gt;
== Introduction ==&lt;br /&gt;
{{parW|1=&lt;br /&gt;
L'informatique met à notre disposition des outils nous permettant d'éviter des tâches répétitives et ennuyeuses. Souvent, on devient informaticien car on veut éviter tout travail répétitif. Le développeur, déjà un informaticien, lui aussi veut éviter la programmation répétitive. Data Flow Generator est un outil parmi d'autres, que tout développeur finit par écrire car il est aussi un informaticien.&lt;br /&gt;
}}&lt;br /&gt;
=== Une méthodologie plus qu'un outil ===&lt;br /&gt;
{{parW|1=&lt;br /&gt;
Ces outils, tels que Data Flow Generator, qui aident à se passer du travail répétitif, finissent par s'intégrer dans une méthodologie de développement. En général un développeur commence à écrire son code avant même d'avoir réfléchi aux données que le programme va utiliser, à la structure des données, et pourquoi pas à la structure du programme même, qui lui aussi peut être pensé comme &lt;br /&gt;
une entité qui s'articulerait autour d'une architecture.&lt;br /&gt;
}}{{parW|1=&lt;br /&gt;
La réflexion fut longue et axée principalement sur trois branches : la spécialisation des logiciels (bases de données, middle-wares, etc.) et la spécialisation des outils de développement (langages, modélisation, etc.) et la thésaurisation de l'expérience. &lt;br /&gt;
}}&lt;br /&gt;
==== Les données et les programmes ====&lt;br /&gt;
{{parW|1=&lt;br /&gt;
Au fil des années, des logiciels se sont spécialisés dans le stockage et l'accès aux données (bases de données) ou dans le traitement de ces données, qui sont souvent des logiciels spécifiques à des besoins particuliers ou alors ces programmes sont mis dans des libraires quand ils sont réutilisables. Le langage {{m|SQL}} a été mis au point interroger ces bases de données, c'est un langage qui permet d'éviter de se préoccuper des problèmes que gèrent les base de données.  &lt;br /&gt;
}}&lt;br /&gt;
==== Les langages de programmation et la modélisation ====&lt;br /&gt;
{{parW|1=&lt;br /&gt;
En même temps, des langages de programmation se sont crées pour faciliter le travail du programmeur tout en évitant les taches répétitives. Chaque langage a ses qualités et ses défauts, nous dirons que chacun est optimal pour un ensemble de besoins donnés et chaque langage continue d'évoluer en intégrant de nouveaux concepts innovants. &lt;br /&gt;
}}{{parW|1=&lt;br /&gt;
La programmation orientée objet ({{m|POO}}) fut une étape importante pour commencer à modéliser la structure des données dans le code du programme même. La modélisation MERISE qui était utilisée pour modéliser les données dans les bases de données relationnelles finit par être remplacée par UML ; le diagramme de classe d'UML est un bon outil pour modéliser les classes dans langages orientées objet. C'est cette modélisation qui sera utilisée dans Data Flow Generator.&lt;br /&gt;
}}&lt;br /&gt;
==== Le design pattern ====&lt;br /&gt;
{{parW|1=&lt;br /&gt;
En parallèle à toutes ces innovations, le non concepteur d'outil de développement, les utilisateurs de ces outils continuaient et continue de réfléchir.&lt;br /&gt;
Le développeur expérimenté finit par décrire ou définir des modèles ou ce qu'on appelle des {{m|patrons}} ou en anglais (pattern). Ces longues réflexions basées sur l'expérience à conduit à l'établissement du {{m|design pattern}}.  &lt;br /&gt;
}}&lt;br /&gt;
=== Pourquoi générer du code ; le développement piloté par les modèles (model-driven development) ===&lt;br /&gt;
{{parW|1=&lt;br /&gt;
Toutes ces améliorations dans le monde du développement de logiciels se retrouvent forcément dans le développement piloté par les modèles ({{m|model-driven development}}).&lt;br /&gt;
}}{{parW|1=&lt;br /&gt;
Vous trouverez facilement de la documentation sur les avantages et les inconvénients du développement piloté par les modèles, qui est encore mal connu par bon nombre de développeurs. &lt;br /&gt;
}}{{parW|1=&lt;br /&gt;
Le développement de DataFlowGenerator a été fortement inspiré, d'une manière très simplifiée, du projet {{m|FAROS}}. C'est une façon simple d'illustrer, ces méthodes; le développement piloté par les modèles ({{m|Model driven architecture}} ou {{m|model-driven development}}).&lt;br /&gt;
}}{{parW|1=&lt;br /&gt;
Le projet FAROS a déjà écrit l'état de l'art sur cette question, si vous voulez en savoir plus consultez le chapitre 5 du document  [http://www2.lifl.fr/faros/pub/uploads/Main/RNTL-FAROS-F1-1.pdf Etat de l’art sur la contractualisation et la composition] &lt;br /&gt;
}}{{parW|1=&lt;br /&gt;
Le site du projet FAROS :  [http://www2.lifl.fr/faros/Main/HomePage www2.lifl.fr/faros]&lt;br /&gt;
}}{{parW|1=&lt;br /&gt;
Mais retenez que cette méthodologie permet de se concentrer ce qui est essentiel, ce qui rend le nécessité de faire le développement, mis sous forme minimale, sous forme plus accessible à l'analyse et à la conception, et surtout la charge de la maintenance du code est forcément très réduits car l'action des corrections et des évolutions se limitent à une quantité d'information la plus minimale qui aussi limite les erreurs de propagation de la même information.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== La place de Data Flow Generator dans tout ça ===&lt;br /&gt;
{{parW|1=&lt;br /&gt;
Data Flow Generator est un outil de développement, qui à partir d'un modèle (développement piloté par les modèles), génère du code qui permet de construire une structure de données en mémoire vive et la même structure de données sous forme persistante ou sérialisée. Il ne génère pas seulement du code déclarative comme certains éditeurs d'UML, mais aussi il génère un minimum de code pour manipuler ces données (copie, extraction, création, lecture, écriture, vérification de cardinalité, interception, etc.). &lt;br /&gt;
}}{{parW|1=&lt;br /&gt;
Pour l'instant il génére du code en c++ et python. La forme persistante actuelle utilise le format {{m|XML}} ; en c++ la librairie {{m|XERCES}} est utilisée et en python le module {{m|xml.dom.minidom}}&lt;br /&gt;
}}{{parW|1=&lt;br /&gt;
Il permet aussi de garder la cohérence entre le modèle et le code en cours de développement. En effet le modèle peut être modifié et le code régénéré sans gêner le développement manuel (classique) des traitements autour de ces données ainsi restructurées.&lt;br /&gt;
}}{{parW|1=&lt;br /&gt;
Cet outil a été développé en ayant à l'esprit rois exigences essentielles :&lt;br /&gt;
&lt;br /&gt;
*'''Synchronisation permanente entre le modèle et le code''' &lt;br /&gt;
:La structure des données intrinsèquement définit par le code doit être exactement la structure définit par le modèle. &lt;br /&gt;
*'''Le passage immédiat en développement manuel (classique)'''&lt;br /&gt;
:Le code généré doit ressembler à un code développé manuellement afin que celui-ci puisse être reprise.&lt;br /&gt;
*'''Pas de pollutions avec le code généré (séparation entre code généré et code écrit)'''&lt;br /&gt;
:Le code généré ne doit pas être mélangé dans le code écrit manuellement (les fichiers sont bien séparés).&lt;br /&gt;
}}&lt;br /&gt;
==== Schema ====&lt;br /&gt;
{{parW|1=&lt;br /&gt;
A ma connaissance il n'existe pas d'outil en open source  équivalent à Data Flow Generator pour générer du  c++.  Pour le monde java il en existe sûrement.&lt;br /&gt;
La grammaire utilisée pour modéliser est une forme personnalisée très simplifiée et limité de {{m|Schema}} voir http://www.w3.org/XML/Schema et http://fr.wikipedia.org/wiki/XML_Schema. &lt;br /&gt;
}}{{parW|1=&lt;br /&gt;
Vous pouvez consulter ces sites pour trouver d' éventuels outils pour générer du c++.&lt;br /&gt;
}}&lt;br /&gt;
==== Utilitié et liens ====&lt;br /&gt;
{{parW|1=&lt;br /&gt;
Pour ceux qui développent en C++, Python et veulent sérialiser leurs données sous format XML (et peut être bientôt sous HDF) ou tout simplement pour tout ceux qui veulent développer en C++ et Python et veulent avoir rapidement un ensemble de classes prêt à l'emploi en mémoire interne, cet outil peut dans la plupart des cas vous générer le code pour vous.  Il n'y pas de rupture entre le modèle et le code généré; le modèle reflétera toujours la structure des données (Le modèle commande le code !). &lt;br /&gt;
}}{{parW|1=&lt;br /&gt;
Vous pouvez utiliser DataFlowGenerator en ligne sur : http://dfg.bht-diffusion.com&lt;br /&gt;
}}{{parW|1=&lt;br /&gt;
Le manuel de référence, qui est souvent difficile à digérer, se trouve sur [http://wiki.bht-diffusion.com/index.php/Manuel_de_r%C3%A9f%C3%A9rence_de_la_grammaire_de_Data_Flow_Generator manuel de référence sur wiki.bht-diffusion.com]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== La structure des données est arborescente ===&lt;br /&gt;
{{parW|1=&lt;br /&gt;
Les données en général sont structurées en arborescente. Par exemple le système de fichiers des système LINUX est arborescent avec une racine unique. Pour représenter des graphies il faut faire toucher certains feuilles de l'arbre par des liens.&lt;br /&gt;
}}{{parW|1=&lt;br /&gt;
Les modèles de Data Flow generator modélisent des données ayant une structures arborescentes à racine unique. Le modèle ne permet pas de définir des liens entre les feuilles. S'il faut décrire de graphes c'est l'utilisateur du code généré qui doit définir ces liens.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Où trouver l'outil  ==&lt;br /&gt;
{{parW|1=&lt;br /&gt;
L'outil est utilisable en ligne sur Internet à l'adresse http://dfg.bht.fr .&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Le work flow ==&lt;br /&gt;
{{parW|1=&lt;br /&gt;
Le work flow est assez simple. Le modèle est définit dans un fichier au format XML. Ce fichier sert d'entrée à {{m|DFG}} (Data Flow Generator). Suivant le langage choisi DFG contient des modèles applicatifs ou des sortes de patron de codes. A partir de ces données DFG génère le code permettant de travailler avec la structure de ces données défini par le modèle. &lt;br /&gt;
}}{{parW|1=&lt;br /&gt;
{{c| {{figc|Le work flow de Data Flow Generator|DataFlowGenerator_data_flow.png|ref1|10cm}} }}&lt;br /&gt;
}}{{parW|1=&lt;br /&gt;
Le work flow suivant montre les évolutions possibles pour étendre la liste des formats de bas niveau des fichiers de sérialisation (cadres en pointillés).&lt;br /&gt;
}}{{parW|1=&lt;br /&gt;
{{c| {{figc|Le work flow des évolutions possibles de Data Flow Generator|DataFlowGenerator_data_flow_evol.png|ref2|10cm}} }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== La modèlisation des données ==&lt;br /&gt;
{{parW|1=&lt;br /&gt;
La grammaire de la modélisation est définie entièrement dans [[Manuel de référence de la grammaire de Data Flow Generator]].&lt;br /&gt;
}}{{parW|1=&lt;br /&gt;
Mais prenons un exemple sous sa forme la plus simple pour être comprise de façon intuitive :&lt;br /&gt;
}}&lt;br /&gt;
=== Exemple simple ===&lt;br /&gt;
{{parW|1=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- tuto_001 from &amp;quot;tuto_001.xml&amp;quot; --&amp;gt;&lt;br /&gt;
. tuto_001 : grammar from &amp;quot;tuto_001.xml&amp;quot; type=&amp;quot;xml&amp;quot; version=&amp;quot;1.0.0&amp;quot;&lt;br /&gt;
     FileFormatVersion=&amp;quot;1.0.0&amp;quot;&lt;br /&gt;
. . entreprise:CEntreprise&lt;br /&gt;
. . . red:CRed&lt;br /&gt;
. . . . departement:CDepartement cardinality=&amp;quot;+&amp;quot;&lt;br /&gt;
. . . . . nom:string /&lt;br /&gt;
. . . . . agents:CAgent cardinality=&amp;quot;*&amp;quot;&lt;br /&gt;
. . . . . . prenom:string /&lt;br /&gt;
. . . . . . nom:string /&lt;br /&gt;
. . . . . . fonction:string /&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}{{parW|1=&lt;br /&gt;
Ce modèle dit que l'enreprise possède un R&amp;amp;D. la R&amp;amp;D possède plus d'un département. Chaque département a un nom et possède des agents (de 0 à l'infini). Chaque agent possède un prénom, nom et fonction.&lt;br /&gt;
}}{{parW|1=&lt;br /&gt;
L'équivalent de ce modèle dans la grammaire de Data Flow Generator est le suivant :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;grammar type=&amp;quot;xml&amp;quot; version=&amp;quot;1.0.0&amp;quot; FileFormatVersion=&amp;quot;1.0.0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;el name=&amp;quot;entreprise&amp;quot; type='CEntreprise' &amp;gt;&lt;br /&gt;
        &amp;lt;el name=&amp;quot;red&amp;quot; type='CRed' &amp;gt;&lt;br /&gt;
            &amp;lt;el name=&amp;quot;departement&amp;quot; type='CDepartement' cardinality=&amp;quot;1:*&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;el name=&amp;quot;nom&amp;quot; type='string'/&amp;gt;&lt;br /&gt;
                &amp;lt;el name=&amp;quot;agents&amp;quot; type='CAgent' cardinality=&amp;quot;*&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;el name=&amp;quot;prenom&amp;quot; type='string'/&amp;gt;&lt;br /&gt;
                    &amp;lt;el name=&amp;quot;nom&amp;quot; type='string'/&amp;gt;&lt;br /&gt;
                    &amp;lt;el name=&amp;quot;fonction&amp;quot; type='string'/&amp;gt;&lt;br /&gt;
                &amp;lt;/el&amp;gt;&lt;br /&gt;
            &amp;lt;/el&amp;gt;&lt;br /&gt;
        &amp;lt;/el&amp;gt;&lt;br /&gt;
    &amp;lt;/el&amp;gt;&lt;br /&gt;
&amp;lt;/grammar&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}{{parW|1=&lt;br /&gt;
Le diagramme UML équivalent est le suivant :&lt;br /&gt;
{{c|&lt;br /&gt;
&amp;lt;uml&amp;gt;&lt;br /&gt;
class CEntreprise {&lt;br /&gt;
} &lt;br /&gt;
CEntreprise  *--&amp;gt; &amp;quot;1&amp;quot; CRed : red &lt;br /&gt;
CRed  *--&amp;gt; &amp;quot;+&amp;quot; CDepartement : departement &lt;br /&gt;
CDepartement : string nom &lt;br /&gt;
CDepartement  *--&amp;gt; &amp;quot;*&amp;quot; CAgent : agents &lt;br /&gt;
CAgent : string prenom &lt;br /&gt;
CAgent : string nom &lt;br /&gt;
CAgent : string fonction &lt;br /&gt;
hide empty methods&lt;br /&gt;
hide empty fields&lt;br /&gt;
&amp;lt;/uml&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Exemple plus complexe ===&lt;br /&gt;
{{parW|1=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- tuto_002 from &amp;quot;tuto_002.xml&amp;quot; --&amp;gt;&lt;br /&gt;
. tuto_002 : grammar from &amp;quot;tuto_002.xml&amp;quot; type=&amp;quot;xml&amp;quot; version=&amp;quot;1.0.0&amp;quot; FileFormatVersion=&amp;quot;1.0.0&amp;quot;&lt;br /&gt;
. . dessin:CDessin&lt;br /&gt;
. . . base:CBase  OnlyDefinition=&amp;quot;1&amp;quot;&lt;br /&gt;
. . . point:CPoint  heritances=&amp;quot;CBase&amp;quot;  OnlyDefinition=&amp;quot;1&amp;quot;&lt;br /&gt;
. . . . x:float /&lt;br /&gt;
. . . . y:float /&lt;br /&gt;
. . . segment:CSegment  heritances=&amp;quot;CBase&amp;quot;  OnlyDefinition=&amp;quot;1&amp;quot;&lt;br /&gt;
. . . . A:@CPoint&lt;br /&gt;
. . . . B:@CPoint&lt;br /&gt;
. . . cercle:CCercle  heritances=&amp;quot;CBase&amp;quot;  OnlyDefinition=&amp;quot;1&amp;quot;&lt;br /&gt;
. . . . C:@CPoint&lt;br /&gt;
. . . . R:float /&lt;br /&gt;
. . . compound:CCompound cardinality=&amp;quot;*&amp;quot;  heritances=&amp;quot;CBase&amp;quot;&lt;br /&gt;
. . . . elements:@CBase cardinality=&amp;quot;*&amp;quot; accept=&amp;quot;CPoint:CSegment:CCercle:CCompound&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ce modèle décrit un dessin qui est formé d'une liste de forme géométriques combinées. Chacune de ces formes est faite par un ensemble de formes élementaires ou forme combinées.  &lt;br /&gt;
}}{{parW|1=&lt;br /&gt;
L'équivalent de ce modèle dans la grammaire de Data Flow Generator est le suivant :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;grammar type=&amp;quot;xml&amp;quot; version=&amp;quot;1.0.0&amp;quot; FileFormatVersion=&amp;quot;1.0.0&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;el name=&amp;quot;dessin&amp;quot; type=&amp;quot;CDessin&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;el name=&amp;quot;base&amp;quot; type=&amp;quot;CBase&amp;quot;  OnlyDefinition=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/el&amp;gt;&lt;br /&gt;
    &amp;lt;el name=&amp;quot;point&amp;quot; type=&amp;quot;CPoint&amp;quot;  heritances=&amp;quot;CBase&amp;quot;  OnlyDefinition=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;el name=&amp;quot;x&amp;quot; type=&amp;quot;float&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;el name=&amp;quot;y&amp;quot; type=&amp;quot;float&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/el&amp;gt;&lt;br /&gt;
    &amp;lt;el name=&amp;quot;segment&amp;quot; type=&amp;quot;CSegment&amp;quot;  heritances=&amp;quot;CBase&amp;quot;  OnlyDefinition=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;el name=&amp;quot;A&amp;quot; type=&amp;quot;@CPoint&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;el name=&amp;quot;B&amp;quot; type=&amp;quot;@CPoint&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/el&amp;gt;&lt;br /&gt;
    &amp;lt;el name=&amp;quot;cercle&amp;quot; type=&amp;quot;CCercle&amp;quot;  heritances=&amp;quot;CBase&amp;quot;  OnlyDefinition=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;el name=&amp;quot;C&amp;quot; type=&amp;quot;@CPoint&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;el name=&amp;quot;R&amp;quot; type=&amp;quot;float&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/el&amp;gt;&lt;br /&gt;
    &amp;lt;el name=&amp;quot;compound&amp;quot; type=&amp;quot;CCompound&amp;quot; cardinality=&amp;quot;*&amp;quot;  heritances=&amp;quot;CBase&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;el name=&amp;quot;elements&amp;quot; type=&amp;quot;@CBase&amp;quot; cardinality=&amp;quot;*&amp;quot;&lt;br /&gt;
           accept=&amp;quot;CPoint:CSegment:CCercle:CCompound&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/el&amp;gt;&lt;br /&gt;
  &amp;lt;/el&amp;gt;&lt;br /&gt;
&amp;lt;/grammar&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}{{parW|1=&lt;br /&gt;
Le diagramme UML équivalent est le suivant :&lt;br /&gt;
{{c|1=&lt;br /&gt;
&amp;lt;uml&amp;gt;&lt;br /&gt;
class CDessin {&lt;br /&gt;
} &lt;br /&gt;
CDessin  *--&amp;gt; &amp;quot;1&amp;quot; CBase : base &lt;br /&gt;
CPoint  --|&amp;gt; CBase&lt;br /&gt;
CPoint : float x &lt;br /&gt;
CPoint : float y &lt;br /&gt;
CSegment  --|&amp;gt; CBase&lt;br /&gt;
CSegment  *--&amp;gt; &amp;quot;1&amp;quot; CPoint : A &lt;br /&gt;
CSegment  *--&amp;gt; &amp;quot;1&amp;quot; CPoint : B &lt;br /&gt;
CCercle  --|&amp;gt; CBase&lt;br /&gt;
CCercle  *--&amp;gt; &amp;quot;1&amp;quot; CPoint : C &lt;br /&gt;
CCercle : float R &lt;br /&gt;
CCompound  --|&amp;gt; CBase&lt;br /&gt;
CCompound  *--&amp;gt; &amp;quot;*&amp;quot; CBase : elements &lt;br /&gt;
hide empty methods&lt;br /&gt;
hide empty fields&lt;br /&gt;
&amp;lt;/uml&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
}}{{parW|1=&lt;br /&gt;
Voici un exemple de forme persistante de données défini par le modèle :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;dessin DriverName=&amp;quot;DataFlowGenerator_XML_DOM_MINIDOOM&amp;quot; DriverVersion=&amp;quot;0.22.0&amp;quot; FileFormatVersion=&amp;quot;1.0.0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;compound&amp;gt;&lt;br /&gt;
        &amp;lt;elements dfg_classname=&amp;quot;CCercle&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;C&amp;gt;&lt;br /&gt;
                &amp;lt;x&amp;gt;3.000000E+00&amp;lt;/x&amp;gt;&lt;br /&gt;
                &amp;lt;y&amp;gt;0.000000E+00&amp;lt;/y&amp;gt;&lt;br /&gt;
            &amp;lt;/C&amp;gt;&lt;br /&gt;
            &amp;lt;R&amp;gt;4.000000E+01&amp;lt;/R&amp;gt;&lt;br /&gt;
        &amp;lt;/elements&amp;gt;&lt;br /&gt;
        &amp;lt;elements dfg_classname=&amp;quot;CSegment&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;A&amp;gt;&lt;br /&gt;
                &amp;lt;x&amp;gt;5.000000E+00&amp;lt;/x&amp;gt;&lt;br /&gt;
                &amp;lt;y&amp;gt;6.000000E+00&amp;lt;/y&amp;gt;&lt;br /&gt;
            &amp;lt;/A&amp;gt;&lt;br /&gt;
            &amp;lt;B&amp;gt;&lt;br /&gt;
                &amp;lt;x&amp;gt;1.000000E+00&amp;lt;/x&amp;gt;&lt;br /&gt;
                &amp;lt;y&amp;gt;-2.000000E+00&amp;lt;/y&amp;gt;&lt;br /&gt;
            &amp;lt;/B&amp;gt;&lt;br /&gt;
        &amp;lt;/elements&amp;gt;&lt;br /&gt;
        &amp;lt;elements dfg_classname=&amp;quot;CCompound&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;elements dfg_classname=&amp;quot;CCercle&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;C&amp;gt;&lt;br /&gt;
                    &amp;lt;x&amp;gt;7.000000E+00&amp;lt;/x&amp;gt;&lt;br /&gt;
                    &amp;lt;y&amp;gt;0.000000E+00&amp;lt;/y&amp;gt;&lt;br /&gt;
                &amp;lt;/C&amp;gt;&lt;br /&gt;
                &amp;lt;R&amp;gt;3.000000E+01&amp;lt;/R&amp;gt;&lt;br /&gt;
            &amp;lt;/elements&amp;gt;&lt;br /&gt;
            &amp;lt;elements dfg_classname=&amp;quot;CCompound&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;elements dfg_classname=&amp;quot;CCercle&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;C&amp;gt;&lt;br /&gt;
                        &amp;lt;x&amp;gt;4.000000E+00&amp;lt;/x&amp;gt;&lt;br /&gt;
                        &amp;lt;y&amp;gt;0.000000E+00&amp;lt;/y&amp;gt;&lt;br /&gt;
                    &amp;lt;/C&amp;gt;&lt;br /&gt;
                    &amp;lt;R&amp;gt;2.000000E+01&amp;lt;/R&amp;gt;&lt;br /&gt;
                &amp;lt;/elements&amp;gt;&lt;br /&gt;
            &amp;lt;/elements&amp;gt;&lt;br /&gt;
        &amp;lt;/elements&amp;gt;&lt;br /&gt;
    &amp;lt;/compound&amp;gt;&lt;br /&gt;
    &amp;lt;compound&amp;gt;&lt;br /&gt;
        &amp;lt;elements dfg_classname=&amp;quot;CCercle&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;C&amp;gt;&lt;br /&gt;
                &amp;lt;x&amp;gt;4.000000E+00&amp;lt;/x&amp;gt;&lt;br /&gt;
                &amp;lt;y&amp;gt;0.000000E+00&amp;lt;/y&amp;gt;&lt;br /&gt;
            &amp;lt;/C&amp;gt;&lt;br /&gt;
            &amp;lt;R&amp;gt;2.000000E+01&amp;lt;/R&amp;gt;&lt;br /&gt;
        &amp;lt;/elements&amp;gt;&lt;br /&gt;
    &amp;lt;/compound&amp;gt;&lt;br /&gt;
&amp;lt;/dessin&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Exemple de développement en c++ sous LINUX ==&lt;br /&gt;
Voir [[Tutoriel de Data Flow_Generator#Tuto_002_:_D.C3.A9veloppement_en_c.2B.2B_sous_LINUX|Tutoriel de Data Flow_Generator]]&lt;/div&gt;</summary>
		<author><name>WikiAdmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.bht.fr/index.php?title=Data_Flow_Generator_Web&amp;diff=4942&amp;oldid=0</id>
		<title>Data Flow Generator Web</title>
		<link rel="alternate" type="text/html" href="https://wiki.bht.fr/index.php?title=Data_Flow_Generator_Web&amp;diff=4942&amp;oldid=0"/>
		<updated>2026-07-24T17:08:26Z</updated>

		<summary type="html">&lt;p&gt;&lt;a href=&quot;/index.php?title=Utilisateur:WikiAdmin&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;Utilisateur:WikiAdmin (page inexistante)&quot;&gt;&lt;bdi&gt;WikiAdmin&lt;/bdi&gt;&lt;/a&gt; a importé &lt;a href=&quot;/index.php/Data_Flow_Generator_Web&quot; title=&quot;Data Flow Generator Web&quot;&gt;Data Flow Generator Web&lt;/a&gt; par téléversement de fichier (1 version) dfg&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Introduction&lt;br /&gt;
|texte={{:DataFlowGenerator:summary}}{{m|Data Flow Generator Web}} est l'interface léger, accessible avec un navigateur Internet, pour utiliser Data Flow Generator. &lt;br /&gt;
{{EnConstruction}}&lt;br /&gt;
|auteurs=Arthur TOROSSIAN&lt;br /&gt;
|index=Informatique:Index&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;[[Category:DataFlowGenerator|{{PAGENAME}}]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>WikiAdmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.bht.fr/index.php?title=Manuel_de_r%C3%A9f%C3%A9rence_des_fichiers_au_format_XML_utilis%C3%A9s_par_les_drivers_g%C3%A9n%C3%A9r%C3%A9s_par_Data_Flow_Generator_V0&amp;diff=4944&amp;oldid=0</id>
		<title>Manuel de référence des fichiers au format XML utilisés par les drivers générés par Data Flow Generator V0</title>
		<link rel="alternate" type="text/html" href="https://wiki.bht.fr/index.php?title=Manuel_de_r%C3%A9f%C3%A9rence_des_fichiers_au_format_XML_utilis%C3%A9s_par_les_drivers_g%C3%A9n%C3%A9r%C3%A9s_par_Data_Flow_Generator_V0&amp;diff=4944&amp;oldid=0"/>
		<updated>2026-07-24T17:08:26Z</updated>

		<summary type="html">&lt;p&gt;&lt;a href=&quot;/index.php?title=Utilisateur:WikiAdmin&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;Utilisateur:WikiAdmin (page inexistante)&quot;&gt;&lt;bdi&gt;WikiAdmin&lt;/bdi&gt;&lt;/a&gt; a importé &lt;a href=&quot;/index.php/Manuel_de_r%C3%A9f%C3%A9rence_des_fichiers_au_format_XML_utilis%C3%A9s_par_les_drivers_g%C3%A9n%C3%A9r%C3%A9s_par_Data_Flow_Generator_V0&quot; title=&quot;Manuel de référence des fichiers au format XML utilisés par les drivers générés par Data Flow Generator V0&quot;&gt;Manuel de référence des fichiers au format XML utilisés par les drivers générés par Data Flow Generator V0&lt;/a&gt; par téléversement de fichier (1 version) dfg&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{IntroductionDFG}}&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Les fichiers XML utilisés par les driver générés par Data Flow Generator ont une structure gramaticale complètement décrite par le modèle (voir [[ Manuel de référence de la grammaire de Data Flow Generator|modèle des données]]).&lt;br /&gt;
&lt;br /&gt;
Cependant pour des questions de contrôle, il existent certaines spécificités liés au support XML et la nature de certaines données (exemple polymorphisme).&lt;br /&gt;
&lt;br /&gt;
== La racine du des données ==&lt;br /&gt;
&lt;br /&gt;
Le driver a besoin de certaines informations pour gérer ne serait-ce que la gestion des versions. Ces informations sont stockées dans la racine du document :&lt;br /&gt;
&lt;br /&gt;
*{{m|fileformatversion}}&lt;br /&gt;
: cardinalité : 1&lt;br /&gt;
: contient la version de la grammaire décrite par le contenu décrit dans le fichier XML. Sa valeur dépend du contenu.&lt;br /&gt;
&lt;br /&gt;
*{{m|DriverName}}&lt;br /&gt;
: cardinalité : ?&lt;br /&gt;
: est le nom du driver, ce nom est généré par DataFlowGenerator, il est écrit en dur dans le code généré. Par exemple s'il contient &amp;quot;DataFlowGenerator_XERCES_XML&amp;quot;, c'est que ce fichier à été généré par du code écrit en c++ utilisant la librairie XERCES.&lt;br /&gt;
&lt;br /&gt;
*{{m|DriverVersion}}&lt;br /&gt;
: cardinalité : ?&lt;br /&gt;
: est la version du driver qui a généré le fichier. Ces numéros sont générés par DataFlowGenerator, ils sont écrits en dur dans le code généré.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Polymorphisme ==&lt;br /&gt;
&lt;br /&gt;
Dans le cas de polymorphisme, le type de classe doit être stocké dans le fichier. L'attribut {{m|dfg_classname}} sert pour stocker cette information.&lt;br /&gt;
&lt;br /&gt;
*{{m|dfg_classname}}&lt;br /&gt;
: cardinalité : ?&lt;br /&gt;
: contient le type de la classe ou structure.&lt;br /&gt;
&lt;br /&gt;
== Exemple ==&lt;br /&gt;
&lt;br /&gt;
=== Un modèle ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;ISO-8859-1&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;grammar type=&amp;quot;xml&amp;quot; version=&amp;quot;1.0.0&amp;quot; fileformatversion=&amp;quot;1.0.0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;el name=&amp;quot;dessin&amp;quot; type='CDessin' &amp;gt;&lt;br /&gt;
        &amp;lt;el name=&amp;quot;base&amp;quot; type=&amp;quot;CBase&amp;quot;  OnlyDefinition=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;el type=&amp;quot;CPoint&amp;quot; name=&amp;quot;point&amp;quot; heritances=&amp;quot;CBase&amp;quot; OnlyDefinition=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;el name=&amp;quot;x&amp;quot; type=&amp;quot;float&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;el name=&amp;quot;y&amp;quot; type=&amp;quot;float&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;/el&amp;gt;&lt;br /&gt;
        &amp;lt;el type=&amp;quot;CSegment&amp;quot; name=&amp;quot;segment&amp;quot; heritances=&amp;quot;CBase&amp;quot; OnlyDefinition=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;el name=&amp;quot;A&amp;quot; type=&amp;quot;@CPoint&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;el name=&amp;quot;B&amp;quot; type=&amp;quot;@CPoint&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;/el&amp;gt;&lt;br /&gt;
        &amp;lt;el type=&amp;quot;CCercle&amp;quot; name=&amp;quot;cercle&amp;quot; heritances=&amp;quot;CBase&amp;quot; OnlyDefinition=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;el name=&amp;quot;C&amp;quot; type=&amp;quot;@CPoint&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;el name=&amp;quot;R&amp;quot; type=&amp;quot;float&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;/el&amp;gt;&lt;br /&gt;
        &amp;lt;el type=&amp;quot;CCompound&amp;quot; name=&amp;quot;compound&amp;quot; heritances=&amp;quot;CBase&amp;quot;  cardinality=&amp;quot;*&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;el  name=&amp;quot;elements&amp;quot; type=&amp;quot;@CBase&amp;quot; cardinality=&amp;quot;*&amp;quot;  accept=&amp;quot;CPoint:CSegment:CCercle:CCompound&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;/el&amp;gt;&lt;br /&gt;
    &amp;lt;/el&amp;gt;&lt;br /&gt;
&amp;lt;/grammar&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Un exemple de fichier correspondant au modèle ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;dessin DriverName=&amp;quot;DataFlowGenerator_XERCES_XML&amp;quot; DriverVersion=&amp;quot;0.21.0&amp;quot; FileFormatVersion=&amp;quot;1.0.0&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;compound&amp;gt;&lt;br /&gt;
                &amp;lt;elements dfg_classname=&amp;quot;CCercle&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;C&amp;gt;&lt;br /&gt;
                                &amp;lt;x&amp;gt;3.000000E+00&amp;lt;/x&amp;gt;&lt;br /&gt;
                                &amp;lt;y&amp;gt;0.000000E+00&amp;lt;/y&amp;gt;&lt;br /&gt;
                        &amp;lt;/C&amp;gt;&lt;br /&gt;
                        &amp;lt;R&amp;gt;4.000000E+01&amp;lt;/R&amp;gt;&lt;br /&gt;
                &amp;lt;/elements&amp;gt;&lt;br /&gt;
                &amp;lt;elements dfg_classname=&amp;quot;CSegment&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;A&amp;gt;&lt;br /&gt;
                                &amp;lt;x&amp;gt;5.000000E+00&amp;lt;/x&amp;gt;&lt;br /&gt;
                                &amp;lt;y&amp;gt;6.000000E+00&amp;lt;/y&amp;gt;&lt;br /&gt;
                        &amp;lt;/A&amp;gt;&lt;br /&gt;
                        &amp;lt;B&amp;gt;&lt;br /&gt;
                                &amp;lt;x&amp;gt;1.000000E+00&amp;lt;/x&amp;gt;&lt;br /&gt;
                                &amp;lt;y&amp;gt;-2.000000E+00&amp;lt;/y&amp;gt;&lt;br /&gt;
                        &amp;lt;/B&amp;gt;&lt;br /&gt;
                &amp;lt;/elements&amp;gt;&lt;br /&gt;
                &amp;lt;elements dfg_classname=&amp;quot;CCompound&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;elements dfg_classname=&amp;quot;CCercle&amp;quot;&amp;gt;&lt;br /&gt;
                                &amp;lt;C&amp;gt;&lt;br /&gt;
                                        &amp;lt;x&amp;gt;7.000000E+00&amp;lt;/x&amp;gt;&lt;br /&gt;
                                        &amp;lt;y&amp;gt;0.000000E+00&amp;lt;/y&amp;gt;&lt;br /&gt;
                                &amp;lt;/C&amp;gt;&lt;br /&gt;
                                &amp;lt;R&amp;gt;3.000000E+01&amp;lt;/R&amp;gt;&lt;br /&gt;
                        &amp;lt;/elements&amp;gt;&lt;br /&gt;
                        &amp;lt;elements dfg_classname=&amp;quot;CCompound&amp;quot;&amp;gt;&lt;br /&gt;
                                &amp;lt;elements dfg_classname=&amp;quot;CCercle&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;C&amp;gt;&lt;br /&gt;
                                                &amp;lt;x&amp;gt;1.400000E+01&amp;lt;/x&amp;gt;&lt;br /&gt;
                                                &amp;lt;y&amp;gt;1.000000E+01&amp;lt;/y&amp;gt;&lt;br /&gt;
                                        &amp;lt;/C&amp;gt;&lt;br /&gt;
                                        &amp;lt;R&amp;gt;2.000000E+01&amp;lt;/R&amp;gt;&lt;br /&gt;
                                &amp;lt;/elements&amp;gt;&lt;br /&gt;
                        &amp;lt;/elements&amp;gt;&lt;br /&gt;
                &amp;lt;/elements&amp;gt;&lt;br /&gt;
        &amp;lt;/compound&amp;gt;&lt;br /&gt;
        &amp;lt;compound&amp;gt;&lt;br /&gt;
                &amp;lt;elements dfg_classname=&amp;quot;CCercle&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;C&amp;gt;&lt;br /&gt;
                                &amp;lt;x&amp;gt;4.000000E+00&amp;lt;/x&amp;gt;&lt;br /&gt;
                                &amp;lt;y&amp;gt;0.000000E+00&amp;lt;/y&amp;gt;&lt;br /&gt;
                        &amp;lt;/C&amp;gt;&lt;br /&gt;
                        &amp;lt;R&amp;gt;2.000000E+01&amp;lt;/R&amp;gt;&lt;br /&gt;
                &amp;lt;/elements&amp;gt;&lt;br /&gt;
        &amp;lt;/compound&amp;gt;&lt;br /&gt;
&amp;lt;/dessin&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{:DataFlowGenerator:see_too}}&lt;/div&gt;</summary>
		<author><name>WikiAdmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.bht.fr/index.php?title=Tutoriel_de_Data_Flow_Generator_V0&amp;diff=4938&amp;oldid=0</id>
		<title>Tutoriel de Data Flow Generator V0</title>
		<link rel="alternate" type="text/html" href="https://wiki.bht.fr/index.php?title=Tutoriel_de_Data_Flow_Generator_V0&amp;diff=4938&amp;oldid=0"/>
		<updated>2026-07-24T17:08:24Z</updated>

		<summary type="html">&lt;p&gt;&lt;a href=&quot;/index.php?title=Utilisateur:WikiAdmin&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;Utilisateur:WikiAdmin (page inexistante)&quot;&gt;&lt;bdi&gt;WikiAdmin&lt;/bdi&gt;&lt;/a&gt; a importé &lt;a href=&quot;/index.php/Tutoriel_de_Data_Flow_Generator_V0&quot; title=&quot;Tutoriel de Data Flow Generator V0&quot;&gt;Tutoriel de Data Flow Generator V0&lt;/a&gt; par téléversement de fichier (1 version) dfg&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{IntroductionDFG}}&lt;br /&gt;
== Tuto_002 : Développement en c++ sous LINUX ==&lt;br /&gt;
=== L'objectif ===&lt;br /&gt;
{{parW|1=&lt;br /&gt;
L'objectif est de montrer comment créer rapidement un driver en c++ pour écrire/lire dans/depuis un fichier au format {{mb|xml}} dont les données sont modélisées par le diagramme suivant :&lt;br /&gt;
{{c|&lt;br /&gt;
&amp;lt;uml&amp;gt;&lt;br /&gt;
class CDessin {&lt;br /&gt;
} &lt;br /&gt;
CDessin  *--&amp;gt; &amp;quot;1&amp;quot; CBase : base &lt;br /&gt;
CPoint  --|&amp;gt; CBase&lt;br /&gt;
CPoint : float x &lt;br /&gt;
CPoint : float y &lt;br /&gt;
CSegment  --|&amp;gt; CBase&lt;br /&gt;
CSegment  *--&amp;gt; &amp;quot;1&amp;quot; CPoint : A &lt;br /&gt;
CSegment  *--&amp;gt; &amp;quot;1&amp;quot; CPoint : B &lt;br /&gt;
CCercle  --|&amp;gt; CBase&lt;br /&gt;
CCercle  *--&amp;gt; &amp;quot;1&amp;quot; CPoint : C &lt;br /&gt;
CCercle : float R &lt;br /&gt;
CCompound  --|&amp;gt; CBase&lt;br /&gt;
CCompound  *--&amp;gt; &amp;quot;*&amp;quot; CBase : elements &lt;br /&gt;
hide empty methods&lt;br /&gt;
hide empty fields&lt;br /&gt;
&amp;lt;/uml&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
=== Pour commencer ===&lt;br /&gt;
{{parW|1=&lt;br /&gt;
&lt;br /&gt;
Pour commencer créer les répertoires {{m|tuto_002/}} {{m|myXercesTools}} et {{m|utilities}} dans un répertoire commun dans lesquels nous allons travailler. Pour ceci tapez :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir tuto_002 &lt;br /&gt;
mkdir myXercesTools&lt;br /&gt;
mkdir utilities&lt;br /&gt;
mkdir tuto_002/generated&lt;br /&gt;
mkdir tuto_002/generated_out &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Vous aurez alors :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
├── myXercesTools&lt;br /&gt;
├── tuto_002&lt;br /&gt;
│   ├── generated&lt;br /&gt;
│   └── generated_out&lt;br /&gt;
└── utilities&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Le modèle ===&lt;br /&gt;
{{parW|1=&lt;br /&gt;
&lt;br /&gt;
Le modèle utilisé par DataFlowGenerator correspondant au modèle uml précédent  est le suivant :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;grammar type=&amp;quot;xml&amp;quot; version=&amp;quot;1.0.0&amp;quot; FileFormatVersion=&amp;quot;1.0.0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;el name=&amp;quot;dessin&amp;quot; type=&amp;quot;CDessin&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;el name=&amp;quot;base&amp;quot; type=&amp;quot;CBase&amp;quot;  OnlyDefinition=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;/el&amp;gt;&lt;br /&gt;
        &amp;lt;el name=&amp;quot;point&amp;quot; type=&amp;quot;CPoint&amp;quot;  heritances=&amp;quot;CBase&amp;quot;  OnlyDefinition=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;el name=&amp;quot;x&amp;quot; type=&amp;quot;float&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;el name=&amp;quot;y&amp;quot; type=&amp;quot;float&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;/el&amp;gt;&lt;br /&gt;
        &amp;lt;el name=&amp;quot;segment&amp;quot; type=&amp;quot;CSegment&amp;quot;  heritances=&amp;quot;CBase&amp;quot;  OnlyDefinition=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;el name=&amp;quot;A&amp;quot; type=&amp;quot;@CPoint&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;el name=&amp;quot;B&amp;quot; type=&amp;quot;@CPoint&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;/el&amp;gt;&lt;br /&gt;
        &amp;lt;el name=&amp;quot;cercle&amp;quot; type=&amp;quot;CCercle&amp;quot;  heritances=&amp;quot;CBase&amp;quot;  OnlyDefinition=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;el name=&amp;quot;C&amp;quot; type=&amp;quot;@CPoint&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;el name=&amp;quot;R&amp;quot; type=&amp;quot;float&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;/el&amp;gt;&lt;br /&gt;
        &amp;lt;el name=&amp;quot;compound&amp;quot; type=&amp;quot;CCompound&amp;quot; cardinality=&amp;quot;*&amp;quot;  heritances=&amp;quot;CBase&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;el name=&amp;quot;elements&amp;quot; type=&amp;quot;@CBase&amp;quot; cardinality=&amp;quot;*&amp;quot;&lt;br /&gt;
           accept=&amp;quot;CPoint:CSegment:CCercle:CCompound&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;/el&amp;gt;&lt;br /&gt;
    &amp;lt;/el&amp;gt;&lt;br /&gt;
&amp;lt;/grammar&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
}}{{parW|1=&lt;br /&gt;
&lt;br /&gt;
Sur le site http://dfg.bht.fr, copiez ce modèle dans le champ de texte nommé {{mb|grammar_file_name}} et dans le champ de texte nommé {{mb|data_name}} écrivez &amp;quot;tuto_002_&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Sélectionnez {{mb|Générer du c++ avec Xerces}} et puis cliquez sur le bouton {{mb|Générer}} pour créer les fichiers suivants :&lt;br /&gt;
* Les variables :&lt;br /&gt;
** tuto_002_XMLDriver_pkg_version.h&lt;br /&gt;
** tuto_002_XMLDriver.h&lt;br /&gt;
** tuto_002_XMLDriver.cxx&lt;br /&gt;
* Les fixes&lt;br /&gt;
** my_xerces_impl.h&lt;br /&gt;
** my_xerces_impl.cxx&lt;br /&gt;
** utilities.h&lt;br /&gt;
** utilities.cxx&lt;br /&gt;
&lt;br /&gt;
}}{{parW|1=&lt;br /&gt;
&lt;br /&gt;
Copier ces fichiers dans les répertoires {{m|myXercesTools}}, {{m|utilities}} et  {{m|tuto_002/generated}} :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
.&lt;br /&gt;
├── myXercesTools&lt;br /&gt;
│   ├── my_xerces_impl.cxx&lt;br /&gt;
│   └── my_xerces_impl.h&lt;br /&gt;
├── tuto_002&lt;br /&gt;
│   ├── generated&lt;br /&gt;
│   │   ├── tuto_002_XMLDriver.cxx&lt;br /&gt;
│   │   ├── tuto_002_XMLDriver.h&lt;br /&gt;
│   │   └── tuto_002_XMLDriver_pkg_version.h&lt;br /&gt;
└── utilities&lt;br /&gt;
    ├── utilities.cxx&lt;br /&gt;
    └── utilities.h&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Compilation ===&lt;br /&gt;
==== Si XERCES 2.7 n'est pas installé sur votre système ====&lt;br /&gt;
{{parW|1=&lt;br /&gt;
Les sources de XERCES peuvent être téléchargées sous la forme de fichier nommé xerces-c-src_2_7_0.tar.gz depuis le site de [http://archive.apache.org/dist/xml/xerces-c/Xerces-C_2_7_0/source/ archive.apache.org/dist/xml/xerces-c/Xerces-C_2_7_0/source/].&lt;br /&gt;
&lt;br /&gt;
}}{{parW|1=&lt;br /&gt;
&lt;br /&gt;
En notant {{m|&amp;lt;install_bin_dir&amp;gt;}} le répertoire dans lequel sera installée XERCES et {{m|&amp;lt;install_src_dir&amp;gt;}} le&lt;br /&gt;
répertoire à partir duquel l'installation est réalisée, les opérations suivantes permettent l'installation :&lt;br /&gt;
{{code|lang=bash|line|code=&lt;br /&gt;
 1 mkdir {{m|&amp;lt;install_bin_dir&amp;gt;}}/xerces-c-lib_2_7_0&lt;br /&gt;
 2 export {{m|XERCESCROOT}}=&amp;lt;install_src_dir&amp;gt;&lt;br /&gt;
 3 cd {{m|&amp;lt;install_src_dir&amp;gt;}}/src/xercesc&lt;br /&gt;
 4 autoconf&lt;br /&gt;
 5 ./runConfigure -plinux -P {{m|&amp;lt;install_bin_dir&amp;gt;}}&lt;br /&gt;
 6 make&lt;br /&gt;
 7 make install&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
==== Le programme tuto_002 ====&lt;br /&gt;
{{parW|1=&lt;br /&gt;
&lt;br /&gt;
Maintenant la variable XERCESCROOT doit être positionné sur le librairie XERCES installé donc cette fois-ci : &lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
export XERCESCROOT=&amp;lt;install_bin_dir&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
par exemple :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
export XERCESCROOT=/local01/atoross/exe/xerces-c-lib_2_7_0  &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Afin de pouvoir exécuter le programme compilé il faut aussi modifier LD_LIBRARY_PATH comme suit :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
export LD_LIBRARY_PATH=$XERCESCROOT/lib:$LD_LIBRARY_PATH&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Le répertoire XERCESCROOT doit contenir les répertoires :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
.&lt;br /&gt;
├── include&lt;br /&gt;
└── lib&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Créer un fichier nommé &amp;quot;{{m|Makefile}}&amp;quot; dans le répertoire tuto_002 et copier le texte suivant dans ce fichier :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
proj=tuto_002&lt;br /&gt;
all : test&lt;br /&gt;
&lt;br /&gt;
test : ${proj} &lt;br /&gt;
	&lt;br /&gt;
${proj} : util.o myxerces.o xmldriver.o  main.cpp     	&lt;br /&gt;
	g++ -I${XERCESCROOT}/include -I../utilities  -Igenerated -I../myXercesTools -L${XERCESCROOT}/lib  -lxerces-c    main.cpp util.o myxerces.o xmldriver.o -o ${proj}&lt;br /&gt;
	&lt;br /&gt;
util.o	: ../utilities/utilities.cxx  ../utilities/utilities.h&lt;br /&gt;
	g++ -I../utilities ../utilities/utilities.cxx  -c -o util.o&lt;br /&gt;
&lt;br /&gt;
xmldriver.o :generated/$(proj)_XMLDriver.cxx  generated/$(proj)_XMLDriver.h generated/$(proj)_XMLDriver_pkg_version.h&lt;br /&gt;
	echo &amp;quot;g++ -I${XERCESCROOT}/include -I../utilities -I../myXercesTools  -Igenerated  -L${XERCESCROOT}/lib   generated/${proj}_XMLDriver.cxx -c -o xmldriver.o&amp;quot;&lt;br /&gt;
	g++ -I${XERCESCROOT}/include -I../utilities -I../myXercesTools  -Igenerated  -L${XERCESCROOT}/lib   generated/${proj}_XMLDriver.cxx -c -o xmldriver.o&lt;br /&gt;
&lt;br /&gt;
myxerces.o:   ../myXercesTools/my_xerces_impl.cxx ../myXercesTools/my_xerces_impl.h&lt;br /&gt;
	echo &amp;quot;g++ -I../utilities -I../myXercesTools -I${XERCESCROOT}/include -L${XERCESCROOT}/lib    ../myXercesTools/my_xerces_impl.cxx -c -o myxerces.o&amp;quot;&lt;br /&gt;
	g++ -I../utilities -I../myXercesTools -I${XERCESCROOT}/include -L${XERCESCROOT}/lib    ../myXercesTools/my_xerces_impl.cxx -c -o myxerces.o&lt;br /&gt;
clean :&lt;br /&gt;
	-rm *.o *~ ${proj} ./generated_out/*&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Les sources du programme doivent être écrite dans le fichier nommé &amp;quot;{{m|main.cpp}}&amp;quot; et créé dans tuto_002, copier ces sources depuis le paragraphe &amp;quot;[[#Le_programme_complet|le programme complet]]&amp;quot; dans ce fichier.&lt;br /&gt;
Nous avons maintenant les fichiers suivants : &lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
.&lt;br /&gt;
├── myXercesTools&lt;br /&gt;
│   ├── my_xerces_impl.cxx&lt;br /&gt;
│   └── my_xerces_impl.h&lt;br /&gt;
├── tuto_002&lt;br /&gt;
│   ├── generated&lt;br /&gt;
│   │   ├── tuto_002_XMLDriver.cxx&lt;br /&gt;
│   │   ├── tuto_002_XMLDriver.h&lt;br /&gt;
│   │   └── tuto_002_XMLDriver_pkg_version.h&lt;br /&gt;
│   ├── generated_out&lt;br /&gt;
│   ├── main.cpp&lt;br /&gt;
│   ├── Makefile&lt;br /&gt;
└── utilities&lt;br /&gt;
    ├── utilities.cxx&lt;br /&gt;
    └── utilities.h&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Pour compiler entrer dans le répertoire tuto_002 et tapez :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
make&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Pour exécuter le programme entrer dans le répertoire tuto_002 et tapez :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./tuto_002&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Vous verrez alors aparaître le fichiers :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
generated_out/&lt;br /&gt;
├── dessin1.xml&lt;br /&gt;
└── dessin2.xml&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Explication des sources ===&lt;br /&gt;
&lt;br /&gt;
==== Extension, utilisation de la fabrique ====&lt;br /&gt;
{{parW|1=&lt;br /&gt;
&lt;br /&gt;
Avoir des données sans pouvoir ajouter des traitements ou extensions ce n'est pas très intéressant. Pour étendre les classes générées on utilise l' héritage et le polymorphisme des classes. Afin de pouvoir utiliser les nouveaux types de classe on utilise un {{m|fabrique}} qui est un {{m|singleton}}.&lt;br /&gt;
&lt;br /&gt;
Par exemple si nous voulions ajouter un traitement aux cercle, une translation, on peut écrire le code suivant :  &lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
class myCCercle : public CCercle&lt;br /&gt;
{&lt;br /&gt;
public :&lt;br /&gt;
    int my_attr ;&lt;br /&gt;
    myCCercle() : CCercle(), my_attr(0)&lt;br /&gt;
    {&lt;br /&gt;
    } ;&lt;br /&gt;
    void move( double dx, double dy )&lt;br /&gt;
    {&lt;br /&gt;
        C-&amp;gt;x = C-&amp;gt;x+dx ;&lt;br /&gt;
        C-&amp;gt;y = C-&amp;gt;y+dy ;&lt;br /&gt;
    }  &lt;br /&gt;
};&lt;br /&gt;
CDessinBase * myCCercle_factory()&lt;br /&gt;
{&lt;br /&gt;
    return  new myCCercle() ;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mais il ne faut pas oublier d'enregistrer cette classe dans la fabrique, voici comment le faire :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
CDessinBase_factory::instance()-&amp;gt;register_creator( &amp;quot;CCercle&amp;quot;, myCCercle_factory ) ;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour créer la classe il suffit d'appeler la fabrique :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
CCercle * cercle =  (CCercle *) factory-&amp;gt;create( &amp;quot;CCercle&amp;quot; ) ;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voici l'exemple qui montre comment appliquer le translation :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
myCCercle* mycercle = (myCCercle*) cercle ;&lt;br /&gt;
mycercle-&amp;gt;move( 10.0, 10.0 ) ;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
==== Construction des données ====&lt;br /&gt;
{{parW|1=&lt;br /&gt;
&lt;br /&gt;
La construction se fait en appelant la fabrique. Pour les structures ayant une cardinal diffèrent de 1 nous utilisons les {{m|vecteur}} de la librairie {{m|STL}}.&lt;br /&gt;
Exemple :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
CDessinBase_factory * factory =CDessinBase_factory::instance();&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
CDessin * Med = (CDessin *) factory-&amp;gt;create( &amp;quot;CDessin&amp;quot; ) ;&lt;br /&gt;
CCompound * comp =  (CCompound *) factory-&amp;gt;create( &amp;quot;CCompound&amp;quot; ) ;&lt;br /&gt;
Med-&amp;gt;compound.push_back( comp ) ;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Remarque|texte=La mémoire allouée est libérée par le code généré}}&lt;br /&gt;
}}&lt;br /&gt;
==== Charger et décharger ====&lt;br /&gt;
{{parW|1=&lt;br /&gt;
En utilisant une instance de {{m|CFileFormatInfo}} nous pouvons sauvegarder ou charger tout fichier contenant les données conforme au modèle. &lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
CFileFormatInfo Info ;&lt;br /&gt;
Info.Save2XMLFile( Med , &amp;quot;generated_out/dessin1.xml&amp;quot; ) ;&lt;br /&gt;
&lt;br /&gt;
CDessin * Med2 = Info.LoadFromXMLFile( &amp;quot;generated_out/dessin1.xml&amp;quot; ) ;&lt;br /&gt;
Info.Save2XMLFile( Med2 , &amp;quot;generated_out/dessin2.xml&amp;quot; ) ;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Remarque|texte=La classe {{m|CFileFormatInfo}} cache bon nombre d'initialisations XERCES.}}&lt;br /&gt;
}}&lt;br /&gt;
==== Le programme complet ====&lt;br /&gt;
{{parW|1=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;quot;generated/tuto_002_XMLDriver.h&amp;quot;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;lt;typeinfo&amp;gt;&lt;br /&gt;
using namespace tuto_002_XMLDriver_ns ;&lt;br /&gt;
&lt;br /&gt;
class myCCercle : public CCercle&lt;br /&gt;
{&lt;br /&gt;
public :&lt;br /&gt;
    int my_attr ;&lt;br /&gt;
    myCCercle() : CCercle(), my_attr(0)&lt;br /&gt;
    {&lt;br /&gt;
    } ;&lt;br /&gt;
    void move( double dx, double dy )&lt;br /&gt;
    {&lt;br /&gt;
        C-&amp;gt;x = C-&amp;gt;x+dx ;&lt;br /&gt;
        C-&amp;gt;y = C-&amp;gt;y+dy ;&lt;br /&gt;
    }  &lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
CDessinBase * myCCercle_factory()&lt;br /&gt;
{&lt;br /&gt;
    return  new myCCercle() ;&lt;br /&gt;
};&lt;br /&gt;
 &lt;br /&gt;
int main(int argc, char * argv[ ])&lt;br /&gt;
{&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;start&amp;quot; &amp;lt;&amp;lt; std::endl ;&lt;br /&gt;
    &lt;br /&gt;
    //enregistrement du créateur&lt;br /&gt;
    CDessinBase_factory::instance()-&amp;gt;register_creator( &amp;quot;CCercle&amp;quot;, myCCercle_factory ) ;&lt;br /&gt;
        &lt;br /&gt;
    &lt;br /&gt;
    // Instance sur la fabrique de classe&lt;br /&gt;
    CDessinBase_factory * factory =CDessinBase_factory::instance();&lt;br /&gt;
&lt;br /&gt;
    // Créaton dans la mémoire&lt;br /&gt;
    CDessin * Med = (CDessin *) factory-&amp;gt;create( &amp;quot;CDessin&amp;quot; ) ;&lt;br /&gt;
    CCompound * comp =  (CCompound *) factory-&amp;gt;create( &amp;quot;CCompound&amp;quot; ) ;&lt;br /&gt;
    Med-&amp;gt;compound.push_back( comp ) ;&lt;br /&gt;
&lt;br /&gt;
    CCercle * cercle =  (CCercle *) factory-&amp;gt;create( &amp;quot;CCercle&amp;quot; ) ;&lt;br /&gt;
    cercle-&amp;gt;C-&amp;gt;x = 12.0 ;&lt;br /&gt;
    cercle-&amp;gt;C-&amp;gt;x = 3.0 ;&lt;br /&gt;
    cercle-&amp;gt;R = 40.0 ;&lt;br /&gt;
    comp-&amp;gt;elements.push_back( (CBase *) cercle  ) ;&lt;br /&gt;
&lt;br /&gt;
    CSegment * segment =  (CSegment *) factory-&amp;gt;create( &amp;quot;CSegment&amp;quot; ) ;&lt;br /&gt;
    segment-&amp;gt;A-&amp;gt;x = 5.0 ;&lt;br /&gt;
    segment-&amp;gt;A-&amp;gt;y = 6.0 ;&lt;br /&gt;
    segment-&amp;gt;B-&amp;gt;x = 1.0 ;&lt;br /&gt;
    segment-&amp;gt;B-&amp;gt;y = -2.0 ;&lt;br /&gt;
    comp-&amp;gt;elements.push_back( (CBase *) segment  ) ;&lt;br /&gt;
&lt;br /&gt;
    CCompound * comp2 =  (CCompound *) factory-&amp;gt;create( &amp;quot;CCompound&amp;quot; ) ;&lt;br /&gt;
    comp-&amp;gt;elements.push_back( (CBase *) comp2  ) ;&lt;br /&gt;
    cercle =  (CCercle *) factory-&amp;gt;create( &amp;quot;CCercle&amp;quot; ) ;&lt;br /&gt;
    cercle-&amp;gt;C-&amp;gt;x = 16.0 ;&lt;br /&gt;
    cercle-&amp;gt;C-&amp;gt;x = 7.0 ;&lt;br /&gt;
    cercle-&amp;gt;R = 30.0 ;&lt;br /&gt;
    comp2-&amp;gt;elements.push_back( (CBase *) cercle  ) ;&lt;br /&gt;
&lt;br /&gt;
    comp = comp2 ;&lt;br /&gt;
&lt;br /&gt;
    comp2 =  (CCompound *) factory-&amp;gt;create( &amp;quot;CCompound&amp;quot; ) ;&lt;br /&gt;
    comp-&amp;gt;elements.push_back( (CBase *) comp2  ) ;&lt;br /&gt;
    cercle =  (CCercle *) factory-&amp;gt;create( &amp;quot;CCercle&amp;quot; ) ;&lt;br /&gt;
    cercle-&amp;gt;C-&amp;gt;x = 13.0 ;&lt;br /&gt;
    cercle-&amp;gt;C-&amp;gt;x = 4.0 ;&lt;br /&gt;
    cercle-&amp;gt;R = 20.0 ;&lt;br /&gt;
    comp2-&amp;gt;elements.push_back( (CBase *) cercle  ) ;&lt;br /&gt;
&lt;br /&gt;
    comp =  (CCompound *) factory-&amp;gt;create( &amp;quot;CCompound&amp;quot; ) ;&lt;br /&gt;
    Med-&amp;gt;compound.push_back( comp ) ;&lt;br /&gt;
    comp-&amp;gt;copy( comp2 ) ;&lt;br /&gt;
&lt;br /&gt;
    myCCercle* mycercle = (myCCercle*) cercle ;&lt;br /&gt;
    mycercle-&amp;gt;move( 10.0, 10.0 ) ;&lt;br /&gt;
&lt;br /&gt;
    try&lt;br /&gt;
    {&lt;br /&gt;
        CFileFormatInfo Info ;&lt;br /&gt;
        Info.Save2XMLFile( Med , &amp;quot;generated_out/dessin1.xml&amp;quot; ) ;&lt;br /&gt;
&lt;br /&gt;
        CDessin * Med2 = Info.LoadFromXMLFile( &amp;quot;generated_out/dessin1.xml&amp;quot; ) ;&lt;br /&gt;
        Info.Save2XMLFile( Med2 , &amp;quot;generated_out/dessin2.xml&amp;quot; ) ;&lt;br /&gt;
    }&lt;br /&gt;
    catch (const my_xerces::myXercesError&amp;amp; toCatch)&lt;br /&gt;
    {&lt;br /&gt;
        std::cerr &amp;lt;&amp;lt; toCatch.what() &amp;lt;&amp;lt; std::endl ;&lt;br /&gt;
    }&lt;br /&gt;
    Med-&amp;gt;clear() ;&lt;br /&gt;
    delete Med ;&lt;br /&gt;
&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;end&amp;quot; &amp;lt;&amp;lt; std::endl ;&lt;br /&gt;
    return 0 ;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{:DataFlowGenerator:see_too}}&lt;/div&gt;</summary>
		<author><name>WikiAdmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.bht.fr/index.php?title=Manuel_de_r%C3%A9f%C3%A9rence_de_la_grammaire_de_Data_Flow_Generator_V0&amp;diff=4936&amp;oldid=0</id>
		<title>Manuel de référence de la grammaire de Data Flow Generator V0</title>
		<link rel="alternate" type="text/html" href="https://wiki.bht.fr/index.php?title=Manuel_de_r%C3%A9f%C3%A9rence_de_la_grammaire_de_Data_Flow_Generator_V0&amp;diff=4936&amp;oldid=0"/>
		<updated>2026-07-24T17:07:58Z</updated>

		<summary type="html">&lt;p&gt;&lt;a href=&quot;/index.php?title=Utilisateur:WikiAdmin&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;Utilisateur:WikiAdmin (page inexistante)&quot;&gt;&lt;bdi&gt;WikiAdmin&lt;/bdi&gt;&lt;/a&gt; a importé &lt;a href=&quot;/index.php/Manuel_de_r%C3%A9f%C3%A9rence_de_la_grammaire_de_Data_Flow_Generator_V0&quot; title=&quot;Manuel de référence de la grammaire de Data Flow Generator V0&quot;&gt;Manuel de référence de la grammaire de Data Flow Generator V0&lt;/a&gt; par téléversement de fichier (1 version) dfg&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{IntroductionDFG}}&lt;br /&gt;
== Notation : {{m|cardinalité}} ou {{m|multiplicité}} ==&lt;br /&gt;
{{par|&lt;br /&gt;
La {{m|cardinalité}} ou {{m|multiplicité}} sert à déterminer le nombre minimum et maximum de possibilités que chaque entité peut avoir au sein d'une autre entité.&lt;br /&gt;
&lt;br /&gt;
Pour décrire les cardinalités nous utiliserons la notation suivante :&lt;br /&gt;
&lt;br /&gt;
Soient n, n1, n2 des entiers&lt;br /&gt;
{{tab|Cardinalités|cardinaltyRef1| &lt;br /&gt;
{{line| {{col_t|notation dans les doubles quottes}} {{col_t|description}} }} &lt;br /&gt;
{{line| {{col|&amp;quot;n1:n2&amp;quot;}} {{col|de n1 à n2}} }} &lt;br /&gt;
{{line| {{col|&amp;quot;?&amp;quot; or &amp;quot;0:1&amp;quot;}} {{col|de 0 à 1, optionnel}} }} &lt;br /&gt;
{{line| {{col|&amp;quot;*&amp;quot; or &amp;quot;0:*&amp;quot;}} {{col|de 0 à l'infini}} }} &lt;br /&gt;
{{line| {{col|&amp;quot;+&amp;quot; or &amp;quot;1:*&amp;quot;}} {{col|de 1 à l'infini }} }} &lt;br /&gt;
{{line| {{col|&amp;quot;n:&amp;quot; or &amp;quot;n:*&amp;quot;}} {{col|de n à l'infini}} }} &lt;br /&gt;
{{line| {{col|&amp;quot;n&amp;quot; or &amp;quot;n:n&amp;quot;}} {{col|de n à n, exactement n}} }} &lt;br /&gt;
{{line| {{col|si non présent}} {{col|valeur de défaut : exactement 1}} }} &lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Format du fichier de description grammaticale ==&lt;br /&gt;
&lt;br /&gt;
=== Le fichier XML ===&lt;br /&gt;
{{par|&lt;br /&gt;
Le fichier XML doit commencer par :&lt;br /&gt;
{{codeTr|lang=xml|code=&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Ce informations sont destinées au pilote XML qui notamment s'en sert pour connaitre le codage ({{m|encoding}}) des caractères utilisé dans le fichier. Nous utiliserons en général l'encodage {{m|UTF-8}}, il faut donc vérifier que votre éditeur est configuré pour éditer avec cet encodage ou l'encodage que vous avez choisi d'utiliser.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== La racine - le tag {{m|grammar}} ===&lt;br /&gt;
{{par|&lt;br /&gt;
Un document XML doit comporter une nœud racine unique, ce nœud sera nommé {{m|grammar}}.&lt;br /&gt;
&lt;br /&gt;
Le tag de grammar comporte les attributs suivants :&lt;br /&gt;
{{:DataFlowGenerator:type}}&lt;br /&gt;
: Ici il aura toujours la valeur &amp;quot;XML&amp;quot; qui est le type du document entier.&lt;br /&gt;
*{{m|version}}&lt;br /&gt;
: cardinalité : 1&lt;br /&gt;
: est la version du format ou méta-grammaire du fichier, elle concerne la syntaxe et la sémantique de ce fichier XML où interviennent les tags tels que grammar, el, attr. La version actuelle est &amp;quot;1.0.0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
*{{m|fileformatversion}}&lt;br /&gt;
: cardinalité : 1&lt;br /&gt;
: contient la version de la grammaire décrite par le contenu décrit dans le fichier XML. Sa valeur dépend du contenu.&lt;br /&gt;
}}&lt;br /&gt;
{{par|&lt;br /&gt;
Voici un exemple qui décrit une grammaire minimale mais qui est incorrecte sur le plan syntaxique, car la structure décrite par la grammaire doit aussi contenir un nœud unique comme racine ; voir [[#Le_tag_el|le tag el]].&lt;br /&gt;
{{codeTr|lang=xml|code=&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;ISO-8859-1&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;grammar type=&amp;quot;xml&amp;quot; version=&amp;quot;1.0.0&amp;quot; fileformatversion=&amp;quot;2.3.1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/grammar&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
{{par|&lt;br /&gt;
Pour avoir un syntaxe correcte il faut ajouter au moins un nœud comme ci-dessous :&lt;br /&gt;
{{codeTr|lang=xml|code=&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;ISO-8859-1&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;grammar type=&amp;quot;xml&amp;quot; version=&amp;quot;1.0.0&amp;quot; fileformatversion=&amp;quot;1.0.0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;el type='CTest' name=&amp;quot;test&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/grammar&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Les tags simples ===&lt;br /&gt;
{{par|&lt;br /&gt;
Les tags simples n'ont aucun attribut mais seulement un contenu délimité par le tag ouvrant et fermant, il sont au nombre de trois :&lt;br /&gt;
&lt;br /&gt;
{{:DataFlowGenerator:unit}}&lt;br /&gt;
{{:DataFlowGenerator:shelp}}&lt;br /&gt;
{{:DataFlowGenerator:lhelp}}&lt;br /&gt;
}}&lt;br /&gt;
{{par|&lt;br /&gt;
Exemple d'un tag el contenant unit, shelp, lhelp :&lt;br /&gt;
{{codeTr|lang=xml|code=&lt;br /&gt;
&amp;lt;el type=&amp;quot;int&amp;quot; name=&amp;quot;nb&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;unit&amp;gt;poire&amp;lt;/unit&amp;gt;&lt;br /&gt;
  &amp;lt;shelp&amp;gt;Nombre de poires&amp;lt;/shelp&amp;gt;&lt;br /&gt;
  &amp;lt;lhelp&amp;gt;Ce combre comptabilise le nombre de poires vendues&amp;lt;/lhelp&amp;gt;&lt;br /&gt;
&amp;lt;/el&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Les tags typés avec nom ===&lt;br /&gt;
&lt;br /&gt;
==== Les attributs communs ====&lt;br /&gt;
{{par|&lt;br /&gt;
Ces tags, qui sont {{m|attr}} et {{m|el}} possèdent les attributs suivants :&lt;br /&gt;
{{:DataFlowGenerator:type}}&lt;br /&gt;
{{:DataFlowGenerator:name}}&lt;br /&gt;
{{:DataFlowGenerator:help}}&lt;br /&gt;
}}&lt;br /&gt;
{{par|&lt;br /&gt;
Exemple :&lt;br /&gt;
{{codeTr|lang=xml|code=&lt;br /&gt;
&amp;lt;el type='CTest' name=&amp;quot;test&amp;quot; help=&amp;quot;Noeud racine&amp;quot;&amp;gt;&lt;br /&gt;
    ...&lt;br /&gt;
&amp;lt;/el&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
===== Les attributs communs aux type int / attr_int, float / attr_float, string / attr_string =====&lt;br /&gt;
{{par|&lt;br /&gt;
{{:DataFlowGenerator:default_value}}&lt;br /&gt;
{{:DataFlowGenerator:admissible_values}}&lt;br /&gt;
}}&lt;br /&gt;
{{par|&lt;br /&gt;
Exemple :&lt;br /&gt;
{{codeTr|lang=xml|code=&lt;br /&gt;
&amp;lt;el type=&amp;quot;int&amp;quot; name=&amp;quot;montant&amp;quot; default_value=&amp;quot;100&amp;quot; admissible_values=&amp;quot;100:200:300:400&amp;quot; /&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== Les branches et les feuilles de la grammaire ====&lt;br /&gt;
{{par|&lt;br /&gt;
Tous les types de ces deux tags se classes en deux catégories :&lt;br /&gt;
* les tags de type &amp;quot;feuille&amp;quot; par analogie avec un arbre.&lt;br /&gt;
: Ce sont les types dits aussi terminaux qui sont les {{m|int/attr_int}}, {{m|float/attr_float}} et {{m|string/attr_string}} (resp. les entiers, les rééls et les chaines de caractères). En effet on ne peut définir des sous structures pour ces entités. Par contre ces tags peuvent posséder les tags {{m|unit}}, {{m|shelp}}, et {{m|lhelp}} et seulement ceux-ci.&lt;br /&gt;
* les tags de type &amp;quot;branche&amp;quot; par analogie avec un arbre.&lt;br /&gt;
: Seulement le tag {{m|el}} de type &amp;quot;classe&amp;quot; peut contenir des sous structures.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== Le tag {{m|attr}} ====&lt;br /&gt;
{{par|&lt;br /&gt;
Le tag {{m|attr}} représente des feuilles de l'arbre grammatical. Son attribut {{m|type}} prend les trois valeurs &amp;quot;{{m|attr_int}}&amp;quot;, &amp;quot;{{m|attr_float}}&amp;quot; et &amp;quot;{{m|attr_string}}&amp;quot; (resp. les entiers, et réels et les chaines de caractères).&lt;br /&gt;
&lt;br /&gt;
La tag possède également le'attribut suivant, qui est optionnel :&lt;br /&gt;
{{:DataFlowGenerator:opt}}&lt;br /&gt;
}}&lt;br /&gt;
{{par|&lt;br /&gt;
Exemple :&lt;br /&gt;
{{codeTr|lang=xml|code=&lt;br /&gt;
&amp;lt;attr type=&amp;quot;attr_string&amp;quot; name=&amp;quot;prenom&amp;quot; admissible_values=&amp;quot;Paul:Jacques&amp;quot; opt=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
===== Le tag {{m|attr}} de type {{m|attr_int}} =====&lt;br /&gt;
{{par|1=&lt;br /&gt;
Ses attributs sont :&lt;br /&gt;
{{:DataFlowGenerator:type}}&lt;br /&gt;
: Dans ce cas type = &amp;quot;attr_int&amp;quot;&lt;br /&gt;
{{:DataFlowGenerator:name}}&lt;br /&gt;
{{:DataFlowGenerator:help}}&lt;br /&gt;
{{:DataFlowGenerator:default_value}}&lt;br /&gt;
{{:DataFlowGenerator:admissible values}}&lt;br /&gt;
{{:DataFlowGenerator:opt}}&lt;br /&gt;
Peut contenir les tags suivants :&lt;br /&gt;
{{:DataFlowGenerator:unit}}&lt;br /&gt;
{{:DataFlowGenerator:shelp}}&lt;br /&gt;
{{:DataFlowGenerator:lhelp}}&lt;br /&gt;
}}&lt;br /&gt;
{{par|&lt;br /&gt;
Exemple :&lt;br /&gt;
{{codeTr|lang=xml|code=&lt;br /&gt;
&amp;lt;attr type=&amp;quot;attr_int&amp;quot; name=&amp;quot;nombre&amp;quot; default_value=&amp;quot;0&amp;quot; admissible_values=&amp;quot;0:1:2:3:4&amp;quot; opt=&amp;quot;oui&amp;quot; help=&amp;quot;TODO changer le nom en 'Nb'&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;unit&amp;gt; chocs &amp;lt;/unit&amp;gt; &lt;br /&gt;
  &amp;lt;shelp&amp;gt; Nombre de chocs entre les atomes &amp;lt;/shelp&amp;gt;&lt;br /&gt;
  &amp;lt;lhelp&amp;gt; Nombre de chocs entre les atomes qui a un rapport direct avec ... &amp;lt;/lhelp&amp;gt;&lt;br /&gt;
&amp;lt;/attr&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===== Le tag {{m|attr}} de type {{m|attr_float}} =====&lt;br /&gt;
{{par|1=&lt;br /&gt;
Ses attributs sont :&lt;br /&gt;
{{:DataFlowGenerator:type}}&lt;br /&gt;
: Dans ce cas type = &amp;quot;attr_float&amp;quot;&lt;br /&gt;
{{:DataFlowGenerator:name}}&lt;br /&gt;
{{:DataFlowGenerator:help}}&lt;br /&gt;
{{:DataFlowGenerator:default_value}}&lt;br /&gt;
{{:DataFlowGenerator:admissible values}}&lt;br /&gt;
{{:DataFlowGenerator:opt}}&lt;br /&gt;
Peut contenir les tags suivants :&lt;br /&gt;
{{:DataFlowGenerator:unit}}&lt;br /&gt;
{{:DataFlowGenerator:shelp}}&lt;br /&gt;
{{:DataFlowGenerator:lhelp}}&lt;br /&gt;
}}&lt;br /&gt;
{{par|&lt;br /&gt;
Exemple :&lt;br /&gt;
{{codeTr|lang=xml|code=&lt;br /&gt;
&amp;lt;attr type=&amp;quot;attr_float&amp;quot; name=&amp;quot;energie&amp;quot; default_value=&amp;quot;0.0&amp;quot; admissible_values=&amp;quot;0.0:1.4:2.3&amp;quot; opt=&amp;quot;oui&amp;quot; help=&amp;quot;Obsolète&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;unit&amp;gt; Joules &amp;lt;/unit&amp;gt; &lt;br /&gt;
  &amp;lt;shelp&amp;gt; Energie fournie &amp;lt;/shelp&amp;gt;&lt;br /&gt;
  &amp;lt;lhelp&amp;gt; Energie fournie pour provoquer la réaction ... &amp;lt;/lhelp&amp;gt;&lt;br /&gt;
&amp;lt;/attr&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===== Le tag {{m|attr}} de type {{m|attr_string}} =====&lt;br /&gt;
{{par|1=&lt;br /&gt;
Ses attributs sont :&lt;br /&gt;
{{:DataFlowGenerator:type}}&lt;br /&gt;
: Dans ce cas type = &amp;quot;attr_string&amp;quot;&lt;br /&gt;
{{:DataFlowGenerator:name}}&lt;br /&gt;
{{:DataFlowGenerator:help}}&lt;br /&gt;
{{:DataFlowGenerator:default_value}}&lt;br /&gt;
{{:DataFlowGenerator:admissible values}}&lt;br /&gt;
{{:DataFlowGenerator:opt}}&lt;br /&gt;
Peut contenir les tags suivants :&lt;br /&gt;
{{:DataFlowGenerator:shelp}}&lt;br /&gt;
{{:DataFlowGenerator:lhelp}}&lt;br /&gt;
}}&lt;br /&gt;
{{par|&lt;br /&gt;
Exemple :&lt;br /&gt;
{{codeTr|lang=xml|code=&lt;br /&gt;
&amp;lt;attr type=&amp;quot;attr_string&amp;quot; name=&amp;quot;prenom&amp;quot; default_value=&amp;quot;Paul&amp;quot; admissible_values=&amp;quot;Paul:Jacques:Marie&amp;quot; opt=&amp;quot;oui&amp;quot; help=&amp;quot;TODO Compléter les valeurs admissibles&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;shelp&amp;gt; Prénom par défaut &amp;lt;/shelp&amp;gt;&lt;br /&gt;
  &amp;lt;lhelp&amp;gt; Prénom par défaut proposé dans la liste déroulante ... &amp;lt;/lhelp&amp;gt;&lt;br /&gt;
&amp;lt;/attr&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== Le tag {{m|el}} ====&lt;br /&gt;
{{par|&lt;br /&gt;
Le tag {{m|el}} permet de donner une structure arborescente à la grammaire. Ainsi en plus des tags tels que {{m|attr}}, il peut contenir de façon récurrente d'autres tags {{m|el}}. &lt;br /&gt;
{{:DataFlowGenerator:cardinality}}&lt;br /&gt;
La particularité du tag {{m|el}} est qu'il peut avoir une cardinalité supérieur à 1. Cela n'empêche pas que les types {{m|int}}, {{m|float}} et {{m|string}} soient des feuilles de l'arbre grammatical. &lt;br /&gt;
}}&lt;br /&gt;
===== Les feuilles de l'arbre grammatical du tag {{m|el}} =====&lt;br /&gt;
====== Le tag {{m|el}} de type {{m|int}} ======&lt;br /&gt;
{{par|1=&lt;br /&gt;
Ses attributs sont :&lt;br /&gt;
{{:DataFlowGenerator:type}}&lt;br /&gt;
: Dans ce cas type = &amp;quot;int&amp;quot;&lt;br /&gt;
{{:DataFlowGenerator:name}}&lt;br /&gt;
{{:DataFlowGenerator:help}}&lt;br /&gt;
{{:DataFlowGenerator:default_value}}&lt;br /&gt;
{{:DataFlowGenerator:admissible values}}&lt;br /&gt;
{{:DataFlowGenerator:cardinality}}&lt;br /&gt;
Peut contenir les tags suivants :&lt;br /&gt;
{{:DataFlowGenerator:unit}}&lt;br /&gt;
{{:DataFlowGenerator:shelp}}&lt;br /&gt;
{{:DataFlowGenerator:lhelp}}&lt;br /&gt;
}}&lt;br /&gt;
{{par|&lt;br /&gt;
Exemple :&lt;br /&gt;
{{codeTr|lang=xml|code=&lt;br /&gt;
&amp;lt;el type=&amp;quot;int&amp;quot; name=&amp;quot;nombre&amp;quot; cardinality=&amp;quot;+&amp;quot; default_value=&amp;quot;0&amp;quot; admissible_values=&amp;quot;0:1:2:3:4&amp;quot; opt=&amp;quot;oui&amp;quot; help=&amp;quot;TODO changer le nom en 'Nb'&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;unit&amp;gt; chocs &amp;lt;/unit&amp;gt; &lt;br /&gt;
  &amp;lt;shelp&amp;gt; Nombre de chocs entre les atomes &amp;lt;/shelp&amp;gt;&lt;br /&gt;
  &amp;lt;lhelp&amp;gt; Nombre de chocs entre les atomes qui a un rapport direct avec ... &amp;lt;/lhelp&amp;gt;&lt;br /&gt;
&amp;lt;/el&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
====== Le tag {{m|el}} de type {{m|float}} ======&lt;br /&gt;
{{par|1=&lt;br /&gt;
{{:DataFlowGenerator:type}}&lt;br /&gt;
: Dans ce cas type = &amp;quot;float&amp;quot;&lt;br /&gt;
{{:DataFlowGenerator:name}}&lt;br /&gt;
{{:DataFlowGenerator:help}}&lt;br /&gt;
{{:DataFlowGenerator:default_value}}&lt;br /&gt;
{{:DataFlowGenerator:admissible values}}&lt;br /&gt;
{{:DataFlowGenerator:cardinality}}&lt;br /&gt;
}}&lt;br /&gt;
{{par|&lt;br /&gt;
Exemple :&lt;br /&gt;
{{codeTr|lang=xml|code=&lt;br /&gt;
&amp;lt;el type=&amp;quot;float&amp;quot; name=&amp;quot;energie&amp;quot; cardinality=&amp;quot;*&amp;quot; default_value=&amp;quot;0.0&amp;quot; admissible_values=&amp;quot;0.0:1.4:2.3&amp;quot; opt=&amp;quot;oui&amp;quot; help=&amp;quot;Obsolète&amp;quot;/&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
====== Le tag {{m|el}} de type {{m|string}} ======&lt;br /&gt;
{{par|1=&lt;br /&gt;
{{:DataFlowGenerator:type}}&lt;br /&gt;
: Dans ce cas type = &amp;quot;string&amp;quot;&lt;br /&gt;
{{:DataFlowGenerator:name}}&lt;br /&gt;
{{:DataFlowGenerator:help}}&lt;br /&gt;
{{:DataFlowGenerator:default_value}}&lt;br /&gt;
{{:DataFlowGenerator:admissible values}}&lt;br /&gt;
{{:DataFlowGenerator:cardinality}}&lt;br /&gt;
}}&lt;br /&gt;
{{par|&lt;br /&gt;
Exemple :&lt;br /&gt;
{{codeTr|lang=xml|code=&lt;br /&gt;
&amp;lt;el type=&amp;quot;string&amp;quot; name=&amp;quot;prenom&amp;quot; cardinality=&amp;quot;?&amp;quot; default_value=&amp;quot;Paul&amp;quot; admissible_values=&amp;quot;Paul:Jacques:Marie&amp;quot; opt=&amp;quot;oui&amp;quot; help=&amp;quot;TODO Compléter les valeurs admissibles&amp;quot;/&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===== Les branches de l'arbre grammatical du tag {{m|el}} : les classes =====&lt;br /&gt;
====== Introduction ======&lt;br /&gt;
{{par|&lt;br /&gt;
Les branches de l'arbre grammatical ne sont rien d'autre que des tags {{m|el}} dans d'autres tags {{m|el}}.&lt;br /&gt;
&lt;br /&gt;
Bien sûr les tags el de type {{m|int}}, {{m|float}} et {{m|string}} ne peuvent contenir d'autres tags el, car ce sont des feuilles de l'arbre.&lt;br /&gt;
&lt;br /&gt;
En fait les autres types sont définis par la grammaire même. En effet les types {{m|int}}, {{m|float}} et {{m|string}} sont des types dits &amp;amp;laquo;primitif&amp;amp;raquo;; leur sémantique est à priori connu. Le nom des autres types doit être défini par la grammaire, c.a.d. par celui qui rédige la grammaire.&lt;br /&gt;
}}&lt;br /&gt;
{{par|&lt;br /&gt;
Voici un exemple où le nouveau type {{m|TypePoint}} a été défini à partir du type primitif {{m|float}} :&lt;br /&gt;
{{codeTr|lang=xml|code=&lt;br /&gt;
&amp;lt;el name=&amp;quot;Point&amp;quot; type=&amp;quot;TypePoint&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;el name=&amp;quot;x&amp;quot; type=&amp;quot;float&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;el name=&amp;quot;y&amp;quot; type=&amp;quot;float&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/el&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
{{par|&lt;br /&gt;
Voici un autre exemple où le nouveau type {{m|TypeCercle}} a été défini à partir du type primitif {{m|float}} et un type définit par la grammaire, nommé {{m|TypePoint}}:&lt;br /&gt;
&lt;br /&gt;
{{codeTr|lang=xml|code=&lt;br /&gt;
&amp;lt;el name=&amp;quot;Point&amp;quot; type=&amp;quot;TypeCercle&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;el name=&amp;quot;Rayon&amp;quot; type=&amp;quot;float&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;el name=&amp;quot;Point&amp;quot; type=&amp;quot;TypePoint&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;el name=&amp;quot;x&amp;quot; type=&amp;quot;float&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;el name=&amp;quot;y&amp;quot; type=&amp;quot;float&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/el&amp;gt;&lt;br /&gt;
&amp;lt;/el&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
{{par|&lt;br /&gt;
Les tags {{m|el}} de type défini par la grammaire seront appelé des {{m|classes}}. Mais la notion de classe enferme d'autres caractéristiques que nous allons développer dans la suite.&lt;br /&gt;
}}&lt;br /&gt;
====== Les attributs classiques ======&lt;br /&gt;
{{par|&lt;br /&gt;
{{:DataFlowGenerator:name}}&lt;br /&gt;
{{:DataFlowGenerator:help}}&lt;br /&gt;
{{:DataFlowGenerator:cardinality}}&lt;br /&gt;
}}&lt;br /&gt;
====== Les types classe et les références des classe ======&lt;br /&gt;
{{par|&lt;br /&gt;
Les noms des classes sont définit par l'attribut type:&lt;br /&gt;
{{:DataFlowGenerator:type}}&lt;br /&gt;
: Le nom des autres types doit être défini par la grammaire, c.a.d. par celui qui rédige la grammaire. Voici quelques exemples de noms de type de classe : CHead, CHist, CBody&lt;br /&gt;
{{:DataFlowGenerator:reference}}&lt;br /&gt;
}}&lt;br /&gt;
====== Les classes OnlyDefinition ======&lt;br /&gt;
{{par|&lt;br /&gt;
{{:DataFlowGenerator:OnlyDefinition}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
====== L'héritage de classes : heritances ======&lt;br /&gt;
{{par|&lt;br /&gt;
{{:DataFlowGenerator:heritances}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
====== Le polymorphisme des classes : accept ======&lt;br /&gt;
{{par|&lt;br /&gt;
{{:DataFlowGenerator:accept}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
====== Exemples de classes ======&lt;br /&gt;
{{par|&lt;br /&gt;
Voici un exemple qui fait appel à une définition récurrente utilisation les attributs {{m|OnlyDefinition}}, {{m|heritances}}, {{m|accept}}.&lt;br /&gt;
{{codeTr|lang=xml|code=&lt;br /&gt;
&amp;lt;el OnlyDefinition=&amp;quot;1&amp;quot;  name=&amp;quot;OnlyDefinition_geometry&amp;quot; type=&amp;quot;CBasegeometry&amp;quot;  &amp;gt;&lt;br /&gt;
    &amp;lt;el name=&amp;quot;shape&amp;quot; type=&amp;quot;int&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;el name=&amp;quot;data&amp;quot; type=&amp;quot;float&amp;quot;  cardinality=&amp;quot;*&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/el&amp;gt;&lt;br /&gt;
&amp;lt;el  name=&amp;quot;geometry&amp;quot; type=&amp;quot;Cgeometry&amp;quot;  heritances=&amp;quot;CBasegeometry&amp;quot; &amp;gt;&lt;br /&gt;
    &amp;lt;el  name=&amp;quot;geometry&amp;quot; type=&amp;quot;@CBasegeometry&amp;quot; cardinality=&amp;quot;*&amp;quot;  accept=&amp;quot;CBasegeometry:Cgeometry&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/el&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
{{par|&lt;br /&gt;
Avec cette grammaire on peut construire des données ayant l'allure suivante :&lt;br /&gt;
{{codeTr|lang=xml|code=&lt;br /&gt;
geometry&lt;br /&gt;
  geometry&lt;br /&gt;
     geometry&lt;br /&gt;
        shape&lt;br /&gt;
        data&lt;br /&gt;
        ...&lt;br /&gt;
        data&lt;br /&gt;
        geometry  &lt;br /&gt;
           shape&lt;br /&gt;
           data&lt;br /&gt;
           ...&lt;br /&gt;
           data&lt;br /&gt;
  geometry&lt;br /&gt;
     shape&lt;br /&gt;
     data&lt;br /&gt;
     ...&lt;br /&gt;
     data&lt;br /&gt;
  ...&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Liste des tags ===&lt;br /&gt;
{{par|&lt;br /&gt;
*unit&lt;br /&gt;
*shelp&lt;br /&gt;
*lhelp&lt;br /&gt;
* les tags types avec nom et cardinalité&lt;br /&gt;
:*attr&lt;br /&gt;
::les types du tag attr&lt;br /&gt;
::*attr_int&lt;br /&gt;
::*attr_float&lt;br /&gt;
::*attr_string&lt;br /&gt;
:*el&lt;br /&gt;
::les types du tag el&lt;br /&gt;
::*int&lt;br /&gt;
::*float&lt;br /&gt;
::*string&lt;br /&gt;
::*classe quelconque&lt;br /&gt;
::*référence de classe quelconque&lt;br /&gt;
}}&lt;br /&gt;
{{:DataFlowGenerator:see_too}}&lt;br /&gt;
&lt;br /&gt;
== Liens ==&lt;br /&gt;
* [[XERCES:Index|XERCES parser]]&lt;/div&gt;</summary>
		<author><name>WikiAdmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.bht.fr/index.php?title=DataFlowGenerator:summary&amp;diff=4934&amp;oldid=0</id>
		<title>DataFlowGenerator:summary</title>
		<link rel="alternate" type="text/html" href="https://wiki.bht.fr/index.php?title=DataFlowGenerator:summary&amp;diff=4934&amp;oldid=0"/>
		<updated>2026-07-24T17:07:54Z</updated>

		<summary type="html">&lt;p&gt;&lt;a href=&quot;/index.php?title=Utilisateur:WikiAdmin&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;Utilisateur:WikiAdmin (page inexistante)&quot;&gt;&lt;bdi&gt;WikiAdmin&lt;/bdi&gt;&lt;/a&gt; a importé &lt;a href=&quot;/index.php/DataFlowGenerator:summary&quot; title=&quot;DataFlowGenerator:summary&quot;&gt;DataFlowGenerator:summary&lt;/a&gt; par téléversement de fichier (1 version) dfg&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{fr§en|1=Data Flow Generator (Dfg) est un outil qui a pour but le développement de logiciels en gardant la {{m|synchronisation}} entre les sources ({{m|Python}} et {{m|C++}}) et les modèles utilisant {{m|DfgUml}}({{m|UML}}) et {{m|DfgBehaviour}}(code Python des méthodes).&lt;br /&gt;
&lt;br /&gt;
Il fait appel aux paradigmes de développement suivants : {{m|Round-trip engineering}}, {{m|Object-oriented programming}} et {{m|Model-driven software development}}. &lt;br /&gt;
&lt;br /&gt;
Dfg offre aussi la possibilité d'écrire ou lire automatiquement la forme persistante des données décrites dans {{m|DfgUml}}. &lt;br /&gt;
&lt;br /&gt;
Il existe deux versions de Dfg : V0 et V1.&lt;br /&gt;
&lt;br /&gt;
Dfg V1 utilise DfgUml et DfgBehaviour et ne génère pour l'instant que du code Python tandis que Dfg V0 n'utilise que DfgUml et génère du code Python et C++.&lt;br /&gt;
&lt;br /&gt;
Dfg V1 peut aussi importer DfgUml depuis les diagrammes de classes contenus dans le fichiers édités par le logiciel {{m|[https://live.gnome.org/Dia Dia]}}.&lt;br /&gt;
 &lt;br /&gt;
L'outil est gratuitement utilisable en ligne sur Internet à l'adresse [http://dfg.bht.fr http://dfg.bht.fr] pour la version 0 et sur  [http://dfg1.bht.fr http://dfg1.bht.fr] pour la version 1.&lt;br /&gt;
&lt;br /&gt;
Les sources générés par Dfg suivent sous la licence [http://www.mozilla.org/MPL/1.1/ MPL 1.1] et/ou [http://www.gnu.org/licenses/lgpl.html LPGL]&lt;br /&gt;
&lt;br /&gt;
|2=Data Flow Generator (Dfg) is a tool that is intended for software development by keeping the {{m|synchronization}} between the sources ({{m|PYTHON}} and {{m|C++}}) and models using {{m|DfgUml}} ({{m|UML}}) and {{m|DfgBehaviour}} (Python codes of methods).&lt;br /&gt;
&lt;br /&gt;
It uses the following paradigms of development: {{m|Round-trip engineering}}, {{m|Object-oriented programming}} and {{m|Model-driven software development}}.&lt;br /&gt;
&lt;br /&gt;
Dfg also offers the ability to automatically read and write the persistent form of data described by {{m|DfgUml}}.&lt;br /&gt;
&lt;br /&gt;
There are two versions of Dfg: V0 and V1.&lt;br /&gt;
&lt;br /&gt;
Dfg V1 uses DfgUml and DfgBehaviour and generates, currently, only Python code while Dfg V0 uses only DfgUml and generates Python and C++ code.&lt;br /&gt;
&lt;br /&gt;
Dfg V1 can also import DfgUml from class diagrams contained in the files edited by the software {{m|[https://live.gnome.org/Dia Dia]}}.&lt;br /&gt;
&lt;br /&gt;
The tool can be used online for free at [http://dfg.bht.fr http://dfg.bht.fr] for version 0 and [http://dfg1.bht.fr http://dfg1.bht.fr] for version 1.&lt;br /&gt;
&lt;br /&gt;
Sources generated by Dfg ar under the license [http://www.mozilla.org/MPL/1.1/ MPL 1.1] and/or [http://www.gnu.org/licenses/lgpl.html LPGL]&lt;br /&gt;
}} &lt;br /&gt;
{{c|&lt;br /&gt;
{{figc|Data Flow Generator V1|dfg1.png|dfg1|512px}}&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;noinclude&amp;gt;[[Category:All]][[Category:DataFlowGenerator|{{PAGENAME}}]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>WikiAdmin</name></author>
	</entry>
</feed>