vaucanson.xsd 16.6 KB
Newer Older
1
2
3
4
5
6
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://vaucanson.lrde.epita.fr"
xmlns="http://vaucanson.lrde.epita.fr"
elementFormDefault="qualified">

7
<!--
Florian Lesaint's avatar
Florian Lesaint committed
8
vaucanson.xsd version 0.5
9
-->
10

11

12
13
14
15
<!--
<geometry> tag properties. Used to set the geometry properties of each
element.
-->
16
<xs:complexType name="geometryState">
17
18
19
  <xs:sequence>
    <xs:any processContents="skip" minOccurs="0" maxOccurs="unbounded"/>
  </xs:sequence>
20
21
  <xs:attribute name="x" type="xs:decimal"/>
  <xs:attribute name="y" type="xs:decimal"/>
22
  <xs:anyAttribute processContents="skip"/>
23
24
</xs:complexType>

25
<xs:complexType name="geometryTrans">
26
27
28
  <xs:sequence>
    <xs:any processContents="skip" minOccurs="0" maxOccurs="unbounded"/>
  </xs:sequence>
29
  <xs:attribute name="transitionType">
30
31
    <xs:simpleType>
      <xs:restriction base="xs:string">
Florian Lesaint's avatar
Florian Lesaint committed
32
	<xs:pattern value="EdgeL|EdgeR|ArcL|ArcR|Loop"/>
33
34
35
      </xs:restriction>
    </xs:simpleType>
  </xs:attribute>
Florian Lesaint's avatar
Florian Lesaint committed
36
  <xs:attribute name="loopDir">
37
38
39
40
41
42
43
    <xs:simpleType>
      <xs:restriction base="xs:decimal">
	<xs:minInclusive value="0"/>
	<xs:maxExclusive value="360"/>
      </xs:restriction>
    </xs:simpleType>
  </xs:attribute>
Florian Lesaint's avatar
Florian Lesaint committed
44
  <xs:attribute name="labelPos">
45
46
47
48
49
50
51
    <xs:simpleType>
      <xs:restriction base="xs:decimal">
	<xs:minInclusive value="0"/>
	<xs:maxInclusive value="100"/>
      </xs:restriction>
    </xs:simpleType>
  </xs:attribute>
Florian Lesaint's avatar
Florian Lesaint committed
52
  <xs:attribute name="labelDist" type="xs:decimal"/>
53
  <xs:anyAttribute processContents="skip"/>
54
55
</xs:complexType>

Florian Lesaint's avatar
Florian Lesaint committed
56
<xs:complexType name="geometryInitial">
57
58
59
  <xs:sequence>
    <xs:any processContents="skip" minOccurs="0" maxOccurs="unbounded"/>
  </xs:sequence>
Florian Lesaint's avatar
Florian Lesaint committed
60
  <xs:attribute name="initialDir">
61
    <xs:simpleType>
Florian Lesaint's avatar
Florian Lesaint committed
62
63
64
65
66
67
68
69
70
71
72
      <xs:restriction base="xs:decimal">
	<xs:minInclusive value="0"/>
	<xs:maxExclusive value="360"/>
      </xs:restriction>
    </xs:simpleType>
  </xs:attribute>
  <xs:attribute name="labelPos">
    <xs:simpleType>
      <xs:restriction base="xs:decimal">
	<xs:minInclusive value="0"/>
	<xs:maxInclusive value="100"/>
73
74
75
      </xs:restriction>
    </xs:simpleType>
  </xs:attribute>
Florian Lesaint's avatar
Florian Lesaint committed
76
  <xs:attribute name="labelDist" type="xs:decimal"/>
77
  <xs:anyAttribute processContents="skip"/>
Florian Lesaint's avatar
Florian Lesaint committed
78
79
80
</xs:complexType>

<xs:complexType name="geometryFinal">
81
82
83
  <xs:sequence>
    <xs:any processContents="skip" minOccurs="0" maxOccurs="unbounded"/>
  </xs:sequence>
Florian Lesaint's avatar
Florian Lesaint committed
84
  <xs:attribute name="finalDir">
