123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363 |
- # Copyright (C) 2001-2008 World Wide Web Consortium, (Massachusetts
- # Institute of Technology, European Research Consortium for
- # Informatics and Mathematics, Keio University). All Rights Reserved.
- # This work is distributed under the W3C(R) Software License 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.
- # This was mostly generated from the syntax summary in the XSLT
- # Recommendation (using XSLT of course).
- # Issues: this validates extension elements as literal result
- # elements, which is overly restrictive.
- namespace local = ""
- default namespace xsl = "http://www.w3.org/1999/XSL/Transform"
- start =
- stylesheet.element
- | transform.element
- | literal-result-element-as-stylesheet
- version = "1.0"
- top-level-elements.model =
- (top-level-element.category | top-level-extension)*
- top-level-extension =
- element * - (xsl:* | local:*) {
- grammar {
- start = any
- any =
- (attribute * { text }
- | text
- | element * { any })*
- }
- }
- template.model = (instruction.category | literal-result-element | text)*
- literal-result-element-as-stylesheet =
- element * - xsl:* {
- attribute xsl:version { version },
- literal-result-element-no-version.atts,
- template.model
- }
- literal-result-element =
- element * - xsl:* { literal-result-element.atts, template.model }
- literal-result-element.atts =
- literal-result-element-no-version.atts,
- attribute xsl:version { version }?
- literal-result-element-no-version.atts =
- (attribute * - xsl:* { avt.datatype }
- | attribute xsl:extension-element-prefixes { prefixes.datatype }
- | attribute xsl:exclude-result-prefixes { prefixes.datatype }
- | attribute xsl:use-attribute-sets { qnames.datatype })*
- top-level-element.category =
- include.element
- | strip-space.element
- | preserve-space.element
- | template.element
- | namespace-alias.element
- | attribute-set.element
- | variable.element
- | param.element
- | key.element
- | decimal-format.element
- | output.element
- instruction.category =
- apply-templates.element
- | apply-imports.element
- | call-template.element
- | element.element
- | attribute.element
- | text.element
- | processing-instruction.element
- | comment.element
- | copy.element
- | value-of.element
- | number.element
- | for-each.element
- | if.element
- | choose.element
- | variable.element
- | copy-of.element
- | message.element
- | fallback.element
- extension.atts = attribute * - (xsl:* | local:*) { text }*
- stylesheet.element = element stylesheet { stylesheet.model }
- transform.element = element transform { stylesheet.model }
- stylesheet.model =
- extension.atts,
- attribute id { xsd:NCName }?,
- attribute extension-element-prefixes { prefixes.datatype }?,
- attribute exclude-result-prefixes { prefixes.datatype }?,
- attribute version { version },
- (import.element*, top-level-elements.model)
- include.element =
- element include {
- extension.atts,
- attribute href { xsd:anyURI }
- }
- import.element =
- element import {
- extension.atts,
- attribute href { xsd:anyURI }
- }
- strip-space.element =
- element strip-space {
- extension.atts,
- attribute elements { wildcards.datatype }
- }
- preserve-space.element =
- element preserve-space {
- extension.atts,
- attribute elements { wildcards.datatype }
- }
- template.element =
- element template {
- extension.atts,
- attribute match { pattern.datatype }?,
- attribute name { qname.datatype }?,
- attribute priority { number.datatype }?,
- attribute mode { qname.datatype }?,
- (param.element*, template.model)
- }
- apply-templates.element =
- element apply-templates {
- extension.atts,
- attribute select { expression.datatype }?,
- attribute mode { qname.datatype }?,
- (sort.element | with-param.element)*
- }
- apply-imports.element = element apply-imports { extension.atts }
- call-template.element =
- element call-template {
- extension.atts,
- attribute name { qname.datatype },
- with-param.element*
- }
- namespace-alias.element =
- element namespace-alias {
- extension.atts,
- attribute stylesheet-prefix { prefix.datatype },
- attribute result-prefix { prefix.datatype }
- }
- element.element =
- element element {
- extension.atts,
- attribute name { qname.datatype | expr-avt.datatype },
- attribute namespace { xsd:anyURI | brace-avt.datatype }?,
- attribute use-attribute-sets { qnames.datatype }?,
- template.model
- }
- attribute.element =
- element attribute {
- extension.atts,
- attribute name { qname.datatype | expr-avt.datatype },
- attribute namespace { xsd:anyURI | brace-avt.datatype }?,
- template.model
- }
- attribute-set.element =
- element attribute-set {
- extension.atts,
- attribute name { qname.datatype },
- attribute use-attribute-sets { qnames.datatype }?,
- attribute.element*
- }
- text.element =
- element text {
- extension.atts,
- attribute disable-output-escaping {
- xsd:string "yes" | xsd:string "no"
- }?,
- text
- }
- processing-instruction.element =
- element processing-instruction {
- extension.atts,
- attribute name { xsd:NCName | expr-avt.datatype },
- template.model
- }
- comment.element = element comment { extension.atts, template.model }
- copy.element =
- element copy {
- extension.atts,
- attribute use-attribute-sets { qnames.datatype }?,
- template.model
- }
- value-of.element =
- element value-of {
- extension.atts,
- attribute select { expression.datatype },
- attribute disable-output-escaping {
- xsd:string "yes" | xsd:string "no"
- }?
- }
- number.element =
- element number {
- extension.atts,
- attribute level {
- xsd:string "single" | xsd:string "multiple" | xsd:string "any"
- }?,
- attribute count { pattern.datatype }?,
- attribute from { pattern.datatype }?,
- attribute value { expression.datatype }?,
- attribute format { avt.datatype }?,
- attribute lang { xsd:NMTOKEN | expr-avt.datatype }?,
- attribute letter-value {
- xsd:string "alphabetic"
- | xsd:string "traditional"
- | expr-avt.datatype
- }?,
- attribute grouping-separator { char.datatype | expr-avt.datatype }?,
- attribute grouping-size { number.datatype | expr-avt.datatype }?
- }
- for-each.element =
- element for-each {
- extension.atts,
- attribute select { expression.datatype },
- (sort.element*, template.model)
- }
- if.element =
- element if {
- extension.atts,
- attribute test { expression.datatype },
- template.model
- }
- choose.element =
- element choose { extension.atts, (when.element+, otherwise.element?) }
- when.element =
- element when {
- extension.atts,
- attribute test { expression.datatype },
- template.model
- }
- otherwise.element = element otherwise { extension.atts, template.model }
- sort.element =
- element sort {
- extension.atts,
- attribute select { expression.datatype }?,
- attribute lang { xsd:NMTOKEN | expr-avt.datatype }?,
- attribute data-type {
- xsd:string "text"
- | xsd:string "number"
- | qname-but-not-ncname.datatype
- | expr-avt.datatype
- }?,
- attribute order {
- xsd:string "ascending"
- | xsd:string "descending"
- | expr-avt.datatype
- }?,
- attribute case-order {
- xsd:string "upper-first"
- | xsd:string "lower-first"
- | expr-avt.datatype
- }?
- }
- variable.element =
- element variable {
- extension.atts,
- attribute name { qname.datatype },
- (attribute select { expression.datatype }
- | template.model)
- }
- param.element =
- element param {
- extension.atts,
- attribute name { qname.datatype },
- (attribute select { expression.datatype }
- | template.model)
- }
- copy-of.element =
- element copy-of {
- extension.atts,
- attribute select { expression.datatype }
- }
- with-param.element =
- element with-param {
- extension.atts,
- attribute name { qname.datatype },
- (attribute select { expression.datatype }
- | template.model)
- }
- key.element =
- element key {
- extension.atts,
- attribute name { qname.datatype },
- attribute match { pattern.datatype },
- attribute use { expression.datatype }
- }
- decimal-format.element =
- element decimal-format {
- extension.atts,
- attribute name { qname.datatype }?,
- attribute decimal-separator { char.datatype }?,
- attribute grouping-separator { char.datatype }?,
- attribute infinity { text }?,
- attribute minus-sign { char.datatype }?,
- attribute NaN { text }?,
- attribute percent { char.datatype }?,
- attribute per-mille { char.datatype }?,
- attribute zero-digit { char.datatype }?,
- attribute digit { char.datatype }?,
- attribute pattern-separator { char.datatype }?
- }
- message.element =
- element message {
- extension.atts,
- attribute terminate { xsd:string "yes" | xsd:string "no" }?,
- template.model
- }
- fallback.element = element fallback { extension.atts, template.model }
- output.element =
- element output {
- extension.atts,
- attribute method {
- xsd:string "xml"
- | xsd:string "html"
- | xsd:string "text"
- | qname-but-not-ncname.datatype
- }?,
- attribute version { xsd:NMTOKEN }?,
- attribute encoding { text }?,
- attribute omit-xml-declaration {
- xsd:string "yes" | xsd:string "no"
- }?,
- attribute standalone { xsd:string "yes" | xsd:string "no" }?,
- attribute doctype-public { text }?,
- attribute doctype-system { text }?,
- attribute cdata-section-elements { qnames.datatype }?,
- attribute indent { xsd:string "yes" | xsd:string "no" }?,
- attribute media-type { text }?
- }
- prefixes.datatype = list { (xsd:NCName | "#default")* }
- prefix.datatype = xsd:NCName | "#default"
- wildcards.datatype =
- list {
- (xsd:QName
- | xsd:token { pattern = "\*|\i\c*:\*" })*
- }
- qname.datatype = xsd:QName
- qnames.datatype = list { xsd:QName* }
- char.datatype = xsd:string { length = "1" }
- number.datatype = xsd:decimal
- expression.datatype = text
- pattern.datatype = text
- qname-but-not-ncname.datatype = xsd:QName { pattern = ".*:.*" }
- # An AVT containing at least one expression.
- expr-avt.datatype =
- xsd:string {
- pattern =
- """([^\{\}]|\{\{|\}\})*\{([^"'\{\}]|"[^"]*"|'[^']*')+\}([^\{\}]|\{\{|\}\}|\{([^"'\{\}]|"[^"]*"|'[^']*')+\})*"""
- }
- # An AVT containing at least one brace; ie where instantiated AVT
- # is not the same as the literal AVT.
- brace-avt.datatype =
- xsd:string {
- pattern =
- """[^\{\}]*(\{\{|\}\}|\{([^"'\{\}]|"[^"]*"|'[^']*')+\})([^\{\}]|\{\{|\}\}|\{([^"'\{\}]|"[^"]*"|'[^']*')+\})*"""
- }
- avt.datatype =
- xsd:string {
- pattern =
- """([^\{\}]|\{\{|\}\}|\{([^"'\{\}]|"[^"]*"|'[^']*')+\})*"""
- }
|