<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
	<id>https://wiki.bht.fr/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=WikiAdmin</id>
	<title>Wikip - Contributions de l’utilisateur [fr]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.bht.fr/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=WikiAdmin"/>
	<link rel="alternate" type="text/html" href="https://wiki.bht.fr/index.php/Sp%C3%A9cial:Contributions/WikiAdmin"/>
	<updated>2026-08-30T05:33:05Z</updated>
	<subtitle>Contributions de l’utilisateur</subtitle>
	<generator>MediaWiki 1.36.1</generator>
	<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</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"/>
		<updated>2026-07-24T17:08:53Z</updated>

		<summary type="html">&lt;p&gt;WikiAdmin : 1 version importée : dfg&lt;/p&gt;
&lt;hr /&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:Minitodo&amp;diff=5006</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"/>
		<updated>2026-07-24T17:08:53Z</updated>

		<summary type="html">&lt;p&gt;WikiAdmin : 1 version importée : dfg&lt;/p&gt;
&lt;hr /&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=Mod%C3%A8le:EnConstruction&amp;diff=5004</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"/>
		<updated>2026-07-24T17:08:53Z</updated>

		<summary type="html">&lt;p&gt;WikiAdmin : 1 version importée : dfg&lt;/p&gt;
&lt;hr /&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:Code&amp;diff=5002</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"/>
		<updated>2026-07-24T17:08:52Z</updated>

		<summary type="html">&lt;p&gt;WikiAdmin : 1 version importée : dfg&lt;/p&gt;
&lt;hr /&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</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"/>
		<updated>2026-07-24T17:08:50Z</updated>

		<summary type="html">&lt;p&gt;WikiAdmin : 1 version importée : dfg&lt;/p&gt;
&lt;hr /&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_-_plantuml&amp;diff=4998</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"/>
		<updated>2026-07-24T17:08:49Z</updated>

		<summary type="html">&lt;p&gt;WikiAdmin : 1 version importée : dfg&lt;/p&gt;
&lt;hr /&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_-_xml_-_dfguml&amp;diff=4996</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"/>
		<updated>2026-07-24T17:08:49Z</updated>

		<summary type="html">&lt;p&gt;WikiAdmin : 1 version importée : dfg&lt;/p&gt;
&lt;hr /&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_-_xmlVersion_-_dfguml&amp;diff=4994</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"/>
		<updated>2026-07-24T17:08:48Z</updated>

		<summary type="html">&lt;p&gt;WikiAdmin : 1 version importée : dfg&lt;/p&gt;
&lt;hr /&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=Dfg1_reference_manual_-_xmlEncoding_-_dfguml&amp;diff=4992</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"/>
		<updated>2026-07-24T17:08:48Z</updated>

		<summary type="html">&lt;p&gt;WikiAdmin : 1 version importée : dfg&lt;/p&gt;
&lt;hr /&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_-_grammar_-_dfguml&amp;diff=4990</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"/>
		<updated>2026-07-24T17:08:47Z</updated>

		<summary type="html">&lt;p&gt;WikiAdmin : 1 version importée : dfg&lt;/p&gt;
&lt;hr /&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=Data_Flow_Generator_-_Historique&amp;diff=4988</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"/>
		<updated>2026-07-24T17:08:47Z</updated>

		<summary type="html">&lt;p&gt;WikiAdmin : 1 version importée : dfg&lt;/p&gt;
&lt;hr /&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=Manuel_utilisateur_de_Data_Flow_Generator_V1&amp;diff=4986</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"/>
		<updated>2026-07-24T17:08:47Z</updated>

		<summary type="html">&lt;p&gt;WikiAdmin : 1 version importée : dfg&lt;/p&gt;
&lt;hr /&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=Guide_de_R%C3%A9f%C3%A9rence_de_DfgBehaviour&amp;diff=4984</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"/>
		<updated>2026-07-24T17:08:46Z</updated>

		<summary type="html">&lt;p&gt;WikiAdmin : 1 version importée : dfg&lt;/p&gt;