85
86
87
88
89
90
91
    <xs:simpleType>
      <xs:restriction base="xs:decimal">
	<xs:minInclusive value="0"/>
	<xs:maxExclusive value="360"/>
      </xs:restriction>
    </xs:simpleType>
  </xs:attribute>
Florian Lesaint's avatar
Florian Lesaint committed
92
93
94
95
96
97
98
  <xs:attribute name="finalMod">
    <xs:simpleType>
      <xs:restriction base="xs:string">
	<xs:pattern value="circle|arrow"/>
      </xs:restriction>
    </xs:simpleType>
  </xs:attribute>
Florian Lesaint's avatar
Florian Lesaint committed
99
  <xs:attribute name="labelPos">
100
101
102
103
104
105
106
    <xs:simpleType>
      <xs:restriction base="xs:decimal">
	<xs:minInclusive value="0"/>
	<xs:maxInclusive value="100"/>
      </xs:restriction>
    </xs:simpleType>
  </xs:attribute>
Florian Lesaint's avatar
Florian Lesaint committed
107
  <xs:attribute name="labelDist" type="xs:decimal"/>
108
  <xs:anyAttribute processContents="skip"/>
109
110
</xs:complexType>

Florian Lesaint's avatar
Florian Lesaint committed
111
<xs:complexType name="geometryAut">
112
113
114
115
116
117
118
  <xs:attribute name="x" type="xs:decimal"/>
  <xs:attribute name="y" type="xs:decimal"/>
</xs:complexType>



<!--
Florian Lesaint's avatar
Florian Lesaint committed
119
120
<drawing> tag properties.
This tag has not been specified yet.
121
-->
122
<xs:complexType name="drawing" mixed="true">
123
124
125
126
  <xs:sequence>
    <xs:any processContents="skip" minOccurs="0" maxOccurs="unbounded"/>
  </xs:sequence>
  <xs:anyAttribute processContents="skip"/>
127
128
</xs:complexType>

Florian Lesaint's avatar
Florian Lesaint committed
129
130
131
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  valueType
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
132
133

<!--
Florian Lesaint's avatar
Florian Lesaint committed
134
135
136
137
138
<monCompGen> describes an item of a "tuple" generator in a "simple" monoid
-->
<xs:complexType name="monCompGen">
  <xs:attribute name="value" type="xs:string"/>
</xs:complexType>
139

Florian Lesaint's avatar
Florian Lesaint committed
140
141
<!--
<monGen> describes a generator of a "simple" monoid
142
-->
Florian Lesaint's avatar
Florian Lesaint committed
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
<xs:complexType name="monGen">
  <xs:sequence>
    <!-- maxOccurs=minOccurs=genDim if genKind="tuple" -->
    <xs:element name="monCompGen" type="monCompGen" minOccurs="0" maxOccurs="unbounded"/>
  </xs:sequence>
  <xs:attribute name="value" type="xs:string"/> <!-- use="required" if genKind="simple" -->
</xs:complexType>

<xs:simpleType name="genSortValue">
  <xs:restriction base="xs:string">
    <xs:pattern value="letters|digits|alphanums|integers"/>
  </xs:restriction>
</xs:simpleType>
<!--
<genCompSort> describes the sort of one item of a <monGen> tuple.
-->
<xs:complexType name="genCompSort">
  <xs:attribute name="value" type="genSortValue" use="required"/>
</xs:complexType>
<!--
<genSort> describes the sort of each item of a <monGen> tuple.
-->
<xs:complexType name="genSort">
  <xs:sequence>
    <xs:element name="genCompSort" type="genCompSort" minOccurs="2" maxOccurs="unbounded"/> <!-- minOccurs=maxOccurs=genDim -->
  </xs:sequence>
</xs:complexType>
<!--
<monoid> describes a monoid.
Can be a "unit", a "free" or a "product" monoid.
-->
<xs:complexType name="monoid">
  <xs:sequence>
    <xs:element name="writingData" minOccurs="0">
      <xs:complexType>
178
179
	<xs:attribute name="identitySym"/>
	<xs:attribute name="timesSym"/>
