mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2024-11-25 07:28:20 +00:00
7742c3dc9b
Emacs/nxml-mode (following private communication from FSF).
81 lines
2.8 KiB
Plaintext
81 lines
2.8 KiB
Plaintext
# RELAX NG XML syntax expressed in RELAX NG Compact syntax.
|
|
|
|
# Copyright (C) 2003, 2004, 2007, 2008 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 = 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 }
|