1<!--***********************************************************
2 *
3 * Licensed to the Apache Software Foundation (ASF) under one
4 * or more contributor license agreements.  See the NOTICE file
5 * distributed with this work for additional information
6 * regarding copyright ownership.  The ASF licenses this file
7 * to you under the Apache License, Version 2.0 (the
8 * "License"); you may not use this file except in compliance
9 * with the License.  You may obtain a copy of the License at
10 *
11 *   http://www.apache.org/licenses/LICENSE-2.0
12 *
13 * Unless required by applicable law or agreed to in writing,
14 * software distributed under the License is distributed on an
15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16 * KIND, either express or implied.  See the License for the
17 * specific language governing permissions and limitations
18 * under the License.
19 *
20 ***********************************************************-->
21<grammar datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"
22  ns="http://relaxng.org/ns/structure/1.0"
23  xmlns:rng="http://relaxng.org/ns/structure/1.0"
24  xmlns="http://relaxng.org/ns/structure/1.0">
25
26  <start>
27    <ref name="pattern"/>
28  </start>
29
30  <define name="pattern">
31    <choice>
32      <element name="element">
33        <choice>
34          <attribute name="name">
35            <data type="QName"/>
36          </attribute>
37          <ref name="open-name-class"/>
38        </choice>
39        <ref name="common-atts"/>
40        <ref name="open-patterns"/>
41      </element>
42      <element name="attribute">
43        <ref name="common-atts"/>
44        <choice>
45          <attribute name="name">
46            <data type="QName"/>
47          </attribute>
48          <ref name="open-name-class"/>
49        </choice>
50        <interleave>
51          <ref name="other"/>
52          <optional>
53            <ref name="pattern"/>
54          </optional>
55        </interleave>
56      </element>
57      <element name="group">
58        <ref name="common-atts"/>
59        <ref name="open-patterns"/>
60      </element>
61      <element name="interleave">
62        <ref name="common-atts"/>
63        <ref name="open-patterns"/>
64      </element>
65      <element name="choice">
66        <ref name="common-atts"/>
67        <ref name="open-patterns"/>
68      </element>
69      <element name="optional">
70        <ref name="common-atts"/>
71        <ref name="open-patterns"/>
72      </element>
73      <element name="zeroOrMore">
74        <ref name="common-atts"/>
75        <ref name="open-patterns"/>
76      </element>
77      <element name="oneOrMore">
78        <ref name="common-atts"/>
79        <ref name="open-patterns"/>
80      </element>
81      <element name="list">
82        <ref name="common-atts"/>
83        <ref name="open-patterns"/>
84      </element>
85      <element name="mixed">
86        <ref name="common-atts"/>
87        <ref name="open-patterns"/>
88      </element>
89      <element name="ref">
90        <attribute name="name">
91          <data type="NCName"/>
92        </attribute>
93        <ref name="common-atts"/>
94      </element>
95      <element name="parentRef">
96        <attribute name="name">
97          <data type="NCName"/>
98        </attribute>
99        <ref name="common-atts"/>
100      </element>
101      <element name="empty">
102        <ref name="common-atts"/>
103        <ref name="other"/>
104      </element>
105      <element name="text">
106        <ref name="common-atts"/>
107        <ref name="other"/>
108      </element>
109      <element name="value">
110        <optional>
111          <attribute name="type">
112            <data type="NCName"/>
113          </attribute>
114        </optional>
115        <ref name="common-atts"/>
116        <text/>
117      </element>
118      <element name="data">
119        <attribute name="type">
120          <data type="NCName"/>
121        </attribute>
122        <ref name="common-atts"/>
123        <interleave>
124          <ref name="other"/>
125          <group>
126            <zeroOrMore>
127              <element name="param">
128                <attribute name="name">
129                  <data type="NCName"/>
130                </attribute>
131                <text/>
132              </element>
133            </zeroOrMore>
134            <optional>
135              <element name="except">
136                <ref name="common-atts"/>
137                <ref name="open-patterns"/>
138              </element>
139            </optional>
140          </group>
141        </interleave>
142      </element>
143      <element name="notAllowed">
144        <ref name="common-atts"/>
145        <ref name="other"/>
146      </element>
147      <element name="externalRef">
148        <attribute name="href">
149          <data type="anyURI"/>
150        </attribute>
151        <ref name="common-atts"/>
152        <ref name="other"/>
153      </element>
154      <element name="grammar">
155        <ref name="common-atts"/>
156        <ref name="grammar-content"/>
157      </element>
158    </choice>
159  </define>
160
161  <define name="grammar-content">
162    <interleave>
163      <ref name="other"/>
164      <zeroOrMore>
165        <choice>
166          <ref name="start-element"/>
167          <ref name="define-element"/>
168          <element name="div">
169            <ref name="common-atts"/>
170            <ref name="grammar-content"/>
171          </element>
172          <element name="include">
173            <attribute name="href">
174              <data type="anyURI"/>
175            </attribute>
176            <ref name="common-atts"/>
177            <ref name="include-content"/>
178          </element>
179        </choice>
180      </zeroOrMore>
181    </interleave>
182  </define>
183
184  <define name="include-content">
185    <interleave>
186      <ref name="other"/>
187      <zeroOrMore>
188        <choice>
189          <ref name="start-element"/>
190          <ref name="define-element"/>
191          <element name="div">
192            <ref name="common-atts"/>
193            <ref name="include-content"/>
194          </element>
195        </choice>
196      </zeroOrMore>
197    </interleave>
198  </define>
199
200  <define name="start-element">
201    <element name="start">
202      <ref name="combine-att"/>
203      <ref name="common-atts"/>
204      <ref name="open-pattern"/>
205    </element>
206  </define>
207
208  <define name="define-element">
209    <element name="define">
210      <attribute name="name">
211        <data type="NCName"/>
212      </attribute>
213      <ref name="combine-att"/>
214      <ref name="common-atts"/>
215      <ref name="open-patterns"/>
216    </element>
217  </define>
218
219  <define name="combine-att">
220    <optional>
221      <attribute name="combine">
222        <choice>
223          <value>choice</value>
224          <value>interleave</value>
225        </choice>
226      </attribute>
227    </optional>
228  </define>
229
230  <define name="open-patterns">
231    <interleave>
232      <ref name="other"/>
233      <oneOrMore>
234        <ref name="pattern"/>
235      </oneOrMore>
236    </interleave>
237  </define>
238
239  <define name="open-pattern">
240    <interleave>
241      <ref name="other"/>
242      <ref name="pattern"/>
243    </interleave>
244  </define>
245
246  <define name="name-class">
247    <choice>
248      <element name="name">
249        <ref name="common-atts"/>
250        <data type="QName"/>
251      </element>
252      <element name="anyName">
253        <ref name="common-atts"/>
254        <ref name="except-name-class"/>
255      </element>
256      <element name="nsName">
257        <ref name="common-atts"/>
258        <ref name="except-name-class"/>
259      </element>
260      <element name="choice">
261        <ref name="common-atts"/>
262        <ref name="open-name-classes"/>
263      </element>
264    </choice>
265  </define>
266
267  <define name="except-name-class">
268    <interleave>
269      <ref name="other"/>
270      <optional>
271        <element name="except">
272          <ref name="open-name-classes"/>
273        </element>
274      </optional>
275    </interleave>
276  </define>
277
278  <define name="open-name-classes">
279    <interleave>
280      <ref name="other"/>
281      <oneOrMore>
282        <ref name="name-class"/>
283      </oneOrMore>
284    </interleave>
285  </define>
286
287  <define name="open-name-class">
288    <interleave>
289      <ref name="other"/>
290      <ref name="name-class"/>
291    </interleave>
292  </define>
293
294  <define name="common-atts">
295    <optional>
296      <attribute name="ns"/>
297    </optional>
298    <optional>
299      <attribute name="datatypeLibrary">
300        <data type="anyURI"/>
301      </attribute>
302    </optional>
303    <zeroOrMore>
304      <attribute>
305        <anyName>
306          <except>
307            <nsName/>
308            <nsName ns=""/>
309          </except>
310        </anyName>
311      </attribute>
312    </zeroOrMore>
313  </define>
314
315  <define name="other">
316    <zeroOrMore>
317      <element>
318        <anyName>
319          <except>
320            <nsName/>
321          </except>
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    </zeroOrMore>
334  </define>
335
336  <define name="any">
337    <element>
338      <anyName/>
339      <zeroOrMore>
340        <choice>
341          <attribute>
342            <anyName/>
343          </attribute>
344          <text/>
345          <ref name="any"/>
346        </choice>
347      </zeroOrMore>
348    </element>
349  </define>
350
351</grammar>
352