&lt;hr /&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=Comment_utiliser_les_fichiers_de_Dia_comme_fichier_d%27entr%C3%A9e_de_Data_Flow_Generator_V1&amp;diff=4982</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"/>
		<updated>2026-07-24T17:08:46Z</updated>

		<summary type="html">&lt;p&gt;WikiAdmin : 1 version importée : dfg&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{IntroductionDFG}}&lt;br /&gt;
{{EnConstruction}}&lt;br /&gt;
== {{fr§en_title|Avertissement|Warning|{{sepLos}}}} == &lt;br /&gt;
{{par2|{{fr§en|Ce document est écrit en français et en anglais, le français étant la référence. &lt;br /&gt;
La traduction en anglais est donnée à titre indicatif sans garantir sa bonne traduction.&lt;br /&gt;
|This document is written in French and English, the French being the reference. &lt;br /&gt;
The English translation is provided for information without guarantee of its correct translation.&lt;br /&gt;
}}}} &lt;br /&gt;
{{par|{{fr§en|Pour écrire ce document la version de Dia utilisée est {{mm|0.97.1}} et la version de dfgWebClient est {{mm|0.3x.0.0}}.&lt;br /&gt;
|For writing this document the Dia version used is {{mm|0.97.1}} and the dfgWebClient.py version is {{mm|0.3x.0.0}}.&lt;br /&gt;
}}}}&lt;br /&gt;
&lt;br /&gt;
== {{fr§en_title|Objectif du document|Purpose of this document|{{sepLos}}}} ==&lt;br /&gt;
{{par2|&lt;br /&gt;
{{fr§en|Le but de ce document est d'expliquer comment utiliser l’éditeur de schéma technique qu'est {{m|Dia}} ([https://live.gnome.org/Dia]) afin de s'en servir comme outils de modélisation pour {{m|Dfg}} (Data Flow Generator V1 [http://dfg1.bht.fr]). &lt;br /&gt;
&lt;br /&gt;
En effet Dia permet d'éditer des diagrammes de classes de type {{m|Uml}} et Dfg peut les importer en les traduisant dans son propre modèle qui est décrit dans le langage {{m|DfgUml}}. &lt;br /&gt;
&lt;br /&gt;
C'est une solution alternative à une écriture directe dans le langage DfgUml utilisant le langage {{m|Xml}} comme support.&lt;br /&gt;
|The purpose of this document is to explain how to use the technical diagram modeler which is {{m|Dia}} ([https://live.gnome.org/Dia]) to be used as modeling tools for {{m|Dfg}} (Data Flow Generator V1 [http://dfg1.bht.fr]). &lt;br /&gt;
&lt;br /&gt;
Indeed Dia help us to edit {{m|Uml}}  Class Diagrams and Dfg can import and translating them into his own language, which is dfguml{{m|DfgUml}}. &lt;br /&gt;
&lt;br /&gt;
This is an alternative to a direct writing in DfgUml language which uses the {{m|Xml}} language as support.&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
{{par2|&lt;br /&gt;
{{fr§en&lt;br /&gt;
|Ce document n'est donc pas un manuel d'utilisation de Dfg mais identifie les liens qui existent entre DfgUml et les diagrammes de classe de Dia et explique comment utiliser Dia pour modéliser avec Dfg.&lt;br /&gt;
|Therefore this document is not a Dfg user manual but identifies links between DfgUml and class diagrams and explains how to use Dia in order to model with Dfg.&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== {{fr§en_title|Les prérequis pour lire ce document|The prerequisites to read this document|{{sepLos}}}} ==&lt;br /&gt;
=== {{fr§en_title|Connaissance de UML|Knowledge of UML|{{sepLos}}}} ===&lt;br /&gt;
{{par2|&lt;br /&gt;
{{fr§en|Dans {{m|Dfg}} la modélisation se fait à l'aide du langage {{m|DfgUml}}, une version texte contrainte et enrichie des digrammes de classe d'{{m|Uml}}. Il faut donc bien connaitre la modélisation à l'aide des diagrammes de classe. ([http://www.sparxsystems.com/uml-tutorial.html Lien vers un tutoriel sur Uml]).&lt;br /&gt;
|With {{m|Dfg}} modeling is maiden with {{m|DfgUml}} language, a constraint and extended text version of {{m|Uml}} class diagrams. We must therefore know the modeling using class diagrams. ([http://www.sparxsystems.com/uml-tutorial.html Link to a Uml tutorial]).&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
{{Ex|&lt;br /&gt;
{{figuml&lt;br /&gt;
|{{fr§en|Exemple que l'on doit comprendre|Example that we must understand}}&lt;br /&gt;
|abstract class CPicture {&lt;br /&gt;
}&lt;br /&gt;
CPicture  *-- &amp;quot;0..*&amp;quot; CBase : els&lt;br /&gt;
abstract class CBase {&lt;br /&gt;
}  &lt;br /&gt;
abstract class CCompound {&lt;br /&gt;
} &lt;br /&gt;
CCompound --{{!}}&amp;gt; CBase&lt;br /&gt;
CCompound  *-- &amp;quot;0..*&amp;quot; CBase : els&lt;br /&gt;
abstract class CPoint {&lt;br /&gt;
}&lt;br /&gt;
CPoint --{{!}}&amp;gt; CBase &lt;br /&gt;
CPoint : float xx&lt;br /&gt;
CPoint : float yy&lt;br /&gt;
abstract class CSegment {&lt;br /&gt;
}&lt;br /&gt;
CSegment --{{!}}&amp;gt; CBase&lt;br /&gt;
CSegment  *-- &amp;quot;1&amp;quot; CPoint : first&lt;br /&gt;
CSegment  *-- &amp;quot;1&amp;quot; CPoint : second&lt;br /&gt;
abstract class CCircle {&lt;br /&gt;
}&lt;br /&gt;
CCircle --{{!}}&amp;gt; CPoint&lt;br /&gt;
CCircle : float radius&lt;br /&gt;
|uml_example_to_understand}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== {{fr§en_title|Connaissance de XML pour modéliser avec DfgUml|Knowledge of XML to model with DfgUml|{{sepLos}}}} ===&lt;br /&gt;
{{par2|&lt;br /&gt;
{{fr§en|{{m|DfgUml}} utilise le langage {{m|Xml}} comme langage de bas niveau, on peut se contenter de notions basiques telles que les balises (les tags) et leurs attributs ([http://www.w3schools.com/xml/ Lien vers un tutoriel sur Xml]).&lt;br /&gt;
Voici ci-après le diagramme {{clink|uml_example_to_understand}} décrit dans le langage DfgUml :&lt;br /&gt;
|{{m|DfgUml}} uses the {{m|Xml}} language as a low-level language, normally it is sufficient to know basic concepts such as tags and their attributes ([http://www.w3schools.com/xml/ Link to a Xml tutorial]).&lt;br /&gt;
Here below diagram {{clink|uml_example_to_understand}} described in DfgUml language:&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
{{par|&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;clDef type=&amp;quot;CPicture&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;clInst accept=&amp;quot;CCompound:CPoint:CCircle:CSegment&amp;quot; card=&amp;quot;*&amp;quot; name=&amp;quot;els&amp;quot; type=&amp;quot;CBase&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/clDef&amp;gt;&lt;br /&gt;
    &amp;lt;clDef type=&amp;quot;CBase&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;clDef her=&amp;quot;CBase&amp;quot; type=&amp;quot;CCompound&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;clInst accept=&amp;quot;CCompound:CPoint:CCircle:CSegment&amp;quot; card=&amp;quot;*&amp;quot; name=&amp;quot;els&amp;quot; type=&amp;quot;CBase&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/clDef&amp;gt;&lt;br /&gt;
    &amp;lt;clDef her=&amp;quot;CBase&amp;quot; type=&amp;quot;CPoint&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;flt name=&amp;quot;xx&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;flt name=&amp;quot;yy&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/clDef&amp;gt;&lt;br /&gt;
    &amp;lt;clDef her=&amp;quot;CBase&amp;quot; type=&amp;quot;CSegment&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;clInst accept=&amp;quot;CCircle&amp;quot; card=&amp;quot;&amp;quot; name=&amp;quot;first&amp;quot; type=&amp;quot;CPoint&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;clInst accept=&amp;quot;CCircle&amp;quot; card=&amp;quot;1&amp;quot; name=&amp;quot;second&amp;quot; type=&amp;quot;CPoint&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/clDef&amp;gt;&lt;br /&gt;
    &amp;lt;clDef her=&amp;quot;CPoint&amp;quot; type=&amp;quot;CCircle&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;flt name=&amp;quot;radius&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/clDef&amp;gt;&lt;br /&gt;
    &amp;lt;clInst name=&amp;quot;picture&amp;quot; type=&amp;quot;CPicture&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/grammar&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|margeWidth=5ch|dfg_example_to_understand}}&lt;br /&gt;
&lt;br /&gt;
=== {{fr§en_title|Connaissance des diagrammes de classes du logiciel Dia|Knowledge of class diagrams of Dia software|{{sepLos}}}}  ===&lt;br /&gt;
{{par2|&lt;br /&gt;
{{fr§en|Concernant Dia, il faut savoir au moins créer un diagramme de classe.&lt;br /&gt;
Le modèle de l'exemple précédent {{clink|uml_example_to_understand}} est schématisé par {{m|Dia}} par le diagramme {{clink|dia_example_to_understand}}:&lt;br /&gt;
|About Dia, you should know at least how to create a class diagram.&lt;br /&gt;
The model of the previous example {{clink|uml_example_to_understand}} is schematized by the Dia diagram {{clink|dia_example_to_understand}}:&lt;br /&gt;
}}&lt;br /&gt;
{{fig|{{fr§en|Vue dans Dia|View in Dia}}|dia_example_to_understand.png|dia_example_to_understand}} &lt;br /&gt;
}}&lt;br /&gt;
{{Rq|{{fr§en|Afin que Dfg puisse identifier la classe qui sera la classe racine de la structure de donnée, le fichier Dia doit toujours contenir la classe {{mm|ClDfgUml}} comme le montre le diagramme {{clink|dia_example_to_understand}}. En plus cette classe doit être liée par composition de multiplicité de 1 avec une et une seule classe.&lt;br /&gt;
|In order to indicate to Dfg  which class will be the class root of data structure, the Dia file must always contains a class named {{mm|ClDfgUml}} as shown in the diagram {{clink|dia_example_to_understand}}. In addition this class must be linked to a unique another class by a composition association where the multiplicity is 1. &lt;br /&gt;
}}&lt;br /&gt;
|Dfg_needs_ClDfgUml_Rq|width=1100px}}&lt;br /&gt;
&lt;br /&gt;
=== {{fr§en_title|Connaissance de la programmation orienté objet pour distinguer une instance de son modèle|Knowledge of object-oriented programming to distinguish an instance from its model|{{sepLos}}}} ===&lt;br /&gt;
{{par2|&lt;br /&gt;
{{fr§en|Les trois vues qui sont les documents {{clink|uml_example_to_understand}}, {{clink|dfg_example_to_understand}} et {{clink|dia_example_to_understand}} décrivent le même modèle. Ce modèle peut avoir une instance qui sous sa forme persistante (dans le langage DfgUml) peut être par exemple le fichier Xml suivant :&lt;br /&gt;
|The three views which are {{clink|uml_example_to_understand}}, {{clink|dfg_example_to_understand}} and {{clink|dia_example_to_understand}} documents, describe the same model. This model can have an instance which, under persistent form (by using DfgUml language), can be, for example, the following XMl file :   &lt;br /&gt;
}}&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;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;picture&amp;gt;&lt;br /&gt;
        &amp;lt;els dfgClName=&amp;quot;CCompound&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;els dfgClName=&amp;quot;CPoint&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xx&amp;gt;0.0&amp;lt;/xx&amp;gt;&lt;br /&gt;
                &amp;lt;yy&amp;gt;0.0&amp;lt;/yy&amp;gt;&lt;br /&gt;
            &amp;lt;/els&amp;gt;&lt;br /&gt;
            &amp;lt;els dfgClName=&amp;quot;CSegment&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;first dfgClName=&amp;quot;CPoint&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xx&amp;gt;0.0&amp;lt;/xx&amp;gt;&lt;br /&gt;
                    &amp;lt;yy&amp;gt;0.0&amp;lt;/yy&amp;gt;                &lt;br /&gt;
                &amp;lt;/first&amp;gt;&lt;br /&gt;
                &amp;lt;second dfgClName=&amp;quot;CPoint&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xx&amp;gt;0.0&amp;lt;/xx&amp;gt;&lt;br /&gt;
                    &amp;lt;yy&amp;gt;0.0&amp;lt;/yy&amp;gt;                &lt;br /&gt;
                &amp;lt;/second&amp;gt;&lt;br /&gt;
            &amp;lt;/els&amp;gt;            &lt;br /&gt;
        &amp;lt;/els&amp;gt;&lt;br /&gt;
        &amp;lt;els dfgClName=&amp;quot;CPoint&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xx&amp;gt;0.0&amp;lt;/xx&amp;gt;&lt;br /&gt;
            &amp;lt;yy&amp;gt;0.0&amp;lt;/yy&amp;gt;&lt;br /&gt;
        &amp;lt;/els&amp;gt;&lt;br /&gt;
        &amp;lt;els dfgClName=&amp;quot;CCircle&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xx&amp;gt;0.0&amp;lt;/xx&amp;gt;&lt;br /&gt;
            &amp;lt;yy&amp;gt;0.0&amp;lt;/yy&amp;gt;        &lt;br /&gt;
            &amp;lt;radius&amp;gt;0.0&amp;lt;/radius&amp;gt;&lt;br /&gt;
        &amp;lt;/els&amp;gt;&lt;br /&gt;
    &amp;lt;/picture&amp;gt;&lt;br /&gt;
&amp;lt;/grammar&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|tuto01_dia2dfg_instance|width=140ch}}&lt;br /&gt;
&lt;br /&gt;
== {{fr§en_title|Cas simple mais complet|Simple but complete case|{{sepLos}}}} ==&lt;br /&gt;
=== {{fr§en_title|Où trouver les sources ?|Where are the sources?|{{sepLos}}}} ===&lt;br /&gt;
{{par2|&lt;br /&gt;
{{fr§en|Les sources de cet exemple peuvent être téléchargés à partir de ce [[:file:dfgTuto01.zip|lien]]. &lt;br /&gt;
|The sources of this example can be download from this [[:file:dfgTuto01.zip|link]].  &lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== {{fr§en_title|Modélisation de la structure|Structure modeling|{{sepLos}}}} ===&lt;br /&gt;
{{par2|&lt;br /&gt;
{{fig|Data Flow Generator V1 sources|dfg1.png|dfg1_simple_case_tuto01|614px}}&lt;br /&gt;
{{fr§en|Dans notre exemple le fichier de départ est {{mm|tuto01.dia}} qui est le point 1 sur diagramme {{clink|dfg1_simple_case_tuto01}}. Son schéma Uml est donné par {{clink|dfg1_simple_case_tuto01_dia}}.&lt;br /&gt;
Téléchargez {{mm|dfgWebClient.py}} depuis la page [http://dfg1.bht.fr] et exécutons maintenant la commande d'appel à Dfg :&lt;br /&gt;
|In our example the first file to edit is {{mm|tuto01.dia}} which is the point 1 on diagram {{clink|dfg1_simple_case_tuto01}}. Its Uml diagram is given by {{clink|dfg1_simple_case_tuto01_dia}}. &lt;br /&gt;
Download {{mm|dfgWebClient.py}} from the page [http://dfg1.bht.fr] and execute the call command of Dfg : &lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
python dfgWebClient.py --pathGrammarfile tuto01.dia --dataName tuto01&lt;br /&gt;
&amp;lt;/source&amp;gt;  &lt;br /&gt;
}}&lt;br /&gt;
{{par2|&lt;br /&gt;
{{fr§en|Lors de l'appel au serveur, Dfg &lt;br /&gt;
#traduit le fichier le contenu de {{mm|tuto01.dia}} en en DfgUml qui sera retourné dans {{mm|tuto01_generated.dfg}} (point {{mm|2}} sur {{clink|dfg1_simple_case_tuto01}});&lt;br /&gt;
#génère la première version du modèle {{mm|DfgBehaviour}} renvoyé dans {{mm|tuto01_ManualBeHaviour.py}} (point {{mm|3}} sur {{clink|dfg1_simple_case_tuto01}});&lt;br /&gt;
#génère l'{{mm|exécutable}} au complet renvoyé dans les fichiers {{mm|tuto01_XmlDrvClassDiagrBeHaviour.py}} et {{mm|tuto01_XmlDrvClassDiagrBeHaviour_pkg_version.py}} (point {{mm|4}} sur {{clink|dfg1_simple_case_tuto01}});&lt;br /&gt;
# génère et renvoie d'autres fichiers tels que {{mm|tuto01PlantUml.png}} qui est un autre rendu Uml généré par Dfg en partant de {{mm|tuto01_generated.dfg}}. Un rendu visible sur le diagramme {{clink|dfg1_simple_case_tuto01_plantuml}}.&lt;br /&gt;
|During this call to the server, Dfg&lt;br /&gt;
#translates the content of the file {{mm|tuto01.dia}} into DfgUml language and returns it in the file named {{mm|tuto01_generated.dfg}} (point {{mm|2}} on {{clink|dfg1_simple_case_tuto01}}); &lt;br /&gt;
#generates the first version of {{mm|DfgBehaviour}} model returned in the file {{mm|tuto01_ManualBeHaviour.py}} (point {{mm|3}} on {{clink|dfg1_simple_case_tuto01}}); &lt;br /&gt;
#generates the complete {{mm|executable}} returned in files named {{mm|tuto01_XmlDrvClassDiagrBeHaviour.py}} and {{mm|tuto01_XmlDrvClassDiagrBeHaviour_pkg_version.py}} (point {{mm|4}} on {{clink|dfg1_simple_case_tuto01}}); &lt;br /&gt;
#generates and returns other files like {{mm|tuto01PlantUml.png}} which is an other Uml view of model generated by Dfg from {{mm|tuto01_generated.dfg}}. This view is shown by the diagram  {{clink|dfg1_simple_case_tuto01_plantuml}}.&lt;br /&gt;
}}&lt;br /&gt;
{{fig|tuto01.dia|dfg1_simple_case_tuto01_dia.png|dfg1_simple_case_tuto01_dia|614px}}&lt;br /&gt;
{{fig|tuto01PlantUml.png|dfg1_simple_case_tuto01_plantuml.png|dfg1_simple_case_tuto01_plantuml|614px}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== {{fr§en_title|Modélisation du comportement|Behaviour modeling|{{sepLos}}}} ===&lt;br /&gt;
{{par2|&lt;br /&gt;
{{fr§en|La modélisation du comportement se fait dans le fichier {{mm|tuto01_ManualBeHaviour.py}} à l'aide d'un éditeur de texte ou d'un éditeur de code Python. Il ne faut écrire que dans l'espace de texte se trouvant entre les lignes (parties en {{m|…}})  :&lt;br /&gt;
|The behavior modeling is written in the file {{mm|tuto01_ManualBeHaviour.py}} with a text editor or a Python code editor. You have to write only in the space which is located between the following lines (the part which is {{m|…}}) : &lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
        # dfg_start_manual do not modify this line&lt;br /&gt;
        …&lt;br /&gt;
        #dfg_end_manual do not modify this line&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{par2|&lt;br /&gt;
{{fr§en|Par exemple concernant la classe CCompound nous avons au départ:&lt;br /&gt;
|In the case of CCompound class at the start we have:&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
################################################################################&lt;br /&gt;
# CCompound&lt;br /&gt;
################################################################################&lt;br /&gt;
# dfg_start_class do not modify this line&lt;br /&gt;
class CCompound : # ancestors :  CBase&lt;br /&gt;
    pass&lt;br /&gt;
#-------------------------------------------------------------------------------&lt;br /&gt;
    # dfg_start_def do not modify this line&lt;br /&gt;
    def calcDimension( self  ) : #dimension:out flt, &lt;br /&gt;
        # dfg_start_manual do not modify this line&lt;br /&gt;
        pass # TODO&lt;br /&gt;
        #dfg_end_manual do not modify this line&lt;br /&gt;
        return dimension &lt;br /&gt;
    # dfg_end_def do not modify this line&lt;br /&gt;
&lt;br /&gt;
# dfg_end_class do not modify this line&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{par2|&lt;br /&gt;
{{fr§en|La ligne &amp;quot;pass # TODO&amp;quot; est alors remplacée de la façon suivante : &lt;br /&gt;
|The line &amp;quot;pass # TODO&amp;quot; is then replaced by the following :&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
…&lt;br /&gt;
        # dfg_start_manual do not modify this line&lt;br /&gt;
        dimension=0&lt;br /&gt;
        for el in self.els :&lt;br /&gt;
            dimension += el.calcDimension()&lt;br /&gt;
        self.dimension=dimension    &lt;br /&gt;
        #dfg_end_manual do not modify this line&lt;br /&gt;
        return dimension &lt;br /&gt;
…&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{par2|&lt;br /&gt;
{{fr§en|Il faut faire la même chose pour les autres classes  et les autres méthodes. Afin que ces lois de comportement soient prise en compte il faut appeler de nouveau Dfg qui va les extraire depuis {{mm|tuto01_ManualBeHaviour.py}} et les injecter dans {{mm|tuto01_XmlDrvClassDiagrBeHaviour.py}}. On exécute donc une nouvelle fois la commande :&lt;br /&gt;
|We have to do the same thing for all the other classes and methods. In order to have this behavior laws integrated in the executable we have to make a new call to Dfg. Then Dfg will extract them from {{mm|tuto01_ManualBeHaviour.py}} and will insert them into {{mm|tuto01_XmlDrvClassDiagrBeHaviour.py}}. Let's call again Dfg :&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
python dfgWebClient.py --pathGrammarfile tuto01.dia --dataName tuto01&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{par2|&lt;br /&gt;
{{fr§en|Si vous éditez {{mm|tuto01_XmlDrvClassDiagrBeHaviour.py}} vous retrouverez alors notre loi de comportement autour de la ligne 1000. Vous y trouverez aussi d'autres méthodes générées et définies par Dfg telles que :&lt;br /&gt;
|If you edit the file {{mm|tuto01_XmlDrvClassDiagrBeHaviour.py}} then you will find our behavior law near the line 1000. For the CCompound class you will find other methods generated and defined par Dfg like : &lt;br /&gt;
}}&lt;br /&gt;
{{mm|add_els}}, {{mm|clear}}, {{mm|clear_all_id}}, {{mm|construct}}, {{mm|construct2}}, {{mm|copy}}, {{mm|create_copy}}, {{mm|extract_els}}, {{mm|fromXML}}, {{mm|get_dimensionRef}}, {{mm|get_elsLen}}, {{mm|get_elsRef}}, {{mm|get_id_dict}}, {{mm|get_longHelp}}, {{mm|get_nameRef}}, {{mm|get_shortHelp}}, {{mm|get_unit}}, {{mm|gr_name}}, {{mm|init}}, {{mm|insert_els}}, {{mm|set_all_id}}, {{mm|set_dimension}}, {{mm|set_name}}, {{mm|set_ptrs}}, {{mm|toXML}}.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== {{fr§en_title|L'instance de l'exécutable et l'état initial|Exectable isntance and initial state|{{sepLos}}}} ===&lt;br /&gt;
{{par2|&lt;br /&gt;
{{fr§en|Pour exécuter notre modèle il nous reste à écrire deux fichiers : un petit fichier python appelé {{mm|tuto01.py}} (point {{m|5}} sur {{clink|dfg1_simple_case_tuto01}}) qui va instancier notre modèle exécutable et un fichier nommé {{mm|tuto01InitState.xml}} une instance de la structure de données qui n'est rien d'autre que son état initial écrit dans le langage DfgUml.   &lt;br /&gt;
|In order to execute our model we have to write two files : a small code of Python in a file named {{mm|tuto01.py}} (point {{m|5}} on {{clink|dfg1_simple_case_tuto01}}) which will create instances of our executable model and a file named {{mm|tuto01InitState.xml}}, an instance of data structure which is its initial state written in the DfgUml.   &lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
{{Ex|tuto01.py:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import tuto01_XmlDrvClassDiagrBeHaviour&lt;br /&gt;
def main():&lt;br /&gt;
    info=tuto01_XmlDrvClassDiagrBeHaviour.CFileFormatInfo()&lt;br /&gt;
    dfg = info.loadFromXMLFile( &amp;quot;tuto01InitState.xml&amp;quot; )&lt;br /&gt;
    for el in dfg.picture.els :&lt;br /&gt;
        el.calcDimension()&lt;br /&gt;
        print &amp;quot;dimension of '%s' is %0.2f&amp;quot; %(el.name, el.dimension)&lt;br /&gt;
    info.Save2XMLFile( dfg, &amp;quot;tuto01FinalState.xml&amp;quot; )&lt;br /&gt;
if __name__ == u'__main__' :    &lt;br /&gt;
    main()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|width=140ch}}&lt;br /&gt;
{{Ex|tuto01InitState.xml:&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;picture&amp;gt;&lt;br /&gt;
        &amp;lt;els dfgClName=&amp;quot;CCompound&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;Compound 1&amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;dimension&amp;gt;0&amp;lt;/dimension&amp;gt;&lt;br /&gt;
            &amp;lt;els dfgClName=&amp;quot;CPoint&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;name&amp;gt;Point 1&amp;lt;/name&amp;gt;&lt;br /&gt;
                &amp;lt;dimension&amp;gt;0&amp;lt;/dimension&amp;gt;&lt;br /&gt;
                &amp;lt;xx&amp;gt;1.0&amp;lt;/xx&amp;gt;&lt;br /&gt;
                &amp;lt;yy&amp;gt;0.5&amp;lt;/yy&amp;gt;&lt;br /&gt;
            &amp;lt;/els&amp;gt;&lt;br /&gt;
            &amp;lt;els dfgClName=&amp;quot;CSegment&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;name&amp;gt;Segment 1&amp;lt;/name&amp;gt;&lt;br /&gt;
                &amp;lt;dimension&amp;gt;0&amp;lt;/dimension&amp;gt;&lt;br /&gt;
                &amp;lt;first dfgClName=&amp;quot;CPoint&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;name&amp;gt;Point 2&amp;lt;/name&amp;gt;&lt;br /&gt;
                    &amp;lt;dimension&amp;gt;0&amp;lt;/dimension&amp;gt;&lt;br /&gt;
                    &amp;lt;xx&amp;gt;9.0&amp;lt;/xx&amp;gt;&lt;br /&gt;
                    &amp;lt;yy&amp;gt;2.0&amp;lt;/yy&amp;gt;                &lt;br /&gt;
                &amp;lt;/first&amp;gt;&lt;br /&gt;
                &amp;lt;second dfgClName=&amp;quot;CPoint&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;name&amp;gt;Point 3&amp;lt;/name&amp;gt;&lt;br /&gt;
                    &amp;lt;dimension&amp;gt;0&amp;lt;/dimension&amp;gt;&lt;br /&gt;
                    &amp;lt;xx&amp;gt;0.5&amp;lt;/xx&amp;gt;&lt;br /&gt;
                    &amp;lt;yy&amp;gt;-6.0&amp;lt;/yy&amp;gt;                &lt;br /&gt;
                &amp;lt;/second&amp;gt;&lt;br /&gt;
            &amp;lt;/els&amp;gt;            &lt;br /&gt;
        &amp;lt;/els&amp;gt;&lt;br /&gt;
        &amp;lt;els dfgClName=&amp;quot;CPoint&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;Point 4&amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;dimension&amp;gt;0&amp;lt;/dimension&amp;gt;&lt;br /&gt;
            &amp;lt;xx&amp;gt;-7.0&amp;lt;/xx&amp;gt;&lt;br /&gt;
            &amp;lt;yy&amp;gt;3.14&amp;lt;/yy&amp;gt;&lt;br /&gt;
        &amp;lt;/els&amp;gt;&lt;br /&gt;
        &amp;lt;els dfgClName=&amp;quot;CCircle&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;Circle 1&amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;dimension&amp;gt;0&amp;lt;/dimension&amp;gt;&lt;br /&gt;
            &amp;lt;xx&amp;gt;3.0&amp;lt;/xx&amp;gt;&lt;br /&gt;
            &amp;lt;yy&amp;gt;1.0&amp;lt;/yy&amp;gt;        &lt;br /&gt;
            &amp;lt;radius&amp;gt;20.0&amp;lt;/radius&amp;gt;&lt;br /&gt;
        &amp;lt;/els&amp;gt;&lt;br /&gt;
    &amp;lt;/picture&amp;gt;&lt;br /&gt;
&amp;lt;/grammar&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|width=140ch}}&lt;br /&gt;
&lt;br /&gt;
=== {{fr§en_title|Exécution et état final|Runing and final state|{{sepLos}}}} ===&lt;br /&gt;
{{par2|&lt;br /&gt;
{{fr§en|L'exécution se fait en lançant la commande:&lt;br /&gt;
|The running is launched by the command:&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
python tuto01.py&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{fr§en|Ce qui affiche:&lt;br /&gt;
|Which displays:&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
dimension of 'Compound 1' is 11.67&lt;br /&gt;
dimension of 'Point 4' is 0.00&lt;br /&gt;
dimension of 'Circle 1' is 40.00&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{fr§en|Et l'état final est sauvegardé dans le fichier {{mm|tuto01FinalState.xml}}:&lt;br /&gt;
|And last state is stored in the file {{mm|tuto01FinalState.xml}}:&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 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;picture&amp;gt;&lt;br /&gt;
        &amp;lt;els dfgClName=&amp;quot;CCompound&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;dimension&amp;gt;11.6726175299&amp;lt;/dimension&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;Compound 1&amp;lt;/name&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
            &amp;lt;els dfgClName=&amp;quot;CPoint&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;dimension&amp;gt;0.0&amp;lt;/dimension&amp;gt;&lt;br /&gt;
                &amp;lt;name&amp;gt;Point 1&amp;lt;/name&amp;gt;&lt;br /&gt;
            &lt;br /&gt;
                &amp;lt;xx&amp;gt;1.0&amp;lt;/xx&amp;gt;&lt;br /&gt;
                &amp;lt;yy&amp;gt;0.5&amp;lt;/yy&amp;gt;&lt;br /&gt;
            &amp;lt;/els&amp;gt;&lt;br /&gt;
            &amp;lt;els dfgClName=&amp;quot;CSegment&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;dimension&amp;gt;11.6726175299&amp;lt;/dimension&amp;gt;&lt;br /&gt;
                &amp;lt;name&amp;gt;Segment 1&amp;lt;/name&amp;gt;&lt;br /&gt;
            &lt;br /&gt;
                &amp;lt;first dfgClName=&amp;quot;CPoint&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;dimension&amp;gt;0.0&amp;lt;/dimension&amp;gt;&lt;br /&gt;
                    &amp;lt;name&amp;gt;Point 2&amp;lt;/name&amp;gt;&lt;br /&gt;
                &lt;br /&gt;
                    &amp;lt;xx&amp;gt;9.0&amp;lt;/xx&amp;gt;&lt;br /&gt;
                    &amp;lt;yy&amp;gt;2.0&amp;lt;/yy&amp;gt;&lt;br /&gt;
                &amp;lt;/first&amp;gt;&lt;br /&gt;
                &amp;lt;second dfgClName=&amp;quot;CPoint&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;dimension&amp;gt;0.0&amp;lt;/dimension&amp;gt;&lt;br /&gt;
                    &amp;lt;name&amp;gt;Point 3&amp;lt;/name&amp;gt;&lt;br /&gt;
                &lt;br /&gt;
                    &amp;lt;xx&amp;gt;0.5&amp;lt;/xx&amp;gt;&lt;br /&gt;
                    &amp;lt;yy&amp;gt;-6.0&amp;lt;/yy&amp;gt;&lt;br /&gt;
                &amp;lt;/second&amp;gt;&lt;br /&gt;
            &amp;lt;/els&amp;gt;&lt;br /&gt;
        &amp;lt;/els&amp;gt;&lt;br /&gt;
        &amp;lt;els dfgClName=&amp;quot;CPoint&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;dimension&amp;gt;0.0&amp;lt;/dimension&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;Point 4&amp;lt;/name&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
            &amp;lt;xx&amp;gt;-7.0&amp;lt;/xx&amp;gt;&lt;br /&gt;
            &amp;lt;yy&amp;gt;3.14&amp;lt;/yy&amp;gt;&lt;br /&gt;
        &amp;lt;/els&amp;gt;&lt;br /&gt;
        &amp;lt;els dfgClName=&amp;quot;CCircle&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;dimension&amp;gt;40.0&amp;lt;/dimension&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;Circle 1&amp;lt;/name&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
            &amp;lt;xx&amp;gt;3.0&amp;lt;/xx&amp;gt;&lt;br /&gt;
            &amp;lt;yy&amp;gt;1.0&amp;lt;/yy&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
            &amp;lt;radius&amp;gt;20.0&amp;lt;/radius&amp;gt;&lt;br /&gt;
        &amp;lt;/els&amp;gt;&lt;br /&gt;
    &amp;lt;/picture&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;
== {{fr§en_title|Les exigences de DfgUml|DfgUml Requirements|{{sepLos}}}} ==&lt;br /&gt;
=== {{fr§en_title|Les éléments UML utilisés dans Dia utilisés par Dfg|UML elements used in Dia used by Dfg|{{sepLos}}}} ===&lt;br /&gt;
{{par2&lt;br /&gt;
|&lt;br /&gt;
{{fr§en&lt;br /&gt;
|Seuls les éléments {{m|classe}}, {{m|héritage}}, {{m|agrégation}} et {{m|composition}} sont utilisés par Dfg lors de l'importation. Ce sont ces éléments que l'on peut retrouver tels quels quand on commence à écrire du code. Les éléments {{m|agrégation}} et {{m|composition}} se retrouvent sous la forme d'un même objet, la différence se fait en modifiant son type en éditant ses propriétés.&lt;br /&gt;
|Only class {{m|elements}}, {{m|inheritance}}, {{m|aggregation}} and {{m|composition}} are used by Dfg when importing. These are the elements that can be found as is when we begin to write code. The {{m|aggregation}} and {{m|composition}} elements are found in the form of a single object, the difference is done by changing the type by editing its properties.&lt;br /&gt;
}}&lt;br /&gt;
{{fig||UML_elements_used_in_Dia_used_by_Dfg.png}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== {{fr§en_title|Cardinalité et Multiplicité : notation|Cardinality and Multiplicity: notation|{{sepLos}}}} ===&lt;br /&gt;
{{par2|&lt;br /&gt;
{{fr§en&lt;br /&gt;
|Soient n, n1, n2 des entiers&lt;br /&gt;
{{tab&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
{{line| {{col_t|notation entre 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; ou &amp;quot;0:1&amp;quot;}} {{col|de 0 à 1, optionnel}} }} &lt;br /&gt;
{{line| {{col|&amp;quot;*&amp;quot; ou &amp;quot;0:*&amp;quot;}} {{col|de 0 à l'infini}} }} &lt;br /&gt;
{{line| {{col|&amp;quot;+&amp;quot; ou &amp;quot;1:*&amp;quot;}} {{col|de 1 à l'infini}} }} &lt;br /&gt;
{{line| {{col|&amp;quot;n:&amp;quot; ou &amp;quot;n:*&amp;quot;}} {{col|de n à l'infini}} }} &lt;br /&gt;
{{line| {{col|&amp;quot;n&amp;quot; ou &amp;quot;n:n&amp;quot;}} {{col|de n à n, exactement n}} }} &lt;br /&gt;
{{line| {{col|si non présent ou chaine vide}} {{col|valeur de défaut : exactement 1 }} }}&lt;br /&gt;
}}&lt;br /&gt;
|Let n, n1, n2 integers&lt;br /&gt;
{{tab&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
{{line| {{col_t|notation between double quotes}} {{col_t|description}} }} &lt;br /&gt;
{{line| {{col|&amp;quot;n1:n2&amp;quot;}} {{col|from n1 to n2}} }} &lt;br /&gt;
{{line| {{col|&amp;quot;?&amp;quot; or &amp;quot;0:1&amp;quot;}} {{col|from 0 to 1, optional}} }} &lt;br /&gt;
{{line| {{col|&amp;quot;*&amp;quot; or &amp;quot;0:*&amp;quot;}} {{col|from 0 to infinite}} }} &lt;br /&gt;
{{line| {{col|&amp;quot;+&amp;quot; or &amp;quot;1:*&amp;quot;}} {{col|from 1 to infinite}} }} &lt;br /&gt;
{{line| {{col|&amp;quot;n:&amp;quot; or &amp;quot;n:*&amp;quot;}}{{col|from n to infinite}} }} &lt;br /&gt;
{{line| {{col|&amp;quot;n&amp;quot; or &amp;quot;n:n&amp;quot;}} {{col|from n to n, exactly n}} }} &lt;br /&gt;
{{line| {{col|if no present or empty string}} {{col|default value: exactly 1}} }}&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== {{fr§en_title|Les conventions de nommage|Naming conventions|{{sepLos}}}} ===&lt;br /&gt;
{{par2|&lt;br /&gt;
{{fr§en|Les conventions de nommage sont définies par le langage des expressions régulières du langage Python défini dans le module {{mm|re}}. Si ces conventions ne sont pas respectées Dfg génèrera une erreur. &lt;br /&gt;
|Naming conventions are defined in the regular expression language of Python provided by the module {{mm|re}}. If these conventions are not respected Dfg will generate an error.&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
==== {{fr§en_title|Noms de classes:|Class names|{{sepLos}}}} ====&lt;br /&gt;
{{par2|&lt;br /&gt;
{{fr§en|&lt;br /&gt;
*L'expression régulière à vérifier est:&lt;br /&gt;
:{{mm|^[Cc][l]?([A-Z][a-z0-9]+)*$}}&lt;br /&gt;
*Exemples:&lt;br /&gt;
:{{mm|ClCivilAircraft}} {{mm|clCivilAircraft}} {{mm|CAircraft}} {{mm|cAircraft}} &lt;br /&gt;
|&lt;br /&gt;
*The regular expression to check is:&lt;br /&gt;
:{{mm|^[Cc][l]?([A-Z][a-z0-9]+)*$}}&lt;br /&gt;
*Examples:&lt;br /&gt;
:{{mm|ClCivilAircraft}} {{mm|clCivilAircraft}} {{mm|CAircraft}} {{mm|cAircraft}} &lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
==== {{fr§en_title|Noms d'attribut|Attribute names|{{sepLos}}}} ====&lt;br /&gt;
{{par2|&lt;br /&gt;
{{fr§en|&lt;br /&gt;
*L'expression régulière à vérifier est:&lt;br /&gt;
:{{mm|^([a-z][a-z0-9]+(?:[A-Z][a-z0-9]+)*)(?:\[([^\]]*)\])?$}}&lt;br /&gt;
*Exemples:&lt;br /&gt;
:{{mm|civilAircraft}} {{mm|civil}} {{mm|xmlDriverName}} {{mm|vals[:12]}} {{mm|vals[3:10]}} {{mm|vals[*]}}&lt;br /&gt;
|&lt;br /&gt;
*The regular expression to check is:&lt;br /&gt;
:{{mm|^([a-z][a-z0-9]+(?:[A-Z][a-z0-9]+)*)(?:\[([^\]]*)\])?$}}&lt;br /&gt;
*Examples:&lt;br /&gt;
:{{mm|civilAircraft}} {{mm|civil}} {{mm|xmlDriverName}} {{mm|vals[:12]}} {{mm|vals[3:10]}} {{mm|vals[*]}}&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
==== {{fr§en_title|Noms d'association|Association names|{{sepLos}}}} ====&lt;br /&gt;
{{par2|&lt;br /&gt;
{{fr§en|Les noms des associations|}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== {{fr§en_title|Noms de méthodes|Method names|{{sepLos}}}} ====&lt;br /&gt;
{{par2|&lt;br /&gt;
{{fr§en|&lt;br /&gt;
*L'expression régulière à vérifier est:&lt;br /&gt;
:{{mm|^[a-z][a-z0-9]+([A-Z][a-z0-9]+)*(_[a-z][a-z0-9]+([A-Z][a-z0-9]+)*)*$}}&lt;br /&gt;
*Exemples:&lt;br /&gt;
:{{mm|get_firstName}} {{mm|getName}}&lt;br /&gt;
|&lt;br /&gt;
*The regular expression to check is:&lt;br /&gt;
:{{mm|^[a-z][a-z0-9]+([A-Z][a-z0-9]+)*(_[a-z][a-z0-9]+([A-Z][a-z0-9]+)*)*$}}&lt;br /&gt;
*Examples:&lt;br /&gt;
:{{mm|get_firstName}} {{mm|getName}}&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== {{fr§en_title|Les classes|Classes|{{sepLos}}}} ===&lt;br /&gt;
{{par2&lt;br /&gt;
|&lt;br /&gt;
{{fr§en&lt;br /&gt;
|La structure des données est organisée en arborescence comme l'illustre l'exemple {{clink|tuto01_dia2dfg_instance}}. Rien dans les diagramme de class UML et rien dans Dia ne permet d'identifier la classe racine de cette arborescence. Il faut donc trouver un moyen d'identifier clairement la classe racine. L'ajout d'une classe nommée {{mm|ClDfgUml}} permet d'identifier la classe racine. Il suffit d'associer la classe racine à la classe {{mm|ClDfgUml}} avec une association de composition avec une multiplicité de 1 de chaque côté. Le nom de cette association du côté de {{mm|ClDfgUml}} sera le nom de l'instance de la classe racine.   &lt;br /&gt;
|The data structure is organized in a tree structure as shown in the example {{clink|tuto01_dia2dfg_instance}}. Nothing in the UML class diagram and nothing in Dia can help us to identify the root class of this tree. We must find a way to clearly identify the root class. Adding a class named {{mm|ClDfgUml}} allows us to identify the root class. It's enough to associate the root class to the class {{mm|ClDfgUml}}; a composition association with a multiplicity of 1 on each side. The side name of this association, on the side of {{mm|ClDfgUml}} class will be the name of the instance of the root class.&lt;br /&gt;
}}&lt;br /&gt;
{{figuml||ClDfgUml  *-- &amp;quot;1&amp;quot; CClassRoot : rootName&lt;br /&gt;
|Required_by_Dfg_class}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== {{fr§en_title|Les attributs|Attributes|{{sepLos}}}} ===&lt;br /&gt;
{{par2&lt;br /&gt;
|&lt;br /&gt;
{{fr§en&lt;br /&gt;
|Pour les attributs, Dia permet de définir le nom, le type et la valeur par défaut ainsi que la visibilité. Dfg n'importe que le nom, le type et la valeur par défaut. Les attributs sont traduits en types primitifs (str, int, bool, date, flt) dans le langage DfgUml.&lt;br /&gt;
|For attributes, Dia allows us to define the name, type, default value and visibility. Dfg translates only name, type and default value. Attributes are translated into DfgUml language primitive types (str, int, bool, date, flt).&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
{{Ex|&lt;br /&gt;
{{fr§en|Exemple de types primitifs dans le langage DfgUml :|Example of primitive types in the DfgUml language:}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;str defVal=&amp;quot;kWh&amp;quot;  name=&amp;quot;energyUnit&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;str defVal=&amp;quot;h&amp;quot;    name=&amp;quot;timeUnit&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;flt defVal=&amp;quot;3.14&amp;quot; name=&amp;quot;values&amp;quot; card=&amp;quot;*&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;flt defVal=&amp;quot;1.0&amp;quot;  name=&amp;quot;timeStep&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|width=140ch}}&lt;br /&gt;
==== {{fr§en_title|Nom et cardinalité|Names and cardinalities|{{sepLos}}}} ====&lt;br /&gt;
{{par2|&lt;br /&gt;
{{fr§en&lt;br /&gt;
|Dfg permet de définir la cardinalité/multiplicité dans le nom de l'attribut de Dia en utilisant les crochets; […], en effet les types simples (string, real, integer) peuvent être multiples dans le langage DfgUml. Cette possibilité est illustrée dans l'exemple {{clink|dia2dfg_attributes_consumption}} qui est traduit par Dfg en {{clink|dia2dfg_attributes_consumption_dfg}} qui lui même peut avoir pour instance {{clink|dia2dfg_attributes_consumption_instance}}.&lt;br /&gt;
|Dfg defines the cardinality/multiplicity in the Dia attribute name using the brackets; [...], indeed simple types (string, real, integer) can be multiple in DfgUml language. This possibility is illustrated in the example {{clink|dia2dfg_attributes_consumption}} which is translated in Dfg {{clink|dia2dfg_attributes_consumption_dfg}} which itself may have for instance {{clink|dia2dfg_attributes_consumption_instance}}.&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
{{Ex&lt;br /&gt;
|{{fr§en|Exemples de nom d'attribut avec cardinalité : {{mm|vals[:12]}}, {{mm|vals[3:10]}}, {{mm|vals[*]}}.|Examples of attribute name with cardinality: {{mm|vals[12]}}, {{mm|vals[3:10]}}, {{mm|vals[*]}}.}}&lt;br /&gt;
{{fig||dia2dfg_attributes_consumption.png|dia2dfg_attributes_consumption}}&lt;br /&gt;
|width=140ch}}&lt;br /&gt;
{{Ex&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;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;clDef type=&amp;quot;CLoadCurve&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;str card=&amp;quot;&amp;quot; defVal=&amp;quot;kWh&amp;quot; name=&amp;quot;energyUnit&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;str card=&amp;quot;&amp;quot; defVal=&amp;quot;h&amp;quot; name=&amp;quot;timeUnit&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;flt card=&amp;quot;*&amp;quot; defVal=&amp;quot;3.14&amp;quot; name=&amp;quot;values&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;flt card=&amp;quot;&amp;quot; defVal=&amp;quot;1.0&amp;quot; name=&amp;quot;timeStep&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/clDef&amp;gt;&lt;br /&gt;
    &amp;lt;clInst name=&amp;quot;consumption&amp;quot; type=&amp;quot;CLoadCurve&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/grammar&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
|dia2dfg_attributes_consumption_dfg|width=140ch}}&lt;br /&gt;
{{Ex&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;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;consumption&amp;gt;&lt;br /&gt;
        &amp;lt;values&amp;gt;3.14&amp;lt;/values&amp;gt;&lt;br /&gt;
        &amp;lt;values&amp;gt;4.24&amp;lt;/values&amp;gt;&lt;br /&gt;
        &amp;lt;values&amp;gt;5.64&amp;lt;/values&amp;gt;&lt;br /&gt;
        &amp;lt;values&amp;gt;6.94&amp;lt;/values&amp;gt;&lt;br /&gt;
        &amp;lt;values&amp;gt;7.04&amp;lt;/values&amp;gt;&lt;br /&gt;
        &amp;lt;timeStep&amp;gt;1.0&amp;lt;/timeStep&amp;gt;&lt;br /&gt;
        &amp;lt;energyUnit&amp;gt;kWh&amp;lt;/energyUnit&amp;gt;&lt;br /&gt;
        &amp;lt;timeUnit&amp;gt;h&amp;lt;/timeUnit&amp;gt;&lt;br /&gt;
    &amp;lt;/consumption&amp;gt;&lt;br /&gt;
&amp;lt;/grammar&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
|dia2dfg_attributes_consumption_instance|width=140ch}}&lt;br /&gt;
&lt;br /&gt;
==== {{fr§en_title|Les types|Types|{{sepLos}}}} ====&lt;br /&gt;
{{par2|&lt;br /&gt;
{{fr§en&lt;br /&gt;
|Les types possibles sont : {{mm|str}}, {{mm|string}}, {{mm|int}}, {{mm|integer}}, {{mm|bool}}, {{mm|boolean}}, {{mm|date}}, {{mm|flt}}, {{mm|float}}, {{mm|real}}, {{mm|double}}. Ces types sont traduits dans les 4 types primitifs de DfgUml qui sont {{mm|str}}, {{mm|int}}, {{mm|bool}}, {{mm|date}}, {{mm|flt}}.&lt;br /&gt;
|Possible types are: {{mm|str}}, {{mm|string}}, {{mm|int}}, {{mm|integer}}, {{mm|boolean}}, {{mm|boolean}}, {{mm|date}}, {{mm|flt}}, {{mm|float}}, {{mm|real}}, {{mm|double}}. These types are translated into the four DfgUml primitive types that are {{mm|str}}, {{mm|int}}, {{mm|bool}}, {{mm|date}}, {{mm|flt}}.&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== {{fr§en_title|Les valeurs par défaut|Default values|{{sepLos}}}} ====&lt;br /&gt;
{{par2|&lt;br /&gt;
{{fr§en&lt;br /&gt;
|Les valeurs par défaut sont simplement reprises telles quelles dans le langage DfgUml dans l'entité {{mm|defVal}}. &lt;br /&gt;
|The default values ​​are just copied in the DfgUml language entity {{mm|DefVal}}.&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
{{Ex|&lt;br /&gt;
{{fr§en|Exemple:|Example:}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;str defVal=&amp;quot;kWh&amp;quot;  name=&amp;quot;energyUnit&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|width=140ch}}&lt;br /&gt;
&lt;br /&gt;
=== {{fr§en_title|Les méthodes|Methods|{{sepLos}}}} ===&lt;br /&gt;
{{par2|&lt;br /&gt;
{{fr§en&lt;br /&gt;
|Les méthodes doivent toujours renvoyer le type {{mm|void}}. Les entrées et sorties sont plus généralement identifiées à l'aide de la {{mm|direction}} de chaque argument de la méthode. La direction peut avoir comme valeurs : {{mm|in}}, {{mm|out}}, {{mm|inout}}. Dia et DfgUml permettent d'utiliser la notion de direction pour définir les entrées et sorties d'une méthode. Un exemple de méthode nommée addition est donné dans le diagramme de Dia ({{clink|methods_signature_in_dia}}), dans le langage [http://www.omg.org/cgi-bin/doc?formal/02-06-39 Idl] ({{clink|methods_signature_idl}}), dans le langage DfgUml ({{clink|methods_dfguml}}) et le langage DfgBehaviour ({{clink|methods_behaviour}}).&lt;br /&gt;
|All methods must always return the type {{mm|void}}. Inputs ans outputs are generally identified by the {{mm|direction}} of each argument of a method. Diraction has the values: {{mm|in}}, {{mm|out}}, {{mm|inout}}. Dia and Dfg uses the direction notion in order to define method inputs and outputs. An example of a method named &amp;quot;addition&amp;quot; is given in the Dia diagram ({{clink|methods_signature_in_dia}}), in the [http://www.omg.org/cgi-bin/doc?formal/02-06-39 Idl] language ({{clink|methods_signature_idl}}), in the DfgUml language ({{clink|methods_dfguml}}) and in DfgBehaviour language ({{clink|methods_behaviour}}).&lt;br /&gt;
}}&lt;br /&gt;
{{fig||dia_methods.png|methods_signature_in_dia}}&lt;br /&gt;
}}&lt;br /&gt;
{{Ex|&lt;br /&gt;
&amp;lt;source lang=&amp;quot;idl&amp;quot;&amp;gt;&lt;br /&gt;
void addition( in aa:int, in int bb, out int addResult, inout bool negative)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|methods_signature_idl|width=140ch}}&lt;br /&gt;
{{Ex|&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;clDef type=&amp;quot;CMethod&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;method name=&amp;quot;addition&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;arg dir=&amp;quot;in&amp;quot; name=&amp;quot;aa&amp;quot; type=&amp;quot;int&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;arg dir=&amp;quot;in&amp;quot; name=&amp;quot;bb&amp;quot; type=&amp;quot;int&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;arg dir=&amp;quot;out&amp;quot; name=&amp;quot;addResult&amp;quot; type=&amp;quot;int&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;arg dir=&amp;quot;inout&amp;quot; name=&amp;quot;negative&amp;quot; type=&amp;quot;bool&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;/method&amp;gt;&lt;br /&gt;
    &amp;lt;/clDef&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|methods_dfguml|width=140ch}}&lt;br /&gt;
{{Ex|&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
    def addition( self ,aa ,bb ,negative  ) : #aa:in int, bb:in int, addResult:out int, negative:inout bool, &lt;br /&gt;
        # dfg_start_manual do not modify this line&lt;br /&gt;
&lt;br /&gt;
        addResult = aa + bb &lt;br /&gt;
        negative =  addResult &amp;lt; 0&lt;br /&gt;
&lt;br /&gt;
        #dfg_end_manual do not modify this line&lt;br /&gt;
        return addResult ,negative &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|methods_behaviour|width=140ch}}&lt;br /&gt;
&lt;br /&gt;
=== {{fr§en_title|Les Associations|Associations|{{sepLos}}}} ===&lt;br /&gt;
{{par2|&lt;br /&gt;
{{fig|{{fr§en|Les parties nommables|The nameable parts}}|association_names_01.png}}&lt;br /&gt;
{{fig|{{fr§en|Les parties nommables pour Dfg|The Dfg nameable parts}}|association_names_02.png}}&lt;br /&gt;
{{fig|{{fr§en|Le lien vers le parent|The link to the parent}}|association_names_03.png}}&lt;br /&gt;
{{fig|{{fr§en|L'interface de saisi des noms|The interface for entering names}}|association_names_04.png|width=200px}}&lt;br /&gt;
}}&lt;br /&gt;
==== {{fr§en_title|Les Compositions|Compositions|{{sepLos}}}} ====&lt;br /&gt;
{{par2| &lt;br /&gt;
{{fr§en&lt;br /&gt;
|Selon Dfg, les données sont organisées dans une structure {{m|arborescente}} (voir le § [[#parAggregations|«Les Agrégations»]] pour sa transformation en graphe) avec une {{m|racine unique}}. Les branches de l'arbre sont les {{m|classes}} et les feuilles sont les {{m|types primitifs}} de Dfg : {{mm|str}}, {{mm|int}}, {{mm|bool}}, {{mm|date}}, {{mm|flt}}. &lt;br /&gt;
&lt;br /&gt;
Chaque instance de classe doit avoir une {{m|unique classe parente}}, sauf pour la racine. La classe parente est responsable du cycle de vie des classes dites enfant. C'est l'association {{m|composition}} qui représente le mieux cette relation entre parent et enfant. Le nom de rôle côté losange noir, celui du côté parent ou rôle du côté A de l'association, est le nom de l'instance ou des instances du ou des enfant(s). &lt;br /&gt;
&lt;br /&gt;
L'unicité du parent impose une multiplicité de 1 du côté du losange noir et la syntaxe de la multiplicité du côté des enfants est décrite dans le  § [[#Cardinalit.C3.A9_et_Multiplicit.C3.A9_:_notation_-.E2.97.8A-_Cardinality_and_Multiplicity:_notation|«Cardinalité et Multiplicité : notation»]].  &lt;br /&gt;
|&lt;br /&gt;
}}&lt;br /&gt;
{{fig||dia_composition.png|composition_in_dia}}&lt;br /&gt;
}}&lt;br /&gt;
{{par2|&lt;br /&gt;
{{fr§en&lt;br /&gt;
|La figure {{clink|composition_in_dia}} montre l'emplacement du nom et cardinalité de la composition. Tandis que la figure {{clink|composition2_in_dia}} montre un exemple possible.&lt;br /&gt;
|&lt;br /&gt;
}}&lt;br /&gt;
{{fig||dia_composition2.png|composition2_in_dia}}&lt;br /&gt;
}}&lt;br /&gt;
{{par2|&lt;br /&gt;
{{fr§en&lt;br /&gt;
|Côté DfgUml la composition est défini principalement à l'aide des nœuds Xml {{mm|clInst}} et {{mm|clDefInst}}. &lt;br /&gt;
Ils composent la classe parente identifiée par l'attribut {{mm|type}} du nœud Xml parent avec leurs nœud Xml enfants dont les classes sont aussi identifiées par l'attribut {{mm|type}}. Dans l'exemple {{clink|composition2_dfg}} la classe {{mm|CParent}} compose avec la classe {{mm|CChild}}. &lt;br /&gt;
La différence entre {{mm|clInst}} et {{mm|clDefInst}} est illustrée par l'exemple {{clink|composition1_dfg}}; {{mm|clInst}} fait appel à une classe déjà défini par un autre nœud Xml, c'est une instance de cette définition, tandis que {{mm|clDefInst}} défini la classe (les … dans {{clink|composition1_dfg}} où un peut avoir des sous structures) en même temps que la composition même. &lt;br /&gt;
&lt;br /&gt;
Le nom de la composition du côté du losange noir est défini par l'attribut Xml {{mm|name}} de {{mm|clInst}} et {{mm|clDefInst}}. La cardinalité ou multiplicité du côté opposé du losange noir est défini par l'attribut Xml {{mm|card}}.&lt;br /&gt;
|&lt;br /&gt;
}}&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;clInst card=&amp;quot;+&amp;quot; name=&amp;quot;name1&amp;quot; type=&amp;quot;CChild&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;clDefInst card=&amp;quot;*&amp;quot; name=&amp;quot;name2&amp;quot; type=&amp;quot;CChild&amp;quot;&amp;gt;&lt;br /&gt;
  …&lt;br /&gt;
&amp;lt;/clDefInst&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|composition1_dfg|width=140ch}}&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;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;clDef type=&amp;quot;CParent&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;clInst accept=&amp;quot;CChild&amp;quot; card=&amp;quot;+&amp;quot; name=&amp;quot;name&amp;quot; type=&amp;quot;CChild&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/clDef&amp;gt;&lt;br /&gt;
    &amp;lt;clDef type=&amp;quot;CChild&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;clInst name=&amp;quot;composition&amp;quot; type=&amp;quot;CParent&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/grammar&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|composition2_dfg|width=140ch}}&lt;br /&gt;
&lt;br /&gt;
==== {{fr§en_title|Les Agrégations|Aggregations|{{sepLos}}}} ====&lt;br /&gt;
{{par2|&lt;br /&gt;
{{fr§en&lt;br /&gt;
|Le fait que chaque élément de données ne possède qu'un seul parent qui est aussi son propriétaire (si le parent est détruit ses enfants sont détruits), nous ne pouvons construire qu'une structure arborescente de nos données si l'on n'utilise que les compositions (voir le § [[#Les_Compositions_-.E2.97.8A-_Compositions|«Les Compositions»]]). Pour transformer l'{{m|arbre}} en {{m|graphe}} il faut ajouter des {{m|références}}, ce qui peut correspondre en Uml à des {{m|agrégations}}.&lt;br /&gt;
&lt;br /&gt;
Le nom de rôle côté losange blanc, celui du côté A de l'association, est le nom de référence sur la classe référencée. La multiplicité du côté du losange blanc est 1 car sinon il faudrait ajouter une autre instance côté de la classe référencée. La syntaxe de la multiplicité du côté de la classe référencée est décrite dans le  § [[#Cardinalit.C3.A9_et_Multiplicit.C3.A9_:_notation_-.E2.97.8A-_Cardinality_and_Multiplicity:_notation|«Cardinalité et Multiplicité : notation»]].&lt;br /&gt;
|&lt;br /&gt;
}}&lt;br /&gt;
{{fig||dia_aggregation.png|aggregation_in_dia}}&lt;br /&gt;
|parAggregations}}&lt;br /&gt;
{{par2|&lt;br /&gt;
{{fr§en&lt;br /&gt;
|La figure {{clink|aggregation_in_dia}} montre l'emplacement du nom et cardinalité de l'agrégation. Tandis que la figure {{clink|aggregation2_in_dia}} montre un exemple possible.&lt;br /&gt;
|&lt;br /&gt;
}}&lt;br /&gt;
{{fig||dia_aggregation2.png|aggregation2_in_dia}}&lt;br /&gt;
}}&lt;br /&gt;
{{par2|&lt;br /&gt;
{{fr§en&lt;br /&gt;
|La figure {{clink|aggregation3_in_dia}} met en scène d'un exemple où une composition et une agrégation pointe vers la même classe qui est ici {{mm|CReferencedClass}}.&lt;br /&gt;
|&lt;br /&gt;
}}&lt;br /&gt;
{{fig||dia_aggregation3.png|aggregation3_in_dia}}&lt;br /&gt;
}}&lt;br /&gt;
{{par2|&lt;br /&gt;
{{fr§en&lt;br /&gt;
|La figure {{clink|aggregation3_in_dfg}} montre le diagramme de la figure {{clink|aggregation3_in_dia}} converti par Dfg en un diagramme Uml dans le langage [http://plantuml.sourceforge.net PlantUml]].&lt;br /&gt;
|&lt;br /&gt;
}}&lt;br /&gt;
{{figuml||&lt;br /&gt;
abstract class CAlpha {&lt;br /&gt;
}&lt;br /&gt;
CAlpha  o-- &amp;quot;0..*&amp;quot; CReferencedClass : childRefs&lt;br /&gt;
CAlpha  *-- &amp;quot;0..*&amp;quot; CParent : parents&lt;br /&gt;
abstract class CReferencedClass {&lt;br /&gt;
}&lt;br /&gt;
abstract class CParent {&lt;br /&gt;
}&lt;br /&gt;
CParent  *-- &amp;quot;0..*&amp;quot; CReferencedClass : childs&lt;br /&gt;
|aggregation3_in_dfg}}&lt;br /&gt;
}}&lt;br /&gt;
{{par2|&lt;br /&gt;
{{fr§en&lt;br /&gt;
|Côté DfgUml l'agrégation est défini principalement à l'aide du seul nœud Xml {{mm|clRef}}. Il crée une référence dans la classe du nœud Xml parent sur la classe référencée par le nœud Xml enfant {{mm|clRef}}.&lt;br /&gt;
&lt;br /&gt;
Dans l'exemple {{clink|aggregation2_dfg}} la classe {{mm|CAlpha}} possède une référence nommée {{mm|childRefs}} sur le classe {{mm|CReferencedClass}}.&lt;br /&gt;
&lt;br /&gt;
Le nœud {{mm|clRef}} fait appel à une classe déjà défini par un autre nœud Xml, c'est une référence sur une ou plusieurs instances de cette définition.&lt;br /&gt;
Le nom de l'agrégation du côté du losange blanc est défini par l'attribut Xml {{mm|name}} de {{mm|clRef}} et la cardinalité ou multiplicité du côté opposé du losange blanc est défini par l'attribut Xml {{mm|card}}.&lt;br /&gt;
|}}&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;clRef card=&amp;quot;1:100&amp;quot; name=&amp;quot;referenceName&amp;quot; type=&amp;quot;CReferencedClass&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|aggregation1_dfg|width=140ch}}&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;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;clDef type=&amp;quot;CAlpha&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;clInst accept=&amp;quot;CParent&amp;quot; card=&amp;quot;*&amp;quot; name=&amp;quot;parents&amp;quot; type=&amp;quot;CParent&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;clRef accept=&amp;quot;CReferencedClass&amp;quot; card=&amp;quot;*&amp;quot; name=&amp;quot;childRefs&amp;quot; type=&amp;quot;CReferencedClass&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/clDef&amp;gt;&lt;br /&gt;
    &amp;lt;clDef type=&amp;quot;CReferencedClass&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;clDef type=&amp;quot;CParent&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;clInst accept=&amp;quot;CReferencedClass&amp;quot; card=&amp;quot;*&amp;quot; name=&amp;quot;childs&amp;quot; type=&amp;quot;CReferencedClass&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/clDef&amp;gt;&lt;br /&gt;
    &amp;lt;clInst name=&amp;quot;aggregation&amp;quot; type=&amp;quot;CAlpha&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/grammar&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|aggregation2_dfg|width=140ch}}&lt;br /&gt;
&lt;br /&gt;
=== {{fr§en_title|Héritage|Inheritance|{{sepLos}}}} ===&lt;br /&gt;
{{par2|&lt;br /&gt;
{{fr§en&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
}}&lt;br /&gt;
{{fig||dia_heritage.png|heritage_in_dia}}&lt;br /&gt;
{{figuml||&lt;br /&gt;
abstract class CAlpha {&lt;br /&gt;
}&lt;br /&gt;
abstract class CBeta {&lt;br /&gt;
}&lt;br /&gt;
CBeta --{{!}}&amp;gt; CAlpha&lt;br /&gt;
abstract class CGamma {&lt;br /&gt;
}&lt;br /&gt;
abstract class CDelta {&lt;br /&gt;
}&lt;br /&gt;
CDelta --{{!}}&amp;gt; CBeta&lt;br /&gt;
CDelta --{{!}}&amp;gt; CGamma&lt;br /&gt;
|heritage_in_dfg}}&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;clDef her=&amp;quot;CAlpha&amp;quot; type=&amp;quot;CBeta&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|heritage1_dfg|width=140ch}}&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;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;clDef type=&amp;quot;CAlpha&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;clDef her=&amp;quot;CAlpha&amp;quot; type=&amp;quot;CBeta&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;clDef type=&amp;quot;CGamma&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;clDef her=&amp;quot;CBeta:CGamma&amp;quot; type=&amp;quot;CDelta&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;clInst name=&amp;quot;heritage&amp;quot; type=&amp;quot;CAlpha&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/grammar&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|heritage2_dfg|width=140ch}}&lt;br /&gt;
&lt;br /&gt;
== {{fr§en_title|Notations et abréviations|Notations and Abbreviations|{{sepLos}}}} ==&lt;br /&gt;
{{par2|&lt;br /&gt;
{{fr§en|&lt;br /&gt;
* {{m|Def|#E8FFE8}} : définition&lt;br /&gt;
* {{m|Ex|#E8FFE8}} : exemple&lt;br /&gt;
* {{m|Not|#80FFB0}} : notation&lt;br /&gt;
* {{m|§|#E8E8FF}} : paragraphe&lt;br /&gt;
* {{m|Rm|#FFD080}} : remarque&lt;br /&gt;
|&lt;br /&gt;
* {{m|Def|#E8FFE8}} : definition&lt;br /&gt;
* {{m|Ex|#E8FFE8}} : example&lt;br /&gt;
* {{m|Not|#80FFB0}} : notation&lt;br /&gt;
* {{m|§|#E8E8FF}} : paragraph&lt;br /&gt;
* {{m|Rm|#FFD080}} : remark&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Références  ==&lt;br /&gt;
{{minitodo||||{{#atallref:}}}}&lt;br /&gt;
{{#atallref:}}&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</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"/>
		<updated>2026-07-24T17:08:38Z</updated>

		<summary type="html">&lt;p&gt;WikiAdmin : 1 version importée : dfg&lt;/p&gt;
&lt;hr /&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=Guide_de_R%C3%A9f%C3%A9rence_de_DfgUml&amp;diff=4978</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"/>
		<updated>2026-07-24T17:08:38Z</updated>

		<summary type="html">&lt;p&gt;WikiAdmin : 1 version importée : dfg&lt;/p&gt;
&lt;hr /&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:Versionnement&amp;diff=4976</id>
		<title>DataFlowGenerator:Versionnement</title>
		<link rel="alternate" type="text/html" href="https://wiki.bht.fr/index.php?title=DataFlowGenerator:Versionnement&amp;diff=4976"/>
		<updated>2026-07-24T17:08:31Z</updated>

		<summary type="html">&lt;p&gt;WikiAdmin : 1 version importée : dfg&lt;/p&gt;
&lt;hr /&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&amp;diff=4974</id>
		<title>DataFlowGenerator</title>
		<link rel="alternate" type="text/html" href="https://wiki.bht.fr/index.php?title=DataFlowGenerator&amp;diff=4974"/>
		<updated>2026-07-24T17:08:30Z</updated>

		<summary type="html">&lt;p&gt;WikiAdmin : 1 version importée : dfg&lt;/p&gt;
&lt;hr /&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:accept&amp;diff=4972</id>
		<title>DataFlowGenerator:accept</title>
		<link rel="alternate" type="text/html" href="https://wiki.bht.fr/index.php?title=DataFlowGenerator:accept&amp;diff=4972"/>
		<updated>2026-07-24T17:08:30Z</updated>

		<summary type="html">&lt;p&gt;WikiAdmin : 1 version importée : dfg&lt;/p&gt;
&lt;hr /&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:heritances&amp;diff=4970</id>
		<title>DataFlowGenerator:heritances</title>
		<link rel="alternate" type="text/html" href="https://wiki.bht.fr/index.php?title=DataFlowGenerator:heritances&amp;diff=4970"/>
		<updated>2026-07-24T17:08:30Z</updated>

		<summary type="html">&lt;p&gt;WikiAdmin : 1 version importée : dfg&lt;/p&gt;
&lt;hr /&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:lhelp&amp;diff=4968</id>
		<title>DataFlowGenerator:lhelp</title>
		<link rel="alternate" type="text/html" href="https://wiki.bht.fr/index.php?title=DataFlowGenerator:lhelp&amp;diff=4968"/>
		<updated>2026-07-24T17:08:30Z</updated>

		<summary type="html">&lt;p&gt;WikiAdmin : 1 version importée : dfg&lt;/p&gt;
&lt;hr /&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:shelp&amp;diff=4966</id>
		<title>DataFlowGenerator:shelp</title>
		<link rel="alternate" type="text/html" href="https://wiki.bht.fr/index.php?title=DataFlowGenerator:shelp&amp;diff=4966"/>
		<updated>2026-07-24T17:08:29Z</updated>

		<summary type="html">&lt;p&gt;WikiAdmin : 1 version importée : dfg&lt;/p&gt;
&lt;hr /&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:unit&amp;diff=4964</id>
		<title>DataFlowGenerator:unit</title>
		<link rel="alternate" type="text/html" href="https://wiki.bht.fr/index.php?title=DataFlowGenerator:unit&amp;diff=4964"/>
		<updated>2026-07-24T17:08:29Z</updated>

		<summary type="html">&lt;p&gt;WikiAdmin : 1 version importée : dfg&lt;/p&gt;
&lt;hr /&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:cardinality&amp;diff=4962</id>
		<title>DataFlowGenerator:cardinality</title>
		<link rel="alternate" type="text/html" href="https://wiki.bht.fr/index.php?title=DataFlowGenerator:cardinality&amp;diff=4962"/>
		<updated>2026-07-24T17:08:29Z</updated>

		<summary type="html">&lt;p&gt;WikiAdmin : 1 version importée : dfg&lt;/p&gt;
&lt;hr /&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:opt&amp;diff=4960</id>
		<title>DataFlowGenerator:opt</title>
		<link rel="alternate" type="text/html" href="https://wiki.bht.fr/index.php?title=DataFlowGenerator:opt&amp;diff=4960"/>
		<updated>2026-07-24T17:08:29Z</updated>

		<summary type="html">&lt;p&gt;WikiAdmin : 1 version importée : dfg&lt;/p&gt;
&lt;hr /&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:admissible_values&amp;diff=4958</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"/>
		<updated>2026-07-24T17:08:28Z</updated>

		<summary type="html">&lt;p&gt;WikiAdmin : 1 version importée : dfg&lt;/p&gt;
&lt;hr /&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:default_value&amp;diff=4956</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"/>
		<updated>2026-07-24T17:08:28Z</updated>

		<summary type="html">&lt;p&gt;WikiAdmin : 1 version importée : dfg&lt;/p&gt;
&lt;hr /&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:help&amp;diff=4954</id>
		<title>DataFlowGenerator:help</title>
		<link rel="alternate" type="text/html" href="https://wiki.bht.fr/index.php?title=DataFlowGenerator:help&amp;diff=4954"/>
		<updated>2026-07-24T17:08:28Z</updated>

		<summary type="html">&lt;p&gt;WikiAdmin : 1 version importée : dfg&lt;/p&gt;
&lt;hr /&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:name&amp;diff=4952</id>
		<title>DataFlowGenerator:name</title>
		<link rel="alternate" type="text/html" href="https://wiki.bht.fr/index.php?title=DataFlowGenerator:name&amp;diff=4952"/>
		<updated>2026-07-24T17:08:28Z</updated>

		<summary type="html">&lt;p&gt;WikiAdmin : 1 version importée : dfg&lt;/p&gt;
&lt;hr /&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:type&amp;diff=4950</id>
		<title>DataFlowGenerator:type</title>
		<link rel="alternate" type="text/html" href="https://wiki.bht.fr/index.php?title=DataFlowGenerator:type&amp;diff=4950"/>
		<updated>2026-07-24T17:08:28Z</updated>

		<summary type="html">&lt;p&gt;WikiAdmin : 1 version importée : dfg&lt;/p&gt;
&lt;hr /&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:reference&amp;diff=4948</id>
		<title>DataFlowGenerator:reference</title>
		<link rel="alternate" type="text/html" href="https://wiki.bht.fr/index.php?title=DataFlowGenerator:reference&amp;diff=4948"/>
		<updated>2026-07-24T17:08:28Z</updated>

		<summary type="html">&lt;p&gt;WikiAdmin : 1 version importée : dfg&lt;/p&gt;
&lt;hr /&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:OnlyDefinition&amp;diff=4946</id>
		<title>DataFlowGenerator:OnlyDefinition</title>
		<link rel="alternate" type="text/html" href="https://wiki.bht.fr/index.php?title=DataFlowGenerator:OnlyDefinition&amp;diff=4946"/>
		<updated>2026-07-24T17:08:27Z</updated>

		<summary type="html">&lt;p&gt;WikiAdmin : 1 version importée : dfg&lt;/p&gt;
&lt;hr /&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_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</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"/>
		<updated>2026-07-24T17:08:26Z</updated>

		<summary type="html">&lt;p&gt;WikiAdmin : 1 version importée : dfg&lt;/p&gt;
&lt;hr /&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=Data_Flow_Generator_Web&amp;diff=4942</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"/>
		<updated>2026-07-24T17:08:26Z</updated>

		<summary type="html">&lt;p&gt;WikiAdmin : 1 version importée : dfg&lt;/p&gt;
&lt;hr /&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_d%27utilisation_de_Data_Flow_Generator_V0&amp;diff=4940</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"/>
		<updated>2026-07-24T17:08:26Z</updated>

		<summary type="html">&lt;p&gt;WikiAdmin : 1 version importée : dfg&lt;/p&gt;
&lt;hr /&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=Tutoriel_de_Data_Flow_Generator_V0&amp;diff=4938</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"/>
		<updated>2026-07-24T17:08:24Z</updated>

		<summary type="html">&lt;p&gt;WikiAdmin : 1 version importée : dfg&lt;/p&gt;
&lt;hr /&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</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"/>
		<updated>2026-07-24T17:07:58Z</updated>

		<summary type="html">&lt;p&gt;WikiAdmin : 1 version importée : dfg&lt;/p&gt;
&lt;hr /&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</id>
		<title>DataFlowGenerator:summary</title>
		<link rel="alternate" type="text/html" href="https://wiki.bht.fr/index.php?title=DataFlowGenerator:summary&amp;diff=4934"/>
		<updated>2026-07-24T17:07:54Z</updated>

		<summary type="html">&lt;p&gt;WikiAdmin : 1 version importée : dfg&lt;/p&gt;
&lt;hr /&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>
	<entry>
		<id>https://wiki.bht.fr/index.php?title=MediaWiki:Sidebar&amp;diff=4932</id>
		<title>MediaWiki:Sidebar</title>
		<link rel="alternate" type="text/html" href="https://wiki.bht.fr/index.php?title=MediaWiki:Sidebar&amp;diff=4932"/>
		<updated>2026-06-14T18:30:16Z</updated>

		<summary type="html">&lt;p&gt;WikiAdmin : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;** randompage-url|randompage &lt;br /&gt;
*Α Β Γ Δ Ε Ζ Η Θ Ι Κ Λ Μ Ν Ξ Ο Π Ρ Σ Τ Υ Φ Χ Ψ Ω α β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ σ τ υ φ χ ψ ω { } [] ⟨⟩ Æ ∃ ∀ ⊤ ⊥ ¬ ∧ ∨ ⇔ ⇐ ⇒ ≤ ≠ ≥ ∈ ∋ ∉ ⊂ ⊃ ⊄ ⊆ ∪ ∩ ≡ ≝ ≜ 。◊ ∵ ∴ ∞ ℵ ∅∂ ∫ ≈ Δ δ ∇ ± × ÷ ⊗ ⊖ ★ ↦ ⟼ → ⟶ &lt;br /&gt;
** Symboles mathématiques|Symb. math.&lt;br /&gt;
* ⊕ ⊖ ★ ␣ … «…»  «» ‘…’ ‘’ “…” “” '…' '' &amp;quot;…&amp;quot; &amp;quot;&amp;quot; „“ ☚ ☛ ☜ ☞ ☟ ☠ ☡ ☢ ← ↑ → ↓ ↔ ↕ ⇄ ⇅ ↲ ↰ ↳ ↱ ◊ ↪ ↩ ⤻ ⤺ ⤹ ⤸ ⤿ ⤾ ⤴ ⤵ ⤷ ⤶ ⮍ ⮏ ⮎ ⮌ ↬, ↫&lt;br /&gt;
** Symboles|Symboles &lt;br /&gt;
* Boutiques&lt;br /&gt;
** https://www.bht-diffusion.com|BHT Diffusion Broderie&lt;br /&gt;
** https://www.electra-bike.fr/index.php|BHT Bike&lt;br /&gt;
* Mes wiki&lt;br /&gt;
** https://at.bht.fr| Racine&lt;br /&gt;
** https://at.bht.fr/paintWiki| Peinture&lt;br /&gt;
** https://at.bht.fr/musicWiki| Musique&lt;br /&gt;
** https://at.bht.fr/astroWiki| Astres&lt;br /&gt;
** https://wiki.bht.fr| Wiki&lt;br /&gt;
** http://at.bht.fr|Racine&lt;br /&gt;
* Admin&lt;br /&gt;
** Special:Allpages| Liste des pages&lt;br /&gt;
** Spécial:Importer| Importer&lt;br /&gt;
** Special:Recentchanges|Mod. réc.&lt;br /&gt;
** MediaWiki:Sidebar| MediaWiki:Sidebar&lt;br /&gt;
** MediaWiki:Common.css | css&lt;br /&gt;
* Astres&lt;br /&gt;
** https://www.sunearthtools.com/dp/tools/pos_sun.php?lang=fr&amp;amp;point=48.815122824097436,2.554336120783804#google_vignette | ☀ soleil&lt;/div&gt;</summary>
		<author><name>WikiAdmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.bht.fr/index.php?title=MediaWiki:Sidebar&amp;diff=4931</id>
		<title>MediaWiki:Sidebar</title>
		<link rel="alternate" type="text/html" href="https://wiki.bht.fr/index.php?title=MediaWiki:Sidebar&amp;diff=4931"/>
		<updated>2025-10-08T11:54:30Z</updated>

		<summary type="html">&lt;p&gt;WikiAdmin : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;** randompage-url|randompage &lt;br /&gt;
*Α Β Γ Δ Ε Ζ Η Θ Ι Κ Λ Μ Ν Ξ Ο Π Ρ Σ Τ Υ Φ Χ Ψ Ω α β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ σ τ υ φ χ ψ ω { } [] ⟨⟩ Æ ∃ ∀ ⊤ ⊥ ¬ ∧ ∨ ⇔ ⇐ ⇒ ≤ ≠ ≥ ∈ ∋ ∉ ⊂ ⊃ ⊄ ⊆ ∪ ∩ ≡ ≝ ≜ 。◊ ∵ ∴ ∞ ℵ ∅∂ ∫ ≈ Δ δ ∇ ± × ÷ ⊗ ⊖ ★ ↦ ⟼ → ⟶ &lt;br /&gt;
** Symboles mathématiques|Symb. math.&lt;br /&gt;
* ⊕ ⊖ ★ ␣ … «…»  «» ‘…’ ‘’ “…” “” '…' '' &amp;quot;…&amp;quot; &amp;quot;&amp;quot; „“ ☚ ☛ ☜ ☞ ☟ ☠ ☡ ☢ ← ↑ → ↓ ↔ ↕ ⇄ ⇅ ↲ ↰ ↳ ↱ ◊ ↪ ↩ ⤻ ⤺ ⤹ ⤸ ⤿ ⤾ ⤴ ⤵ ⤷ ⤶ ⮍ ⮏ ⮎ ⮌ ↬, ↫&lt;br /&gt;
** Symboles|Symboles &lt;br /&gt;
* Boutiques&lt;br /&gt;
** https://www.bht-diffusion.com|BHT Diffusion Broderie&lt;br /&gt;
** https://www.electra-bike.fr/index.php|BHT Bike&lt;br /&gt;
* Mes wiki&lt;br /&gt;
** https://at.bht.fr| Racine&lt;br /&gt;
** https://at.bht.fr/paintWiki| Peinture&lt;br /&gt;
** https://at.bht.fr/musicWiki| Musique&lt;br /&gt;
** https://at.bht.fr/astroWiki| Astres&lt;br /&gt;
** https://wiki.bht.fr| Wiki&lt;br /&gt;
** http://at.bht.fr|Racine&lt;br /&gt;
* Admin&lt;br /&gt;
** Special:Allpages| Liste des pages&lt;br /&gt;
** Spécial:Importer| Importer&lt;br /&gt;
** Special:Recentchanges|Mod. réc.&lt;br /&gt;
** MediaWiki:Sidebar| MediaWiki:Sidebar&lt;br /&gt;
** MediaWiki:Common.css | css&lt;/div&gt;</summary>
		<author><name>WikiAdmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.bht.fr/index.php?title=MediaWiki:Timeless.css&amp;diff=4930</id>
		<title>MediaWiki:Timeless.css</title>
		<link rel="alternate" type="text/html" href="https://wiki.bht.fr/index.php?title=MediaWiki:Timeless.css&amp;diff=4930"/>
		<updated>2025-10-08T11:48:45Z</updated>

		<summary type="html">&lt;p&gt;WikiAdmin : 1 version importée&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Tout CSS placé ici sera chargé avec les pages accédées par les utilisateurs de l’habillage Timeless */&lt;br /&gt;
/* CSS placed here will affect users of the Timeless skin */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
@import url(https://tools-static.wmflabs.org/fontcdn/css?family=Merriweather);&lt;br /&gt;
html {&lt;br /&gt;
    background: rgb(0,0,0) !important;&lt;br /&gt;
    height: 100%;&lt;br /&gt;
    font-size: 1.1em;&lt;br /&gt;
    filter: brightness(100%) contrast(100%) grayscale(0%) !important;&lt;br /&gt;
    -webkit-filter: brightness(100%) contrast(100%) grayscale(0%) !important;&lt;br /&gt;
    overflow-x: hidden;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
body, .wikitable {&lt;br /&gt;
    margin: 0;&lt;br /&gt;
    color: #ccccff;&lt;br /&gt;
    font-family: 'Merriweather', serif;&lt;br /&gt;
}&lt;br /&gt;
.wikitable &amp;gt; tr &amp;gt; th,&lt;br /&gt;
.wikitable &amp;gt; * &amp;gt; tr &amp;gt; th {&lt;br /&gt;
    background-color:#888;&lt;br /&gt;
    color: #ccccff;&lt;br /&gt;
    text-align:center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
h1 {&lt;br /&gt;
    color: white;&lt;br /&gt;
    text-shadow: 1px 1px 1px #000;&lt;br /&gt;
    font-size: 40px !important;&lt;br /&gt;
}&lt;br /&gt;
h1, h2, h3, h4, h5, h6 {&lt;br /&gt;
    color: #6699ff;&lt;br /&gt;
    font-family: 'Merriweather', serif;&lt;br /&gt;
}&lt;br /&gt;
*/&lt;br /&gt;
#personal .dropdown b {&lt;br /&gt;
    font-weight: normal;&lt;br /&gt;
}&lt;br /&gt;
b, strong {&lt;br /&gt;
    text-shadow: 1px 1px 1px #000;&lt;br /&gt;
}&lt;br /&gt;
#f-list {&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    font-size: 14px;&lt;br /&gt;
}&lt;br /&gt;
div.editOptions {&lt;br /&gt;
    border: #222;&lt;br /&gt;
    background: #111;&lt;br /&gt;
}&lt;br /&gt;
#mw-header-nav-hack {&lt;br /&gt;
    border-top: solid 2px #333;&lt;br /&gt;
    background: #111;&lt;br /&gt;
}&lt;br /&gt;
#mw-site-navigation .sidebar-inner {&lt;br /&gt;
    background: #111;&lt;br /&gt;
    border: 0;&lt;br /&gt;
    padding : 0;  /* ATMODIF */&lt;br /&gt;
}&lt;br /&gt;
@media screen and (min-width: 851px) {&lt;br /&gt;
#p-logo-text a {&lt;br /&gt;
    position: fixed;&lt;br /&gt;
    right: 75vw;&lt;br /&gt;
    color: #aaaadd; /* ATMODIF */&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
@media screen and (max-width: 850px) {&lt;br /&gt;
#p-logo-text {&lt;br /&gt;
    margin-top: 0;&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
@media screen and (max-width: 1099px) and (min-width: 851px) {&lt;br /&gt;
#p-logo-text a.long {&lt;br /&gt;
    padding-left: 7px;&lt;br /&gt;
    float: left;&lt;br /&gt;
    font-size: 23px !important;&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
@media screen and (max-width: 1099px) and (min-width: 851px) {&lt;br /&gt;
#mw-related-navigation .sidebar-inner {&lt;br /&gt;
    background: #111 !important;&lt;br /&gt;
    border: solid #222;&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
@media screen and (max-width: 1099px) and (min-width: 851px) {&lt;br /&gt;
#mw-site-navigation .sidebar-inner {&lt;br /&gt;
    background: #111;&lt;br /&gt;
    border: solid #222;&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
#mw-site-navigation .sidebar-chunk {&lt;br /&gt;
    border: outset #222;&lt;br /&gt;
    background: #111;&lt;br /&gt;
    /* box-shadow: 2px 2px 1px rgba(0,0,0,0.5); */&lt;br /&gt;
    box-shadow: none ;&lt;br /&gt;
    border-radius: 3px;&lt;br /&gt;
}&lt;br /&gt;
@media screen and (max-width: 851px) {&lt;br /&gt;
#mw-site-navigation .sidebar-chunk {&lt;br /&gt;
    /* padding: 0 15px 5px 20px; */&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
@media screen and (max-width: 1099px) and (min-width: 851px) {&lt;br /&gt;
#mw-site-navigation .sidebar-inner {&lt;br /&gt;
    background: #111 !important;&lt;br /&gt;
    border: solid #222 !important;&lt;br /&gt;
    &lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output  {&lt;br /&gt;
    color: #C4C0C8 ; /* org : #ff9900; text default color AT TODO */&lt;br /&gt;
}&lt;br /&gt;
#searchInput {&lt;br /&gt;
    padding: 0.2em 4.5em 0.2em 2em !important;&lt;br /&gt;
    margin: 0;&lt;br /&gt;
}&lt;br /&gt;
#searchInput-container {&lt;br /&gt;
    background: #111;&lt;br /&gt;
    /* height: 35px;  ATMODIF */&lt;br /&gt;
}&lt;br /&gt;
#simpleSearch {&lt;br /&gt;
    border: inset 1px #000;&lt;br /&gt;
    border-radius: 3px;&lt;br /&gt;
    background: #111;&lt;br /&gt;
    /* height: 35px;  ATMODIF */&lt;br /&gt;
    /* width: 48vw;  ATMODIF */&lt;br /&gt;
    width: 210mm; /* ATMODIF */&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    left: 0;&lt;br /&gt;
    right: 0;&lt;br /&gt;
    margin-left: auto;&lt;br /&gt;
    margin-right: auto;&lt;br /&gt;
    top: 7px;&lt;br /&gt;
}&lt;br /&gt;
#user-tools {&lt;br /&gt;
    position: fixed;&lt;br /&gt;
    right: 86px;&lt;br /&gt;
}&lt;br /&gt;
@media screen and (min-width: 851px) {&lt;br /&gt;
#user-tools {&lt;br /&gt;
    left: 74vw;&lt;br /&gt;
    top: 5px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-notification {&lt;br /&gt;
    background: #111;&lt;br /&gt;
    border: #222;&lt;br /&gt;
    background: #111;&lt;br /&gt;
    border-radius: 5px;&lt;br /&gt;
    color: #999;&lt;br /&gt;
    width: 200px;&lt;br /&gt;
}&lt;br /&gt;
.postedit-container {&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    left: 0;&lt;br /&gt;
    right: 0;&lt;br /&gt;
    margin-left: auto;&lt;br /&gt;
    margin-right: auto;&lt;br /&gt;
    padding: 0;&lt;br /&gt;
    padding: 15px 0 15px 15px;&lt;br /&gt;
    text-align: right;&lt;br /&gt;
}&lt;br /&gt;
.postedit-icon {&lt;br /&gt;
    margin: auto;&lt;br /&gt;
    padding: 0;&lt;br /&gt;
}&lt;br /&gt;
.mw-wiki-logo {&lt;br /&gt;
    background-size: contain;&lt;br /&gt;
}&lt;br /&gt;
#mw-header-container {&lt;br /&gt;
    background: #111;&lt;br /&gt;
    padding : 0em; /* ATMODIF */&lt;br /&gt;
    color: #ccccff; /* ATMODIF */&lt;br /&gt;
}&lt;br /&gt;
#mw-header {&lt;br /&gt;
    width: 100%;&lt;br /&gt;
    max-width: 100%;&lt;br /&gt;
    padding: 0;&lt;br /&gt;
    position: static;&lt;br /&gt;
}&lt;br /&gt;
@media screen and (max-width: 850px) {&lt;br /&gt;
#menus-cover {&lt;br /&gt;
    background: #000;&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
@media screen and (max-width: 850px) {&lt;br /&gt;
#personal h2 {&lt;br /&gt;
    display: none;searchInput-container&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
#mw-content-container {&lt;br /&gt;
    background: #000;&lt;br /&gt;
}&lt;br /&gt;
@media screen and (max-width: 850px) {&lt;br /&gt;
#mw-content-block {&lt;br /&gt;
    background: #000;&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
@media screen and (max-width: 850px) {&lt;br /&gt;
#site-tools h2 {&lt;br /&gt;
    right: 3em;&lt;br /&gt;
    top: 0.9em;&lt;br /&gt;
    padding-bottom: 5px;&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
@media screen and (max-width: 850px) {&lt;br /&gt;
#p-logo-text a.long {&lt;br /&gt;
    width: 100%;&lt;br /&gt;
    top: 7px;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    font-size: 40px !important;&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
@media screen and (min-width: 851px) {&lt;br /&gt;
#p-logo-text {&lt;br /&gt;
    width: 29em;&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
@media screen and (min-width: 851px) {&lt;br /&gt;
#personal h2:after {&lt;br /&gt;
    width: 1px;&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
@media screen and (max-width: 850px) {&lt;br /&gt;
#p-logo-text {&lt;br /&gt;
    position: static;&lt;br /&gt;
    left: 0 !important;&lt;br /&gt;
    right: 0;&lt;br /&gt;
    margin-left: 0;&lt;br /&gt;
    margin-right: 0;&lt;br /&gt;
    width: 100%;&lt;br /&gt;
    top: 3.3em;&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
 @media only screen and (min-width: 992px) and (max-width:768px) {&lt;br /&gt;
 #p-logo-text {&lt;br /&gt;
 right:74vw;&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
@media only screen and (min-width: 900px) and (max-width:100px) {&lt;br /&gt;
#p-logo-text {&lt;br /&gt;
    right: 74vw;&lt;br /&gt;
    top: 3em;&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
@media screen and (max-width: 900px) and (min-width: 100px) {&lt;br /&gt;
#p-logo-text a.long {&lt;br /&gt;
    font-size: 43px !important;&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
@media screen and (max-width: 1700px) and (min-width: 800px) {&lt;br /&gt;
#p-logo-text {&lt;br /&gt;
    left: 12px !important;&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
@media screen and (max-width: 1700px) and (mix: 851px) {&lt;br /&gt;
#mw-site-navigation {&lt;br /&gt;
    background: #000;&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-page-header-links li.selected a {&lt;br /&gt;
    color: #cccc00;&lt;br /&gt;
}&lt;br /&gt;
#mw-related-navigation .sidebar-chunk {&lt;br /&gt;
    background: #111;&lt;br /&gt;
    border: outset #222;&lt;br /&gt;
    /* box-shadow: 2px 2px 1px rgba(0,0,0,0.5); */&lt;br /&gt;
    border-radius: 3px;&lt;br /&gt;
}&lt;br /&gt;
@media screen and (max-width: 1099px) and (min-width: 851px) {&lt;br /&gt;
#mw-related-navigation .sidebar-chunk {&lt;br /&gt;
    background: #111;&lt;br /&gt;
    border: outset #222;&lt;br /&gt;
    /* box-shadow: 2px 2px 1px rgba(0,0,0,0.5); */&lt;br /&gt;
    border-radius: 3px;&lt;br /&gt;
    padding: 0 15px 5px 20px;&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
.color-middle-container, .ts-inner {&lt;br /&gt;
    padding: 0;&lt;br /&gt;
}&lt;br /&gt;
#p-logo-text {&lt;br /&gt;
    left: 120px;&lt;br /&gt;
}&lt;br /&gt;
#p-logo-text a.long {&lt;br /&gt;
    padding-top: 5px;&lt;br /&gt;
    padding-left: 6px;&lt;br /&gt;
    font-size: 30px;&lt;br /&gt;
    text-shadow: 1px 1px 1px #222;&lt;br /&gt;
}&lt;br /&gt;
#p-search {&lt;br /&gt;
    width: 70em;&lt;br /&gt;
    padding-right: 33px;&lt;br /&gt;
}&lt;br /&gt;
#personal .dropdown h3 {&lt;br /&gt;
    line-height: 25px;&lt;br /&gt;
}&lt;br /&gt;
#personal h2 {&lt;br /&gt;
    text-shadow: 2px 2px 0 #111;&lt;br /&gt;
    padding-top: 7px;&lt;br /&gt;
    font-size: 24px;&lt;br /&gt;
    text-transform: lowercase;&lt;br /&gt;
}&lt;br /&gt;
#personal .dropdown {&lt;br /&gt;
    background: #222!important;&lt;br /&gt;
    border: solid #000;&lt;br /&gt;
}&lt;br /&gt;
.codeEditor-status {&lt;br /&gt;
    color: #000;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-labelElement-label {&lt;br /&gt;
    text-shadow: 1px 2px #111;&lt;br /&gt;
}&lt;br /&gt;
#iframeframe {&lt;br /&gt;
    height: 700px;&lt;br /&gt;
}&lt;br /&gt;
#wpSave {&lt;br /&gt;
    text-shadow: 2px 2px 2px #000 !important&lt;br /&gt;
}&lt;br /&gt;
#mw-footer-container {&lt;br /&gt;
    background: #000;&lt;br /&gt;
    padding-top: 1em;&lt;br /&gt;
}&lt;br /&gt;
fieldset {&lt;br /&gt;
    background: #222!important;&lt;br /&gt;
    border: solid #111;&lt;br /&gt;
}&lt;br /&gt;
input {&lt;br /&gt;
    background: #111;&lt;br /&gt;
    border: solid 1px #111!important;&lt;br /&gt;
    border-radius: 2px;&lt;br /&gt;
    padding-left: 5px;&lt;br /&gt;
    color: #999;&lt;br /&gt;
}&lt;br /&gt;
.mw-ui-button.mw-ui-progressive, .mw-ui-button.mw-ui-progressive:active, .mw-ui-button.mw-ui-progressive.mw-ui-checked, input[type='submit'], input[type='button'], button {&lt;br /&gt;
    border: solid 1px #222!important;&lt;br /&gt;
    border-bottom: 0!important;&lt;br /&gt;
    text-shadow: 0 0 0 #000 !important;&lt;br /&gt;
    border-bottom: solid 1px #222!important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-flaggedElement-destructive {&lt;br /&gt;
    background: #111;&lt;br /&gt;
    border: 1px solid #444;&lt;br /&gt;
    color: #FF3333 !important;&lt;br /&gt;
    padding-left: 15px !important;&lt;br /&gt;
    padding-right: 15px !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-flaggedElement-destructive:hover {&lt;br /&gt;
    background: #222;&lt;br /&gt;
    color: #CC0000 !important;&lt;br /&gt;
}&lt;br /&gt;
#searchInput {&lt;br /&gt;
    border: 0!important;&lt;br /&gt;
}&lt;br /&gt;
@media screen and (max-width: 850px) {&lt;br /&gt;
#searchInput {&lt;br /&gt;
    padding: 0 0 0 6px !important;&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-textInputWidget input, .oo-ui-textInputWidget textarea {&lt;br /&gt;
    background-color: #111;&lt;br /&gt;
    color: #fff;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-textInputWidget &amp;gt; .oo-ui-labelElement-label {&lt;br /&gt;
    line-height: 0.5em;&lt;br /&gt;
}&lt;br /&gt;
#pagehistory li.selected {&lt;br /&gt;
    background-color: #555;&lt;br /&gt;
}&lt;br /&gt;
.warningbox {&lt;br /&gt;
    background: #1d1d16;&lt;br /&gt;
}&lt;br /&gt;
.mw-plusminus-neg {&lt;br /&gt;
    color: #FF0000;&lt;br /&gt;
}&lt;br /&gt;
#searchButton, #mw-searchButton {&lt;br /&gt;
    border: 0 !important;&lt;br /&gt;
    left: 38vw;&lt;br /&gt;
    right: 0;&lt;br /&gt;
    margin-left: auto;&lt;br /&gt;
    margin-right: auto;&lt;br /&gt;
}&lt;br /&gt;
#mw-footer .footer-places li {&lt;br /&gt;
    float: right;&lt;br /&gt;
    display: block;&lt;br /&gt;
}&lt;br /&gt;
#mw-footer ul, #mw-footer li {&lt;br /&gt;
    margin: 0 auto;&lt;br /&gt;
}&lt;br /&gt;
#mw-footer #lastmod {&lt;br /&gt;
    float: left;&lt;br /&gt;
    left: 25px;&lt;br /&gt;
}&lt;br /&gt;
.diff-addedline .diffchange {&lt;br /&gt;
    background: #1d1d16;&lt;br /&gt;
    padding-left: 7px;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-buttonElement.oo-ui-labelElement &amp;gt; input.oo-ui-buttonElement-button, .oo-ui-buttonElement.oo-ui-labelElement &amp;gt; .oo-ui-buttonElement-button &amp;gt; .oo-ui-labelElement-label {&lt;br /&gt;
    text-shadow: 0 0 0 #000 !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-labelElement-label {&lt;br /&gt;
    text-shadow: 0 0 0 #000&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-panelLayout-expanded {&lt;br /&gt;
    background: #222;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-messageDialog-message {&lt;br /&gt;
    color: #999;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-buttonElement-frameless.oo-ui-widget-enabled &amp;gt; .oo-ui-buttonElement-button {&lt;br /&gt;
    color: #999;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-messageDialog-actions-horizontal .oo-ui-actionWidget {&lt;br /&gt;
    border-right: 1px solid #111&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-dialog-content &amp;gt; .oo-ui-window-body {&lt;br /&gt;
    outline: 1px solid #111;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-messageDialog-content &amp;gt; .oo-ui-window-foot {&lt;br /&gt;
    outline: 1px solid #111;&lt;br /&gt;
}&lt;br /&gt;
.wikiEditor-ui .wikiEditor-ui-view {&lt;br /&gt;
    border: 1px solid #000;&lt;br /&gt;
}&lt;br /&gt;
.wikiEditor-ui .wikiEditor-ui-top {&lt;br /&gt;
    border-bottom: 1px solid #000;&lt;br /&gt;
}&lt;br /&gt;
textarea[style] {&lt;br /&gt;
    background: #111 !important;&lt;br /&gt;
    color: #fff;&lt;br /&gt;
}&lt;br /&gt;
pre, .mw-code {&lt;br /&gt;
    background: #112;&lt;br /&gt;
    color: #B0B0B0;&lt;br /&gt;
    border: 1px solid #444;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-iconWidget.oo-ui-iconElement.oo-ui-iconElement-icon {&lt;br /&gt;
    background-color: #B0B0B0;&lt;br /&gt;
    border: 1px solid #333;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/****************************************************************/&lt;br /&gt;
#p-top-label{ padding-left: 0.2em; }&lt;br /&gt;
#mw-site-navigation, #mw-related-navigation, .sidebar-chunk, .mw-portlet-body {&lt;br /&gt;
  margin: 0; padding: 0;&lt;br /&gt;
  padding-left: 0.1em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen {&lt;br /&gt;
&lt;br /&gt;
.mw-body .mw-parser-output h1::after, .mw-body .mw-parser-output h2::after {&lt;br /&gt;
  content: '';&lt;br /&gt;
  display: block;&lt;br /&gt;
  /* border-bottom: solid 2px #c8ccd1; */&lt;br /&gt;
  border-bottom: none;&lt;br /&gt;
  overflow: hidden;&lt;br /&gt;
} &lt;br /&gt;
&lt;br /&gt;
  #mw-content {&lt;br /&gt;
    background: #222;&lt;br /&gt;
    border: solid #946c20;&lt;br /&gt;
    -webkit-border-bottom-right-radius: 4px;&lt;br /&gt;
    -webkit-border-bottom-left-radius: 4px;&lt;br /&gt;
    -moz-border-radius-bottomright: 4px;&lt;br /&gt;
    -moz-border-radius-bottomleft: 4px;&lt;br /&gt;
    border-bottom-right-radius: 4px;&lt;br /&gt;
    border-bottom-left-radius: 4px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* Personnaliser l'apparence de la barre latérale */&lt;br /&gt;
#site-navigation {&lt;br /&gt;
    background-color: #f0f0f0;&lt;br /&gt;
    padding: 10px;&lt;br /&gt;
    border-radius: 5px;&lt;br /&gt;
}&lt;br /&gt;
#site-tools {&lt;br /&gt;
    background-color: #e0e0e0;&lt;br /&gt;
    padding: 10px;&lt;br /&gt;
    border-radius: 5px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-portlet-body { margin-bottom: 0em; } /* ATTODO espace barre latérale */&lt;br /&gt;
.mw-portlet-body { margin-bottom: 0em; } /* ATTODO espace barre latérale */&lt;br /&gt;
.sidebar-inner { margin-bottom: 0em; } /* ATTODO espace barre latérale */&lt;br /&gt;
&lt;br /&gt;
@media screen and (min-width: 1340px) { /* ATTODO espace barre latérale */&lt;br /&gt;
    #mw-site-navigation .sidebar-chunk .mw-portlet-body {&lt;br /&gt;
        margin-bottom: 0em;&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=MediaWiki:Sidebar&amp;diff=4928</id>
		<title>MediaWiki:Sidebar</title>
		<link rel="alternate" type="text/html" href="https://wiki.bht.fr/index.php?title=MediaWiki:Sidebar&amp;diff=4928"/>
		<updated>2025-10-08T08:53:10Z</updated>

		<summary type="html">&lt;p&gt;WikiAdmin : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;** randompage-url|randompage&lt;br /&gt;
*Α Β Γ Δ Ε Ζ Η Θ Ι Κ Λ Μ Ν Ξ Ο Π Ρ Σ Τ Υ Φ Χ Ψ Ω α β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ σ τ υ φ χ ψ ω { } [] ⟨⟩ Æ ∃ ∀ ⊤ ⊥ ¬ ∧ ∨ ⇔ ⇐ ⇒ ≤ ≠ ≥ ∈ ∋ ∉ ⊂ ⊃ ⊄ ⊆ ∪ ∩ ≡ ≝ ≜ 。◊ ∵ ∴ ∞ ℵ ∅∂ ∫ ≈ Δ δ ∇ ± × ÷ ⊗ ⊖ ★ ↦ ⟼ → ⟶ &lt;br /&gt;
** Symboles mathématiques|Symb. math.&lt;br /&gt;
* ⊕ ⊖ ★ ␣ … «…»  «» ‘…’ ‘’ “…” “” '…' '' &amp;quot;…&amp;quot; &amp;quot;&amp;quot; „“ ☚ ☛ ☜ ☞ ☟ ☠ ☡ ☢ ← ↑ → ↓ ↔ ↕ ⇄ ⇅ ↲ ↰ ↳ ↱ ◊ ↪ ↩ ⤻ ⤺ ⤹ ⤸ ⤿ ⤾ ⤴ ⤵ ⤷ ⤶ ⮍ ⮏ ⮎ ⮌ ↬, ↫&lt;br /&gt;
** Symboles|Symboles &lt;br /&gt;
* Boutiques&lt;br /&gt;
** https://www.bht-diffusion.com|BHT Diffusion Broderie&lt;br /&gt;
** https://www.electra-bike.fr/index.php|BHT Bike&lt;br /&gt;
* Mes wiki&lt;br /&gt;
** https://at.bht.fr| Racine&lt;br /&gt;
** https://at.bht.fr/paintWiki| Peinture&lt;br /&gt;
** https://at.bht.fr/musicWiki| Musique&lt;br /&gt;
** https://at.bht.fr/astroWiki| Astres&lt;br /&gt;
** https://wiki.bht.fr| Wiki&lt;br /&gt;
** http://at.bht.fr|Racine&lt;br /&gt;
* Admin&lt;br /&gt;
** Special:Allpages| Liste des pages&lt;br /&gt;
** Spécial:Importer| Importer&lt;br /&gt;
** Special:Recentchanges|Mod. réc.&lt;br /&gt;
** MediaWiki:Sidebar| MediaWiki:Sidebar&lt;br /&gt;
** MediaWiki:Common.css | css&lt;/div&gt;</summary>
		<author><name>WikiAdmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.bht.fr/index.php?title=MediaWiki:Sidebar&amp;diff=4927</id>
		<title>MediaWiki:Sidebar</title>
		<link rel="alternate" type="text/html" href="https://wiki.bht.fr/index.php?title=MediaWiki:Sidebar&amp;diff=4927"/>
		<updated>2025-10-08T08:52:34Z</updated>

		<summary type="html">&lt;p&gt;WikiAdmin : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;** randompage-url|randompage&lt;br /&gt;
Α Β Γ Δ Ε Ζ Η Θ Ι Κ Λ Μ Ν Ξ Ο Π Ρ Σ Τ Υ Φ Χ Ψ Ω α β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ σ τ υ φ χ ψ ω { } [] ⟨⟩ Æ ∃ ∀ ⊤ ⊥ ¬ ∧ ∨ ⇔ ⇐ ⇒ ≤ ≠ ≥ ∈ ∋ ∉ ⊂ ⊃ ⊄ ⊆ ∪ ∩ ≡ ≝ ≜ 。◊ ∵ ∴ ∞ ℵ ∅∂ ∫ ≈ Δ δ ∇ ± × ÷ ⊗ ⊖ ★ ↦ ⟼ → ⟶ &lt;br /&gt;
** Symboles mathématiques|Symb. math.&lt;br /&gt;
* ⊕ ⊖ ★ ␣ … «…»  «» ‘…’ ‘’ “…” “” '…' '' &amp;quot;…&amp;quot; &amp;quot;&amp;quot; „“ ☚ ☛ ☜ ☞ ☟ ☠ ☡ ☢ ← ↑ → ↓ ↔ ↕ ⇄ ⇅ ↲ ↰ ↳ ↱ ◊ ↪ ↩ ⤻ ⤺ ⤹ ⤸ ⤿ ⤾ ⤴ ⤵ ⤷ ⤶ ⮍ ⮏ ⮎ ⮌ ↬, ↫&lt;br /&gt;
** Symboles|Symboles &lt;br /&gt;
* Boutiques&lt;br /&gt;
** https://www.bht-diffusion.com|BHT Diffusion Broderie&lt;br /&gt;
** https://www.electra-bike.fr/index.php|BHT Bike&lt;br /&gt;
* Mes wiki&lt;br /&gt;
** https://at.bht.fr| Racine&lt;br /&gt;
** https://at.bht.fr/paintWiki| Peinture&lt;br /&gt;
** https://at.bht.fr/musicWiki| Musique&lt;br /&gt;
** https://at.bht.fr/astroWiki| Astres&lt;br /&gt;
** https://wiki.bht.fr| Wiki&lt;br /&gt;
** http://at.bht.fr|Racine&lt;br /&gt;
* Admin&lt;br /&gt;
** Special:Allpages| Liste des pages&lt;br /&gt;
** Spécial:Importer| Importer&lt;br /&gt;
** Special:Recentchanges|Mod. réc.&lt;br /&gt;
** MediaWiki:Sidebar| MediaWiki:Sidebar&lt;br /&gt;
** MediaWiki:Common.css | css&lt;/div&gt;</summary>
		<author><name>WikiAdmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.bht.fr/index.php?title=MediaWiki:Sidebar&amp;diff=4926</id>
		<title>MediaWiki:Sidebar</title>
		<link rel="alternate" type="text/html" href="https://wiki.bht.fr/index.php?title=MediaWiki:Sidebar&amp;diff=4926"/>
		<updated>2025-10-08T08:51:57Z</updated>

		<summary type="html">&lt;p&gt;WikiAdmin : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* randompage-url|randompage&lt;br /&gt;
* Α Β Γ Δ Ε Ζ Η Θ Ι Κ Λ Μ Ν Ξ Ο Π Ρ Σ Τ Υ Φ Χ Ψ Ω α β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ σ τ υ φ χ ψ ω { } [] ⟨⟩ Æ ∃ ∀ ⊤ ⊥ ¬ ∧ ∨ ⇔ ⇐ ⇒ ≤ ≠ ≥ ∈ ∋ ∉ ⊂ ⊃ ⊄ ⊆ ∪ ∩ ≡ ≝ ≜ 。◊ ∵ ∴ ∞ ℵ ∅∂ ∫ ≈ Δ δ ∇ ± × ÷ ⊗ ⊖ ★ ↦ ⟼ → ⟶ &lt;br /&gt;
** Symboles mathématiques|Symb. math.&lt;br /&gt;
* ⊕ ⊖ ★ ␣ … «…»  «» ‘…’ ‘’ “…” “” '…' '' &amp;quot;…&amp;quot; &amp;quot;&amp;quot; „“ ☚ ☛ ☜ ☞ ☟ ☠ ☡ ☢ ← ↑ → ↓ ↔ ↕ ⇄ ⇅ ↲ ↰ ↳ ↱ ◊ ↪ ↩ ⤻ ⤺ ⤹ ⤸ ⤿ ⤾ ⤴ ⤵ ⤷ ⤶ ⮍ ⮏ ⮎ ⮌ ↬, ↫&lt;br /&gt;
** Symboles|Symboles &lt;br /&gt;
* Boutiques&lt;br /&gt;
** https://www.bht-diffusion.com|BHT Diffusion Broderie&lt;br /&gt;
** https://www.electra-bike.fr/index.php|BHT Bike&lt;br /&gt;
* Mes wiki&lt;br /&gt;
** https://at.bht.fr| Racine&lt;br /&gt;
** https://at.bht.fr/paintWiki| Peinture&lt;br /&gt;
** https://at.bht.fr/musicWiki| Musique&lt;br /&gt;
** https://at.bht.fr/astroWiki| Astres&lt;br /&gt;
** https://wiki.bht.fr| Wiki&lt;br /&gt;
** http://at.bht.fr|Racine&lt;br /&gt;
* Admin&lt;br /&gt;
** Special:Allpages| Liste des pages&lt;br /&gt;
** Spécial:Importer| Importer&lt;br /&gt;
** Special:Recentchanges|Mod. réc.&lt;br /&gt;
** MediaWiki:Sidebar| MediaWiki:Sidebar&lt;br /&gt;
** MediaWiki:Common.css | css&lt;/div&gt;</summary>
		<author><name>WikiAdmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.bht.fr/index.php?title=MediaWiki:Sidebar&amp;diff=4925</id>
		<title>MediaWiki:Sidebar</title>
		<link rel="alternate" type="text/html" href="https://wiki.bht.fr/index.php?title=MediaWiki:Sidebar&amp;diff=4925"/>
		<updated>2025-10-08T08:51:40Z</updated>

		<summary type="html">&lt;p&gt;WikiAdmin : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;** randompage-url|randompage&lt;br /&gt;
* Α Β Γ Δ Ε Ζ Η Θ Ι Κ Λ Μ Ν Ξ Ο Π Ρ Σ Τ Υ Φ Χ Ψ Ω α β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ σ τ υ φ χ ψ ω { } [] ⟨⟩ Æ ∃ ∀ ⊤ ⊥ ¬ ∧ ∨ ⇔ ⇐ ⇒ ≤ ≠ ≥ ∈ ∋ ∉ ⊂ ⊃ ⊄ ⊆ ∪ ∩ ≡ ≝ ≜ 。◊ ∵ ∴ ∞ ℵ ∅∂ ∫ ≈ Δ δ ∇ ± × ÷ ⊗ ⊖ ★ ↦ ⟼ → ⟶ &lt;br /&gt;
** Symboles mathématiques|Symb. math.&lt;br /&gt;
* ⊕ ⊖ ★ ␣ … «…»  «» ‘…’ ‘’ “…” “” '…' '' &amp;quot;…&amp;quot; &amp;quot;&amp;quot; „“ ☚ ☛ ☜ ☞ ☟ ☠ ☡ ☢ ← ↑ → ↓ ↔ ↕ ⇄ ⇅ ↲ ↰ ↳ ↱ ◊ ↪ ↩ ⤻ ⤺ ⤹ ⤸ ⤿ ⤾ ⤴ ⤵ ⤷ ⤶ ⮍ ⮏ ⮎ ⮌ ↬, ↫&lt;br /&gt;
** Symboles|Symboles &lt;br /&gt;
* Boutiques&lt;br /&gt;
** https://www.bht-diffusion.com|BHT Diffusion Broderie&lt;br /&gt;
** https://www.electra-bike.fr/index.php|BHT Bike&lt;br /&gt;
* Mes wiki&lt;br /&gt;
** https://at.bht.fr| Racine&lt;br /&gt;
** https://at.bht.fr/paintWiki| Peinture&lt;br /&gt;
** https://at.bht.fr/musicWiki| Musique&lt;br /&gt;
** https://at.bht.fr/astroWiki| Astres&lt;br /&gt;
** https://wiki.bht.fr| Wiki&lt;br /&gt;
** http://at.bht.fr|Racine&lt;br /&gt;
* Admin&lt;br /&gt;
** Special:Allpages| Liste des pages&lt;br /&gt;
** Spécial:Importer| Importer&lt;br /&gt;
** Special:Recentchanges|Mod. réc.&lt;br /&gt;
** MediaWiki:Sidebar| MediaWiki:Sidebar&lt;br /&gt;
** MediaWiki:Common.css | css&lt;/div&gt;</summary>
		<author><name>WikiAdmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.bht.fr/index.php?title=Mod%C3%A8le:MRDo&amp;diff=4924</id>
		<title>Modèle:MRDo</title>
		<link rel="alternate" type="text/html" href="https://wiki.bht.fr/index.php?title=Mod%C3%A8le:MRDo&amp;diff=4924"/>
		<updated>2024-12-18T12:07:21Z</updated>

		<summary type="html">&lt;p&gt;WikiAdmin : 1 version importée&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;&amp;lt;span class='rdoInfo'&amp;gt;{{{1}}}&amp;lt;/span&amp;gt;&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{Model&lt;br /&gt;
|class=form&lt;br /&gt;
|texte=Mise en forme du texte dans le style {{m|RDo rule to do, to adopt}}.&lt;br /&gt;
|syntaxe=&amp;lt;nowiki&amp;gt;{{mRDo|mot}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|specification=&lt;br /&gt;
;texte&lt;br /&gt;
:le texte à mettre en forme.&lt;br /&gt;
}}&lt;br /&gt;
Exemple :&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;{{mRDo|La vie est belle}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
donnera :&lt;br /&gt;
 &lt;br /&gt;
{{mRDo|La vie est belle}}&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:MAno&amp;diff=4922</id>
		<title>Modèle:MAno</title>
		<link rel="alternate" type="text/html" href="https://wiki.bht.fr/index.php?title=Mod%C3%A8le:MAno&amp;diff=4922"/>
		<updated>2024-12-18T12:07:20Z</updated>

		<summary type="html">&lt;p&gt;WikiAdmin : 1 version importée&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;&amp;lt;span class='anoInfo'&amp;gt;{{{1}}}&amp;lt;/span&amp;gt;&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{Model&lt;br /&gt;
|class=form&lt;br /&gt;
|texte=Mise en forme du texte dans le style {{m|Ano anomaly}}.&lt;br /&gt;
|syntaxe=&amp;lt;nowiki&amp;gt;{{mAno|mot}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|specification=&lt;br /&gt;
;texte&lt;br /&gt;
:le texte à mettre en forme.&lt;br /&gt;
}}&lt;br /&gt;
Exemple :&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;{{mAno|La vie est belle}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
donnera :&lt;br /&gt;
 &lt;br /&gt;
{{mAno|La vie est belle}}&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:MDef&amp;diff=4920</id>
		<title>Modèle:MDef</title>
		<link rel="alternate" type="text/html" href="https://wiki.bht.fr/index.php?title=Mod%C3%A8le:MDef&amp;diff=4920"/>
		<updated>2024-12-18T12:07:20Z</updated>

		<summary type="html">&lt;p&gt;WikiAdmin : 1 version importée&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;&amp;lt;span class='defInfo'&amp;gt;{{{1}}}&amp;lt;/span&amp;gt;&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{Model&lt;br /&gt;
|class=form&lt;br /&gt;
|texte=Mise en forme du texte dans le style {{m|Def definition}}.&lt;br /&gt;
|syntaxe=&amp;lt;nowiki&amp;gt;{{mDef|mot}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|specification=&lt;br /&gt;
;texte&lt;br /&gt;
:le texte à mettre en forme.&lt;br /&gt;
}}&lt;br /&gt;
Exemple :&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;{{mDef|La vie est belle}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
donnera :&lt;br /&gt;
 &lt;br /&gt;
{{mDef|La vie est belle}}&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:MExa&amp;diff=4918</id>
		<title>Modèle:MExa</title>
		<link rel="alternate" type="text/html" href="https://wiki.bht.fr/index.php?title=Mod%C3%A8le:MExa&amp;diff=4918"/>
		<updated>2024-12-18T12:07:20Z</updated>

		<summary type="html">&lt;p&gt;WikiAdmin : 1 version importée&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;&amp;lt;span class='exaInfo'&amp;gt;{{{1}}}&amp;lt;/span&amp;gt;&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{Model&lt;br /&gt;
|class=form&lt;br /&gt;
|texte=Mise en forme du texte dans le style {{m|Exa example}}.&lt;br /&gt;
|syntaxe=&amp;lt;nowiki&amp;gt;{{mExa|mot}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|specification=&lt;br /&gt;
;texte&lt;br /&gt;
:le texte à mettre en forme.&lt;br /&gt;
}}&lt;br /&gt;
Exemple :&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;{{mExa|La vie est belle}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
donnera :&lt;br /&gt;
 &lt;br /&gt;
{{mExa|La vie est belle}}&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:MExo&amp;diff=4916</id>
		<title>Modèle:MExo</title>
		<link rel="alternate" type="text/html" href="https://wiki.bht.fr/index.php?title=Mod%C3%A8le:MExo&amp;diff=4916"/>
		<updated>2024-12-18T12:07:20Z</updated>

		<summary type="html">&lt;p&gt;WikiAdmin : 1 version importée&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;&amp;lt;span class='exoInfo'&amp;gt;{{{1}}}&amp;lt;/span&amp;gt;&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{Model&lt;br /&gt;
|class=form&lt;br /&gt;
|texte=Mise en forme du texte dans le style {{m|Exo exercice}}.&lt;br /&gt;
|syntaxe=&amp;lt;nowiki&amp;gt;{{mExo|mot}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|specification=&lt;br /&gt;
;texte&lt;br /&gt;
:le texte à mettre en forme.&lt;br /&gt;
}}&lt;br /&gt;
Exemple :&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;{{mExo|La vie est belle}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
donnera :&lt;br /&gt;
 &lt;br /&gt;
{{mExo|La vie est belle}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>WikiAdmin</name></author>
	</entry>
</feed>