Upload Tizen:Base source
[toolchains/python-lxml.git] / doc / s5 / ep2008 / atom.rng
1 <?xml version="1.0" encoding="UTF-8"?>\r
2 <!--\r
3   -*- rnc -*-\r
4   RELAX NG Compact Syntax Grammar for the\r
5   Atom Format Specification Version 11\r
6 -->\r
7 <grammar xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:s="http://www.ascc.net/xml/schematron" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">\r
8   <start>\r
9     <choice>\r
10       <ref name="atomFeed"/>\r
11       <ref name="atomEntry"/>\r
12     </choice>\r
13   </start>\r
14   <!-- Common attributes -->\r
15   <define name="atomCommonAttributes">\r
16     <optional>\r
17       <attribute name="xml:base">\r
18         <ref name="atomUri"/>\r
19       </attribute>\r
20     </optional>\r
21     <optional>\r
22       <attribute name="xml:lang">\r
23         <ref name="atomLanguageTag"/>\r
24       </attribute>\r
25     </optional>\r
26     <zeroOrMore>\r
27       <ref name="undefinedAttribute"/>\r
28     </zeroOrMore>\r
29   </define>\r
30   <!-- Text Constructs -->\r
31   <define name="atomPlainTextConstruct">\r
32     <ref name="atomCommonAttributes"/>\r
33     <optional>\r
34       <attribute name="type">\r
35         <choice>\r
36           <value>text</value>\r
37           <value>html</value>\r
38         </choice>\r
39       </attribute>\r
40     </optional>\r
41     <text/>\r
42   </define>\r
43   <define name="atomXHTMLTextConstruct">\r
44     <ref name="atomCommonAttributes"/>\r
45     <attribute name="type">\r
46       <value>xhtml</value>\r
47     </attribute>\r
48     <ref name="xhtmlDiv"/>\r
49   </define>\r
50   <define name="atomTextConstruct">\r
51     <choice>\r
52       <ref name="atomPlainTextConstruct"/>\r
53       <ref name="atomXHTMLTextConstruct"/>\r
54     </choice>\r
55   </define>\r
56   <!-- Person Construct -->\r
57   <define name="atomPersonConstruct">\r
58     <ref name="atomCommonAttributes"/>\r
59     <interleave>\r
60       <element name="atom:name">\r
61         <text/>\r
62       </element>\r
63       <optional>\r
64         <element name="atom:uri">\r
65           <ref name="atomUri"/>\r
66         </element>\r
67       </optional>\r
68       <optional>\r
69         <element name="atom:email">\r
70           <ref name="atomEmailAddress"/>\r
71         </element>\r
72       </optional>\r
73       <zeroOrMore>\r
74         <ref name="extensionElement"/>\r
75       </zeroOrMore>\r
76     </interleave>\r
77   </define>\r
78   <!-- Date Construct -->\r
79   <define name="atomDateConstruct">\r
80     <ref name="atomCommonAttributes"/>\r
81     <data type="dateTime"/>\r
82   </define>\r
83   <!-- atom:feed -->\r
84   <define name="atomFeed">\r
85     <element name="atom:feed">\r
86       <s:rule context="atom:feed">\r
87         <s:assert test="atom:author or not(atom:entry[not(atom:author)])">An atom:feed must have an atom:author unless all of its atom:entry children have an atom:author.</s:assert>\r
88       </s:rule>\r
89       <ref name="atomCommonAttributes"/>\r
90       <interleave>\r
91         <zeroOrMore>\r
92           <ref name="atomAuthor"/>\r
93         </zeroOrMore>\r
94         <zeroOrMore>\r
95           <ref name="atomCategory"/>\r
96         </zeroOrMore>\r
97         <zeroOrMore>\r
98           <ref name="atomContributor"/>\r
99         </zeroOrMore>\r
100         <optional>\r
101           <ref name="atomGenerator"/>\r
102         </optional>\r
103         <optional>\r
104           <ref name="atomIcon"/>\r
105         </optional>\r
106         <ref name="atomId"/>\r
107         <zeroOrMore>\r
108           <ref name="atomLink"/>\r
109         </zeroOrMore>\r
110         <optional>\r
111           <ref name="atomLogo"/>\r
112         </optional>\r
113         <optional>\r
114           <ref name="atomRights"/>\r
115         </optional>\r
116         <optional>\r
117           <ref name="atomSubtitle"/>\r
118         </optional>\r
119         <ref name="atomTitle"/>\r
120         <ref name="atomUpdated"/>\r
121         <zeroOrMore>\r
122           <ref name="extensionElement"/>\r
123         </zeroOrMore>\r
124       </interleave>\r
125       <zeroOrMore>\r
126         <ref name="atomEntry"/>\r
127       </zeroOrMore>\r
128     </element>\r
129   </define>\r
130   <!-- atom:entry -->\r
131   <define name="atomEntry">\r
132     <element name="atom:entry">\r
133       <s:rule context="atom:entry">\r
134         <s:assert test="atom:link[@rel='alternate'] or atom:link[not(@rel)] or atom:content">An atom:entry must have at least one atom:link element with a rel attribute of 'alternate' or an atom:content.</s:assert>\r
135       </s:rule>\r
136       <s:rule context="atom:entry">\r
137         <s:assert test="atom:author or ../atom:author or atom:source/atom:author">An atom:entry must have an atom:author if its feed does not.</s:assert>\r
138       </s:rule>\r
139       <ref name="atomCommonAttributes"/>\r
140       <interleave>\r
141         <zeroOrMore>\r
142           <ref name="atomAuthor"/>\r
143         </zeroOrMore>\r
144         <zeroOrMore>\r
145           <ref name="atomCategory"/>\r
146         </zeroOrMore>\r
147         <optional>\r
148           <ref name="atomContent"/>\r
149         </optional>\r
150         <zeroOrMore>\r
151           <ref name="atomContributor"/>\r
152         </zeroOrMore>\r
153         <ref name="atomId"/>\r
154         <zeroOrMore>\r
155           <ref name="atomLink"/>\r
156         </zeroOrMore>\r
157         <optional>\r
158           <ref name="atomPublished"/>\r
159         </optional>\r
160         <optional>\r
161           <ref name="atomRights"/>\r
162         </optional>\r
163         <optional>\r
164           <ref name="atomSource"/>\r
165         </optional>\r
166         <optional>\r
167           <ref name="atomSummary"/>\r
168         </optional>\r
169         <ref name="atomTitle"/>\r
170         <ref name="atomUpdated"/>\r
171         <zeroOrMore>\r
172           <ref name="extensionElement"/>\r
173         </zeroOrMore>\r
174       </interleave>\r
175     </element>\r
176   </define>\r
177   <!-- atom:content -->\r
178   <define name="atomInlineTextContent">\r
179     <element name="atom:content">\r
180       <ref name="atomCommonAttributes"/>\r
181       <optional>\r
182         <attribute name="type">\r
183           <choice>\r
184             <value>text</value>\r
185             <value>html</value>\r
186           </choice>\r
187         </attribute>\r
188       </optional>\r
189       <zeroOrMore>\r
190         <text/>\r
191       </zeroOrMore>\r
192     </element>\r
193   </define>\r
194   <define name="atomInlineXHTMLContent">\r
195     <element name="atom:content">\r
196       <ref name="atomCommonAttributes"/>\r
197       <attribute name="type">\r
198         <value>xhtml</value>\r
199       </attribute>\r
200       <ref name="xhtmlDiv"/>\r
201     </element>\r
202   </define>\r
203   <define name="atomInlineOtherContent">\r
204     <element name="atom:content">\r
205       <ref name="atomCommonAttributes"/>\r
206       <optional>\r
207         <attribute name="type">\r
208           <ref name="atomMediaType"/>\r
209         </attribute>\r
210       </optional>\r
211       <zeroOrMore>\r
212         <choice>\r
213           <text/>\r
214           <ref name="anyElement"/>\r
215         </choice>\r
216       </zeroOrMore>\r
217     </element>\r
218   </define>\r
219   <define name="atomOutOfLineContent">\r
220     <element name="atom:content">\r
221       <ref name="atomCommonAttributes"/>\r
222       <optional>\r
223         <attribute name="type">\r
224           <ref name="atomMediaType"/>\r
225         </attribute>\r
226       </optional>\r
227       <attribute name="src">\r
228         <ref name="atomUri"/>\r
229       </attribute>\r
230       <empty/>\r
231     </element>\r
232   </define>\r
233   <define name="atomContent">\r
234     <choice>\r
235       <ref name="atomInlineTextContent"/>\r
236       <ref name="atomInlineXHTMLContent"/>\r
237       <ref name="atomInlineOtherContent"/>\r
238       <ref name="atomOutOfLineContent"/>\r
239     </choice>\r
240   </define>\r
241   <!-- atom:author -->\r
242   <define name="atomAuthor">\r
243     <element name="atom:author">\r
244       <ref name="atomPersonConstruct"/>\r
245     </element>\r
246   </define>\r
247   <!-- atom:category -->\r
248   <define name="atomCategory">\r
249     <element name="atom:category">\r
250       <ref name="atomCommonAttributes"/>\r
251       <attribute name="term"/>\r
252       <optional>\r
253         <attribute name="scheme">\r
254           <ref name="atomUri"/>\r
255         </attribute>\r
256       </optional>\r
257       <optional>\r
258         <attribute name="label"/>\r
259       </optional>\r
260       <ref name="undefinedContent"/>\r
261     </element>\r
262   </define>\r
263   <!-- atom:contributor -->\r
264   <define name="atomContributor">\r
265     <element name="atom:contributor">\r
266       <ref name="atomPersonConstruct"/>\r
267     </element>\r
268   </define>\r
269   <!-- atom:generator -->\r
270   <define name="atomGenerator">\r
271     <element name="atom:generator">\r
272       <ref name="atomCommonAttributes"/>\r
273       <optional>\r
274         <attribute name="uri">\r
275           <ref name="atomUri"/>\r
276         </attribute>\r
277       </optional>\r
278       <optional>\r
279         <attribute name="version"/>\r
280       </optional>\r
281       <text/>\r
282     </element>\r
283   </define>\r
284   <!-- atom:icon -->\r
285   <define name="atomIcon">\r
286     <element name="atom:icon">\r
287       <ref name="atomCommonAttributes"/>\r
288       <ref name="atomUri"/>\r
289     </element>\r
290   </define>\r
291   <!-- atom:id -->\r
292   <define name="atomId">\r
293     <element name="atom:id">\r
294       <ref name="atomCommonAttributes"/>\r
295       <ref name="atomUri"/>\r
296     </element>\r
297   </define>\r
298   <!-- atom:logo -->\r
299   <define name="atomLogo">\r
300     <element name="atom:logo">\r
301       <ref name="atomCommonAttributes"/>\r
302       <ref name="atomUri"/>\r
303     </element>\r
304   </define>\r
305   <!-- atom:link -->\r
306   <define name="atomLink">\r
307     <element name="atom:link">\r
308       <ref name="atomCommonAttributes"/>\r
309       <attribute name="href">\r
310         <ref name="atomUri"/>\r
311       </attribute>\r
312       <optional>\r
313         <attribute name="rel">\r
314           <choice>\r
315             <ref name="atomNCName"/>\r
316             <ref name="atomUri"/>\r
317           </choice>\r
318         </attribute>\r
319       </optional>\r
320       <optional>\r
321         <attribute name="type">\r
322           <ref name="atomMediaType"/>\r
323         </attribute>\r
324       </optional>\r
325       <optional>\r
326         <attribute name="hreflang">\r
327           <ref name="atomLanguageTag"/>\r
328         </attribute>\r
329       </optional>\r
330       <optional>\r
331         <attribute name="title"/>\r
332       </optional>\r
333       <optional>\r
334         <attribute name="length"/>\r
335       </optional>\r
336       <ref name="undefinedContent"/>\r
337     </element>\r
338   </define>\r
339   <!-- atom:published -->\r
340   <define name="atomPublished">\r
341     <element name="atom:published">\r
342       <ref name="atomDateConstruct"/>\r
343     </element>\r
344   </define>\r
345   <!-- atom:rights -->\r
346   <define name="atomRights">\r
347     <element name="atom:rights">\r
348       <ref name="atomTextConstruct"/>\r
349     </element>\r
350   </define>\r
351   <!-- atom:source -->\r
352   <define name="atomSource">\r
353     <element name="atom:source">\r
354       <ref name="atomCommonAttributes"/>\r
355       <interleave>\r
356         <zeroOrMore>\r
357           <ref name="atomAuthor"/>\r
358         </zeroOrMore>\r
359         <zeroOrMore>\r
360           <ref name="atomCategory"/>\r
361         </zeroOrMore>\r
362         <zeroOrMore>\r
363           <ref name="atomContributor"/>\r
364         </zeroOrMore>\r
365         <optional>\r
366           <ref name="atomGenerator"/>\r
367         </optional>\r
368         <optional>\r
369           <ref name="atomIcon"/>\r
370         </optional>\r
371         <optional>\r
372           <ref name="atomId"/>\r
373         </optional>\r
374         <zeroOrMore>\r
375           <ref name="atomLink"/>\r
376         </zeroOrMore>\r
377         <optional>\r
378           <ref name="atomLogo"/>\r
379         </optional>\r
380         <optional>\r
381           <ref name="atomRights"/>\r
382         </optional>\r
383         <optional>\r
384           <ref name="atomSubtitle"/>\r
385         </optional>\r
386         <optional>\r
387           <ref name="atomTitle"/>\r
388         </optional>\r
389         <optional>\r
390           <ref name="atomUpdated"/>\r
391         </optional>\r
392         <zeroOrMore>\r
393           <ref name="extensionElement"/>\r
394         </zeroOrMore>\r
395       </interleave>\r
396     </element>\r
397   </define>\r
398   <!-- atom:subtitle -->\r
399   <define name="atomSubtitle">\r
400     <element name="atom:subtitle">\r
401       <ref name="atomTextConstruct"/>\r
402     </element>\r
403   </define>\r
404   <!-- atom:summary -->\r
405   <define name="atomSummary">\r
406     <element name="atom:summary">\r
407       <ref name="atomTextConstruct"/>\r
408     </element>\r
409   </define>\r
410   <!-- atom:title -->\r
411   <define name="atomTitle">\r
412     <element name="atom:title">\r
413       <ref name="atomTextConstruct"/>\r
414     </element>\r
415   </define>\r
416   <!-- atom:updated -->\r
417   <define name="atomUpdated">\r
418     <element name="atom:updated">\r
419       <ref name="atomDateConstruct"/>\r
420     </element>\r
421   </define>\r
422   <!-- Low-level simple types -->\r
423   <define name="atomNCName">\r
424     <data type="string">\r
425       <param name="minLength">1</param>\r
426       <param name="pattern">[^:]*</param>\r
427     </data>\r
428   </define>\r
429   <!-- Whatever a media type is, it contains at least one slash -->\r
430   <define name="atomMediaType">\r
431     <data type="string">\r
432       <param name="pattern">.+/.+</param>\r
433     </data>\r
434   </define>\r
435   <!-- As defined in RFC 3066 -->\r
436   <define name="atomLanguageTag">\r
437     <data type="string">\r
438       <param name="pattern">[A-Za-z]{1,8}(-[A-Za-z0-9]{1,8})*</param>\r
439     </data>\r
440   </define>\r
441   <!--\r
442     Unconstrained; it's not entirely clear how IRI fit into\r
443     xsd:anyURI so let's not try to constrain it here\r
444   -->\r
445   <define name="atomUri">\r
446     <text/>\r
447   </define>\r
448   <!-- Whatever an email address is, it contains at least one @ -->\r
449   <define name="atomEmailAddress">\r
450     <data type="string">\r
451       <param name="pattern">.+@.+</param>\r
452     </data>\r
453   </define>\r
454   <!-- Simple Extension -->\r
455   <define name="simpleExtensionElement">\r
456     <element>\r
457       <anyName>\r
458         <except>\r
459           <nsName ns="http://www.w3.org/2005/Atom"/>\r
460         </except>\r
461       </anyName>\r
462       <text/>\r
463     </element>\r
464   </define>\r
465   <!-- Structured Extension -->\r
466   <define name="structuredExtensionElement">\r
467     <element>\r
468       <anyName>\r
469         <except>\r
470           <nsName ns="http://www.w3.org/2005/Atom"/>\r
471         </except>\r
472       </anyName>\r
473       <choice>\r
474         <group>\r
475           <oneOrMore>\r
476             <attribute>\r
477               <anyName/>\r
478             </attribute>\r
479           </oneOrMore>\r
480           <zeroOrMore>\r
481             <choice>\r
482               <text/>\r
483               <ref name="anyElement"/>\r
484             </choice>\r
485           </zeroOrMore>\r
486         </group>\r
487         <group>\r
488           <zeroOrMore>\r
489             <attribute>\r
490               <anyName/>\r
491             </attribute>\r
492           </zeroOrMore>\r
493           <group>\r
494             <optional>\r
495               <text/>\r
496             </optional>\r
497             <oneOrMore>\r
498               <ref name="anyElement"/>\r
499             </oneOrMore>\r
500             <zeroOrMore>\r
501               <choice>\r
502                 <text/>\r
503                 <ref name="anyElement"/>\r
504               </choice>\r
505             </zeroOrMore>\r
506           </group>\r
507         </group>\r
508       </choice>\r
509     </element>\r
510   </define>\r
511   <!-- Other Extensibility -->\r
512   <define name="extensionElement">\r
513     <choice>\r
514       <ref name="simpleExtensionElement"/>\r
515       <ref name="structuredExtensionElement"/>\r
516     </choice>\r
517   </define>\r
518   <define name="undefinedAttribute">\r
519     <attribute>\r
520       <anyName>\r
521         <except>\r
522           <name>xml:base</name>\r
523           <name>xml:lang</name>\r
524           <nsName ns=""/>\r
525         </except>\r
526       </anyName>\r
527     </attribute>\r
528   </define>\r
529   <define name="undefinedContent">\r
530     <zeroOrMore>\r
531       <choice>\r
532         <text/>\r
533         <ref name="anyForeignElement"/>\r
534       </choice>\r
535     </zeroOrMore>\r
536   </define>\r
537   <define name="anyElement">\r
538     <element>\r
539       <anyName/>\r
540       <zeroOrMore>\r
541         <choice>\r
542           <attribute>\r
543             <anyName/>\r
544           </attribute>\r
545           <text/>\r
546           <ref name="anyElement"/>\r
547         </choice>\r
548       </zeroOrMore>\r
549     </element>\r
550   </define>\r
551   <define name="anyForeignElement">\r
552     <element>\r
553       <anyName>\r
554         <except>\r
555           <nsName ns="http://www.w3.org/2005/Atom"/>\r
556         </except>\r
557       </anyName>\r
558       <zeroOrMore>\r
559         <choice>\r
560           <attribute>\r
561             <anyName/>\r
562           </attribute>\r
563           <text/>\r
564           <ref name="anyElement"/>\r
565         </choice>\r
566       </zeroOrMore>\r
567     </element>\r
568   </define>\r
569   <!-- XHTML -->\r
570   <define name="anyXHTML">\r
571     <element>\r
572       <nsName ns="http://www.w3.org/1999/xhtml"/>\r
573       <zeroOrMore>\r
574         <choice>\r
575           <attribute>\r
576             <anyName/>\r
577           </attribute>\r
578           <text/>\r
579           <ref name="anyXHTML"/>\r
580         </choice>\r
581       </zeroOrMore>\r
582     </element>\r
583   </define>\r
584   <define name="xhtmlDiv">\r
585     <element name="xhtml:div">\r
586       <zeroOrMore>\r
587         <choice>\r
588           <attribute>\r
589             <anyName/>\r
590           </attribute>\r
591           <text/>\r
592           <ref name="anyXHTML"/>\r
593         </choice>\r
594       </zeroOrMore>\r
595     </element>\r
596   </define>\r
597 </grammar>\r