# RELAX NG XML syntax expressed in RELAX NG Compact syntax.# Copyright (C) 2003, 2004, 2007, 2008, 2009 Free Software Foundation, Inc.# This file is part of GNU Emacs.# GNU Emacs is free software: you can redistribute it and/or modify# it under the terms of the GNU General Public License as published by# the Free Software Foundation, either version 3 of the License, or# (at your option) any later version.# GNU Emacs is distributed in the hope that it will be useful,# but WITHOUT ANY WARRANTY; without even the implied warranty of# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the# GNU General Public License for more details.# You should have received a copy of the GNU General Public License# along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.default namespace rng = "http://relaxng.org/ns/structure/1.0"namespace local = ""datatypes xsd = "http://www.w3.org/2001/XMLSchema-datatypes"start = patternpattern = 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 }