1<?xml version="1.0" encoding="UTF-8"?>
2<!--***********************************************************
3 *
4 * Licensed to the Apache Software Foundation (ASF) under one
5 * or more contributor license agreements.  See the NOTICE file
6 * distributed with this work for additional information
7 * regarding copyright ownership.  The ASF licenses this file
8 * to you under the Apache License, Version 2.0 (the
9 * "License"); you may not use this file except in compliance
10 * with the License.  You may obtain a copy of the License at
11 *
12 *   http://www.apache.org/licenses/LICENSE-2.0
13 *
14 * Unless required by applicable law or agreed to in writing,
15 * software distributed under the License is distributed on an
16 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17 * KIND, either express or implied.  See the License for the
18 * specific language governing permissions and limitations
19 * under the License.
20 *
21 ***********************************************************-->
22
23<grammar xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" ns="http://www.w3.org/XML/1998/namespace" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes" xmlns:xml="http://www.w3.org/XML/1998/namespace">
24  <start>
25    <ref name="doc"/>
26  </start>
27  <!-- I cannot seem to do this in RNGC so they are expanded in-line -->
28  <!--
29    coreSyntaxTerms = rdf:RDF | rdf:ID | rdf:about | rdf:parseType | rdf:resource | rdf:nodeID | rdf:datatype
30    syntaxTerms = coreSyntaxTerms | rdf:Description | rdf:li
31    oldTerms    = rdf:aboutEach | rdf:aboutEachPrefix | rdf:bagID
32    nodeElementURIs       = * - ( coreSyntaxTerms | rdf:li | oldTerms )
33    propertyElementURIs   = * - ( coreSyntaxTerms | rdf:Description | oldTerms )
34    propertyAttributeURIs = * - ( coreSyntaxTerms | rdf:Description | rdf:li | oldTerms )
35  -->
36  <!--
37    Also needed to allow rdf:li on all property element productions
38    since we can't capture the rdf:li rewriting to rdf_<n> in relaxng
39  -->
40  <!-- Need to add these explicitly -->
41  <define name="xmllang">
42    <attribute name="xml:lang"/>
43  </define>
44  <define name="xmlbase">
45    <attribute name="xml:base"/>
46  </define>
47  <!-- and to forbid every other xml:* attribute, element -->
48  <define name="doc">
49    <ref name="RDF"/>
50  </define>
51  <define name="RDF">
52    <element name="rdf:RDF">
53      <optional>
54        <ref name="xmllang"/>
55      </optional>
56      <optional>
57        <ref name="xmlbase"/>
58      </optional>
59      <ref name="nodeElementList"/>
60    </element>
61  </define>
62  <define name="nodeElementList">
63    <zeroOrMore>
64      <ref name="nodeElement"/>
65    </zeroOrMore>
66  </define>
67  <!--
68    Should be something like:
69     ws* , (  nodeElement , ws* )*
70    but RELAXNG does this by default, ignoring whitespace separating tags.
71  -->
72  <define name="nodeElement">
73    <element>
74      <anyName>
75        <except>
76          <nsName ns=""/>
77          <name>rdf:RDF</name>
78          <name>rdf:ID</name>
79          <name>rdf:about</name>
80          <name>rdf:parseType</name>
81          <name>rdf:resource</name>
82          <name>rdf:nodeID</name>
83          <name>rdf:datatype</name>
84          <name>rdf:li</name>
85          <name>rdf:aboutEach</name>
86          <name>rdf:aboutEachPrefix</name>
87          <name>rdf:bagID</name>
88        </except>
89      </anyName>
90      <optional>
91        <choice>
92          <ref name="idAttr"/>
93          <ref name="nodeIdAttr"/>
94          <ref name="aboutAttr"/>
95        </choice>
96      </optional>
97      <optional>
98        <ref name="xmllang"/>
99      </optional>
100      <optional>
101        <ref name="xmlbase"/>
102      </optional>
103      <zeroOrMore>
104        <ref name="propertyAttr"/>
105      </zeroOrMore>
106      <ref name="propertyEltList"/>
107    </element>
108  </define>
109  <!--
110    It is not possible to say "and not things
111    beginning with _ in the rdf: namespace" in RELAX NG.
112  -->
113  <define name="ws">
114    <value> </value>
115  </define>
116  <!--
117    Not used in this RELAX NG schema; but should be any legal XML
118    whitespace defined by http://www.w3.org/TR/2000/REC-xml-20001006#NT-S
119  -->
120  <define name="propertyEltList">
121    <zeroOrMore>
122      <ref name="propertyElt"/>
123    </zeroOrMore>
124  </define>
125  <!--
126    Should be something like:
127     ws* , ( propertyElt , ws* )*
128    but RELAXNG does this by default, ignoring whitespace separating tags.
129  -->
130  <define name="propertyElt">
131    <choice>
132      <ref name="resourcePropertyElt"/>
133      <ref name="literalPropertyElt"/>
134      <ref name="parseTypeLiteralPropertyElt"/>
135      <ref name="parseTypeResourcePropertyElt"/>
136      <ref name="parseTypeCollectionPropertyElt"/>
137      <ref name="parseTypeOtherPropertyElt"/>
138      <ref name="emptyPropertyElt"/>
139    </choice>
140  </define>
141  <define name="resourcePropertyElt">
142    <element>
143      <anyName>
144        <except>
145          <nsName ns=""/>
146          <name>rdf:RDF</name>
147          <name>rdf:ID</name>
148          <name>rdf:about</name>
149          <name>rdf:parseType</name>
150          <name>rdf:resource</name>
151          <name>rdf:nodeID</name>
152          <name>rdf:datatype</name>
153          <name>rdf:Description</name>
154          <name>rdf:aboutEach</name>
155          <name>rdf:aboutEachPrefix</name>
156          <name>rdf:bagID</name>
157          <nsName/>
158        </except>
159      </anyName>
160      <optional>
161        <ref name="idAttr"/>
162      </optional>
163      <optional>
164        <ref name="xmllang"/>
165      </optional>
166      <optional>
167        <ref name="xmlbase"/>
168      </optional>
169      <ref name="nodeElement"/>
170    </element>
171  </define>
172  <define name="literalPropertyElt">
173    <element>
174      <anyName>
175        <except>
176          <nsName ns=""/>
177          <name>rdf:RDF</name>
178          <name>rdf:ID</name>
179          <name>rdf:about</name>
180          <name>rdf:parseType</name>
181          <name>rdf:resource</name>
182          <name>rdf:nodeID</name>
183          <name>rdf:datatype</name>
184          <name>rdf:Description</name>
185          <name>rdf:aboutEach</name>
186          <name>rdf:aboutEachPrefix</name>
187          <name>rdf:bagID</name>
188          <nsName/>
189        </except>
190      </anyName>
191      <optional>
192        <choice>
193          <ref name="idAttr"/>
194          <ref name="datatypeAttr"/>
195        </choice>
196      </optional>
197      <optional>
198        <ref name="xmllang"/>
199      </optional>
200      <optional>
201        <ref name="xmlbase"/>
202      </optional>
203      <text/>
204    </element>
205  </define>
206  <define name="parseTypeLiteralPropertyElt">
207    <element>
208      <anyName>
209        <except>
210          <nsName ns=""/>
211          <name>rdf:RDF</name>
212          <name>rdf:ID</name>
213          <name>rdf:about</name>
214          <name>rdf:parseType</name>
215          <name>rdf:resource</name>
216          <name>rdf:nodeID</name>
217          <name>rdf:datatype</name>
218          <name>rdf:Description</name>
219          <name>rdf:aboutEach</name>
220          <name>rdf:aboutEachPrefix</name>
221          <name>rdf:bagID</name>
222          <nsName/>
223        </except>
224      </anyName>
225      <optional>
226        <ref name="idAttr"/>
227      </optional>
228      <ref name="parseLiteral"/>
229      <optional>
230        <ref name="xmllang"/>
231      </optional>
232      <optional>
233        <ref name="xmlbase"/>
234      </optional>
235      <ref name="literal"/>
236    </element>
237  </define>
238  <define name="parseTypeResourcePropertyElt">
239    <element>
240      <anyName>
241        <except>
242          <nsName ns=""/>
243          <name>rdf:RDF</name>
244          <name>rdf:ID</name>
245          <name>rdf:about</name>
246          <name>rdf:parseType</name>
247          <name>rdf:resource</name>
248          <name>rdf:nodeID</name>
249          <name>rdf:datatype</name>
250          <name>rdf:Description</name>
251          <name>rdf:aboutEach</name>
252          <name>rdf:aboutEachPrefix</name>
253          <name>rdf:bagID</name>
254          <nsName/>
255        </except>
256      </anyName>
257      <optional>
258        <ref name="idAttr"/>
259      </optional>
260      <ref name="parseResource"/>
261      <optional>
262        <ref name="xmllang"/>
263      </optional>
264      <optional>
265        <ref name="xmlbase"/>
266      </optional>
267      <ref name="propertyEltList"/>
268    </element>
269  </define>
270  <define name="parseTypeCollectionPropertyElt">
271    <element>
272      <anyName>
273        <except>
274          <nsName ns=""/>
275          <name>rdf:RDF</name>
276          <name>rdf:ID</name>
277          <name>rdf:about</name>
278          <name>rdf:parseType</name>
279          <name>rdf:resource</name>
280          <name>rdf:nodeID</name>
281          <name>rdf:datatype</name>
282          <name>rdf:Description</name>
283          <name>rdf:aboutEach</name>
284          <name>rdf:aboutEachPrefix</name>
285          <name>rdf:bagID</name>
286          <nsName/>
287        </except>
288      </anyName>
289      <optional>
290        <ref name="idAttr"/>
291      </optional>
292      <optional>
293        <ref name="xmllang"/>
294      </optional>
295      <optional>
296        <ref name="xmlbase"/>
297      </optional>
298      <ref name="parseCollection"/>
299      <ref name="nodeElementList"/>
300    </element>
301  </define>
302  <define name="parseTypeOtherPropertyElt">
303    <element>
304      <anyName>
305        <except>
306          <nsName ns=""/>
307          <name>rdf:RDF</name>
308          <name>rdf:ID</name>
309          <name>rdf:about</name>
310          <name>rdf:parseType</name>
311          <name>rdf:resource</name>
312          <name>rdf:nodeID</name>
313          <name>rdf:datatype</name>
314          <name>rdf:Description</name>
315          <name>rdf:aboutEach</name>
316          <name>rdf:aboutEachPrefix</name>
317          <name>rdf:bagID</name>
318          <nsName/>
319        </except>
320      </anyName>
321      <optional>
322        <ref name="idAttr"/>
323      </optional>
324      <optional>
325        <ref name="xmllang"/>
326      </optional>
327      <optional>
328        <ref name="xmlbase"/>
329      </optional>
330      <ref name="parseOther"/>
331      <ref name="any"/>
332    </element>
333  </define>
334  <define name="emptyPropertyElt">
335    <element>
336      <anyName>
337        <except>
338          <nsName ns=""/>
339          <name>rdf:RDF</name>
340          <name>rdf:ID</name>
341          <name>rdf:about</name>
342          <name>rdf:parseType</name>
343          <name>rdf:resource</name>
344          <name>rdf:nodeID</name>
345          <name>rdf:datatype</name>
346          <name>rdf:Description</name>
347          <name>rdf:aboutEach</name>
348          <name>rdf:aboutEachPrefix</name>
349          <name>rdf:bagID</name>
350          <nsName/>
351        </except>
352      </anyName>
353      <optional>
354        <ref name="idAttr"/>
355      </optional>
356      <optional>
357        <choice>
358          <ref name="resourceAttr"/>
359          <ref name="nodeIdAttr"/>
360        </choice>
361      </optional>
362      <optional>
363        <ref name="xmllang"/>
364      </optional>
365      <optional>
366        <ref name="xmlbase"/>
367      </optional>
368      <zeroOrMore>
369        <ref name="propertyAttr"/>
370      </zeroOrMore>
371    </element>
372  </define>
373  <define name="idAttr">
374    <attribute name="rdf:ID">
375      <ref name="IDsymbol"/>
376    </attribute>
377  </define>
378  <define name="nodeIdAttr">
379    <attribute name="rdf:nodeID">
380      <ref name="IDsymbol"/>
381    </attribute>
382  </define>
383  <define name="aboutAttr">
384    <attribute name="rdf:about">
385      <ref name="URI-reference"/>
386    </attribute>
387  </define>
388  <define name="propertyAttr">
389    <attribute>
390      <anyName>
391        <except>
392          <nsName ns=""/>
393          <name>rdf:RDF</name>
394          <name>rdf:ID</name>
395          <name>rdf:about</name>
396          <name>rdf:parseType</name>
397          <name>rdf:resource</name>
398          <name>rdf:nodeID</name>
399          <name>rdf:datatype</name>
400          <name>rdf:li</name>
401          <name>rdf:Description</name>
402          <name>rdf:aboutEach</name>
403          <name>rdf:aboutEachPrefix</name>
404          <name>rdf:bagID</name>
405          <nsName/>
406        </except>
407      </anyName>
408      <data type="string" datatypeLibrary=""/>
409    </attribute>
410  </define>
411  <define name="resourceAttr">
412    <attribute name="rdf:resource">
413      <ref name="URI-reference"/>
414    </attribute>
415  </define>
416  <define name="datatypeAttr">
417    <attribute name="rdf:datatype">
418      <ref name="URI-reference"/>
419    </attribute>
420  </define>
421  <define name="parseLiteral">
422    <attribute name="rdf:parseType">
423      <value>Literal</value>
424    </attribute>
425  </define>
426  <define name="parseResource">
427    <attribute name="rdf:parseType">
428      <value>Resource</value>
429    </attribute>
430  </define>
431  <define name="parseCollection">
432    <attribute name="rdf:parseType">
433      <value>Collection</value>
434    </attribute>
435  </define>
436  <define name="parseOther">
437    <attribute name="rdf:parseType"/>
438  </define>
439  <define name="URI-reference">
440    <data type="string" datatypeLibrary=""/>
441  </define>
442  <define name="literal">
443    <ref name="any"/>
444  </define>
445  <define name="IDsymbol">
446    <data type="NMTOKEN"/>
447  </define>
448  <define name="any">
449    <mixed>
450      <zeroOrMore>
451        <element>
452          <anyName/>
453          <zeroOrMore>
454            <attribute>
455              <anyName/>
456            </attribute>
457          </zeroOrMore>
458          <ref name="any"/>
459        </element>
460      </zeroOrMore>
461    </mixed>
462  </define>
463</grammar>
464