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