2005-01-31 Zoltan Varga <vargaz@freemail.hu>
[mono.git] / mcs / class / Commons.Xml.Relaxng / resources / relaxng.rng
1 <?xml version="1.0"?>
2 <!-- RELAX NG for RELAX NG -->
3 <!-- $Id: relaxng.rng,v 1.1 2004/03/17 19:27:34 atsushi Exp $ -->
4 <grammar datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"
5          ns="http://relaxng.org/ns/structure/1.0"
6          xmlns="http://relaxng.org/ns/structure/1.0">
7   <start>
8     <ref name="pattern"/>
9   </start>
10
11   <define name="pattern">
12     <choice>
13       <element name="element">
14         <choice>
15           <attribute name="name">
16             <data type="QName"/>
17           </attribute>
18           <ref name="open-name-class"/>
19         </choice>
20         <ref name="common-atts"/>
21         <ref name="open-patterns"/>
22       </element>
23       <element name="attribute">
24         <ref name="common-atts"/>
25         <choice>
26           <attribute name="name">
27             <data type="QName"/>
28           </attribute>
29           <ref name="open-name-class"/>
30         </choice>
31         <interleave>
32           <ref name="other"/>
33           <optional>
34             <ref name="pattern"/>
35           </optional>
36         </interleave>
37       </element>
38       <element name="group">
39         <ref name="common-atts"/>
40         <ref name="open-patterns"/>
41       </element>
42       <element name="interleave">
43         <ref name="common-atts"/>
44         <ref name="open-patterns"/>
45       </element>
46       <element name="choice">
47         <ref name="common-atts"/>
48         <ref name="open-patterns"/>
49       </element>
50       <element name="optional">
51         <ref name="common-atts"/>
52         <ref name="open-patterns"/>
53       </element>
54       <element name="zeroOrMore">
55         <ref name="common-atts"/>
56         <ref name="open-patterns"/>
57       </element>
58       <element name="oneOrMore">
59         <ref name="common-atts"/>
60         <ref name="open-patterns"/>
61       </element>
62       <element name="list">
63         <ref name="common-atts"/>
64         <ref name="open-patterns"/>
65       </element>
66       <element name="mixed">
67         <ref name="common-atts"/>
68         <ref name="open-patterns"/>
69       </element>
70       <element name="ref">
71         <attribute name="name">
72           <data type="NCName"/>
73         </attribute>
74         <ref name="common-atts"/>
75         <ref name="other"/>
76       </element>
77       <element name="parentRef">
78         <attribute name="name">
79           <data type="NCName"/>
80         </attribute>
81         <ref name="common-atts"/>
82         <ref name="other"/>
83       </element>
84       <element name="empty">
85         <ref name="common-atts"/>
86         <ref name="other"/>
87       </element>
88       <element name="text">
89         <ref name="common-atts"/>
90         <ref name="other"/>
91       </element>
92       <element name="value">
93         <optional>
94           <attribute name="type">
95             <data type="NCName"/>
96           </attribute>
97         </optional>
98         <ref name="common-atts"/>
99         <text/>
100       </element>
101       <element name="data">
102         <attribute name="type">
103           <data type="NCName"/>
104         </attribute>
105         <ref name="common-atts"/>
106         <interleave>
107           <ref name="other"/>
108           <group>
109             <zeroOrMore>
110               <element name="param">
111                 <attribute name="name">
112                   <data type="NCName"/>
113                 </attribute>
114                 <ref name="common-atts"/>
115                 <text/>
116               </element>
117             </zeroOrMore>
118             <optional>
119               <element name="except">
120                 <ref name="common-atts"/>
121                 <ref name="open-patterns"/>
122               </element>
123             </optional>
124           </group>
125         </interleave>
126       </element>
127       <element name="notAllowed">
128         <ref name="common-atts"/>
129         <ref name="other"/>
130       </element>
131       <element name="externalRef">
132         <attribute name="href">
133           <data type="anyURI"/>
134         </attribute>
135         <ref name="common-atts"/>
136         <ref name="other"/>
137       </element>
138       <element name="grammar">
139         <ref name="common-atts"/>
140         <ref name="grammar-content"/>
141       </element>
142     </choice>
143   </define>
144
145   <define name="grammar-content">
146     <interleave>
147       <ref name="other"/>
148       <zeroOrMore>
149         <choice>
150           <ref name="start-element"/>
151           <ref name="define-element"/>
152           <element name="div">
153             <ref name="common-atts"/>
154             <ref name="grammar-content"/>
155           </element>
156           <element name="include">
157             <attribute name="href">
158               <data type="anyURI"/>
159             </attribute>
160             <ref name="common-atts"/>
161             <ref name="include-content"/>
162           </element>
163         </choice>
164       </zeroOrMore>
165     </interleave>
166   </define>
167
168   <define name="include-content">
169     <interleave>
170       <ref name="other"/>
171       <zeroOrMore>
172         <choice>
173           <ref name="start-element"/>
174           <ref name="define-element"/>
175           <element name="div">
176             <ref name="common-atts"/>
177             <ref name="include-content"/>
178           </element>
179         </choice>
180       </zeroOrMore>
181     </interleave>
182   </define>
183
184   <define name="start-element">
185     <element name="start">
186       <ref name="combine-att"/>
187       <ref name="common-atts"/>
188       <ref name="open-pattern"/>
189     </element>
190   </define>
191
192   <define name="define-element">
193     <element name="define">
194       <attribute name="name">
195         <data type="NCName"/>
196       </attribute>
197       <ref name="combine-att"/>
198       <ref name="common-atts"/>
199       <ref name="open-patterns"/>
200     </element>
201   </define>
202
203   <define name="combine-att">
204     <optional>
205       <attribute name="combine">
206         <choice>
207           <value>choice</value>
208           <value>interleave</value>
209         </choice>
210       </attribute>
211     </optional>
212   </define>
213   
214   <define name="open-patterns">
215     <interleave>
216       <ref name="other"/>
217       <oneOrMore>
218         <ref name="pattern"/>
219       </oneOrMore>
220     </interleave>
221   </define>
222
223   <define name="open-pattern">
224     <interleave>
225       <ref name="other"/>
226       <ref name="pattern"/>
227     </interleave>
228   </define>
229
230   <define name="name-class">
231     <choice>
232       <element name="name">
233         <ref name="common-atts"/>
234         <data type="QName"/>
235       </element>
236       <element name="anyName">
237         <ref name="common-atts"/>
238         <ref name="except-name-class"/>
239       </element>
240       <element name="nsName">
241         <ref name="common-atts"/>
242         <ref name="except-name-class"/>
243       </element>
244       <element name="choice">
245         <ref name="common-atts"/>
246         <ref name="open-name-classes"/>
247       </element>
248     </choice>
249   </define>
250
251   <define name="except-name-class">
252     <interleave>
253       <ref name="other"/>
254       <optional>
255         <element name="except">
256           <ref name="open-name-classes"/>
257         </element>
258       </optional>
259     </interleave>
260   </define>
261
262   <define name="open-name-classes">
263     <interleave>
264       <ref name="other"/>
265       <oneOrMore>
266         <ref name="name-class"/>
267       </oneOrMore>
268     </interleave>
269   </define>
270
271   <define name="open-name-class">
272     <interleave>
273       <ref name="other"/>
274       <ref name="name-class"/>
275     </interleave>
276   </define>
277
278   <define name="common-atts">
279     <optional>
280       <attribute name="ns"/>
281     </optional>
282     <optional>
283       <attribute name="datatypeLibrary">
284         <data type="anyURI"/>
285       </attribute>
286     </optional>
287     <zeroOrMore>
288       <attribute>
289         <anyName>
290           <except>
291             <nsName/>
292             <nsName ns=""/>
293           </except>
294         </anyName>
295       </attribute>
296     </zeroOrMore>
297   </define>
298
299   <define name="other">
300     <zeroOrMore>
301       <element>
302         <anyName>
303           <except>
304             <nsName/>
305           </except>
306         </anyName>
307         <zeroOrMore>
308           <choice>
309             <attribute>
310               <anyName/>
311             </attribute>
312             <text/>
313             <ref name="any"/>
314           </choice>
315         </zeroOrMore>
316       </element>
317     </zeroOrMore>
318   </define>
319
320   <define name="any">
321     <element>
322       <anyName/>
323       <zeroOrMore>
324         <choice>
325           <attribute>
326             <anyName/>
327           </attribute>
328           <text/>
329           <ref name="any"/>
330         </choice>
331       </zeroOrMore>
332     </element>
333   </define>
334
335 </grammar>