| # RELAX NG XML syntax specified in compact syntax. |
| |
| default namespace rng = "http://relaxng.org/ns/structure/1.0" |
| namespace local = "" |
| datatypes xsd = "http://www.w3.org/2001/XMLSchema-datatypes" |
| |
| start = pattern |
| |
| pattern = |
| element element { (nameQName | nameClass), (common & pattern+) } |
| | element attribute { (nameQName | nameClass), (common & pattern?) } |
| | element group|interleave|choice|optional |
| |zeroOrMore|oneOrMore|list|mixed { common & pattern+ } |
| | element ref|parentRef { nameNCName, common } |
| | element empty|notAllowed|text { common } |
| | element data { type, param*, (common & exceptPattern?) } |
| | element value { commonAttributes, type?, xsd:string } |
| | element externalRef { href, common } |
| | element grammar { common & grammarContent* } |
| |
| param = element param { commonAttributes, nameNCName, xsd:string } |
| |
| exceptPattern = element except { common & pattern+ } |
| |
| grammarContent = |
| definition |
| | element div { common & grammarContent* } |
| | element include { href, (common & includeContent*) } |
| |
| includeContent = |
| definition |
| | element div { common & includeContent* } |
| |
| definition = |
| element start { combine?, (common & pattern+) } |
| | element define { nameNCName, combine?, (common & pattern+) } |
| |
| combine = attribute combine { "choice" | "interleave" } |
| |
| nameClass = |
| element name { commonAttributes, xsd:QName } |
| | element anyName { common & exceptNameClass? } |
| | element nsName { common & exceptNameClass? } |
| | element choice { common & nameClass+ } |
| |
| exceptNameClass = element except { common & nameClass+ } |
| |
| nameQName = attribute name { xsd:QName } |
| nameNCName = attribute name { xsd:NCName } |
| href = attribute href { xsd:anyURI } |
| type = attribute type { xsd:NCName } |
| |
| common = commonAttributes, foreignElement* |
| |
| commonAttributes = |
| attribute ns { xsd:string }?, |
| attribute datatypeLibrary { xsd:anyURI }?, |
| foreignAttribute* |
| |
| foreignElement = element * - rng:* { (anyAttribute | text | anyElement)* } |
| foreignAttribute = attribute * - (rng:*|local:*) { text } |
| anyElement = element * { (anyAttribute | text | anyElement)* } |
| anyAttribute = attribute * { text } |