Update all copyrights for 2010.
[muse-el.git] / etc / muse.rnc
blob3da4d33ba3e09d979f91dd77ae47acde47e14cf8
1 namespace a = "http://relaxng.org/ns/compatibility/annotations/1.0"
2 namespace rng = "http://relaxng.org/ns/structure/1.0"
4 #   Emacs Muse RELAX NG Schema v. 1.2
5 #   Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010
6 #     Free Software Foundation, Inc.
8 #   Author: Brad Collins (brad AT chenla DOT org)
9 #   Maintainer: Michael Olson <mwolson@gnu.org>
11 #   This is free software; you can redistribute it and/or modify it
12 #   under the terms of the GNU General Public License as published by
13 #   the Free Software Foundation; either version 3 of the License, or
14 #   (at your option) any later version. This material is distributed in
15 #   the hope that it will be useful, but WITHOUT ANY WARRANTY; without
16 #   even the implied warranty of MERCHANTABILITY or FITNESS FOR A
17 #   PARTICULAR PURPOSE. See the GNU General Public License for more
18 #   details.You should have received a copy of the GNU General Public
19 #   License along with this file; if not, write to the Free Software
20 #   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
21 #   02111-1307, USA.
23 # Commentary:
25 #   RelaxNG Compact syntax can be converted into RelaxNG XML Syntax,
26 #   DTD format and XML Schema language using free tools.
28 #   Emacs users are encouraged to use James Clarke's nxml-mode for
29 #   editing and validating XML files.  If you are in nxml-mode use the
30 #   command C-c C-s C-f to point to this schema file, say yes if you
31 #   are asked if you want to copy the file to your location, and then
32 #   C-c C-s C-a can be used to reload the schema if you make changes
33 #   to the file.
35 # History:
37 #   Version 0.1:
38 #    - Original version by Brad Collins.
40 #   Version 0.2:
41 #    - Hacked it to the point of working with Muse's QuickStart
42 #      document.
44 #   Version 0.3:
45 #    - Permit lists to be nested.
47 #   Version 1.0:
48 #    - Permit paragraph-level markup, such as links, to appear in
49 #      table lines.
50 #    - Support multiple definitions in a definition list.
51 #    - Permit a list to be nested inside of a definition.
52 #    - Permit a link to be inside of a title.
53 #    - Permit emphasis to be inside of other emphasis.
55 #   Version 1.1:
56 #    - Add the <cite> tag.
58 #   Version 1.2:
59 #    - Add the <br> tag.
60 #    - Don't allow <cite> tags inside of format elements.
62 # Contributors:
64 # Schema:
66 start = MUSE
68    ## root element
69 MUSE =
70    element MUSE {
71       muse.element.pageinfo?
72       & muse.element.section*
73       & muse.element.p*
74       & muse.element.blockquote*
75       & muse.element.table*
76       & muse.element.list*
77       & muse.element.hr*
78       & muse.element.image*
79       & muse.element.example*
80       & muse.element.verse*
81   }
83 # ------------------------------------------------
84 #  Pageinfo elements
85 # ------------------------------------------------
86     ## pageinfo element used for metadata
87     ## for the page
88 muse.element.pageinfo = element pageinfo {
89    muse.element.title?
90    & muse.element.author?
91    & muse.element.maintainer?
92    & muse.element.pubdate? }?
94    ## page title element
95 muse.element.title = element title {
96    muse.element.link*
97    & text }?
99    ## page author element
100 muse.element.author = element author { text }?
102    ## page maintainer element
103 muse.element.maintainer = element maintainer  { text }?
105   ## page publication date element
106 muse.element.pubdate = element pubdate { text }?
108 # ------------------------------------------------
109 #  Block elements
110 # ------------------------------------------------
112 muse.element.section = element section {
113    muse.attribute.type?
114    & muse.attribute.level?
115    & muse.element.section*
116    & muse.element.title*
117    & muse.element.p*
118    & muse.element.blockquote*
119    & muse.element.table*
120    & muse.element.list*
121    & muse.element.hr*
122    & muse.element.image*
123    & muse.element.example*
124    & muse.element.verse*
125    & text }?
127   ## blockquote element
128 muse.element.blockquote = element blockquote {
129    muse.element.title?
130    & muse.element.p* }?
132    ## paragraph element
133 muse.element.p = element p {
134    muse.element.br*
135    & muse.element.code*
136    & muse.element.cite*
137    & muse.element.format*
138    & muse.element.image*
139    & muse.element.link*
140    & muse.element.image*
141    & muse.element.anchor*
142    & muse.element.footnote*
143    & text }?
145    ## example element
146 muse.element.example = element example { text }?
148   ## verse element
149 muse.element.verse = element verse {
150    muse.element.line* }?
152   ## verse line element
153 muse.element.line = element line {
154    muse.element.br*
155    & muse.element.code*
156    & muse.element.cite*
157    & muse.element.format*
158    & muse.element.image*
159    & muse.element.link*
160    & muse.element.image*
161    & muse.element.anchor*
162    & muse.element.footnote*
163    & text }?
165 # ------------------------------------------------
166 #  Unordered list elements
167 # ------------------------------------------------
169 muse.element.list = element list {
170    muse.attribute.type?
171    & muse.element.item* }?
173 muse.element.item = element item {
174    muse.element.term?
175    & muse.element.definition*
176    & muse.element.br*
177    & muse.element.code*
178    & muse.element.cite*
179    & muse.element.format*
180    & muse.element.image*
181    & muse.element.link*
182    & muse.element.p*
183    & muse.element.blockquote*
184    & muse.element.table*
185    & muse.element.example*
186    & muse.element.verse*
187    & muse.element.list*
188    & text }?
190 # ------------------------------------------------
191 #  Definition list elements
192 # ------------------------------------------------
194 muse.element.term = element term {
195    muse.element.br*
196    & muse.element.code*
197    & muse.element.cite*
198    & muse.element.format*
199    & muse.element.image*
200    & muse.element.link*
201    & muse.element.image*
202    & text }?
204    ## def
205 muse.element.definition = element definition {
206    muse.element.br*
207    & muse.element.code*
208    & muse.element.cite*
209    & muse.element.format*
210    & muse.element.image*
211    & muse.element.link*
212    & muse.element.image*
213    & muse.element.list*
214    & text }?
216 # ------------------------------------------------
217 #   Inline elements
218 # ------------------------------------------------
220   ## format element
221   ## used for emphasis, underlining, and centering paragraphs
222 muse.element.format = element format {
223    muse.attribute.type?
224    & muse.attribute.level?
225    & muse.element.code*
226    & muse.element.format*
227    & text }?
229   ## cite element
230   ## used for citing sources
231 muse.element.cite = element cite {
232    muse.attribute.type?
233    & text }?
235   ## code element
236   ## used for small pieces of monospace text, like commands
237 muse.element.code = element code { text }?
239 muse.element.image = element image { muse.attribute.href? }?
241    ## horizontal rule element
242 muse.element.hr = element hr { empty }?
244    ## footnote element
245 muse.element.footnote = element footnote { text }?
247    ## anchor element
248 muse.element.anchor = element anchor { muse.attribute.id }?
250    ## link element
251 muse.element.link = element link {
252    muse.attribute.type?
253    & muse.attribute.href
254    & text }?
256 # ------------------------------------------------
257 #   Attributes
258 # ------------------------------------------------
260    ## type attribute
261 muse.attribute.type = attribute type { text }?
263    ## level attribute
264 muse.attribute.level = attribute level { text }?
266    ## href attribute -- must have valid URI
267 muse.attribute.href = attribute href { xsd:anyURI }?
269   ## id attribute
270 muse.attribute.id = attribute id { text }?
272 # ------------------------------------------------
273 #  Table elements
274 # ------------------------------------------------
276   ## table element
277 muse.element.table = element table {
278    muse.element.tbody*
279    & muse.element.thead*
280    & muse.element.tfoot* }?
282   ## table body element
283 muse.element.tbody = element tbody { muse.element.tr* }?
285   ## table header element
286 muse.element.thead = element thead { muse.element.tr* }?
288   ## table footer element
289 muse.element.tfoot = element tfoot { muse.element.tr* }?
291   ## table row element
292 muse.element.tr = element tr {
293    muse.element.td*
294  & muse.element.th* }?
296   ## td element
297 muse.element.td = element td {
298    muse.element.br*
299    & muse.element.code*
300    & muse.element.cite*
301    & muse.element.format*
302    & muse.element.image*
303    & muse.element.link*
304    & muse.element.image*
305    & muse.element.anchor*
306    & muse.element.footnote*
307    & text }?
309   ## th element
310 muse.element.th = element th {
311    muse.element.br*
312    & muse.element.code*
313    & muse.element.cite*
314    & muse.element.format*
315    & muse.element.image*
316    & muse.element.link*
317    & muse.element.image*
318    & muse.element.anchor*
319    & muse.element.footnote*
320    & text }?