Florian Lesaint's avatar
Florian Lesaint committed
180
181
182
183
184
185
186
187
188
      </xs:complexType>
    </xs:element>
    <xs:element name="genSort" type="genSort" minOccurs="0"/>
      <!-- should be used only if type="free" and genKind="tuple" -->
    <xs:element name="monGen" type="monGen" minOccurs="0" maxOccurs="unbounded"/>
      <!-- should be used only if type="product" -->
    <xs:element name="monoid" type="monoid" minOccurs="0" maxOccurs="unbounded"/> <!-- minOccurs=maxOccurs=prodDim -->
  </xs:sequence>
  <xs:attribute name="type" use="required">
189
190
    <xs:simpleType>
      <xs:restriction base="xs:string">
Florian Lesaint's avatar
Florian Lesaint committed
191
	<xs:pattern value="unit|free|product"/>
192
193
194
      </xs:restriction>
    </xs:simpleType>
  </xs:attribute>
Florian Lesaint's avatar
Florian Lesaint committed
195
196
  <xs:attribute name="genKind">
    <!-- should be used only if type="free". -->
197
198
    <xs:simpleType>
      <xs:restriction base="xs:string">
Florian Lesaint's avatar
Florian Lesaint committed
199
200
201
202
203
204
205
206
207
	<xs:pattern value="simple|tuple"/>
      </xs:restriction>
    </xs:simpleType>
  </xs:attribute>
  <xs:attribute name="genDescrip">
    <!-- should be used only if "type" is set to "free". -->
    <xs:simpleType>
      <xs:restriction base="xs:string">
	<xs:pattern value="enum|range|set"/>
208
209
210
      </xs:restriction>
    </xs:simpleType>
  </xs:attribute>
Florian Lesaint's avatar
Florian Lesaint committed
211
212
213
214
  <xs:attribute name="genSort" type="genSortValue"/>
    <!-- should be used only if type="free", gen Descrip="enum" and genKind="simple" -->
  <xs:attribute name="prodDim" type="xs:integer"/> <!-- should be used only if type="product" -->
  <xs:attribute name="genDim" type="xs:integer"/> <!-- should be used only if type="free" and genKind="tuple" -->
215
</xs:complexType>
216
<!--
Florian Lesaint's avatar
Florian Lesaint committed
217
218
219
<semiring> describes a semiring.
Can be either a "numerical" or "series" semiring.
Writing data can be added.
220
-->
Florian Lesaint's avatar
Florian Lesaint committed
221
<xs:complexType name="semiring">
222
  <xs:sequence>
Florian Lesaint's avatar
Florian Lesaint committed
223
224
    <xs:element name="writingData" minOccurs="0">
      <xs:complexType>
225
226
	<xs:attribute name="identitySym"/>
	<xs:attribute name="zeroSym"/>
Florian Lesaint's avatar
Florian Lesaint committed
227
228
229
230
      </xs:complexType>
    </xs:element>
    <xs:element name="semiring" type="semiring" minOccurs="0"/>
      <!-- if type="series" then minOccurs="1" else "0" -->
231
    <xs:element name="monoid" type="monoid" minOccurs="0"/>
Florian Lesaint's avatar
Florian Lesaint committed
232
      <!-- if type="series" then minOccurs="1" else "0" -->
233
  </xs:sequence>
Florian Lesaint's avatar
Florian Lesaint committed
234
  <xs:attribute name="type" use="required">
235
236
    <xs:simpleType>
      <xs:restriction base="xs:string">
Florian Lesaint's avatar
Florian Lesaint committed
237
	<xs:pattern value="numerical|series"/>
238
239
240
      </xs:restriction>
    </xs:simpleType>
  </xs:attribute>
Florian Lesaint's avatar
Florian Lesaint committed
241
242
  <xs:attribute name="set">
    <!-- if type="numerical" then use="required" else shouldn't be use -->
243
244
    <xs:simpleType>
      <xs:restriction base="xs:string">
Florian Lesaint's avatar
Florian Lesaint committed
245
	<xs:pattern value="B|N|Z|Q|R"/>
246
      </xs:restriction>
Florian Lesaint's avatar
Florian Lesaint committed
247
248
249
250
251
252
    </xs:simpleType>
  </xs:attribute>
  <xs:attribute name="operations">
    <!-- if type="numerical" then use="required" else shouldn't be use -->
    <xs:simpleType>
      <xs:restriction base="xs:string">
