1 <?xml version="1.0" encoding="UTF-8"?>
\r
2 <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning" xmlns="http://chercheurs.edf.com/logiciels/efficas" xmlns:efficas="http://chercheurs.edf.com/logiciels/efficas" targetNamespace="http://chercheurs.edf.com/logiciels/efficas" elementFormDefault="qualified" attributeFormDefault="unqualified" version="0" vc:minVersion="1.1">
\r
3 <xs:element name="doc" type="T_doc"/>
\r
4 <xs:element name="cata" type="T_cata"/>
\r
5 <xs:element name="regles" type="T_regles"/>
\r
6 <xs:element name="typeCree" type="T_classeUtilisateur"/>
\r
7 <xs:element name="valeurDef" type="T_typeAttendu"/>
\r
8 <xs:element name="valeurSugg" type="T_typeAttendu"/>
\r
9 <xs:element name="fonctionUtilisateur" type="T_fonctionUtilisateur"/>
\r
10 <xs:element name="commandes" type="T_commandes">
\r
11 <!-- La contrainte suivante fonctionne -->
\r
12 <xs:unique name="Uniq_Command">
\r
13 <xs:selector xpath="*"/>
\r
14 <xs:field xpath="@efficas:nom"/>
\r
17 <xs:element name="validators" type="T_validators"/>
\r
18 <xs:element name="plageValeur" type="T_plageValeur"/>
\r
19 <xs:element name="nomTypeAttendu" type="T_nomTypeAttendu"/>
\r
20 <xs:element name="nomClasseUtilisateur" type="T_nomClasseUtilisateur" abstract="true" substitutionGroup="nomTypeAttendu"/>
\r
21 <xs:element name="SIMP" type="T_SIMP"/>
\r
22 <xs:element name="portee" type="T_portee" default="None"/>
\r
23 <xs:element name="condition" type="T_fonctionUtilisateur"/>
\r
24 <xs:element name="borneSup" type="T_borne"/>
\r
25 <xs:element name="borneInf" type="T_borne"/>
\r
26 <!-- <xs:element name="into" type="T_into"/>-->
\r
27 <xs:element name="into" type="T_into"/>
\r
28 <!-- <xs:element name="into_plus_fonction" type="T_into" abstract="true" substitutionGroup="into"/>-->
\r
29 <xs:attribute name="nom" type="AT_nom"/>
\r
30 <xs:attribute name="version" type="xs:string"/>
\r
31 <xs:attribute name="fr" type="xs:string"/>
\r
32 <xs:attribute name="ang" type="xs:string"/>
\r
33 <xs:attribute name="docu" type="AT_docu"/>
\r
34 <xs:attribute name="valeurSugg" type="AT_valeurSugg"/>
\r
35 <xs:attribute name="statut" type="AT_statut" default="o"/>
\r
36 <xs:attribute name="maxOccurences" type="AT_maxOccurences"/>
\r
37 <xs:attribute name="minOccurences" type="AT_minOccurences"/>
\r
38 <xs:attribute name="subroutine" type="AT_subroutine" default="None"/>
\r
39 <xs:complexType name="T_doc">
\r
40 <xs:attribute ref="fr" use="optional"/>
\r
41 <xs:attribute ref="ang"/>
\r
42 <xs:attribute ref="docu"/>
\r
44 <xs:complexType name="T_cata">
\r
46 <xs:element ref="commandes" minOccurs="0" maxOccurs="unbounded"/>
\r
48 <xs:attribute ref="nom"/>
\r
49 <xs:attribute ref="version"/>
\r
51 <xs:complexType name="T_commandes">
\r
52 <xs:choice minOccurs="0" maxOccurs="unbounded">
\r
53 <xs:element ref="OPER"/>
\r
54 <xs:element ref="PROC"/>
\r
57 <xs:complexType name="T_plageValeur">
\r
60 <xs:element ref="borneSup" minOccurs="0"/>
\r
61 <xs:element ref="borneInf" minOccurs="0"/>
\r
63 <xs:element ref="into" maxOccurs="unbounded"/>
\r
66 <xs:complexType name="T_accasCommun">
\r
68 <xs:element ref="regles" minOccurs="0"/>
\r
69 <xs:element ref="doc" minOccurs="0"/>
\r
70 <xs:choice maxOccurs="unbounded">
\r
71 <xs:element ref="BLOC"/>
\r
72 <xs:element ref="FACT"/>
\r
73 <xs:element ref="SIMP"/>
\r
76 <xs:attribute ref="nom" use="required"/>
\r
78 <xs:element name="OPER" type="T_OPER">
\r
79 <!-- La contrainte fonctionne uniquement si l'on n'oublie pas le prefix dans l'expression du selector ! -->
\r
80 <!-- aucun nom identique ne doit apparaître dans les sous élements d'un même niveau dans OPER ou PROC -->
\r
81 <xs:key name="Key_Name_In_Oper">
\r
83 <xs:documentation>SIMP devrait être selectionné que si .//SIMP[portee='Global']</xs:documentation>
\r
85 <xs:selector xpath="./efficas:BLOC |./efficas:FACT|./efficas:SIMP"/>
\r
86 <xs:field xpath="@efficas:nom"/>
\r
88 <xs:keyref name="Oper_Ref_A_Name_In_Exclus" refer="Key_Name_In_Oper">
\r
89 <xs:selector xpath="./efficas:regles/efficas:EXCLUS"/>
\r
90 <xs:field xpath="."/>
\r
92 <xs:unique name="Oper_Uniq_Name_In_Exclus">
\r
93 <xs:selector xpath="./efficas:regles/efficas:EXCLUS"/>
\r
94 <xs:field xpath="."/>
\r
96 <xs:keyref name="Oper_Ref_A_Name_In_A_Classer" refer="Key_Name_In_Oper">
\r
97 <xs:selector xpath="./efficas:regles/efficas:A_CLASSER/efficas:p1 | ./efficas:regles/efficas:A_CLASSER/efficas:p2"/>
\r
98 <xs:field xpath="."/>
\r
100 <xs:unique name="Oper_Uniq_Name_In_A_Classer">
\r
101 <xs:selector xpath="./efficas:regles/efficas:A_CLASSER/efficas:p1 | ./efficas:regles/efficas:A_CLASSER/efficas:p2"/>
\r
102 <xs:field xpath="."/>
\r
104 <xs:keyref name="Oper_Ref_A_Name_In_Au_Moins_Un" refer="Key_Name_In_Oper">
\r
105 <xs:selector xpath="./efficas:regles/efficas:AU_MOINS_UN"/>
\r
106 <xs:field xpath="."/>
\r
108 <xs:unique name="Oper_Uniq_Name_In_Au_Moins_Un">
\r
109 <xs:selector xpath="./efficas:regles/efficas:AU_MOINS_UN"/>
\r
110 <xs:field xpath="."/>
\r
112 <xs:keyref name="Oper_Ref_A_Name_In_Au_Plus_Un" refer="Key_Name_In_Oper">
\r
113 <xs:selector xpath="./efficas:regles/efficas:AU_PLUS_UN"/>
\r
114 <xs:field xpath="."/>
\r
116 <xs:unique name="Oper_Uniq_Name_In_Au_Plus_Un">
\r
117 <xs:selector xpath="./efficas:regles/efficas:AU_PLUS_UN"/>
\r
118 <xs:field xpath="."/>
\r
120 <xs:keyref name="Oper_Ref_A_Name_In_Ensemble" refer="Key_Name_In_Oper">
\r
121 <xs:selector xpath="./efficas:regles/efficas:ENSEMBLE"/>
\r
122 <xs:field xpath="."/>
\r
124 <xs:unique name="Oper_Uniq_Name_In_Ensemble">
\r
125 <xs:selector xpath="./efficas:regles/efficas:ENSEMBLE"/>
\r
126 <xs:field xpath="."/>
\r
128 <xs:keyref name="Oper_Ref_A_Name_In_Present_Absent" refer="Key_Name_In_Oper">
\r
129 <xs:selector xpath="./efficas:regles/efficas:PRESENT_ABSENT"/>
\r
130 <xs:field xpath="."/>
\r
132 <xs:unique name="Oper_Uniq_Name_In_Present_Absent">
\r
133 <xs:selector xpath="./efficas:regles/efficas:PRESENT_ABSENT"/>
\r
134 <xs:field xpath="."/>
\r
136 <xs:keyref name="Oper_Ref_A_Name_In_Present_Present" refer="Key_Name_In_Oper">
\r
137 <xs:selector xpath="./efficas:regles/efficas:PRESENT_PRESENT"/>
\r
138 <xs:field xpath="."/>
\r
140 <xs:unique name="Oper_Uniq_Name_In_Present_Present">
\r
141 <xs:selector xpath="./efficas:regles/efficas:PRESENT_PRESENT"/>
\r
142 <xs:field xpath="."/>
\r
144 <xs:keyref name="Oper_Ref_A_Name_In_Un_Parmi" refer="Key_Name_In_Oper">
\r
145 <xs:selector xpath="./efficas:regles/efficas:UN_PARMI"/>
\r
146 <xs:field xpath="."/>
\r
148 <xs:unique name="Oper_Uniq_Name_In_Un_Parmi">
\r
149 <xs:selector xpath="./efficas:regles/efficas:UN_PARMI"/>
\r
150 <xs:field xpath="."/>
\r
153 <xs:complexType name="T_OPER">
\r
154 <xs:complexContent>
\r
155 <xs:extension base="T_accasCommun">
\r
157 <xs:element ref="typeCree"/>
\r
159 <xs:attribute ref="subroutine"/>
\r
161 </xs:complexContent>
\r
163 <xs:element name="PROC" type="T_PROC">
\r
164 <!-- La contrainte fonctionne pour toutes les PROC adjacentes et devrait être par PROC -->
\r
165 <xs:key name="Key_Name_In_Proc">
\r
167 <xs:documentation>SIMP devrait être selectionné que si .//SIMP[portee='Global']</xs:documentation>
\r
169 <xs:selector xpath="./efficas:BLOC | ./efficas:FACT | ./efficas:SIMP"/>
\r
170 <xs:field xpath="@efficas:nom"/>
\r
172 <xs:keyref name="Proc_Ref_A_Name_In_Exclus" refer="Key_Name_In_Proc">
\r
173 <xs:selector xpath="./efficas:regles/efficas:EXCLUS"/>
\r
174 <xs:field xpath="."/>
\r
176 <xs:unique name="Proc_Uniq_Name_In_Exclus">
\r
177 <xs:selector xpath="./efficas:regles/efficas:EXCLUS"/>
\r
178 <xs:field xpath="."/>
\r
180 <xs:keyref name="Proc_Ref_A_Name_In_A_Classer" refer="Key_Name_In_Proc">
\r
181 <xs:selector xpath="./efficas:regles/efficas:A_CLASSER/efficas:p1 | ./efficas:regles/efficas:A_CLASSER/efficas:p2"/>
\r
182 <xs:field xpath="."/>
\r
184 <xs:unique name="Proc_Uniq_Name_In_A_Classer">
\r
185 <xs:selector xpath="./efficas:regles/efficas:A_CLASSER/efficas:p1 | ./efficas:regles/efficas:A_CLASSER/efficas:p2"/>
\r
186 <xs:field xpath="."/>
\r
188 <xs:keyref name="Proc_Ref_A_Name_In_Au_Moins_Un" refer="Key_Name_In_Proc">
\r
189 <xs:selector xpath="./efficas:regles/efficas:AU_MOINS_UN"/>
\r
190 <xs:field xpath="."/>
\r
192 <xs:unique name="Proc_Uniq_Name_In_Au_Moins_Un">
\r
193 <xs:selector xpath="./efficas:regles/efficas:AU_MOINS_UN"/>
\r
194 <xs:field xpath="."/>
\r
196 <xs:keyref name="Proc_Ref_A_Name_In_Au_Plus_Un" refer="Key_Name_In_Proc">
\r
197 <xs:selector xpath="./efficas:regles/efficas:AU_PLUS_UN"/>
\r
198 <xs:field xpath="."/>
\r
200 <xs:unique name="Proc_Uniq_Name_In_Au_Plus_Un">
\r
201 <xs:selector xpath="./efficas:regles/efficas:AU_PLUS_UN"/>
\r
202 <xs:field xpath="."/>
\r
204 <xs:keyref name="Proc_Ref_A_Name_In_Ensemble" refer="Key_Name_In_Proc">
\r
205 <xs:selector xpath="./efficas:regles/efficas:ENSEMBLE"/>
\r
206 <xs:field xpath="."/>
\r
208 <xs:unique name="Proc_Uniq_Name_In_Ensemble">
\r
209 <xs:selector xpath="./efficas:regles/efficas:ENSEMBLE"/>
\r
210 <xs:field xpath="."/>
\r
212 <xs:keyref name="Proc_Ref_A_Name_In_Present_Absent" refer="Key_Name_In_Proc">
\r
213 <xs:selector xpath="./efficas:regles/efficas:PRESENT_ABSENT"/>
\r
214 <xs:field xpath="."/>
\r
216 <xs:unique name="Proc_Uniq_Name_In_Present_Absent">
\r
217 <xs:selector xpath="./efficas:regles/efficas:PRESENT_ABSENT"/>
\r
218 <xs:field xpath="."/>
\r
220 <xs:keyref name="Proc_Ref_A_Name_In_Present_Present" refer="Key_Name_In_Proc">
\r
221 <xs:selector xpath="./efficas:regles/efficas:PRESENT_PRESENT"/>
\r
222 <xs:field xpath="."/>
\r
224 <xs:unique name="Proc_Uniq_Name_In_Present_Present">
\r
225 <xs:selector xpath="./efficas:regles/efficas:PRESENT_PRESENT"/>
\r
226 <xs:field xpath="."/>
\r
228 <xs:keyref name="Ref_A_Name_In_Un_Parmi" refer="Key_Name_In_Proc">
\r
229 <xs:selector xpath="./efficas:regles/efficas:UN_PARMI"/>
\r
230 <xs:field xpath="."/>
\r
232 <xs:unique name="Proc_Uniq_Name_In_Un_Parmi">
\r
233 <xs:selector xpath="./efficas:regles/efficas:UN_PARMI"/>
\r
234 <xs:field xpath="."/>
\r
237 <xs:complexType name="T_PROC">
\r
238 <xs:complexContent>
\r
239 <xs:extension base="T_accasCommun">
\r
240 <xs:attribute ref="subroutine"/>
\r
242 </xs:complexContent>
\r
244 <xs:element name="FACT" type="T_FACT">
\r
245 <!-- La contrainte fonctionne uniquement si l'on n'oublie pas le prefix dans l'expression du selector ! -->
\r
246 <!-- aucun nom identique ne doit apparaître dans les sous élements d'un même niveau de FACT -->
\r
247 <xs:key name="Key_Name_In_Fact">
\r
249 <xs:documentation>SIMP devrait être selectionné que si .//SIMP[portee='Global']</xs:documentation>
\r
251 <xs:selector xpath="./efficas:BLOC |./efficas:FACT|./efficas:SIMP"/>
\r
252 <xs:field xpath="@efficas:nom"/>
\r
254 <xs:keyref name="Ref_A_Name_In_Fact" refer="Key_Name_In_Fact">
\r
255 <xs:selector xpath="./efficas:regles/efficas:EXCLUS"/>
\r
256 <xs:field xpath="."/>
\r
259 <!-- Définition par restriction -->
\r
260 <!-- <xs:complexType name="T_FACT">
\r
261 <xs:complexContent>
\r
262 <xs:restriction base="T_accasCommun">
\r
264 <xs:element ref="regles" minOccurs="0"/>
\r
265 <xs:element ref="doc" minOccurs="0"/>
\r
266 <xs:choice maxOccurs="unbounded">
\r
267 <xs:element ref="BLOC"/>
\r
268 <xs:element ref="FACT"/>
\r
269 <xs:element ref="SIMP"/>
\r
273 </xs:complexContent>
\r
274 </xs:complexType>-->
\r
275 <xs:complexType name="T_FACT">
\r
276 <xs:complexContent>
\r
277 <xs:extension base="T_accasCommun">
\r
278 <xs:attribute ref="statut"/>
\r
279 <xs:attribute ref="minOccurences" default="1"/>
\r
280 <xs:attribute ref="maxOccurences" default="1">
\r
282 <xs:documentation>La valeur -1 equivaut à oo</xs:documentation>
\r
286 <!-- <xs:assert test=".[exists(@efficas:maxOccurences) and exists(@efficas:minOccurences) and @efficas:maxOccurences gt @efficas:minOccurences]"/>
\r
288 <!--<xs:assert test="if (.[exists(@efficas:maxOccurences)] and .[exists(@efficas:minOccurences)] ) then (@efficas:maxOccurences gt @efficas:minOccurences) or @efficas:maxOccurences = -1 else true" altova:message="Erreur maxOccurences > minOccurences "/>-->
\r
289 </xs:complexContent>
\r
291 <xs:simpleType name="T_fonctionUtilisateur">
\r
292 <xs:restriction base="xs:string"/>
\r
294 <xs:element name="BLOC" type="T_BLOC">
\r
295 <xs:key name="Key_Name_In_Bloc">
\r
297 <xs:documentation>SIMP devrait être selectionné que si .//SIMP[portee='Global']</xs:documentation>
\r
299 <xs:selector xpath="./efficas:BLOC |./efficas:FACT|./efficas:SIMP"/>
\r
300 <xs:field xpath="@efficas:nom"/>
\r
302 <xs:keyref name="Ref_A_Name_In_Bloc" refer="Key_Name_In_Bloc">
\r
303 <xs:selector xpath="./efficas:regles/efficas:EXCLUS"/>
\r
304 <xs:field xpath="."/>
\r
307 <xs:complexType name="T_BLOC">
\r
308 <xs:complexContent>
\r
309 <xs:extension base="T_accasCommun">
\r
311 <xs:element ref="condition"/>
\r
314 </xs:complexContent>
\r
316 <xs:complexType name="T_SIMP">
\r
318 <xs:element ref="doc" minOccurs="0"/>
\r
319 <xs:element ref="portee" minOccurs="0">
\r
321 <xs:documentation>La portée pouurait devenir un attribut de SIMP. Une autre solution consisterait a créer un SIMPG pour distinguer les @nom uniques des SIMP a portée globale des autres.</xs:documentation>
\r
324 <xs:element ref="valeurDef" minOccurs="0"/>
\r
325 <xs:element ref="valeurSugg" minOccurs="0"/>
\r
326 <xs:element ref="plageValeur" minOccurs="0"/>
\r
327 <xs:element ref="nomTypeAttendu"/>
\r
328 <xs:element ref="validators" minOccurs="0"/>
\r
330 <xs:attribute ref="nom" use="required"/>
\r
331 <xs:attribute ref="statut" default="o"/>
\r
332 <xs:attribute ref="minOccurences" default="1"/>
\r
333 <xs:attribute ref="maxOccurences" default="1">
\r
335 <xs:documentation>La valeur -1 equivaut à oo</xs:documentation>
\r
339 <xs:simpleType name="AT_statut">
\r
340 <xs:restriction base="xs:string">
\r
341 <xs:enumeration value="f"/>
\r
342 <xs:enumeration value="o"/>
\r
345 <!--<xs:simpleType name="T_repetable">
\r
346 <xs:restriction base="xs:string">
\r
347 <xs:enumeration value="n"/>
\r
348 <xs:enumeration value="o"/>
\r
350 </xs:simpleType>-->
\r
351 <xs:simpleType name="T_portee">
\r
352 <xs:restriction base="xs:string">
\r
353 <xs:enumeration value="None"/>
\r
354 <xs:enumeration value="Global"/>
\r
357 <xs:simpleType name="AT_maxOccurences">
\r
358 <xs:restriction base="xs:long">
\r
359 <xs:minInclusive value="-1"/>
\r
362 <xs:simpleType name="AT_minOccurences">
\r
363 <xs:restriction base="xs:long">
\r
364 <xs:minInclusive value="0"/>
\r
367 <!-- Comparable -->
\r
368 <!-- <xs:simpleType name="AT_borne_sup">
\r
369 <xs:atomic base="xs:double"/>
\r
371 <xs:simpleType name="AT_borne_inf">
\r
372 <xs:restriction base="xs:double"/>
\r
375 <xs:simpleType name="AT_docu">
\r
377 <xs:documentation>Référence une position dans un fichier maître contenant une liste de références à des pages de documentations</xs:documentation>
\r
379 <xs:restriction base="xs:string"/>
\r
381 <xs:simpleType name="AT_valeurSugg">
\r
382 <xs:restriction base="xs:string"/>
\r
384 <!-- TODO: Exclure mots clés python|efficas -->
\r
385 <xs:simpleType name="T_pythonIdentifiant">
\r
386 <xs:restriction base="xs:string">
\r
387 <xs:pattern value="([A-Z]|[a-z]|_)([A-Z]|[a-z]|_|[0-9])*"/>
\r
390 <xs:simpleType name="AT_nom">
\r
391 <xs:restriction base="T_pythonIdentifiant"/>
\r
393 <xs:simpleType name="T_predicat1">
\r
394 <xs:list itemType="T_pythonIdentifiant"/>
\r
395 <!-- TODO: Supprimer la liste -->
\r
397 <xs:complexType name="T_predicat2">
\r
399 <xs:element name="p1" type="T_predicat1" minOccurs="1"/>
\r
400 <xs:element name="p2" type="T_pythonIdentifiant" minOccurs="1"/>
\r
402 <!-- TODO: Supprimer la séquence -->
\r
404 <xs:element name="A_CLASSER" type="T_predicat2"/>
\r
405 <xs:element name="AU_MOINS_UN" type="T_predicat1"/>
\r
406 <xs:element name="AU_PLUS_UN" type="T_predicat1"/>
\r
407 <xs:element name="ENSEMBLE" type="T_predicat1"/>
\r
408 <xs:element name="EXCLUS" type="T_predicat1"/>
\r
409 <xs:element name="PRESENT_ABSENT" type="T_predicat1"/>
\r
410 <xs:element name="PRESENT_PRESENT" type="T_predicat1"/>
\r
411 <xs:element name="UN_PARMI" type="T_predicat1"/>
\r
412 <xs:group name="predicat">
\r
414 <xs:element ref="A_CLASSER"/>
\r
415 <xs:element ref="AU_MOINS_UN"/>
\r
416 <xs:element ref="AU_PLUS_UN"/>
\r
417 <xs:element ref="ENSEMBLE"/>
\r
418 <xs:element ref="EXCLUS"/>
\r
419 <xs:element ref="PRESENT_ABSENT"/>
\r
420 <xs:element ref="PRESENT_PRESENT"/>
\r
421 <xs:element ref="UN_PARMI"/>
\r
424 <xs:complexType name="T_regles">
\r
425 <xs:sequence maxOccurs="unbounded">
\r
426 <xs:group ref="predicat"/>
\r
429 <!-- <xs:simpleType name="T_typeCree">
\r
430 <xs:restriction base="T_classeUtilisateur"/>
\r
433 <xs:simpleType name="AT_subroutine">
\r
434 <xs:restriction base="T_pythonIdentifiant"/>
\r
436 <xs:simpleType name="T_validators">
\r
437 <xs:restriction base="xs:string">
\r
438 <xs:enumeration value="NoRepeat"/>
\r
439 <xs:enumeration value="OnlyStr"/>
\r
440 <xs:enumeration value="VerifExiste"/>
\r
441 <xs:enumeration value="VerifTypeTuple"/>
\r
444 <xs:simpleType name="T_bool">
\r
445 <xs:restriction base="xs:boolean"/>
\r
447 <xs:simpleType name="T_list_bool">
\r
448 <xs:list itemType="T_bool"/>
\r
450 <xs:simpleType name="T_I">
\r
451 <xs:restriction base="xs:int"/>
\r
453 <xs:simpleType name="T_list_I">
\r
454 <xs:list itemType="T_I"/>
\r
456 <xs:simpleType name="T_R">
\r
457 <xs:restriction base="xs:double"/>
\r
459 <xs:simpleType name="T_list_R">
\r
460 <xs:list itemType="T_R"/>
\r
462 <!-- <xs:simpleType name="T_TXM">
\r
463 <xs:restriction base="xs:string"/>
\r
465 <xs:simpleType name="T_list_TXM">
\r
466 <xs:list itemType="T_TXM"/>
\r
469 <!--<xs:simpleType name="T_list_TXM">
\r
470 <xs:restriction base="T_list_TXM2"> <xs:maxLength value="1"/><xs:minLength value="1"/></xs:restriction>
\r
473 <!--fonctionne mais ne permet pas de créer une liste de liste -->
\r
474 <xs:simpleType name="T_C">
\r
477 <xs:list itemType="xs:double"/>
\r
479 <xs:minLength value="2"/>
\r
480 <xs:maxLength value="2"/>
\r
483 <!-- Ajouter une contrainte : taille pair -->
\r
484 <!-- Il n'est pas possible de définir des listes de listes -->
\r
485 <xs:simpleType name="T_list_C">
\r
486 <xs:list itemType="xs:double"/>
\r
488 <xs:simpleType name="T_nomTypeAttenduBase">
\r
489 <xs:restriction base="T_pythonIdentifiant"/>
\r
491 <xs:simpleType name="T_simpleName">
\r
492 <xs:restriction base="T_nomTypeAttenduBase">
\r
493 <xs:enumeration value="Fichier"/>
\r
494 <xs:enumeration value="Repertoire"/>
\r
495 <xs:enumeration value="I"/>
\r
496 <xs:enumeration value="R"/>
\r
497 <xs:enumeration value="C"/>
\r
498 <xs:enumeration value="bool"/>
\r
499 <xs:enumeration value="grma"/>
\r
500 <xs:enumeration value="grno"/>
\r
501 <xs:enumeration value="SalomeEntry"/>
\r
504 <xs:simpleType name="T_nomTypeAttendu">
\r
505 <xs:union memberTypes="T_simpleName">
\r
507 <xs:restriction base="T_pythonIdentifiant">
\r
508 <xs:enumeration value="TXM"/>
\r
509 <xs:enumeration value="matriceDouble"/>
\r
510 <xs:enumeration value="matriceSymetriqueDouble"/>
\r
511 <xs:enumeration value="tuple"/>
\r
512 <xs:enumeration value="classeUtilisateur"/>
\r
517 <!-- On ne peut pas rendre abstrait un simpleType &&
\r
518 Il n'est pas possible de dériver par restriction un simplecontent d'un type complex qui
\r
519 lui peut être abstrait.
\r
521 <!-- Le type T_nomDuTypeClasseUtilisateur est réduit à l'énumeration "classeUtilisateur"
\r
522 et utilisé dans le type T_nomClasseUtilisateur pour y ajouter un attribut nom
\r
524 <xs:simpleType name="T_nomDuTypeClasseUtilisateur">
\r
525 <xs:restriction base="T_nomTypeAttendu">
\r
526 <xs:enumeration value="classeUtilisateur"/>
\r
529 <!-- Le nom de la classe utilisateur est donnée dans l'attribut nom-->
\r
530 <xs:complexType name="T_nomClasseUtilisateur">
\r
532 <xs:extension base="T_nomDuTypeClasseUtilisateur">
\r
533 <xs:attribute ref="nom" use="required"/>
\r
535 </xs:simpleContent>
\r
537 <xs:complexType name="T_grma"/>
\r
538 <xs:complexType name="T_grno"/>
\r
539 <xs:complexType name="T_SalomeEntry"/>
\r
540 <xs:complexType name="T_Fichier"/>
\r
541 <!-- <xs:complexType name="T_Repertoire"/>-->
\r
542 <xs:simpleType name="T_Repertoire">
\r
545 <xs:restriction base="xs:string">
\r
546 <xs:whiteSpace value="preserve"/>
\r
551 <xs:simpleType name="T_simple">
\r
552 <xs:union memberTypes="T_I T_list_I T_R T_list_R T_C T_list_C T_bool T_list_bool T_Repertoire"/>
\r
554 <xs:simpleType name="T_TXM">
\r
556 <xs:documentation>les TXM peuvent contenir des espaces, pour créer une liste de TXM, il faut donc répéter le nom de la balise.</xs:documentation>
\r
558 <xs:restriction base="xs:string"/>
\r
560 <xs:simpleType name="T_list_Double">
\r
561 <xs:list itemType="xs:double"/>
\r
563 <!-- Possibilité d'utiliser un type paramétré ? -->
\r
564 <xs:complexType name="T_matriceDouble">
\r
566 <xs:extension base="T_list_Double">
\r
567 <xs:attribute name="n" type="xs:integer" use="required"/>
\r
568 <xs:attribute name="m" type="xs:integer" use="required"/>
\r
570 </xs:simpleContent>
\r
572 <!-- Faire l'exercice de dériver de T_matriceDouble -->
\r
573 <xs:complexType name="T_matriceSymetriqueDouble">
\r
575 <xs:extension base="T_list_Double">
\r
576 <xs:attribute name="n" type="xs:int" use="required"/>
\r
578 </xs:simpleContent>
\r
580 <!-- Une liste est aussi un type simple ! -->
\r
581 <!-- <xs:simpleType name="T_list_anySimpleType">
\r
582 <xs:list itemType="xs:anySimpleType"/>
\r
585 <!-- Le fait de ne pas déclarer une liste risque d'être problématique pour le parsing : Problème résolu avec une séquence de tuple -->
\r
586 <xs:complexType name="T_tuple">
\r
588 <xs:extension base="xs:anySimpleType">
\r
589 <xs:attribute name="n" type="xs:int" use="required"/>
\r
591 </xs:simpleContent>
\r
593 <xs:simpleType name="T_classeUtilisateur">
\r
594 <xs:restriction base="T_pythonIdentifiant"/>
\r
596 <xs:element name="typesimple" type="T_simple"/>
\r
597 <xs:element name="TXM" type="T_TXM"/>
\r
598 <xs:element name="matriceDouble" type="T_matriceDouble"/>
\r
599 <xs:element name="matriceSymetriqueDouble" type="T_matriceSymetriqueDouble"/>
\r
600 <xs:element name="tuple" type="T_tuple"/>
\r
601 <xs:element name="classeUtilisateur" type="T_classeUtilisateur"/>
\r
603 <!-- <xs:group name="T_Attendu_group1">
\r
605 <xs:element ref="typesimple"/>
\r
606 <xs:element ref="matriceDouble"/>
\r
607 <xs:element ref="matriceSymetriqueDouble"/>
\r
608 <xs:element ref="tuple"/>
\r
609 <xs:element ref="classeUtilisateur"/>
\r
613 <xs:group name="T_Attendu_group2">
\r
615 <xs:element ref="typesimple"/>
\r
616 <xs:element ref="matriceDouble"/>
\r
617 <xs:element ref="matriceSymetriqueDouble"/>
\r
618 <xs:element ref="tuple"/>
\r
619 <xs:element ref="classeUtilisateur"/>
\r
620 <xs:element ref="fonctionUtilisateur" minOccurs="1" maxOccurs="unbounded"/>
\r
624 <xs:complexType name="T_typeAttendu">
\r
625 <xs:group ref="T_Attendu_group1"/>
\r
628 <!-- Faire plutot un groupe de substitution pour ne pas croiser les choix -->
\r
630 <xs:complexType name="T_into">
\r
631 <xs:group ref="T_Attendu_group2"/>
\r
634 <xs:complexType name="T_into">
\r
636 <!-- <xs:element ref="typesimple" type="T_Base"/>-->
\r
637 <xs:element ref="typesimple" minOccurs="0"/>
\r
638 <xs:element ref="TXM" minOccurs="0" maxOccurs="unbounded"/>
\r
639 <xs:element ref="matriceDouble" minOccurs="0" maxOccurs="unbounded"/>
\r
640 <xs:element ref="matriceSymetriqueDouble" minOccurs="0" maxOccurs="unbounded"/>
\r
641 <xs:element ref="tuple" minOccurs="0" maxOccurs="unbounded"/>
\r
642 <xs:element ref="classeUtilisateur" minOccurs="0" maxOccurs="unbounded"/>
\r
643 <xs:element ref="fonctionUtilisateur" minOccurs="0" maxOccurs="1"/>
\r
646 <xs:complexType name="T_typeAttendu">
\r
647 <xs:complexContent>
\r
648 <xs:restriction base="T_into">
\r
650 <xs:element ref="typesimple" minOccurs="0" maxOccurs="1"/>
\r
651 <xs:element ref="TXM" minOccurs="0" maxOccurs="unbounded"/>
\r
652 <xs:element ref="matriceDouble" minOccurs="0" maxOccurs="unbounded"/>
\r
653 <xs:element ref="matriceSymetriqueDouble" minOccurs="0" maxOccurs="unbounded"/>
\r
654 <xs:element ref="tuple" minOccurs="0" maxOccurs="unbounded"/>
\r
655 <xs:element ref="classeUtilisateur" minOccurs="0" maxOccurs="1"/>
\r
658 </xs:complexContent>
\r
660 <xs:complexType name="T_borne">
\r
661 <xs:complexContent>
\r
662 <xs:restriction base="T_into">
\r
664 <xs:element ref="typesimple" minOccurs="0" maxOccurs="1"/>
\r
665 <xs:element ref="TXM" minOccurs="0" maxOccurs="unbounded"/>
\r
666 <xs:element ref="fonctionUtilisateur" minOccurs="0" maxOccurs="1"/>
\r
669 </xs:complexContent>
\r
672 <!-- Catalogue EFFICAS équivalent
\r
675 from Accas import *
\r
677 class carte (ASSD) : pass
\r
678 class maille (ASSD) : pass
\r
679 class carte_flux_r (carte):pass
\r
681 class NOM_CHAM_INTO:
\r
682 def __call__(self, *l_typ_cham, **kwargs):
\r
683 return tuple(('A','B','C'))
\r
684 C_NOM_CHAM_INTO = NOM_CHAM_INTO()
\r
686 JdC = JDC_CATA(code='MAP',
\r
688 regles=ENSEMBLE('E1','E2','E3')
\r
691 CREECARTE = OPER(nom="CREECARTE",op=None, sd_prod=carte, UNITE=SIMP(statut='f',typ='I',defaut=21),);
\r
693 CREECARTEFLUX = OPER(nom="CREECARTEFLUX",op=None, sd_prod=carte_flux_r,
\r
694 NOMFLUX=SIMP(statut='o',typ='TXM',defaut='monFlux'),
\r
697 CREEMAILLE = OPER(nom="CREEMAILLE",op=None, sd_prod=maille,
\r
698 NOEUDS=SIMP(statut='o',typ='I',defaut=(1,2),min=2,max=2)
\r
703 regles = (EXCLUS('ETAT_INIT','RESULTAT',),),
\r
704 ETAT_INIT = FACT(statut='f', max='**',
\r
705 GROUP_MA_1=SIMP(statut='o',typ='I',validators=NoRepeat(),max='**'),
\r
706 GROUP_NO_2=SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
\r
709 RESULTAT = FACT(statut='f',
\r
710 DEPL=SIMP(statut='o', typ='R', validators=NoRepeat()),
\r
711 VITE=SIMP(statut='f', typ='R', validators=NoRepeat()),
\r
712 ACCE=SIMP(statut='f', typ='R', validators=NoRepeat()),
\r
716 E2=PROC(nom="E2", op=None,
\r
717 regles = (UN_PARMI('CONCEPT','CHAINE','TOUT' ),),
\r
718 CONCEPT = FACT(statut='f',max='**',
\r
719 NOM = SIMP(statut='o',typ=assd,validators=NoRepeat(),max='**'),
\r
721 CHAINE = SIMP(statut='f',typ='TXM'),
\r
722 POSITION = SIMP(statut='f',typ='I',defaut=1),
\r
723 TOUT = SIMP(statut='f',typ='TXM',into=("OUI",) ),
\r
726 E3=PROC(nom="E3",op=None,
\r
727 DEFORMATION = SIMP(statut='f',typ='TXM',defaut="PETIT",
\r
728 into=("PETIT","PETIT_REAC","GROT_GDEP","SIMO_MIEHE","GDEF_HYPO_ELAS","GDEF_LOG")),
\r
729 b_blocIn = BLOC(condition = "DEFORMATION in ('PETIT','PETIT_REAC','GROT_GDEP')",
\r
730 ITER_INTE_PAS = SIMP(statut='f',typ='I',defaut= 0 ),
\r
731 ALGO_INTE = SIMP(statut='f',typ='TXM',into=("ANALYTIQUE", "SECANTE", "DEKKER", "NEWTON_1D","BRENT",),),
\r
732 CARTE = SIMP(statut='f',typ=carte,),
\r
733 b_carte = BLOC(condition= "(AsType(CARTE) != carte_flux_r)",
\r
734 CONTRAINTE = SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**',
\r
735 fr="Options pour le calcul de contraintes et efforts generalises",
\r
736 into=C_NOM_CHAM_INTO(phenomene='CONTRAINTE',categorie='lin'),)
\r