Merge changes made in Gnus trunk.
[emacs.git] / etc / schema / relaxng.rnc
blobc0d598f08fb329e6bb2265001949978a87c66079
1 # RELAX NG XML syntax expressed in RELAX NG Compact syntax.
3 # Copyright (C) 2003, 2004, 2007, 2008, 2009, 2010  Free Software Foundation, Inc.
5 # This file is part of GNU Emacs.
7 # GNU Emacs is free software: you can redistribute it and/or modify
8 # it under the terms of the GNU General Public License as published by
9 # the Free Software Foundation, either version 3 of the License, or
10 # (at your option) any later version.
12 # GNU Emacs is distributed in the hope that it will be useful,
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 # GNU General Public License for more details.
17 # You should have received a copy of the GNU General Public License
18 # along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
20 default namespace rng = "http://relaxng.org/ns/structure/1.0"
21 namespace local = ""
22 datatypes xsd = "http://www.w3.org/2001/XMLSchema-datatypes"
24 start = pattern
26 pattern =
27   element element { (nameQName | nameClass), (common & pattern+) }
28   | element attribute { (nameQName | nameClass), (common & pattern?) }
29   | element group|interleave|choice|optional
30             |zeroOrMore|oneOrMore|list|mixed { common & pattern+ }
31   | element ref|parentRef { nameNCName, common }
32   | element empty|notAllowed|text { common }
33   | element data { type, param*, (common & exceptPattern?) }
34   | element value { commonAttributes, type?, xsd:string }
35   | element externalRef { href, common }
36   | element grammar { common & grammarContent* }
38 param = element param { commonAttributes, nameNCName, xsd:string }
40 exceptPattern = element except { common & pattern+ }
42 grammarContent = 
43   definition
44   | element div { common & grammarContent* }
45   | element include { href, (common & includeContent*) }
47 includeContent =
48   definition
49   | element div { common & includeContent* }
51 definition =
52   element start { combine?, (common & pattern+) }
53   | element define { nameNCName, combine?, (common & pattern+) }
55 combine = attribute combine { "choice" | "interleave" }
57 nameClass = 
58   element name { commonAttributes, xsd:QName }
59   | element anyName { common & exceptNameClass? }
60   | element nsName { common & exceptNameClass? }
61   | element choice { common & nameClass+ }
63 exceptNameClass = element except { common & nameClass+ }
65 nameQName = attribute name { xsd:QName }
66 nameNCName = attribute name { xsd:NCName }
67 href = attribute href { xsd:anyURI }
68 type = attribute type { xsd:NCName }
70 common = commonAttributes, foreignElement*
72 commonAttributes = 
73   attribute ns { xsd:string }?,
74   attribute datatypeLibrary { xsd:anyURI }?,
75   foreignAttribute*
77 foreignElement = element * - rng:* { (anyAttribute | text | anyElement)* }
78 foreignAttribute = attribute * - (rng:*|local:*) { text }
79 anyElement = element * { (anyAttribute | text | anyElement)* }
80 anyAttribute = attribute * { text }