/ libxml2 / test / relaxng / tutorA.rng
tutorA.rng
  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