1 # RELAX NG XML syntax expressed in RELAX NG Compact syntax.
3 # Copyright (C) 2003-2004, 2007-2011 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"
22 datatypes xsd
= "http://www.w3.org/2001/XMLSchema-datatypes"
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
+ }
44 |
element div { common
& grammarContent*
}
45 |
element include { href, (common
& includeContent*)
}
49 |
element div { common
& includeContent*
}
52 element start
{ combine?, (common
& pattern
+)
}
53 |
element define
{ nameNCName, combine?, (common
& pattern
+)
}
55 combine
= attribute combine
{ "choice" |
"interleave" }
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*
73 attribute ns
{ xsd:string
}?,
74 attribute datatypeLibrary
{ xsd:anyURI
}?,
77 foreignElement
= element * - rng:*
{ (anyAttribute | text | anyElement)*
}
78 foreignAttribute
= attribute * - (rng:*|local:*)
{ text
}
79 anyElement
= element *
{ (anyAttribute | text | anyElement)*
}
80 anyAttribute
= attribute *
{ text
}