Alexandre Duret-Lutz's avatar
Alexandre Duret-Lutz committed
253
	<xs:pattern value="classical|minPlus|maxPlus|minMax|field"/>
Florian Lesaint's avatar
Florian Lesaint committed
254
255
      </xs:restriction>
    </xs:simpleType>
256
257
258
  </xs:attribute>
</xs:complexType>
<!--
259
260
261
262
263
264
265
266
<seriesWritingData> describes the representation attributes for series.
-->
<xs:complexType name="seriesWritingData">
  <xs:attribute name="plusSym"/>
  <xs:attribute name="timesSym"/>
  <xs:attribute name="starSym"/>
  <xs:attribute name="zeroSym"/>
  <xs:attribute name="spacesSym"/>
267
268
  <xs:attribute name="weightOpening"/>
  <xs:attribute name="weightClosing"/>
269
270
271
272
  <xs:attribute name="openPar"/>
  <xs:attribute name="closePar"/>
</xs:complexType>
<!--
Florian Lesaint's avatar
Florian Lesaint committed
273
<valueType> describes the algebraic structure of an automaton or a regular expression.
274
-->
Florian Lesaint's avatar
Florian Lesaint committed
275
<xs:complexType name="valueType">
276
  <xs:sequence>
277
278
    <xs:element name="writingData" minOccurs="0">
      <xs:complexType>
279
280
281
282
283
284
285
286
	<xs:complexContent>
	  <xs:extension base="seriesWritingData">
	    <xs:sequence minOccurs="0">
	      <xs:element name="writingData" type="seriesWritingData"/>
	      <xs:element name="writingData" type="seriesWritingData"/>
	    </xs:sequence>
	  </xs:extension>
	</xs:complexContent>
287
288
      </xs:complexType>
    </xs:element>
Florian Lesaint's avatar
Florian Lesaint committed
289
    <xs:element name="semiring" type="semiring"/>
290
    <xs:element name="monoid" type="monoid"/>
291
292
293
  </xs:sequence>
</xs:complexType>

Florian Lesaint's avatar
Florian Lesaint committed
294
295
296
297
298

<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  RegExp
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->

299
<!--
Florian Lesaint's avatar
Florian Lesaint committed
300
  <weight>
301
302
-->

Florian Lesaint's avatar
Florian Lesaint committed
303
304
305
306
307
308
<xs:complexType name="weight">
  <xs:sequence>
    <xs:group ref="typedRegExpGroup" minOccurs="0"/>
  </xs:sequence>
  <xs:attribute name="value" type="xs:string"/>
</xs:complexType>
309
310

<!--
Florian Lesaint's avatar
Florian Lesaint committed
311
 Terminal tags of the expression grammar.
312
-->
Florian Lesaint's avatar
Florian Lesaint committed
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
<xs:complexType name="monElmt">
  <xs:sequence minOccurs="0" maxOccurs="unbounded">
    <xs:choice>
      <!-- if monoid type="product" , minOccurs=maxOccurs=prodDim -->
      <xs:element name="monElmt" type="monElmt"/>
      <xs:element name="one" type="one"/>
      <!-- else monoid type="free" -->
      <xs:element name="monGen" type="monGen"/>
    </xs:choice>
  </xs:sequence>
 </xs:complexType>
<xs:complexType name="zero">
</xs:complexType>
<xs:complexType name="one">
</xs:complexType>
<!--
 <star> tag properties. Used to add a star in the regular expression.
 The expression of a star can be any tag out of those defined in the
 typedRegExp group.
-->
<xs:complexType name="star">
  <xs:group ref="typedRegExpGroup"/>
</xs:complexType>
<!--
 <sum> tag properties. Used to represent a sum in the regular expression.
 The members of a product can be any tag out of those defined in the
 typedRegExp group.
-->
<xs:complexType name="sum">
   <xs:sequence minOccurs="2" maxOccurs="2">
     <xs:group ref="typedRegExpGroup"/>
   </xs:sequence>
</xs:complexType>
<!--
 <product> tag properties. Used to represent a product in the regular expression.
 The members of a product can be any tag out of those defined in the
 typedRegExp group.
