1<?xml version="1.0" encoding="UTF-8"?>
2<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
3  <xs:element name="targetGeometry">
4    <xs:complexType>
5      <xs:group minOccurs="0" maxOccurs="unbounded" ref="geometry-element"/>
6    </xs:complexType>
7  </xs:element>
8  <xs:element name="geometryGroup" type="geometryGroup-content"/>
9  <xs:complexType name="geometryGroup-content">
10    <xs:group maxOccurs="unbounded" ref="geometry-element"/>
11    <xs:attribute name="name" use="required" type="xs:token"/>
12  </xs:complexType>
13  <xs:group name="geometry-element">
14    <xs:sequence>
15      <xs:choice minOccurs="0" maxOccurs="unbounded">
16        <xs:element ref="component"/>
17        <xs:element ref="geometryGroup"/>
18      </xs:choice>
19    </xs:sequence>
20  </xs:group>
21  <xs:element name="component">
22    <xs:complexType>
23      <xs:sequence>
24        <xs:element minOccurs="0" ref="description"/>
25        <xs:choice minOccurs="0" maxOccurs="unbounded">
26          <xs:element ref="cylinder"/>
27          <xs:element ref="ellipsoid"/>
28          <xs:element ref="faceSet"/>
29          <xs:element ref="tube"/>
30          <xs:element ref="sphere"/>
31          <xs:element ref="box"/>
32          <xs:element ref="extrusion"/>
33        </xs:choice>
34      </xs:sequence>
35      <xs:attributeGroup ref="name-attribute"/>
36    </xs:complexType>
37  </xs:element>
38  <xs:element name="translation">
39    <xs:complexType>
40      <xs:simpleContent>
41        <xs:extension base="three-doubles-list">
42          <xs:attributeGroup ref="dimension-attribute"/>
43          <xs:attributeGroup ref="Length-attribute"/>
44        </xs:extension>
45      </xs:simpleContent>
46    </xs:complexType>
47  </xs:element>
48  <xs:element name="rotation">
49    <xs:complexType>
50      <xs:simpleContent>
51        <xs:extension base="three-doubles-list">
52          <xs:attributeGroup ref="dimension-attribute"/>
53          <xs:attributeGroup ref="Length-attribute"/>
54        </xs:extension>
55      </xs:simpleContent>
56    </xs:complexType>
57  </xs:element>
58  <xs:element name="about">
59    <xs:complexType>
60      <xs:simpleContent>
61        <xs:extension base="three-doubles-list">
62          <xs:attributeGroup ref="dimension-attribute"/>
63          <xs:attributeGroup ref="Length-attribute"/>
64        </xs:extension>
65      </xs:simpleContent>
66    </xs:complexType>
67  </xs:element>
68  <xs:element name="length">
69    <xs:complexType>
70      <xs:simpleContent>
71        <xs:restriction base="xs:anyType">
72          <xs:simpleType>
73            <xs:restriction base="xs:double">
74              <xs:minExclusive value="0"/>
75            </xs:restriction>
76          </xs:simpleType>
77          <xs:attributeGroup ref="dimension-attribute"/>
78          <xs:attributeGroup ref="Length-attribute"/>
79        </xs:restriction>
80      </xs:simpleContent>
81    </xs:complexType>
82  </xs:element>
83  <xs:element name="radius">
84    <xs:complexType>
85      <xs:simpleContent>
86        <xs:restriction base="xs:anyType">
87          <xs:simpleType>
88            <xs:restriction base="xs:double">
89              <xs:minExclusive value="0"/>
90            </xs:restriction>
91          </xs:simpleType>
92          <xs:attributeGroup ref="dimension-attribute"/>
93          <xs:attributeGroup ref="Length-attribute"/>
94        </xs:restriction>
95      </xs:simpleContent>
96    </xs:complexType>
97  </xs:element>
98  <xs:element name="base1">
99    <xs:complexType>
100      <xs:simpleContent>
101        <xs:extension base="three-doubles-list">
102          <xs:attributeGroup ref="dimension-attribute"/>
103          <xs:attributeGroup ref="Length-attribute"/>
104        </xs:extension>
105      </xs:simpleContent>
106    </xs:complexType>
107  </xs:element>
108  <xs:element name="base2">
109    <xs:complexType>
110      <xs:simpleContent>
111        <xs:extension base="three-doubles-list">
112          <xs:attributeGroup ref="dimension-attribute"/>
113          <xs:attributeGroup ref="Length-attribute"/>
114        </xs:extension>
115      </xs:simpleContent>
116    </xs:complexType>
117  </xs:element>
118  <xs:element name="transform">
119    <xs:complexType>
120      <xs:sequence>
121        <xs:element minOccurs="0" ref="translation"/>
122        <xs:element minOccurs="0" ref="rotation"/>
123        <xs:element minOccurs="0" ref="about"/>
124      </xs:sequence>
125    </xs:complexType>
126  </xs:element>
127  <xs:element name="cyl-transform">
128    <xs:complexType>
129      <xs:sequence>
130        <xs:element ref="translation"/>
131        <xs:element minOccurs="0" ref="rotation"/>
132        <xs:element minOccurs="0" ref="about"/>
133      </xs:sequence>
134    </xs:complexType>
135  </xs:element>
136  <xs:element name="cylinder">
137    <xs:complexType>
138      <xs:choice minOccurs="0" maxOccurs="unbounded">
139        <xs:element ref="radius"/>
140        <xs:choice>
141          <xs:choice>
142            <xs:element ref="length"/>
143            <xs:element ref="cyl-transform"/>
144          </xs:choice>
145          <xs:choice>
146            <xs:element ref="base1"/>
147            <xs:element ref="base2"/>
148            <xs:element minOccurs="0" maxOccurs="unbounded" ref="transform"/>
149          </xs:choice>
150        </xs:choice>
151        <xs:element ref="description"/>
152        <xs:element ref="vMaterial"/>
153      </xs:choice>
154      <xs:attributeGroup ref="name-attribute"/>
155    </xs:complexType>
156  </xs:element>
157  <xs:element name="ellipsoid">
158    <xs:complexType>
159      <xs:choice minOccurs="0" maxOccurs="unbounded">
160        <xs:element name="radius">
161          <xs:complexType>
162            <xs:simpleContent>
163              <xs:extension base="three-doubles-list">
164                <xs:attributeGroup ref="length-attribute"/>
165              </xs:extension>
166            </xs:simpleContent>
167          </xs:complexType>
168        </xs:element>
169        <xs:element ref="vMaterial"/>
170        <xs:element ref="transform"/>
171      </xs:choice>
172      <xs:attributeGroup ref="name-attribute"/>
173    </xs:complexType>
174  </xs:element>
175  <xs:element name="faceSet">
176    <xs:complexType>
177      <xs:choice minOccurs="0" maxOccurs="unbounded">
178        <xs:element ref="description"/>
179        <xs:element ref="vertex_normals"/>
180        <xs:element ref="vertices"/>
181        <xs:element ref="facets"/>
182        <xs:group ref="optional-content"/>
183      </xs:choice>
184      <xs:attribute name="name" type="xs:token"/>
185    </xs:complexType>
186  </xs:element>
187  <xs:element name="facets" type="facets-content"/>
188  <xs:simpleType name="facets-content">
189    <xs:restriction base="integer-list"/>
190  </xs:simpleType>
191  <xs:element name="vertex_normals" type="vertex_normals-content"/>
192  <xs:complexType name="vertex_normals-content">
193    <xs:simpleContent>
194      <xs:restriction base="xs:anyType">
195        <xs:simpleType>
196          <xs:restriction>
197            <xs:simpleType>
198              <xs:list>
199                <xs:simpleType>
200                  <xs:union>
201                    <xs:simpleType>
202                      <xs:union memberTypes="xs:double xs:double xs:double"/>
203                    </xs:simpleType>
204                    <xs:simpleType>
205                      <xs:union memberTypes="xs:double xs:double xs:double"/>
206                    </xs:simpleType>
207                    <xs:simpleType>
208                      <xs:union memberTypes="xs:double xs:double xs:double"/>
209                    </xs:simpleType>
210                    <xs:simpleType>
211                      <xs:union memberTypes="xs:double xs:double xs:double"/>
212                    </xs:simpleType>
213                  </xs:union>
214                </xs:simpleType>
215              </xs:list>
216            </xs:simpleType>
217            <xs:minLength value="9"/>
218          </xs:restriction>
219        </xs:simpleType>
220        <xs:attributeGroup ref="length-attribute"/>
221      </xs:restriction>
222    </xs:simpleContent>
223  </xs:complexType>
224  <xs:element name="vertices" type="vertices-content"/>
225  <xs:complexType name="vertices-content">
226    <xs:simpleContent>
227      <xs:restriction base="xs:anyType">
228        <xs:simpleType>
229          <xs:restriction>
230            <xs:simpleType>
231              <xs:list>
232                <xs:simpleType>
233                  <xs:union>
234                    <xs:simpleType>
235                      <xs:union memberTypes="xs:double xs:double xs:double"/>
236                    </xs:simpleType>
237                    <xs:simpleType>
238                      <xs:union memberTypes="xs:double xs:double xs:double"/>
239                    </xs:simpleType>
240                    <xs:simpleType>
241                      <xs:union memberTypes="xs:double xs:double xs:double"/>
242                    </xs:simpleType>
243                    <xs:simpleType>
244                      <xs:union memberTypes="xs:double xs:double xs:double"/>
245                    </xs:simpleType>
246                  </xs:union>
247                </xs:simpleType>
248              </xs:list>
249            </xs:simpleType>
250            <xs:minLength value="9"/>
251          </xs:restriction>
252        </xs:simpleType>
253        <xs:attributeGroup ref="length-attribute"/>
254      </xs:restriction>
255    </xs:simpleContent>
256  </xs:complexType>
257  <xs:element name="tube" type="tube-content"/>
258  <xs:complexType name="tube-content">
259    <xs:choice minOccurs="0" maxOccurs="unbounded">
260      <xs:element ref="spine"/>
261      <xs:element ref="radius"/>
262      <xs:group ref="optional-content"/>
263    </xs:choice>
264    <xs:attributeGroup ref="name-attribute"/>
265  </xs:complexType>
266  <xs:element name="spine" type="spine-content"/>
267  <xs:complexType name="spine-content">
268    <xs:simpleContent>
269      <xs:restriction base="xs:anyType">
270        <xs:simpleType>
271          <xs:restriction>
272            <xs:simpleType>
273              <xs:list>
274                <xs:simpleType>
275                  <xs:union>
276                    <xs:simpleType>
277                      <xs:union memberTypes="xs:double xs:double xs:double"/>
278                    </xs:simpleType>
279                    <xs:simpleType>
280                      <xs:union memberTypes="xs:double xs:double xs:double"/>
281                    </xs:simpleType>
282                  </xs:union>
283                </xs:simpleType>
284              </xs:list>
285            </xs:simpleType>
286            <xs:minLength value="6"/>
287          </xs:restriction>
288        </xs:simpleType>
289        <xs:attributeGroup ref="length-attribute"/>
290      </xs:restriction>
291    </xs:simpleContent>
292  </xs:complexType>
293  <xs:element name="sphere" type="sphere-content"/>
294  <xs:complexType name="sphere-content">
295    <xs:choice minOccurs="0" maxOccurs="unbounded">
296      <xs:element ref="radius"/>
297      <xs:element ref="position"/>
298    </xs:choice>
299    <xs:attributeGroup ref="name-attribute"/>
300  </xs:complexType>
301  <xs:element name="position" type="position-content"/>
302  <xs:complexType name="position-content">
303    <xs:simpleContent>
304      <xs:extension base="three-doubles-list">
305        <xs:attributeGroup ref="length-attribute"/>
306      </xs:extension>
307    </xs:simpleContent>
308  </xs:complexType>
309  <xs:element name="box" type="box-content"/>
310  <xs:complexType name="box-content">
311    <xs:choice minOccurs="0" maxOccurs="unbounded">
312      <xs:element ref="size"/>
313      <xs:choice>
314        <xs:element ref="position"/>
315        <xs:element ref="transform"/>
316      </xs:choice>
317    </xs:choice>
318    <xs:attributeGroup ref="name-attribute"/>
319  </xs:complexType>
320  <xs:element name="size" type="size-content"/>
321  <xs:complexType name="size-content">
322    <xs:simpleContent>
323      <xs:extension base="three-doubles-list">
324        <xs:attributeGroup ref="length-attribute"/>
325      </xs:extension>
326    </xs:simpleContent>
327  </xs:complexType>
328  <xs:element name="extrusion" type="extrusion-content"/>
329  <xs:complexType name="extrusion-content">
330    <xs:choice minOccurs="0" maxOccurs="unbounded">
331      <xs:element ref="spine"/>
332      <xs:element ref="scale"/>
333      <xs:element ref="crossSection"/>
334      <xs:group ref="optional-content"/>
335    </xs:choice>
336    <xs:attributeGroup ref="name-attribute"/>
337  </xs:complexType>
338  <xs:element name="scale" type="scale-content"/>
339  <xs:simpleType name="scale-content">
340    <xs:restriction>
341      <xs:simpleType>
342        <xs:list>
343          <xs:simpleType>
344            <xs:union memberTypes="xs:double xs:double"/>
345          </xs:simpleType>
346        </xs:list>
347      </xs:simpleType>
348      <xs:minLength value="2"/>
349    </xs:restriction>
350  </xs:simpleType>
351  <xs:element name="crossSection" type="crossSection-content"/>
352  <xs:complexType name="crossSection-content">
353    <xs:simpleContent>
354      <xs:restriction base="xs:anyType">
355        <xs:simpleType>
356          <xs:restriction>
357            <xs:simpleType>
358              <xs:list>
359                <xs:simpleType>
360                  <xs:union>
361                    <xs:simpleType>
362                      <xs:union memberTypes="xs:double xs:double xs:double"/>
363                    </xs:simpleType>
364                    <xs:simpleType>
365                      <xs:union memberTypes="xs:double xs:double xs:double"/>
366                    </xs:simpleType>
367                    <xs:simpleType>
368                      <xs:union memberTypes="xs:double xs:double xs:double"/>
369                    </xs:simpleType>
370                  </xs:union>
371                </xs:simpleType>
372              </xs:list>
373            </xs:simpleType>
374            <xs:minLength value="9"/>
375          </xs:restriction>
376        </xs:simpleType>
377        <xs:attributeGroup ref="length-attribute"/>
378        <xs:attributeGroup ref="closed-attribute"/>
379      </xs:restriction>
380    </xs:simpleContent>
381  </xs:complexType>
382  <xs:attributeGroup name="closed-attribute">
383    <xs:attribute name="closed" use="required" type="xs:boolean"/>
384  </xs:attributeGroup>
385  <xs:group name="optional-content">
386    <xs:annotation>
387      <xs:documentation>global #############</xs:documentation>
388    </xs:annotation>
389    <xs:sequence>
390      <xs:choice minOccurs="0" maxOccurs="unbounded">
391        <xs:element ref="transform"/>
392        <xs:element ref="vMaterial"/>
393      </xs:choice>
394    </xs:sequence>
395  </xs:group>
396  <xs:element name="description" type="xs:string"/>
397  <xs:attributeGroup name="length-attribute">
398    <xs:attributeGroup ref="dimension-attribute"/>
399    <xs:attributeGroup ref="Length-attribute"/>
400  </xs:attributeGroup>
401  <xs:attributeGroup name="dimension-attribute">
402    <xs:attribute name="dimension" use="required">
403      <xs:simpleType>
404        <xs:restriction base="xs:token">
405          <xs:enumeration value="L"/>
406          <xs:enumeration value="F"/>
407          <xs:enumeration value="M"/>
408          <xs:enumeration value="T"/>
409          <xs:enumeration value="F/L"/>
410          <xs:enumeration value="F/LL"/>
411          <xs:enumeration value="F/LLL"/>
412          <xs:enumeration value="F/T"/>
413          <xs:enumeration value="F/TT"/>
414          <xs:enumeration value="F/TTT"/>
415          <xs:enumeration value="L/T"/>
416          <xs:enumeration value="L/TT"/>
417          <xs:enumeration value="LLLLL"/>
418          <xs:enumeration value="D/D"/>
419        </xs:restriction>
420      </xs:simpleType>
421    </xs:attribute>
422  </xs:attributeGroup>
423  <xs:attributeGroup name="Length-attribute">
424    <xs:attribute name="Length" use="required">
425      <xs:simpleType>
426        <xs:restriction base="xs:token">
427          <xs:enumeration value="meter"/>
428          <xs:enumeration value="m"/>
429          <xs:enumeration value="foot"/>
430          <xs:enumeration value="f"/>
431          <xs:enumeration value="inch"/>
432          <xs:enumeration value="in"/>
433          <xs:enumeration value="centimeter"/>
434          <xs:enumeration value="cm"/>
435          <xs:enumeration value="decimeter"/>
436          <xs:enumeration value="dm"/>
437          <xs:enumeration value="millimeter"/>
438          <xs:enumeration value="mm"/>
439          <xs:enumeration value="degree"/>
440        </xs:restriction>
441      </xs:simpleType>
442    </xs:attribute>
443  </xs:attributeGroup>
444  <xs:attributeGroup name="Time-attribute">
445    <xs:attribute name="Time" use="required">
446      <xs:simpleType>
447        <xs:restriction base="xs:token">
448          <xs:enumeration value="second"/>
449          <xs:enumeration value="s"/>
450          <xs:enumeration value="sec"/>
451          <xs:enumeration value="minute"/>
452          <xs:enumeration value="min"/>
453          <xs:enumeration value="hour"/>
454          <xs:enumeration value="hr"/>
455        </xs:restriction>
456      </xs:simpleType>
457    </xs:attribute>
458  </xs:attributeGroup>
459  <xs:attributeGroup name="Force-attribute">
460    <xs:attribute name="Force" use="required">
461      <xs:simpleType>
462        <xs:restriction base="xs:token">
463          <xs:enumeration value="newton"/>
464          <xs:enumeration value="n"/>
465          <xs:enumeration value="pound"/>
466          <xs:enumeration value="grain"/>
467        </xs:restriction>
468      </xs:simpleType>
469    </xs:attribute>
470  </xs:attributeGroup>
471  <xs:attributeGroup name="Mass-attribute">
472    <xs:attribute name="Mass" use="required">
473      <xs:simpleType>
474        <xs:restriction base="xs:token">
475          <xs:enumeration value="kilogram"/>
476          <xs:enumeration value="kg"/>
477          <xs:enumeration value="gram"/>
478        </xs:restriction>
479      </xs:simpleType>
480    </xs:attribute>
481  </xs:attributeGroup>
482  <xs:attributeGroup name="Dimensionless-attribute">
483    <xs:attribute name="Dimensionless" use="required">
484      <xs:simpleType>
485        <xs:restriction base="xs:token">
486          <xs:enumeration value="radian"/>
487          <xs:enumeration value="rad"/>
488        </xs:restriction>
489      </xs:simpleType>
490    </xs:attribute>
491  </xs:attributeGroup>
492  <xs:simpleType name="three-doubles-list">
493    <xs:restriction>
494      <xs:simpleType>
495        <xs:list>
496          <xs:simpleType>
497            <xs:union memberTypes="xs:double xs:double xs:double"/>
498          </xs:simpleType>
499        </xs:list>
500      </xs:simpleType>
501      <xs:length value="3"/>
502    </xs:restriction>
503  </xs:simpleType>
504  <xs:simpleType name="integer-list">
505    <xs:restriction>
506      <xs:simpleType>
507        <xs:list>
508          <xs:simpleType>
509            <xs:union memberTypes="xs:integer xs:integer"/>
510          </xs:simpleType>
511        </xs:list>
512      </xs:simpleType>
513      <xs:minLength value="1"/>
514    </xs:restriction>
515  </xs:simpleType>
516  <xs:attributeGroup name="name-attribute">
517    <xs:attribute name="name" use="required" type="xs:token"/>
518  </xs:attributeGroup>
519  <xs:attributeGroup name="description-attribute">
520    <xs:attribute name="description" use="required"/>
521  </xs:attributeGroup>
522  <xs:element name="vMaterial">
523    <xs:complexType>
524      <xs:sequence>
525        <xs:element minOccurs="0" ref="diffuseColor"/>
526        <xs:element minOccurs="0" ref="emissiveColor"/>
527        <xs:element minOccurs="0" ref="specularColor"/>
528        <xs:element minOccurs="0" ref="shininess"/>
529        <xs:element minOccurs="0" ref="transparency"/>
530        <xs:element minOccurs="0" ref="ambientIntensity"/>
531        <xs:element minOccurs="0" ref="DEF"/>
532        <xs:element minOccurs="0" ref="USE"/>
533      </xs:sequence>
534    </xs:complexType>
535  </xs:element>
536  <xs:element name="diffuseColor" type="xs:string"/>
537  <xs:element name="emissiveColor" type="xs:string"/>
538  <xs:element name="specularColor" type="xs:string"/>
539  <xs:element name="shininess" type="xs:string"/>
540  <xs:element name="transparency" type="xs:string"/>
541  <xs:element name="ambientIntensity" type="xs:string"/>
542  <xs:element name="DEF" type="xs:string"/>
543  <xs:element name="USE" type="xs:string"/>
544</xs:schema>
545