Make XML publishing work with QuickStart; no longer considered unstable.
[muse-el.git] / examples / muse.rnc
blobe760eaa7c96d10fcd73eb798511280d56d6eb6d9
1 namespace a = "http://relaxng.org/ns/compatibility/annotations/1.0"
2 namespace rng = "http://relaxng.org/ns/structure/1.0"
4 #   Muse-Mode RELAX NG Schema v. 0.2
5 #   Copyright (C) 2005  Free Software Foundation, Inc.
7 #   This is free software; you can redistribute it and/or modify it
8 #   under the terms of the GNU General Public License as published by
9 #   the Free Software Foundation; either version 2 of the License, or
10 #   (at your option) any later version. This material is distributed in
11 #   the hope that it will be useful, but WITHOUT ANY WARRANTY; without
12 #   even the implied warranty of MERCHANTABILITY or FITNESS FOR A
13 #   PARTICULAR PURPOSE. See the GNU General Public License for more
14 #   details.You should have received a copy of the GNU General Public
15 #   License along with this file; if not, write to the Free Software
16 #   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
17 #   02111-1307, USA.
19 # Commentary:
21 #   RelaxNG Compact syntax can be converted into RelaxNG XML Syntax,
22 #   DTD format and XML Schema language using free tools.
24 #   Emacs users are encouraged to use James Clarke's nxml-mode for
25 #   editing and validating XML files.  If you are in nxml-mode use the
26 #   command C-c C-s C-f to point to this schema file, say yes if you
27 #   are asked if you want to copy the file to your location, and then
28 #   C-c C-s C-a can be used to reload the schema if you make changes
29 #   to the file.
31 # Contributors:
33 # Brad Collins (brad AT chenla DOT org) wrote the initial file.
35 # Michael Olson (mwolson AT gnu DOT org) made it work with Muse's
36 # QuickStart document.
38 start = MUSE
40    ## root element
41 MUSE =
42    element MUSE {
43       muse.attribute.type
44       & muse.element.pageinfo?
45       & muse.element.section*
46       & muse.element.p*
47       & muse.attribute.blockquote*
48       & muse.element.table*
49       & muse.element.list*
50       & muse.element.hr*
51       & muse.element.image*
52       & muse.element.example*
53       & muse.element.format*  # for centering paragraphs
54       & muse.element.verse*
55   }
57 # ------------------------------------------------
58 #  Pageinfo elements
59 # ------------------------------------------------
60     ## pageinfo element used for metadata
61     ## for the page
62 muse.element.pageinfo = element pageinfo {
63    muse.element.title?
64    & muse.element.author?
65    & muse.element.maintainer?
66    & muse.element.pubdate? }?
68    ## page title element
69 muse.element.title = element title { text }?
71    ## page author element
72 muse.element.author = element author { text }?
74    ## page maintainer element
75 muse.element.maintainer = element maintainer  { text }?
77   ## page publication date element
78 muse.element.pubdate = element pubdate { text }?
80 # ------------------------------------------------
81 #  Block elements
82 # ------------------------------------------------
84 muse.element.section = element section {
85    muse.attribute.type?
86    & muse.attribute.level?
87    & muse.element.section*
88    & muse.element.title*
89    & muse.element.p*
90    & muse.attribute.blockquote*
91    & muse.element.table*
92    & muse.element.list*
93    & muse.element.hr*
94    & muse.element.image*
95    & muse.element.example*
96    & muse.element.format*  # for centering paragraphs
97    & muse.element.verse*
98    & text }?
100   ## blockquote element
101 muse.attribute.blockquote = element blockquote {
102    muse.element.title?
103    & muse.element.p* }?
105    ## paragraph element
106 muse.element.p = element p {
107    muse.element.code*
108    & muse.element.format*
109    & muse.element.image*
110    & muse.element.link*
111    & muse.element.image*
112    & muse.element.anchor*
113    & muse.element.footnote*
114    & text }?
116    ## example element
117 muse.element.example = element example { text }?
119   ## verse element
120 muse.element.verse = element verse {
121    muse.element.line* }?
123   ## verse line element
124 muse.element.line = element line {
125    muse.element.code*
126    & muse.element.format*
127    & muse.element.image*
128    & muse.element.link*
129    & muse.element.image*
130    & muse.element.anchor*
131    & muse.element.footnote*
132    & text }?
134 # ------------------------------------------------
135 #  Unordered list elements
136 # ------------------------------------------------
138 muse.element.list = element list {
139    muse.attribute.type?
140    & muse.element.item* }?
142 muse.element.item = element item {
143    muse.element.term?
144    & muse.element.definition?
145    & muse.element.code*
146    & muse.element.format*
147    & muse.element.image*
148    & muse.element.link*
149    & muse.element.image*
150    & text }?
152 # ------------------------------------------------
153 #  Definition list elements
154 # ------------------------------------------------
156 muse.element.term = element term {
157    muse.element.code*
158    & muse.element.format*
159    & muse.element.image*
160    & muse.element.link*
161    & muse.element.image*
162    & text }?
164    ## def
165 muse.element.definition = element definition {
166    muse.element.code*
167    & muse.element.format*
168    & muse.element.image*
169    & muse.element.link*
170    & muse.element.image*
171    & text }?
173 # ------------------------------------------------
174 #   Inline elements
175 # ------------------------------------------------
177   ## format element
178   ## used for emphasis, underlining, and centering paragraphs
179 muse.element.format = element format {
180    muse.attribute.type?
181    & muse.attribute.level?
182    & muse.element.p?
183    & text }?
185   ## code element
186   ## used for small pieces of monospace text, like commands
187 muse.element.code = element code { text }?
189 muse.element.image = element image { muse.attribute.href? }?
191    ## horizontal rule element
192 muse.element.hr = element hr { empty }?
194    ## footnote element
195 muse.element.footnote = element footnote { text }?
197    ## anchor element
198 muse.element.anchor = element anchor { muse.attribute.id }?
200    ## link element
201 muse.element.link = element link {
202    muse.attribute.type?
203    & muse.attribute.href
204    & text }?
206 # ------------------------------------------------
207 #   Attributes
208 # ------------------------------------------------
210    ## type attribute
211 muse.attribute.type = attribute type { text }?
213    ## level attribute
214 muse.attribute.level = attribute level { text }?
216    ## href attribute -- must have valid URI
217 muse.attribute.href = attribute href { xsd:anyURI }?
219   ## id attribute
220 muse.attribute.id = attribute id { text }?
222 # ------------------------------------------------
223 #  Table elements
224 # ------------------------------------------------
226   ## table element
227 muse.element.table = element table {
228    muse.element.tbody*
229    & muse.element.thead*
230    & muse.element.tfoot* }?
232   ## table body element
233 muse.element.tbody = element tbody { muse.element.tr* }?
235   ## table header element
236 muse.element.thead = element thead { muse.element.tr* }?
238   ## table footer element
239 muse.element.tfoot = element tfoot { muse.element.tr* }?
241   ## table row element
242 muse.element.tr = element tr {
243    muse.element.td*
244  & muse.element.th*}?
246   ## td element
247 muse.element.td = element td { text }?
249   ## th element
250 muse.element.th = element th { text }?