-->
<xs:complexType name="product">
   <xs:sequence minOccurs="2" maxOccurs="2">
     <xs:group ref="typedRegExpGroup"/>
   </xs:sequence>
</xs:complexType>
<!--
 <xxxExtMul> tag properties. Used to represent a product in the regular expression.
 The second member of a product can be any tag out of those defined in the
 typedRegExp group.
-->
<xs:complexType name="ExtMul">
362
  <xs:sequence>
Florian Lesaint's avatar
Florian Lesaint committed
363
364
    <xs:element name="weight" type="weight"/>
    <xs:group ref="typedRegExpGroup"/>
365
  </xs:sequence>
Florian Lesaint's avatar
Florian Lesaint committed
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
</xs:complexType>
<!--
 <typedRegExp> or <label> describes a regular expression.
-->
<xs:group name="typedRegExpGroup">
  <xs:choice>
    <xs:element name="star" type="star"/>
    <xs:element name="sum" type="sum"/>
    <xs:element name="product" type="product"/>
    <xs:element name="zero" type="zero"/>
    <xs:element name="one" type="one"/>
    <xs:element name="leftExtMul" type="ExtMul"/>
    <xs:element name="rightExtMul" type="ExtMul"/>
    <xs:element name="monElmt" type="monElmt"/>
  </xs:choice>
</xs:group>

<xs:complexType name="typedRegExp">
  <xs:group ref="typedRegExpGroup"/>
385
386
</xs:complexType>

Florian Lesaint's avatar
Florian Lesaint committed
387
388
389
<!--
  genSortValue gives the Sort of (an item of) a generator
-->
390
391

<!--
Florian Lesaint's avatar
Florian Lesaint committed
392
393
<regExp> describes a regular expression.
It takes its type (semiring, monoid) and its content (operations and atoms)
394
-->
Florian Lesaint's avatar
Florian Lesaint committed
395
<xs:complexType name="regExp">
396
  <xs:sequence>
Florian Lesaint's avatar
Florian Lesaint committed
397
398
    <xs:element name="valueType" type="valueType"/>
    <xs:element name="typedRegExp" type="typedRegExp"/>
399
400
401
402
  </xs:sequence>
  <xs:attribute name="name" type="xs:string"/>
</xs:complexType>

Florian Lesaint's avatar
Florian Lesaint committed
403
404
405
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  Automaton
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
406
407

<!--
Florian Lesaint's avatar
Florian Lesaint committed
408
<states> lists states in the automaton.
409
410
411
412
413
414
-->
<xs:complexType name="states">
  <xs:sequence>
    <xs:element name="state" type="state" minOccurs="0" maxOccurs="unbounded"/>
  </xs:sequence>
</xs:complexType>
Florian Lesaint's avatar
Florian Lesaint committed
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
<!--
<state> describes a state in the automaton.
It takes a id.
It can take a name (more explicit than an id)
It can take a key (to list in which orders the states can be processed in some algorithms)
Geometry and drawing data can be added.
-->
<xs:complexType name="state">
  <xs:sequence>
    <xs:element name="geometricData" type="geometryState" minOccurs="0"/>
    <xs:element name="drawingData" type="drawing" minOccurs="0"/>
  </xs:sequence>
  <xs:attribute name="id" type="xs:string" use="required"/>
  <xs:attribute name="name" type="xs:string"/>
  <xs:attribute name="key" type="xs:integer"/>
</xs:complexType>
431
432
433


<!--
Florian Lesaint's avatar
Florian Lesaint committed
434
<transitions> lists transitions and final/initial states.
435
436
-->
<xs:complexType name="transitions">
Florian Lesaint's avatar
Florian Lesaint committed
437
438
439
440
441
442
443
444
445
446
447
448
449
  <xs:sequence minOccurs="0" maxOccurs="unbounded">
    <xs:choice>
      <xs:element name="transition" type="transition"/>
      <xs:element name="initial" type="initial"/>
      <xs:element name="final" type="final"/>
    </xs:choice>
  </xs:sequence>
</xs:complexType>
<!--
<transition> describes a transition between two states.
Geometry and drawing data can be added.
-->
<xs:complexType name="transition">
450
  <xs:sequence>
