[mdoc-validate] Add support for validating 'csc /doc' XML.
[mono.git] / mcs / tools / mdoc / Resources / monodoc-ecma.xsd
1 <?xml version="1.0" encoding="UTF-8"?>
2 <!--
3 Author: John Luke <john.luke@gmail.com>
4 This is a (not very strict) schema for the monodoc
5 ecma-provider format.
6 TODO:
7 make base type for summary, remarks, returns, etc
8 alias duplicate attributes
9 make stricter in order and occurance
10 add masterdoc support?
11 -->
12 <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
13
14   <!-- define attributes -->
15   <xs:attribute name="argnames" type="xs:string" />
16   <xs:attribute name="cref" type="xs:string" />
17   <xs:attribute name="Deprecated" type="xs:boolean" />
18   <xs:attribute name="FullName" type="xs:string" />
19   <xs:attribute name="FullNameSP" type="xs:string" />
20   <xs:attribute name="inherited" type="xs:string" />
21   <xs:attribute name="language" type="xs:string" />
22   <xs:attribute name="Language" type="xs:string" />
23   <xs:attribute name="lang" type="xs:string" />
24   <xs:attribute name="langword" type="xs:string" />
25   <xs:attribute name="Library" type="xs:string" />
26   <xs:attribute name="location" type="xs:string" />
27   <xs:attribute name="Maintainer" type="xs:string" />
28   <xs:attribute name="MemberName" type="xs:string" />
29   <xs:attribute name="name" type="xs:string" />
30   <xs:attribute name="Name" type="xs:string" />
31   <xs:attribute name="namespace" type="xs:string" />
32   <xs:attribute name="propertytype" type="xs:string" />
33   <xs:attribute name="qualify" type="xs:boolean" />
34   <xs:attribute name="RefType" type="xs:string" />
35   <xs:attribute name="returntype" type="xs:string" />
36   <xs:attribute name="source" type="xs:string" />
37   <xs:attribute name="src" type="xs:string" />
38   <xs:attribute name="subset" type="xs:string" />
39   <xs:attribute name="Value" type="xs:string" />
40   <xs:attribute name="version" type="xs:string" />
41   <xs:attribute name="type" type="xs:string" />
42   <xs:attribute name="Type" type="xs:string" />
43   <xs:attribute name="TypeParamName" type="xs:string" />
44
45   <!-- define simple elements -->
46   <xs:element name="AssemblyName" type="xs:string" />
47   <xs:element name="AssemblyPublicKey" type="xs:string" />
48   <xs:element name="AssemblyVersion" type="xs:string" />
49   <xs:element name="AssemblyCulture" type="xs:string" />
50   <xs:element name="AttributeName" type="xs:string" />
51   <xs:element name="BaseTypeName" type="xs:string" />
52   <xs:element name="Excluded" type="xs:string" />
53   <xs:element name="ExcludedBaseTypeName" type="xs:string" />
54   <xs:element name="ExcludedLibrary" type="xs:string" />
55   <xs:element name="ExcludedLibraryName" type="xs:string" />
56   <xs:element name="ExcludedTypeName" type="xs:string" />
57   <xs:element name="i" type="xs:string" />
58   <xs:element name="InterfaceName" type="xs:string" />
59   <xs:element name="li" type="xs:string" />
60   <xs:element name="MemberOfLibrary" type="xs:string" />
61   <xs:element name="MemberType" type="xs:string" />
62   <xs:element name="MemberValue" type="xs:string" />
63   <xs:element name="onequarter" />
64   <xs:element name="PRE" />
65   <xs:element name="permille" />
66   <xs:element name="pi" />
67   <xs:element name="pre" />
68   <xs:element name="ReturnType" type="xs:string" />
69   <xs:element name="TypeExcluded" type="xs:string" />
70
71   <!-- define complex elements -->
72   <xs:element name="altcompliant">
73     <xs:complexType>
74       <xs:attribute ref="cref" />
75     </xs:complexType>
76   </xs:element>
77
78   <xs:element name="altmember">
79     <xs:complexType>
80       <xs:simpleContent>
81         <xs:extension base="xs:string">
82           <xs:attribute ref="cref" />
83         </xs:extension>
84       </xs:simpleContent>
85     </xs:complexType>
86   </xs:element>
87
88   <xs:element name="AssemblyInfo">
89     <xs:complexType>
90       <xs:sequence>
91         <xs:element ref="AssemblyName" minOccurs="0" />
92         <xs:element ref="AssemblyPublicKey" minOccurs="0" />
93         <xs:element ref="AssemblyVersion" minOccurs="0" maxOccurs="unbounded" />
94         <xs:element ref="AssemblyCulture" minOccurs="0" />
95         <xs:element ref="Attributes" minOccurs="0" />
96       </xs:sequence>
97     </xs:complexType>
98   </xs:element>
99
100   <xs:element name="Attribute">
101     <xs:complexType>
102       <xs:sequence>
103         <xs:element ref="AttributeName" />
104         <xs:element ref="Excluded" minOccurs="0" />
105         <xs:element ref="ExcludedTypeName" minOccurs="0" />
106         <xs:element ref="ExcludedLibraryName" minOccurs="0" />
107       </xs:sequence>
108     </xs:complexType>
109   </xs:element>
110
111   <xs:element name="Attributes">
112     <xs:complexType>
113       <xs:sequence>
114         <xs:element ref="Attribute" minOccurs="0" maxOccurs="unbounded" />
115       </xs:sequence>
116     </xs:complexType>
117   </xs:element>
118
119   <xs:element name="Base">
120     <xs:complexType>
121       <xs:sequence>
122         <xs:element ref="BaseTypeName" minOccurs="0" />
123         <xs:element ref="BaseTypeArguments" minOccurs="0" />
124         <xs:element ref="ExcludedBaseTypeName" minOccurs="0" />
125         <xs:element ref="ExcludedLibraryName" minOccurs="0" />
126       </xs:sequence>
127     </xs:complexType>
128   </xs:element>
129
130   <xs:element name="BaseTypeArgument">
131     <xs:complexType mixed="true">
132       <xs:attribute ref="TypeParamName" />
133     </xs:complexType>
134   </xs:element>
135
136   <xs:element name="BaseTypeArguments">
137     <xs:complexType>
138       <xs:sequence>
139         <xs:element ref="BaseTypeArgument" minOccurs="0" />
140       </xs:sequence>
141     </xs:complexType>
142   </xs:element>
143
144   <xs:element name="block">
145     <xs:complexType mixed="true">
146       <xs:choice minOccurs="0" maxOccurs="unbounded">
147         <xs:element ref="block" />
148         <xs:element ref="c" />
149         <xs:element ref="code" />
150         <xs:element ref="format" />
151         <xs:element ref="list" />
152         <xs:element ref="para" />
153         <xs:element ref="paramref" />
154         <xs:element ref="see" />
155         <xs:element ref="subscript" />
156         <xs:element ref="sup" />
157         <xs:element ref="pi" />
158         <xs:element ref="typeparamref" />
159       </xs:choice>
160       <xs:attribute ref="subset" />
161       <xs:attribute ref="type" />
162     </xs:complexType>
163   </xs:element>
164
165   <xs:element name="c">
166     <xs:complexType mixed="true">
167       <xs:choice minOccurs="0" maxOccurs="unbounded">
168         <xs:element ref="code" />
169         <xs:element ref="para" />
170         <xs:element ref="paramref" />
171         <xs:element ref="see" />
172         <xs:element ref="typeparamref" />
173       </xs:choice>
174     </xs:complexType>
175   </xs:element>
176
177   <xs:element name="class">
178     <xs:complexType>
179       <xs:choice minOccurs="0" maxOccurs="unbounded">
180         <xs:element ref="constructor" />
181         <xs:element ref="property" />
182         <xs:element ref="method" />
183         <xs:element ref="field" />
184         <xs:element ref="operator" />
185         <xs:element ref="event" />
186         <xs:element ref="enum" />
187         <xs:element ref="class" />
188         <xs:element ref="struct" />
189         <xs:element ref="interface" />
190         <xs:element ref="delegate" />
191       </xs:choice>
192       <xs:attribute ref="name" />
193       <xs:attribute ref="namespace" />
194     </xs:complexType>
195   </xs:element>
196
197   <xs:element name="code">
198     <xs:complexType>
199       <xs:simpleContent>
200         <xs:extension base="xs:string">
201           <xs:attribute ref="lang" />
202           <xs:attribute ref="language" />
203           <xs:attribute ref="source" />
204           <xs:attribute ref="src" />
205         </xs:extension>
206       </xs:simpleContent>
207     </xs:complexType>
208   </xs:element>
209
210   <xs:element name="constructor">
211     <xs:complexType>
212           <xs:attribute ref="name" />
213           <xs:attribute ref="argnames" />
214     </xs:complexType>
215   </xs:element>
216
217   <xs:element name="delegate">
218     <xs:complexType>
219       <xs:choice maxOccurs="unbounded">
220         <xs:element ref="constructor" />
221         <xs:element ref="method" />
222         <xs:element ref="property" />
223         <xs:element ref="operator" />
224       </xs:choice>
225       <xs:attribute ref="name" />
226       <xs:attribute ref="namespace" />
227     </xs:complexType>
228   </xs:element>
229
230   <xs:element name="description">
231     <xs:complexType mixed="true">
232       <xs:choice minOccurs="0" maxOccurs="unbounded">
233         <xs:element ref="c" />
234         <xs:element ref="block" />
235         <xs:element ref="geq" />
236         <xs:element ref="leq" />
237         <xs:element ref="paramref" />
238         <xs:element ref="para" />
239         <xs:element ref="permille" />
240         <xs:element ref="plusminus" />
241         <xs:element ref="SPAN" />
242         <xs:element ref="see" />
243         <xs:element ref="sub" />
244         <xs:element ref="typeparamref" />
245       </xs:choice>
246     </xs:complexType>
247   </xs:element>
248
249   <xs:element name="Docs">
250     <xs:complexType>
251       <xs:choice minOccurs="0" maxOccurs="unbounded">
252         <xs:element ref="summary" />
253         <xs:element ref="param" />
254         <xs:element ref="exception" />
255         <xs:element ref="returns" />
256         <xs:element ref="remarks" />
257         <xs:element ref="example" />
258         <xs:element ref="value" />
259         <xs:element ref="permission" />
260         <xs:element ref="PermissionSet" />
261         <xs:element ref="altmember" />
262         <xs:element ref="altcompliant" />
263         <xs:element ref="since" />
264         <xs:element ref="threadsafe" />
265         <xs:element ref="typeparam" />
266         <xs:element ref="filterpriority" />
267       </xs:choice>
268     </xs:complexType>
269   </xs:element>
270
271   <xs:element name="enum">
272     <xs:complexType>
273       <xs:choice minOccurs="0" maxOccurs="unbounded">
274         <xs:element ref="field" />
275         <xs:element ref="method" />
276       </xs:choice>
277       <xs:attribute ref="name" />
278       <xs:attribute ref="namespace" />
279     </xs:complexType>
280   </xs:element>
281
282   <xs:element name="event">
283     <xs:complexType>
284           <xs:attribute ref="name" />
285           <xs:attribute ref="inherited" />
286     </xs:complexType>
287   </xs:element>
288
289   <xs:element name="example">
290     <xs:complexType mixed="true">
291       <xs:choice maxOccurs="unbounded">
292         <xs:element ref="format" />
293         <xs:element ref="para" />
294         <xs:element ref="code" />
295         <xs:element ref="codelink" />
296         <xs:element ref="c" />
297         <xs:element ref="list" />
298         <xs:element ref="see" />
299       </xs:choice>
300     </xs:complexType>
301   </xs:element>
302
303   <xs:element name="exception">
304     <xs:complexType mixed="true">
305       <xs:choice minOccurs="0" maxOccurs="unbounded">
306         <xs:element ref="block" />
307         <xs:element ref="format" />
308         <xs:element ref="para" />
309         <xs:element ref="paramref" />
310         <xs:element ref="see" />
311         <xs:element ref="SPAN" />
312         <xs:element ref="typeparamref" />
313       </xs:choice>
314       <xs:attribute ref="cref" />
315     </xs:complexType>
316   </xs:element>
317
318   <xs:element name="field">
319     <xs:complexType>
320       <xs:attribute ref="name" />
321       <xs:attribute ref="inherited" />
322     </xs:complexType>
323   </xs:element>
324
325   <xs:element name="format">
326     <xs:complexType>
327       <xs:sequence>
328         <xs:any minOccurs="0" processContents="lax" />
329       </xs:sequence>
330       <xs:attribute ref="type" />
331     </xs:complexType>
332   </xs:element>
333
334   <xs:element name="interface">
335     <xs:complexType>
336       <xs:choice minOccurs="0" maxOccurs="unbounded">
337         <xs:element ref="constructor" />
338         <xs:element ref="property" />
339         <xs:element ref="method" />
340         <xs:element ref="field" />
341         <xs:element ref="event" />
342       </xs:choice>
343       <xs:attribute ref="name" />
344       <xs:attribute ref="namespace" />
345     </xs:complexType>
346   </xs:element>
347
348   <xs:element name="Interface">
349     <xs:complexType>
350       <xs:sequence>
351         <xs:element ref="InterfaceName" />
352         <xs:element ref="Excluded" minOccurs="0" />
353       </xs:sequence>
354     </xs:complexType>
355   </xs:element>
356
357   <xs:element name="Interfaces">
358     <xs:complexType>
359       <xs:sequence>
360         <xs:element ref="Interface" minOccurs="0" maxOccurs="unbounded" />
361       </xs:sequence>
362     </xs:complexType>
363   </xs:element>
364
365   <xs:element name="item">
366     <xs:complexType>
367         <xs:sequence>
368           <xs:element ref="term" minOccurs="1" maxOccurs="1" />
369           <xs:element ref="description" minOccurs="0" maxOccurs="unbounded" />
370         </xs:sequence>
371     </xs:complexType>
372   </xs:element>
373
374   <xs:element name="link">
375     <xs:complexType>
376       <xs:simpleContent>
377         <xs:extension base="xs:string">
378           <xs:attribute ref="location" />
379         </xs:extension>
380       </xs:simpleContent>
381     </xs:complexType>
382   </xs:element>
383
384   <xs:element name="list">
385     <xs:complexType>
386         <xs:sequence>
387           <xs:element ref="listheader" minOccurs="0" maxOccurs="1" />
388           <xs:element ref="item" minOccurs="0" maxOccurs="unbounded" />
389         </xs:sequence>
390         <xs:attribute name="type" type="xs:string" />
391     </xs:complexType>
392   </xs:element>
393
394   <xs:element name="listheader">
395     <xs:complexType>
396       <xs:sequence>
397           <xs:element ref="term" />
398           <xs:element ref="description" maxOccurs="unbounded" />
399       </xs:sequence>
400     </xs:complexType>
401   </xs:element>
402
403   <xs:element name="masterdoc">
404     <xs:complexType>
405        <xs:choice minOccurs="0" maxOccurs="unbounded">
406          <xs:element ref="class" />
407          <xs:element ref="delegate" />
408          <xs:element ref="interface" />
409          <xs:element ref="struct" />
410          <xs:element ref="enum" />
411        </xs:choice>
412        <xs:attribute name="assembly" type="xs:string" />
413     </xs:complexType>
414   </xs:element>
415
416   <xs:element name="MemberSignature">
417     <xs:complexType>
418       <xs:attribute ref="Language" />
419       <xs:attribute ref="Value" />
420     </xs:complexType>
421   </xs:element>
422
423   <xs:element name="Link">
424     <xs:complexType>
425       <xs:attribute ref="Type" use="required" />
426       <xs:attribute name="Member" type="xs:string" use="required" />
427     </xs:complexType>
428   </xs:element>
429
430   <xs:element name="Member">
431     <xs:complexType>
432       <xs:sequence>
433         <xs:element ref="MemberSignature" minOccurs="1" maxOccurs="unbounded" />
434         <xs:element ref="MemberType" maxOccurs="1" />
435         <xs:element ref="AssemblyInfo" minOccurs="0" maxOccurs="1" />
436         <xs:element ref="Attributes" minOccurs="0" maxOccurs="1" />
437         <xs:element ref="ReturnValue" minOccurs="0" maxOccurs="1" />
438         <xs:element ref="TypeParameters" minOccurs="0" maxOccurs="1" />
439         <xs:element ref="Parameters" minOccurs="0" maxOccurs="1" />
440         <xs:element ref="MemberValue" minOccurs="0" maxOccurs="1" />
441         <xs:element ref="Docs" maxOccurs="1" />
442         <xs:element ref="Excluded" minOccurs="0" maxOccurs="1" />
443         <xs:element ref="ExcludedLibrary" minOccurs="0" maxOccurs="unbounded" />
444         <xs:element ref="Link" minOccurs="0" maxOccurs="1" />
445       </xs:sequence>
446       <xs:attribute ref="MemberName" />
447       <xs:attribute ref="Deprecated" />
448     </xs:complexType>
449   </xs:element>
450
451   <xs:element name="Members">
452     <xs:complexType>
453       <xs:sequence>
454         <xs:element ref="Member" minOccurs="0" maxOccurs="unbounded" />
455       </xs:sequence>
456     </xs:complexType>
457   </xs:element>
458
459   <xs:element name="method">
460     <xs:complexType>
461       <xs:attribute ref="name" />
462       <xs:attribute ref="argnames" />
463       <xs:attribute ref="inherited" />
464       <xs:attribute ref="returntype" />
465     </xs:complexType>
466   </xs:element>
467
468   <xs:element name="Namespace">
469     <xs:complexType>
470       <xs:sequence>
471         <xs:element ref="Docs" maxOccurs="1" />
472       </xs:sequence>
473       <xs:attribute ref="Name" />
474       <xs:attribute ref="FullName" />
475       <xs:attribute ref="FullNameSP" />
476       <xs:attribute ref="Maintainer" />
477     </xs:complexType>
478   </xs:element>
479
480   <xs:element name="operator">
481     <xs:complexType>
482       <xs:attribute ref="name" />
483       <xs:attribute ref="argnames" />
484     </xs:complexType>
485   </xs:element>
486
487   <xs:element name="para">
488     <xs:complexType mixed="true">
489       <xs:choice minOccurs="0" maxOccurs="unbounded">
490         <xs:element ref="block" />
491         <xs:element ref="format" />
492         <xs:element ref="see" />
493         <xs:element ref="geq" />
494         <xs:element ref="leq" />
495         <xs:element ref="list" />
496         <xs:element ref="link" />
497         <xs:element ref="ul" />
498         <xs:element ref="paramref" />
499         <xs:element ref="c" />
500         <xs:element ref="onequarter" />
501         <xs:element ref="sub" />
502         <xs:element ref="superscript" />
503         <xs:element ref="sup" />
504         <xs:element ref="permille" />
505         <xs:element ref="plusminus" />
506         <xs:element ref="SPAN" />
507         <xs:element ref="pi" />
508         <xs:element ref="theta" />
509         <xs:element ref="typeparamref" />
510         <xs:element ref="whitespace" />
511       </xs:choice>
512     </xs:complexType>
513   </xs:element>
514
515   <xs:element name="param">
516     <xs:complexType mixed="true">
517       <xs:choice minOccurs="0" maxOccurs="unbounded">
518         <xs:element ref="c" />
519         <xs:element ref="format" />
520         <xs:element ref="see" />
521         <xs:element ref="block" />
522         <xs:element ref="geq" />
523         <xs:element ref="leq" />
524         <xs:element ref="paramref" />
525         <xs:element ref="plusminus" />
526         <xs:element ref="para" />
527         <xs:element ref="SPAN" />
528         <xs:element ref="typeparamref" />
529         <xs:element ref="whitespace" />
530       </xs:choice>
531       <xs:attribute ref="name" use="required" />
532     </xs:complexType>
533   </xs:element>
534
535   <xs:element name="paramref">
536     <xs:complexType>
537       <xs:attribute ref="name" use="required" />
538     </xs:complexType>
539   </xs:element>
540
541   <xs:element name="Parameter">
542     <xs:complexType>
543       <xs:sequence>
544         <xs:element ref="Attributes" minOccurs="0" maxOccurs="1" />
545       </xs:sequence>
546       <xs:attribute ref="Name" />
547       <xs:attribute ref="Type" />
548       <xs:attribute ref="RefType" />
549     </xs:complexType>
550   </xs:element>
551
552   <xs:element name="Parameters">
553     <xs:complexType>
554       <xs:sequence>
555         <xs:element ref="Parameter" minOccurs="0" maxOccurs="unbounded" />
556       </xs:sequence>
557     </xs:complexType>
558   </xs:element>
559
560   <xs:element name="permission">
561     <xs:complexType mixed="true">
562       <xs:choice minOccurs="0" maxOccurs="unbounded">
563         <xs:element ref="block" />
564         <xs:element ref="format" />
565         <xs:element ref="para" />
566         <xs:element ref="paramref" />
567         <xs:element ref="see" />
568         <xs:element ref="typeparamref" />
569       </xs:choice>
570       <xs:attribute ref="cref" />
571     </xs:complexType>
572   </xs:element>
573
574   <xs:element name="property">
575     <xs:complexType>
576       <xs:attribute ref="name" />
577       <xs:attribute ref="inherited" />
578       <xs:attribute ref="propertytype" />
579     </xs:complexType>
580   </xs:element>
581
582   <xs:element name="remarks">
583     <xs:complexType mixed="true">
584       <xs:choice minOccurs="0" maxOccurs="unbounded">
585         <xs:element ref="block" />
586         <xs:element ref="c" />
587         <xs:element ref="code" />
588         <xs:element ref="format" />
589         <xs:element ref="para" />
590         <xs:element ref="paramref" />
591         <xs:element ref="PRE" />
592         <xs:element ref="pre" />
593         <xs:element ref="see" />
594         <xs:element ref="ul" />
595         <xs:element ref="example" />
596         <xs:element ref="list" />
597         <xs:element ref="SPAN" />
598         <xs:element ref="typeparamref" />
599       </xs:choice>
600     </xs:complexType>
601   </xs:element>
602
603   <xs:element name="returns">
604     <xs:complexType mixed="true">
605       <xs:choice minOccurs="0" maxOccurs="unbounded">
606         <xs:element ref="format" />
607         <xs:element ref="geq" />
608         <xs:element ref="leq" />
609         <xs:element ref="list" />
610         <xs:element ref="para" />
611         <xs:element ref="paramref" />
612         <xs:element ref="pi" />
613         <xs:element ref="see" />
614         <xs:element ref="theta" />
615         <xs:element ref="typeparamref" />
616         <xs:element ref="ul" />
617         <xs:element ref="whitespace" />
618       </xs:choice>
619     </xs:complexType>
620   </xs:element>
621
622   <xs:element name="ReturnValue">
623     <xs:complexType>
624       <xs:sequence>
625         <xs:element ref="ReturnType" minOccurs="0" maxOccurs="1" />
626         <xs:element ref="Attributes" minOccurs="0" />
627       </xs:sequence>
628     </xs:complexType>
629   </xs:element>
630
631   <xs:element name="see">
632     <xs:complexType>
633       <xs:attribute ref="cref" />
634       <xs:attribute ref="langword"  />
635       <xs:attribute ref="qualify"  />
636     </xs:complexType>
637   </xs:element>
638
639   <xs:element name="since">
640     <xs:complexType>
641       <xs:attribute ref="version" />
642     </xs:complexType>
643   </xs:element>
644
645   <xs:element name="SPAN">
646     <xs:complexType mixed="true">
647       <xs:choice minOccurs="0" maxOccurs="unbounded">
648         <xs:element ref="block" />
649         <xs:element ref="format" />
650         <xs:element ref="para" />
651         <xs:element ref="paramref" />
652         <xs:element ref="see" />
653         <xs:element ref="SPAN" />
654         <xs:element ref="typeparamref" />
655       </xs:choice>
656       <xs:attribute ref="version" />
657     </xs:complexType>
658   </xs:element>
659
660   <xs:element name="struct">
661     <xs:complexType>
662       <xs:choice minOccurs="0" maxOccurs="unbounded">
663         <xs:element ref="constructor" />
664         <xs:element ref="property" />
665         <xs:element ref="method" />
666         <xs:element ref="field" />
667         <xs:element ref="operator" />
668         <xs:element ref="struct" />
669         <xs:element ref="class" />
670       </xs:choice>
671       <xs:attribute ref="name" />
672       <xs:attribute ref="namespace" />
673     </xs:complexType>
674   </xs:element>
675
676   <xs:element name="sub">
677     <xs:complexType mixed="true">
678       <xs:choice minOccurs="0" maxOccurs="unbounded">
679         <xs:element ref="paramref" />
680         <xs:element ref="typeparamref" />
681       </xs:choice>
682     </xs:complexType>
683   </xs:element>
684
685   <xs:element name="subscript">
686     <xs:complexType>
687       <xs:attribute name="term" type="xs:string" use="required" />
688     </xs:complexType>
689   </xs:element>
690
691   <xs:element name="summary">
692     <xs:complexType mixed="true">
693       <xs:choice minOccurs="0" maxOccurs="unbounded">
694         <xs:element ref="block" />
695         <xs:element ref="c" />
696         <xs:element ref="format" />
697         <xs:element ref="para" />
698         <xs:element ref="paramref" />
699         <xs:element ref="see" />
700         <xs:element ref="typeparamref" />
701         <xs:element ref="ul" />
702         <xs:element ref="list" />
703       </xs:choice>
704     </xs:complexType>
705   </xs:element>
706
707   <xs:element name="sup">
708     <xs:complexType mixed="true">
709       <xs:choice minOccurs="0" maxOccurs="unbounded">
710         <xs:element ref="i" />
711         <xs:element ref="paramref" />
712         <xs:element ref="typeparamref" />
713       </xs:choice>
714     </xs:complexType>
715   </xs:element>
716
717   <xs:element name="superscript">
718     <xs:complexType>
719       <xs:attribute name="term" type="xs:string" use="required" />
720     </xs:complexType>
721   </xs:element>
722
723   <xs:element name="term">
724     <xs:complexType mixed="true">
725         <xs:choice minOccurs="0" maxOccurs="unbounded">
726           <xs:element ref="block" />
727           <xs:element ref="c" />
728           <xs:element ref="format" />
729           <xs:element ref="geq" />
730           <xs:element ref="leq" />
731           <xs:element ref="see" />
732           <xs:element ref="para"  />
733           <xs:element ref="paramref" />
734           <xs:element ref="pi" />
735           <xs:element ref="plusminus" />
736           <xs:element ref="sup" />
737           <xs:element ref="theta" />
738           <xs:element ref="typeparamref" />
739           <xs:element ref="whitespace" />
740         </xs:choice>
741     </xs:complexType>
742   </xs:element>
743
744   <xs:element name="theta" />
745
746   <xs:element name="threadsafe">
747     <xs:complexType>
748      <xs:sequence>
749        <xs:element ref="para" minOccurs="1" />
750      </xs:sequence>
751     </xs:complexType>
752   </xs:element>
753
754   <xs:element name="ThreadingSafetyStatement">
755     <xs:complexType mixed="true">
756      <xs:sequence>
757        <xs:element ref="link" minOccurs="0" />
758      </xs:sequence>
759     </xs:complexType>
760   </xs:element>
761
762   <xs:element name="ThreadSafetyStatement">
763     <xs:complexType mixed="true">
764      <xs:sequence>
765        <xs:element ref="link" minOccurs="0" />
766      </xs:sequence>
767     </xs:complexType>
768   </xs:element>
769
770   <xs:element name="Type">
771     <xs:complexType>
772       <xs:choice maxOccurs="unbounded">
773         <xs:element ref="TypeSignature" minOccurs="1" />
774         <xs:element ref="MemberOfLibrary" minOccurs="0" />
775         <xs:element ref="AssemblyInfo" minOccurs="1" />
776         <xs:element ref="TypeParameters" minOccurs="0" maxOccurs="1" />
777         <xs:element ref="ThreadingSafetyStatement" minOccurs="0" />
778         <xs:element ref="ThreadSafetyStatement" minOccurs="0" />
779         <xs:element ref="Docs" minOccurs="1" />
780         <xs:element ref="Base" minOccurs="1" />
781         <xs:element ref="Interfaces" minOccurs="1" />
782         <xs:element ref="Attributes" minOccurs="1" />
783         <xs:element ref="Members" minOccurs="1" />
784         <xs:element ref="Parameters" minOccurs="0" />
785         <xs:element ref="ReturnValue" minOccurs="0" />
786         <xs:element ref="TypeExcluded" minOccurs="0" />
787       </xs:choice>
788       <xs:attribute ref="Name" use="required" />
789       <xs:attribute ref="FullName" use="required" />
790       <xs:attribute ref="FullNameSP" />
791       <xs:attribute ref="Maintainer" />
792     </xs:complexType>
793   </xs:element>
794
795   <xs:element name="Types">
796     <xs:complexType>
797       <xs:choice minOccurs="1" maxOccurs="unbounded">
798         <xs:element ref="Type" />
799       </xs:choice>
800       <xs:attribute ref="Library" use="required" />
801     </xs:complexType>
802   </xs:element>
803
804   <xs:element name="typeparam">
805     <xs:complexType mixed="true">
806       <xs:choice minOccurs="0" maxOccurs="unbounded">
807         <xs:element ref="block" />
808         <xs:element ref="c" />
809         <xs:element ref="format" />
810         <xs:element ref="para" />
811         <xs:element ref="paramref" />
812         <xs:element ref="see" />
813         <xs:element ref="typeparamref" />
814       </xs:choice>
815       <xs:attribute ref="name" use="required" />
816     </xs:complexType>
817   </xs:element>
818
819   <xs:element name="typeparamref">
820     <xs:complexType>
821       <xs:attribute ref="name" use="required" />
822     </xs:complexType>
823   </xs:element>
824
825   <xs:element name="TypeParameters">
826     <xs:complexType>
827       <xs:choice maxOccurs="unbounded">
828         <xs:element ref="TypeParameter" />
829       </xs:choice>
830     </xs:complexType>
831   </xs:element>
832
833   <xs:element name="TypeParameter">
834     <xs:complexType mixed="true">
835       <xs:choice minOccurs="0" maxOccurs="unbounded">
836         <xs:element ref="Attributes" />
837         <xs:element ref="Constraints" />
838       </xs:choice>
839       <xs:attribute ref="Name" use="required" />
840     </xs:complexType>
841   </xs:element>
842
843   <xs:element name="Constraints">
844     <xs:complexType mixed="true">
845       <xs:choice minOccurs="0" maxOccurs="unbounded">
846         <xs:element name="ParameterAttribute" type="xs:string" />
847         <xs:element ref="BaseTypeName" />
848         <xs:element ref="InterfaceName" />
849       </xs:choice>
850     </xs:complexType>
851   </xs:element>
852
853   <xs:element name="TypeSignature">
854     <xs:complexType>
855       <xs:attribute ref="Language" use="required" />
856       <xs:attribute ref="Value" use="required" />
857       <xs:attribute ref="Maintainer" />
858     </xs:complexType>
859   </xs:element>
860
861   <xs:element name="ul">
862     <xs:complexType>
863       <xs:sequence>
864         <xs:element ref="li" minOccurs="1" maxOccurs="unbounded" />
865       </xs:sequence>
866     </xs:complexType>
867   </xs:element>
868
869   <xs:element name="value">
870     <xs:complexType mixed="true">
871       <xs:choice minOccurs="0" maxOccurs="unbounded">
872         <xs:element ref="block" />
873         <xs:element ref="c" />
874         <xs:element ref="para" />
875         <xs:element ref="paramref" />
876         <xs:element ref="see" />
877         <xs:element ref="typeparamref" />
878         <xs:element ref="ul" />
879         <xs:element ref="example" />
880         <xs:element ref="list" />
881       </xs:choice>
882     </xs:complexType>
883   </xs:element>
884
885   <!-- 
886     index.xml & namespace-name.xml support 
887     -->
888
889   <!-- define attributes -->
890   <xs:attribute name="Version" type="xs:string" />
891   <xs:attribute name="DisplayName" type="xs:string" />
892   <xs:attribute name="Kind" type="xs:string" />
893
894   <!-- define simple elements -->
895   <xs:element name="Title" type="xs:string" />
896
897   <!-- define complex elements -->
898   <xs:element name="Assemblies">
899     <xs:complexType>
900       <xs:choice minOccurs="0" maxOccurs="unbounded">
901         <xs:element ref="Assembly" />
902       </xs:choice>
903     </xs:complexType>
904   </xs:element>
905
906   <xs:element name="Assembly">
907     <xs:complexType>
908       <xs:choice minOccurs="0" maxOccurs="unbounded">
909         <xs:element ref="AssemblyPublicKey" />
910         <xs:element ref="AssemblyCulture" />
911         <xs:element ref="Attributes" />
912       </xs:choice>
913       <xs:attribute ref="Name" />
914       <xs:attribute ref="Version" />
915     </xs:complexType>
916   </xs:element>
917
918   <xs:element name="Copyright">
919     <xs:complexType mixed="true">
920       <xs:choice minOccurs="0" maxOccurs="unbounded">
921         <xs:element ref="block" />
922         <xs:element ref="code" />
923         <xs:element ref="example" />
924         <xs:element ref="list" />
925         <xs:element ref="para" />
926         <xs:element ref="paramref" />
927         <xs:element ref="see" />
928         <xs:element ref="typeparamref" />
929         <xs:element ref="ul" />
930       </xs:choice>
931     </xs:complexType>
932   </xs:element>
933
934   <xs:element name="ExtensionMethods">
935     <xs:complexType>
936       <xs:sequence>
937         <xs:element ref="ExtensionMethod" minOccurs="0" maxOccurs="unbounded" />
938       </xs:sequence>
939     </xs:complexType>
940   </xs:element>
941
942   <xs:element name="ExtensionMethod">
943     <xs:complexType>
944       <xs:sequence>
945         <xs:element name="Targets" minOccurs="1" maxOccurs="1">
946           <xs:complexType>
947             <xs:choice minOccurs="1" maxOccurs="unbounded">
948               <xs:element name="Target">
949                 <xs:complexType>
950                   <xs:attribute ref="Type" use="required" />
951                 </xs:complexType>
952               </xs:element>
953             </xs:choice>
954           </xs:complexType>
955         </xs:element>
956         <xs:element ref="Member" minOccurs="1" maxOccurs="1" />
957       </xs:sequence>
958     </xs:complexType>
959   </xs:element>
960
961   <xs:element name="Overview">
962     <xs:complexType>
963       <xs:choice minOccurs="0" maxOccurs="unbounded">
964         <xs:element ref="Assemblies" />
965         <xs:element ref="Copyright" />
966         <xs:element ref="Remarks" />
967         <xs:element ref="Title" />
968         <xs:element name="Types">
969           <xs:complexType>
970             <xs:choice minOccurs="0" maxOccurs="unbounded">
971               <xs:element name="Namespace">
972                 <xs:complexType>
973                   <xs:choice minOccurs="0" maxOccurs="unbounded">
974                     <xs:element name="Type">
975                       <xs:complexType>
976                         <xs:attribute ref="Name" use="required" />
977                         <xs:attribute ref="DisplayName" />
978                         <xs:attribute ref="Kind" />
979                       </xs:complexType>
980                     </xs:element>
981                   </xs:choice>
982                   <xs:attribute ref="Name" />
983                 </xs:complexType>
984               </xs:element>
985             </xs:choice>
986           </xs:complexType>
987         </xs:element>
988         <xs:element ref="ExtensionMethods" />
989       </xs:choice>
990     </xs:complexType>
991   </xs:element>
992
993   <xs:element name="Remarks">
994     <xs:complexType mixed="true">
995       <xs:choice minOccurs="0" maxOccurs="unbounded">
996         <xs:element ref="block" />
997         <xs:element ref="code" />
998         <xs:element ref="example" />
999         <xs:element ref="list" />
1000         <xs:element ref="para" />
1001         <xs:element ref="paramref" />
1002         <xs:element ref="typeparamref" />
1003         <xs:element ref="see" />
1004         <xs:element ref="ul" />
1005       </xs:choice>
1006     </xs:complexType>
1007   </xs:element>
1008
1009   <!--
1010     ECMA 335 CLILibraryTypes.xml support
1011     -->
1012
1013   <xs:element name="Libraries">
1014     <xs:complexType>
1015       <xs:choice minOccurs="0" maxOccurs="unbounded">
1016         <xs:element ref="Types" minOccurs = "1" maxOccurs="unbounded" />
1017       </xs:choice>
1018     </xs:complexType>
1019   </xs:element>
1020
1021         <xs:element name="codelink">
1022     <xs:complexType>
1023       <xs:attribute name="SampleID" type="xs:string" />
1024       <xs:attribute name="SnippedID" type="xs:string" />
1025     </xs:complexType>
1026         </xs:element>
1027
1028   <xs:element name="filterpriority" type="xs:string" />
1029
1030   <xs:element name="geq" />
1031   <xs:element name="leq" />
1032   <xs:element name="plusminus" />
1033   <xs:element name="whitespace" />
1034
1035   <xs:element name="PermissionSet">
1036     <xs:complexType>
1037       <xs:choice minOccurs="0" maxOccurs="unbounded">
1038         <xs:element name="IPermission">
1039           <xs:complexType>
1040             <xs:attribute name="class" type="xs:string" />
1041             <xs:attribute name="Flags" type="xs:string" />
1042             <xs:attribute name="Name" type="xs:string" />
1043             <xs:attribute name="PathDiscovery" type="xs:string" />
1044             <xs:attribute name="PublicKeyBlob" type="xs:string" />
1045             <xs:attribute name="Read" type="xs:string" />
1046             <xs:attribute name="Unrestricted" type="xs:string" />
1047             <xs:attribute name="version" type="xs:string" />
1048             <xs:attribute name="Window" type="xs:string" />
1049           </xs:complexType>
1050         </xs:element>
1051       </xs:choice>
1052     </xs:complexType>
1053   </xs:element>
1054
1055   <!--
1056     ECMA 334 Annex E Documentation Comments support.
1057     -->
1058
1059   <xs:element name="seealso">
1060     <xs:complexType>
1061       <xs:simpleContent>
1062         <xs:extension base="xs:string">
1063           <xs:attribute ref="cref" />
1064         </xs:extension>
1065       </xs:simpleContent>
1066     </xs:complexType>
1067   </xs:element>
1068
1069   <xs:element name="doc">
1070     <xs:complexType>
1071       <xs:sequence>
1072         <xs:element name="assembly">
1073           <xs:complexType>
1074             <xs:choice>
1075               <xs:element name="name" type="xs:string" />
1076             </xs:choice>
1077           </xs:complexType>
1078         </xs:element>
1079         <xs:element name="members">
1080           <xs:complexType>
1081             <xs:choice minOccurs="0" maxOccurs="unbounded">>
1082               <xs:element name="member">
1083                 <xs:complexType>
1084                   <xs:choice minOccurs="0" maxOccurs="unbounded">
1085                     <xs:element ref="seealso" />
1086                     <xs:element ref="example" />
1087                     <xs:element ref="exception" />
1088                     <xs:element ref="param" />
1089                     <xs:element ref="permission" />
1090                     <xs:element ref="PermissionSet" />
1091                     <xs:element ref="remarks" />
1092                     <xs:element ref="returns" />
1093                     <xs:element ref="summary" />
1094                     <xs:element ref="threadsafe" />
1095                     <xs:element ref="typeparam" />
1096                     <xs:element ref="value" />
1097                   </xs:choice>
1098                   <xs:attribute name="name" type="xs:type" />
1099                 </xs:complexType>
1100               </xs:element>
1101             </xs:choice>
1102           </xs:complexType>
1103         </xs:element>
1104       </xs:sequence>
1105     </xs:complexType>
1106   </xs:element>
1107 </xs:schema>
1108