1<?xml version="1.0" encoding="UTF-8"?>
2<!-- CHART Table definition files for raw or derived tables or views -->
3<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
4 <xs:import namespace="http://www.w3.org/2001/XMLSchema-instance" schemaLocation="xsi.xsd"/>
5 <xs:element name="table">
6 <xs:complexType>
7 <xs:choice minOccurs="0" maxOccurs="unbounded">
8 <xs:element name="description" type="xs:string">
9 <xs:annotation>
10 <xs:documentation>table description string</xs:documentation>
11 </xs:annotation>
12 </xs:element>
13 <xs:element ref="url"/>
14 <xs:element name="period" type="xs:duration">
15 <xs:annotation>
16 <xs:documentation>nominal frequency for this table. Should be set to a reasonable value even for tables with
17irregular frequency</xs:documentation>
18 </xs:annotation>
19 </xs:element>
20 <xs:element ref="regular"/>
21 <xs:element ref="sparse"/>
22 <xs:element ref="has-cal"/>
23 <xs:element name="type">
24 <xs:annotation>
25 <xs:documentation>basic table usage</xs:documentation>
26 </xs:annotation>
27 <xs:simpleType>
28 <xs:restriction base="xs:token">
29 <xs:enumeration value="raw"/>
30 <xs:enumeration value="view"/>
31 <xs:enumeration value="derived"/>
32 <xs:enumeration value="storage"/>
33 <xs:enumeration value="stats"/>
34 </xs:restriction>
35 </xs:simpleType>
36 </xs:element>
37 <xs:element ref="day-night-stats"/>
38 <xs:element ref="sensing-time-type"/>
39 <xs:element ref="visible"/>
40 <xs:element ref="source"/>
41 <xs:element ref="source-table"/>
42 <xs:element ref="stats-storage"/>
43 <xs:element ref="stats-table"/>
44 <xs:element ref="keycodes"/>
45 <xs:element ref="db-name"/>
46 <xs:element ref="split-params"/>
47 <xs:element ref="storage"/>
48 <xs:element ref="storage-table"/>
49 <xs:element ref="storage-column"/>
50 <xs:element ref="label"/>
51 <xs:element ref="stats-column"/>
52 <xs:element name="index">
53 <xs:annotation>
54 <xs:documentation>Index definitions are optional for timeseries tables and if given, replace the default
55index. For system tables no indexes are created by default and all required indexes
56must be given</xs:documentation>
57 </xs:annotation>
58 <xs:complexType>
59 <xs:choice minOccurs="0" maxOccurs="unbounded">
60 <xs:element name="name" type="xs:string"/>
61 <xs:element name="type">
62 <xs:simpleType>
63 <xs:restriction base="xs:token">
64 <xs:enumeration value="normal"/>
65 <xs:enumeration value="unique"/>
66 <xs:enumeration value="primary-key"/>
67 </xs:restriction>
68 </xs:simpleType>
69 </xs:element>
70 <xs:element name="field" type="xs:string"/>
71 <xs:element ref="compress"/>
72 <xs:element ref="sid-fields"/>
73 </xs:choice>
74 </xs:complexType>
75 </xs:element>
76 <xs:element ref="source-sf00"/>
77 <xs:element ref="group">
78 <xs:annotation>
79 <xs:documentation>List of fields to be included in a unique index
80sys tables only.</xs:documentation>
81 </xs:annotation>
82 </xs:element>
83 <xs:element ref="field"/>
84 <xs:element ref="view-sql"/>
85 </xs:choice>
86 <xs:attribute ref="xsi:noNamespaceSchemaLocation" use="required"/>
87 </xs:complexType>
88 </xs:element>
89 <xs:element name="url" type="xs:string">
90 <xs:annotation>
91 <xs:documentation>Link to wiki or other page describing this table.</xs:documentation>
92 </xs:annotation>
93 </xs:element>
94 <xs:element name="regular" type="xs:boolean">
95 <xs:annotation>
96 <xs:documentation>true if this table does not have a regular frequency</xs:documentation>
97 </xs:annotation>
98 </xs:element>
99 <xs:element name="sparse" type="xs:boolean">
100 <xs:annotation>
101 <xs:documentation>Mark flat tables as spare, meaning they get an extra per-column CNT (count)
102statistic</xs:documentation>
103 </xs:annotation>
104 </xs:element>
105 <xs:element name="has-cal" type="xs:boolean">
106 <xs:annotation>
107 <xs:documentation>true if this ts table has an associated calibration view</xs:documentation>
108 </xs:annotation>
109 </xs:element>
110 <xs:element name="day-night-stats" type="xs:boolean">
111 <xs:annotation>
112 <xs:documentation>table should have day/night regions computed in extended statistics table
113could be merged with stats-storage?</xs:documentation>
114 </xs:annotation>
115 </xs:element>
116 <xs:element name="sensing-time-type">
117 <xs:annotation>
118 <xs:documentation>override the default datatype for `sensing_time` field</xs:documentation>
119 </xs:annotation>
120 <xs:simpleType>
121 <xs:restriction base="xs:token">
122 <xs:enumeration value="datetime"/>
123 <xs:enumeration value="datetime_ms"/>
124 <xs:enumeration value="datetime_us"/>
125 </xs:restriction>
126 </xs:simpleType>
127 </xs:element>
128 <xs:element name="visible" type="xs:boolean">
129 <xs:annotation>
130 <xs:documentation>allow to hide in plot tool tree view</xs:documentation>
131 </xs:annotation>
132 </xs:element>
133 <xs:element name="source">
134 <xs:annotation>
135 <xs:documentation>MSG specific</xs:documentation>
136 </xs:annotation>
137 <xs:simpleType>
138 <xs:restriction base="xs:token">
139 <xs:enumeration value="DP"/>
140 </xs:restriction>
141 </xs:simpleType>
142 </xs:element>
143 <xs:element name="source-table" type="xs:string">
144 <xs:annotation>
145 <xs:documentation>for Views, list each <source-table> here
146Not to be used with sys, raw or derived tables</xs:documentation>
147 </xs:annotation>
148 </xs:element>
149 <xs:element name="stats-storage">
150 <xs:annotation>
151 <xs:documentation>for time-series tables with >250 fields which must have seperate _MINS, _MAXS, _AVGS
152and _STDS tables for orbital stats.
153Not used in sys tables</xs:documentation>
154 </xs:annotation>
155 <xs:simpleType>
156 <xs:restriction base="xs:token">
157 <xs:enumeration value="none"/>
158 <xs:enumeration value="single"/>
159 <xs:enumeration value="split"/>
160 </xs:restriction>
161 </xs:simpleType>
162 </xs:element>
163 <xs:element name="stats-table" type="xs:string">
164 <xs:annotation>
165 <xs:documentation>Allow tables to declare their stats are stored in a separate, explicitly defined
166table instead of an automatically generated one</xs:documentation>
167 </xs:annotation>
168 </xs:element>
169 <xs:element name="keycodes">
170 <xs:annotation>
171 <xs:documentation>For 'tables' stored inside a JSONB column, specify a different table to hold
172parameter name<->keymap lookups. Other table must have a fixed definition;
173see chartjcs project or documentation for details.
174Set as an attribute of the table not the individual column</xs:documentation>
175 </xs:annotation>
176 <xs:complexType>
177 <xs:group ref="test"/>
178 </xs:complexType>
179 </xs:element>
180 <xs:element name="db-name" type="xs:string">
181 <xs:annotation>
182 <xs:documentation>Specify the underlying database table name to associate with this table</xs:documentation>
183 </xs:annotation>
184 </xs:element>
185 <xs:element name="split-params">
186 <xs:annotation>
187 <xs:documentation>configure hashed split parameters for JSONB stats table</xs:documentation>
188 </xs:annotation>
189 <xs:complexType>
190 <xs:all>
191 <xs:element ref="bins"/>
192 <xs:element ref="db-name-template"/>
193 </xs:all>
194 </xs:complexType>
195 </xs:element>
196 <xs:element name="bins" type="xs:unsignedInt"/>
197 <xs:element name="db-name-template" type="xs:string"/>
198 <xs:element name="storage">
199 <xs:annotation>
200 <xs:documentation>all-points table type</xs:documentation>
201 </xs:annotation>
202 <xs:simpleType>
203 <xs:restriction base="xs:token">
204 <xs:enumeration value="timeseries"/>
205 <xs:enumeration value="key-value"/>
206 <xs:enumeration value="jsonb"/>
207 </xs:restriction>
208 </xs:simpleType>
209 </xs:element>
210 <xs:element name="storage-table" type="xs:string">
211 <xs:annotation>
212 <xs:documentation>some types of storage (JSONB and custom) need a parameter to give the actual
213table the data is stored in</xs:documentation>
214 </xs:annotation>
215 </xs:element>
216 <xs:element name="storage-column" type="xs:string">
217 <xs:annotation>
218 <xs:documentation>column in storage table used to hold JSONB values</xs:documentation>
219 </xs:annotation>
220 </xs:element>
221 <xs:element name="label" type="xs:string">
222 <xs:annotation>
223 <xs:documentation>(unused) display name for storage</xs:documentation>
224 </xs:annotation>
225 </xs:element>
226 <xs:element name="stats-column" type="xs:string">
227 <xs:annotation>
228 <xs:documentation>For tables storing PUS statistics we record the column used for the
229structures. This is set in the all-points table using the stats,
230not in the stats table</xs:documentation>
231 </xs:annotation>
232 </xs:element>
233 <xs:element name="compress" type="xs:integer"/>
234 <xs:element name="sid-fields">
235 <xs:complexType/>
236 </xs:element>
237 <xs:element name="source-sf00">
238 <xs:annotation>
239 <xs:documentation>For raw tables we can specifcy the source SF00 file</xs:documentation>
240 </xs:annotation>
241 <xs:complexType>
242 <xs:all>
243 <xs:element ref="assembly-id"/>
244 <xs:element name="name" type="xs:string">
245 <xs:annotation>
246 <xs:documentation>name of SF00 file. Should match values in common/sf.py.</xs:documentation>
247 </xs:annotation>
248 </xs:element>
249 <xs:element minOccurs="0" name="description" type="xs:string">
250 <xs:annotation>
251 <xs:documentation>field description</xs:documentation>
252 </xs:annotation>
253 </xs:element>
254 <xs:element minOccurs="0" name="length" type="xs:unsignedInt">
255 <xs:annotation>
256 <xs:documentation>snack length in bytes, excluding header</xs:documentation>
257 </xs:annotation>
258 </xs:element>
259 <xs:element name="period" type="xs:duration">
260 <xs:annotation>
261 <xs:documentation>frequency of the input SF00 file</xs:documentation>
262 </xs:annotation>
263 </xs:element>
264 <xs:element minOccurs="0" ref="repeat"/>
265 <xs:element minOccurs="0" ref="stride"/>
266 <xs:element minOccurs="0" ref="condition"/>
267 <xs:element minOccurs="0" ref="time-offset"/>
268 </xs:all>
269 </xs:complexType>
270 </xs:element>
271 <xs:element name="assembly-id" type="xs:unsignedInt">
272 <xs:annotation>
273 <xs:documentation>SF00 assembly ID identifiing the data type of input file</xs:documentation>
274 </xs:annotation>
275 </xs:element>
276 <xs:element name="repeat" type="xs:unsignedInt">
277 <xs:annotation>
278 <xs:documentation>To ingest a snack using multiple repeated sections instead of just mapping a single
279snack to a single table row</xs:documentation>
280 </xs:annotation>
281 </xs:element>
282 <xs:element name="stride" type="xs:unsignedInt">
283 <xs:annotation>
284 <xs:documentation>If `repeat` is used set the byte delta between repeats</xs:documentation>
285 </xs:annotation>
286 </xs:element>
287 <xs:element name="condition">
288 <xs:annotation>
289 <xs:documentation>allows snacks to be ingested conditionally</xs:documentation>
290 </xs:annotation>
291 <xs:complexType>
292 <xs:group ref="test"/>
293 </xs:complexType>
294 </xs:element>
295 <xs:element name="time-offset" type="xs:duration">
296 <xs:annotation>
297 <xs:documentation>time-offset is applied to the GRH timestamp of each snack as it is ingested</xs:documentation>
298 </xs:annotation>
299 </xs:element>
300 <xs:element name="view-sql" type="xs:string">
301 <xs:annotation>
302 <xs:documentation>for Views only, the SQL source</xs:documentation>
303 </xs:annotation>
304 </xs:element>
305 <xs:element name="group">
306 <xs:complexType>
307 <xs:choice minOccurs="0" maxOccurs="unbounded">
308 <xs:element name="description" type="xs:string"/>
309 <xs:element name="name" type="xs:string"/>
310 <xs:element ref="group"/>
311 <xs:element ref="field"/>
312 </xs:choice>
313 </xs:complexType>
314 </xs:element>
315 <xs:element name="field">
316 <xs:complexType>
317 <xs:choice minOccurs="0" maxOccurs="unbounded">
318 <xs:element name="name" type="xs:string">
319 <xs:annotation>
320 <xs:documentation>field name</xs:documentation>
321 </xs:annotation>
322 </xs:element>
323 <xs:element ref="key"/>
324 <xs:element ref="category"/>
325 <xs:element ref="datatype"/>
326 <xs:element ref="compression"/>
327 <xs:element ref="decoder"/>
328 <xs:element ref="display"/>
329 <xs:element name="length">
330 <xs:annotation>
331 <xs:documentation>for int and string types, give the size in chars (string) or bits (int or uint)</xs:documentation>
332 </xs:annotation>
333 <xs:simpleType>
334 <xs:restriction base="xs:unsignedInt">
335 <xs:maxInclusive value="10000"/>
336 </xs:restriction>
337 </xs:simpleType>
338 </xs:element>
339 <xs:element name="description" type="xs:string">
340 <xs:annotation>
341 <xs:documentation>field description</xs:documentation>
342 </xs:annotation>
343 </xs:element>
344 <xs:element ref="calibration-name"/>
345 <xs:element ref="allow-null"/>
346 <xs:element name="index">
347 <xs:annotation>
348 <xs:documentation>allow indexes to be declared for individual fields inline</xs:documentation>
349 </xs:annotation>
350 <xs:simpleType>
351 <xs:restriction base="xs:token">
352 <xs:enumeration value="true"/>
353 <xs:enumeration value="primary-key"/>
354 </xs:restriction>
355 </xs:simpleType>
356 </xs:element>
357 <xs:element ref="unit"/>
358 <xs:element ref="choices"/>
359 <xs:element ref="calibration"/>
360 <xs:element name="position" type="xs:unsignedInt"/>
361 <xs:element name="mask" type="xs:string">
362 <xs:annotation>
363 <xs:documentation>Apply a bitwise AND against eaw values</xs:documentation>
364 </xs:annotation>
365 </xs:element>
366 <xs:element name="shift" type="xs:unsignedInt">
367 <xs:annotation>
368 <xs:documentation>Apply a bit shift to raw values</xs:documentation>
369 </xs:annotation>
370 </xs:element>
371 <xs:element ref="validity-group"/>
372 <xs:element ref="validity-group-prime"/>
373 <xs:element ref="invalid"/>
374 <xs:choice>
375 <xs:element ref="limits"/>
376 <xs:element ref="raw-limits"/>
377 </xs:choice>
378 <xs:element ref="hidden"/>
379 <xs:element ref="default"/>
380 <xs:element ref="coarse-time-length"/>
381 <xs:element ref="related"/>
382 </xs:choice>
383 </xs:complexType>
384 </xs:element>
385 <xs:element name="key" type="xs:integer">
386 <xs:annotation>
387 <xs:documentation>for keyvalue stores only the key</xs:documentation>
388 </xs:annotation>
389 </xs:element>
390 <xs:element name="category" type="xs:string">
391 <xs:annotation>
392 <xs:documentation>MSG uses these, currently for information only</xs:documentation>
393 </xs:annotation>
394 </xs:element>
395 <xs:element name="datatype">
396 <xs:annotation>
397 <xs:documentation>field data type</xs:documentation>
398 </xs:annotation>
399 <xs:simpleType>
400 <xs:restriction base="xs:token">
401 <xs:enumeration value="boolean"/>
402 <xs:enumeration value="int"/>
403 <xs:enumeration value="uint"/>
404 <xs:enumeration value="float"/>
405 <xs:enumeration value="double"/>
406 <xs:enumeration value="hirs-signed"/>
407 <xs:enumeration value="inverted-uint"/>
408 <xs:enumeration value="MIL1750a"/>
409 <xs:enumeration value="string"/>
410 <xs:enumeration value="unicode"/>
411 <xs:enumeration value="xml"/>
412 <xs:enumeration value="date"/>
413 <xs:enumeration value="datetime"/>
414 <xs:enumeration value="datetime_ms"/>
415 <xs:enumeration value="jsonb"/>
416 <xs:enumeration value="gen_datetime"/>
417 <xs:enumeration value="autoincrement "/>
418 </xs:restriction>
419 </xs:simpleType>
420 </xs:element>
421 <xs:element name="compression">
422 <xs:annotation>
423 <xs:documentation>Database engine compression method for column</xs:documentation>
424 </xs:annotation>
425 <xs:simpleType>
426 <xs:restriction base="xs:token">
427 <xs:enumeration value="default"/>
428 <xs:enumeration value="none"/>
429 <xs:enumeration value="lz4"/>
430 </xs:restriction>
431 </xs:simpleType>
432 </xs:element>
433 <xs:element name="decoder">
434 <xs:annotation>
435 <xs:documentation>if we need to use a non-standard method to read binary values into this field</xs:documentation>
436 </xs:annotation>
437 <xs:simpleType>
438 <xs:restriction base="xs:token">
439 <xs:enumeration value="hirs-signed"/>
440 <xs:enumeration value="inverted-uint"/>
441 <xs:enumeration value="MIL1750a"/>
442 </xs:restriction>
443 </xs:simpleType>
444 </xs:element>
445 <xs:element name="display">
446 <xs:annotation>
447 <xs:documentation>define special display criteria</xs:documentation>
448 </xs:annotation>
449 <xs:simpleType>
450 <xs:restriction base="xs:token">
451 <xs:enumeration value="pidref"/>
452 </xs:restriction>
453 </xs:simpleType>
454 </xs:element>
455 <xs:element name="calibration-name" type="xs:string">
456 <xs:annotation>
457 <xs:documentation>name of calibration function</xs:documentation>
458 </xs:annotation>
459 </xs:element>
460 <xs:element name="allow-null" type="xs:boolean">
461 <xs:annotation>
462 <xs:documentation>do we allow NULL values?</xs:documentation>
463 </xs:annotation>
464 </xs:element>
465 <xs:element name="unit" type="xs:string">
466 <xs:annotation>
467 <xs:documentation>field unit</xs:documentation>
468 </xs:annotation>
469 </xs:element>
470 <xs:element name="choices">
471 <xs:annotation>
472 <xs:documentation>restrict the field values to a list of enumerated values</xs:documentation>
473 </xs:annotation>
474 <xs:complexType>
475 <xs:choice minOccurs="0" maxOccurs="unbounded">
476 <xs:element name="description" type="xs:string"/>
477 <xs:element ref="item"/>
478 </xs:choice>
479 </xs:complexType>
480 </xs:element>
481 <xs:element name="item">
482 <xs:complexType>
483 <xs:all>
484 <xs:element minOccurs="0" ref="value"/>
485 <xs:element minOccurs="0" name="min-value" type="xs:integer">
486 <xs:annotation>
487 <xs:documentation>for names representing a range of values</xs:documentation>
488 </xs:annotation>
489 </xs:element>
490 <xs:element minOccurs="0" name="max-value" type="xs:integer">
491 <xs:annotation>
492 <xs:documentation>for names representing a range of values</xs:documentation>
493 </xs:annotation>
494 </xs:element>
495 <xs:element name="name" type="xs:string">
496 <xs:annotation>
497 <xs:documentation>value name</xs:documentation>
498 </xs:annotation>
499 </xs:element>
500 <xs:element minOccurs="0" name="description" type="xs:string">
501 <xs:annotation>
502 <xs:documentation>description of item</xs:documentation>
503 </xs:annotation>
504 </xs:element>
505 </xs:all>
506 </xs:complexType>
507 </xs:element>
508 <xs:element name="value" type="xs:integer">
509 <xs:annotation>
510 <xs:documentation>value is required for raw tables only</xs:documentation>
511 </xs:annotation>
512 </xs:element>
513 <xs:element name="calibration" type="xs:string">
514 <xs:annotation>
515 <xs:documentation>name of calibration function</xs:documentation>
516 </xs:annotation>
517 </xs:element>
518 <xs:element name="validity-group" type="xs:string"/>
519 <xs:element name="validity-group-prime" type="xs:string"/>
520 <xs:element name="invalid" type="xs:string">
521 <xs:annotation>
522 <xs:documentation>Ingested data of this value will be recorded as database NULLs</xs:documentation>
523 </xs:annotation>
524 </xs:element>
525 <xs:element name="limits">
526 <xs:complexType>
527 <xs:all>
528 <xs:element minOccurs="0" ref="red"/>
529 <xs:element minOccurs="0" ref="yellow"/>
530 </xs:all>
531 </xs:complexType>
532 </xs:element>
533 <xs:element name="red">
534 <xs:complexType>
535 <xs:all>
536 <xs:element minOccurs="0" name="low" type="xs:string">
537 <xs:annotation>
538 <xs:documentation>many limits values must be evaluated i.e. 10-25</xs:documentation>
539 </xs:annotation>
540 </xs:element>
541 <xs:element minOccurs="0" ref="high"/>
542 </xs:all>
543 </xs:complexType>
544 </xs:element>
545 <xs:element name="high" type="xs:string"/>
546 <xs:element name="yellow">
547 <xs:complexType>
548 <xs:all>
549 <xs:element minOccurs="0" name="low" type="xs:string"/>
550 <xs:element minOccurs="0" ref="high"/>
551 </xs:all>
552 </xs:complexType>
553 </xs:element>
554 <xs:element name="raw-limits">
555 <xs:complexType>
556 <xs:all>
557 <xs:element minOccurs="0" ref="red"/>
558 <xs:element minOccurs="0" ref="yellow"/>
559 </xs:all>
560 </xs:complexType>
561 </xs:element>
562 <xs:element name="hidden" type="xs:boolean"/>
563 <xs:element name="default" type="xs:string"/>
564 <xs:element name="coarse-time-length" type="xs:unsignedInt">
565 <xs:annotation>
566 <xs:documentation>For PUS ingestion of datetime objects we allow the number of bytes of coarse
567time (seconds) to be specified. Remaining bytes are fine time (proportion of</xs:documentation>
568 </xs:annotation>
569 </xs:element>
570 <xs:element name="related" type="xs:string">
571 <xs:annotation>
572 <xs:documentation>For PUS ingestion a parameter may be defined as deduced, meaning it is a debug
573parameter based on the definition given by the value of a different parameter</xs:documentation>
574 </xs:annotation>
575 </xs:element>
576 <xs:group name="test">
577 <xs:annotation>
578 <xs:documentation>tests are applied against individual bytes</xs:documentation>
579 </xs:annotation>
580 <xs:sequence>
581 <xs:choice minOccurs="0" maxOccurs="unbounded">
582 <xs:element ref="test"/>
583 <xs:element ref="and"/>
584 <xs:element ref="or"/>
585 </xs:choice>
586 </xs:sequence>
587 </xs:group>
588 <xs:element name="test">
589 <xs:complexType>
590 <xs:choice minOccurs="0" maxOccurs="unbounded">
591 <xs:element name="position" type="xs:unsignedInt">
592 <xs:annotation>
593 <xs:documentation>byte offset to be tested</xs:documentation>
594 </xs:annotation>
595 </xs:element>
596 <xs:element name="shift" type="xs:unsignedInt"/>
597 <xs:element name="mask" type="xs:string"/>
598 <xs:choice>
599 <xs:element ref="equals"/>
600 <xs:choice>
601 <xs:element name="min-value" type="xs:unsignedInt"/>
602 <xs:element name="max-value" type="xs:unsignedInt"/>
603 </xs:choice>
604 </xs:choice>
605 </xs:choice>
606 </xs:complexType>
607 </xs:element>
608 <xs:element name="equals" type="xs:unsignedInt">
609 <xs:annotation>
610 <xs:documentation>a clause can use either <equals> a specific value, or give a range from <min-value>
611to <max-value>. Unbounded ranges can be specified by omitting either min or max value</xs:documentation>
612 </xs:annotation>
613 </xs:element>
614 <xs:element name="and">
615 <xs:complexType>
616 <xs:group minOccurs="0" maxOccurs="unbounded" ref="test"/>
617 </xs:complexType>
618 </xs:element>
619 <xs:element name="or">
620 <xs:complexType>
621 <xs:group minOccurs="0" maxOccurs="unbounded" ref="test"/>
622 </xs:complexType>
623 </xs:element>
624</xs:schema>