Florian Lesaint's avatar
Florian Lesaint committed
451
452
453
    <xs:element name="geometricData" type="geometryTrans" minOccurs="0"/>
    <xs:element name="drawingData" type="drawing" minOccurs="0"/>
    <xs:element name="label" type="typedRegExp"/>
454
  </xs:sequence>
455
  <xs:attribute name="source" type="xs:string" use="required"/>
Florian Lesaint's avatar
Florian Lesaint committed
456
  <xs:attribute name="target" type="xs:string" use="required"/>
457
458
</xs:complexType>
<!--
Florian Lesaint's avatar
Florian Lesaint committed
459
460
<initial> describes the initial properties of a state.
Geometry and drawing data can be added.
461
462
463
-->
<xs:complexType name="initial">
  <xs:sequence>
Florian Lesaint's avatar
Florian Lesaint committed
464
465
466
    <xs:element name="geometricData" type="geometryInitial" minOccurs="0"/>
    <xs:element name="drawingData" type="drawing" minOccurs="0"/>
    <xs:element name="label" type="typedRegExp" minOccurs="0"/>
467
468
469
  </xs:sequence>
  <xs:attribute name="state" type="xs:string" use="required"/>
</xs:complexType>
470
<!--
Florian Lesaint's avatar
Florian Lesaint committed
471
472
<final> describes the final properties of a state.
Geometry and drawing data can be added.
473
474
475
-->
<xs:complexType name="final">
  <xs:sequence>
Florian Lesaint's avatar
Florian Lesaint committed
476
477
478
    <xs:element name="geometricData" type="geometryFinal" minOccurs="0"/>
    <xs:element name="drawingData" type="drawing" minOccurs="0"/>
    <xs:element name="label" type="typedRegExp" minOccurs="0"/>
479
480
481
482
483
  </xs:sequence>
  <xs:attribute name="state" type="xs:string" use="required"/>
</xs:complexType>


484
<!--
Florian Lesaint's avatar
Florian Lesaint committed
485
<automatonStruct> describes an automaton content (states, transitions).
486
-->
Florian Lesaint's avatar
Florian Lesaint committed
487
<xs:complexType name="automatonStruct">
488
489
490
491
492
493
494
495
  <xs:sequence>
    <xs:element name="states" type="states"/>
    <xs:element name="transitions" type="transitions"/>
  </xs:sequence>
</xs:complexType>


<!--
Florian Lesaint's avatar
Florian Lesaint committed
496
497
498
<automaton> describes an automaton.
It takes its type (semiring, monoid) and its content (states, transitions).
It can takes geometry and drawing data.
499
500
501
-->
<xs:complexType name="automaton">
  <xs:sequence>
Florian Lesaint's avatar
Florian Lesaint committed
502
503
504
505
    <xs:element name="geometricData" type="geometryAut" minOccurs="0"/>
    <xs:element name="drawingData" type="drawing" minOccurs="0"/>
    <xs:element name="valueType" type="valueType"/>
    <xs:element name="automatonStruct" type="automatonStruct"/>
506
507
  </xs:sequence>
  <xs:attribute name="name" type="xs:string"/>
Florian Lesaint's avatar
Florian Lesaint committed
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
  <xs:attribute name="readingDir">
    <xs:simpleType>
      <xs:restriction base="xs:string">
	<xs:pattern value="left|right"/>
      </xs:restriction>
    </xs:simpleType>
  </xs:attribute>
</xs:complexType>

<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  FSMXML
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->

<!--
<fsmxml> is the document root.
It contains global informations about the format.
And list a set of automata and regular expressions.
-->
<xs:complexType name="fsmxml">
  <xs:sequence minOccurs="0" maxOccurs="unbounded">
    <xs:choice>
      <xs:element name="regExp" type="regExp"/>
      <xs:element name="automaton" type="automaton"/>
    </xs:choice>
  </xs:sequence>
  <xs:attribute name="version" type="xs:string" use="required"/>
534
535
</xs:complexType>

Florian Lesaint's avatar
Florian Lesaint committed
536
<xs:element name="fsmxml" type="fsmxml"/>
537
538

</xs:schema>