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 &lt;source-table&gt; 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 &gt;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&lt;-&gt;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 &lt;equals&gt; a specific value, or give a range from &lt;min-value&gt;
611to &lt;max-value&gt;. 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>