blob: 3ab1c562d25000e57c6417f3cf3ad2aa247123c1 [file] [log] [blame]
<?xml version="1.0" ?>
<!--
This free of charge Software is provided on an "AS IS" basis, without
warranty of any kind. The entire risk as to the quality and performance of
the software is borne by you. Should the software prove defective, you and
only you assume the entire cost of any service and repair.
WEBMETHODS DOES NOT MAKE ANY EXPRESS OR IMPLIED WARRANTIES OF ANY KIND
INCLUDING, BUT NOT LIMITED TO, WARRANTIES OF TITLE, MERCHANTABILITY OR
FITNESS FOR A PARTICULAR PURPOSE, OR WARRANTIES ARISING BY STATUTE, COURSE
OF DEALING, CUSTOM OR USAGE, TRADE PRACTICE OR OTHERWISE.
IN NO EVENT WILL WEBMETHODS BE LIABLE FOR ANY LOST REVENUES, PROFITS,
BUSINESS OR INTERRUPTION OF BUSINESS OR OTHER SPECIAL, INDIRECT, INCIDENTAL
OR CONSEQUENTIAL DAMAGES, EVEN IF WEBMETHODS HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES, AND NOTWITHSTANDING ANY FAILURE OF ESSENTIAL
PURPOSE OF ANY LIMITED REMEDY OF ANY KIND, HOWEVER CAUSED AND UNDER ANY
THEORY OF LIABILITY.
Schema for XSLT 1.0 Recommendation, http://www.w3.org/TR/1999/REC-xslt-19991116
Using XML Schema CR Drafts,
- Part 1, http://www.w3.org/TR/2000/CR-xmlschema-1-20001024/
- Part 2, http://www.w3.org/TR/2000/CR-xmlschema-2-20001024/
Author: Asir S Vedamuthu
Member, XML Schema WG representing webMethods, Inc.
Member, XML Schema Processor design and implementation team at webMethods
webMethods, Inc.
3930 Pender Drive
Fairfax VA 22030
(703) 450-2500
Date - February 28th, 2001
Version - 0.4
This work is a product of the W3C XML Schema WG Task Force for authoring schema
for W3C Recommendations as an illustration of the XML Schema Language. This schema
is illustrative and non-normative. Internal names created by this schema follows the
same convention used by XSLT 1.0 specification.
Comments were stolen from the XSLT 1.0 specification,
http://www.w3.org/TR/1999/REC-xslt-19991116#element-syntax-summary
Asir intends to update this schema as the XML Schema drafts advance from CR to
PR and then REC. Expected changes are,
[1] XML Schema Namespace URI
[2] Change attribute declaration syntax
KNOWN ISSUES,
(a) XML Schema Definition Language cannot capture a unique wild card expression in XSLT: "In addition, the xsl:stylesheet element may contain any element not from the XSLT namespace, provided that the expanded-name of the element has a non-null namespace URI" - http://www.w3.org/TR/1999/REC-xslt-19991116#stylesheet-element (This will not be an issue as per XML Schema PR)
Revision History
0.1 - Created
0.2 - Fixed minor typos
0.3 - Implemented suggestions and added fragments from James Clark
0.4 - Fixed a minor typo
Acknowledgement
The following have contributed material to this draft:
- James Clark, jjc@jclark.com
Please send your comments and suggestions to asirv@webmethods.com
-->
<schema xmlns="http://www.w3.org/2000/10/XMLSchema"
targetNamespace="http://www.w3.org/1999/XSL/Transform"
elementFormDefault="qualified"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xpath="http://www.w3.org/TR/2001/WD-xptr-20010108/" blockDefault="#all">
<import namespace="http://www.w3.org/XML/1998/namespace"
schemaLocation="http://www.w3.org/2000/10/xml.xsd"/>
<!-- *** import schema for xpath
authored by C. M. Sperberg-McQueen [cmsmcq@acm.org]
Chair, XML Schema WG
<import namespace="http://www.w3.org/TR/2001/WD-xptr-20010108/"
schemaLocation="xpath.xsd"/>
-->
<!-- *** result elements *** -->
<!-- *** *** -->
<!-- There are three ways that you can construct a
schema for XSLT stylesheets that create instances of a
particular result structure
(a) Declare all your result elements as a member of
xsl:result-element substitution group
(b) Redefine model group xsl:result-element to accomodate
the desired structure
(c) Do nothing. This schema is designed to allow any element node
or nodes if they have any namespace other than the XSLT
namespace or not namespace qualified
I recommend (a) or (b)
In addition, I added a an attributeGroup util, 'result-element'
for your convenience
-->
<element name="result-element" abstract="true" type="anyType"/>
<attributeGroup name="result-element">
<attribute name="extension-element-prefixes" form="qualified" type="string"/>
<attribute name="exclude-result-prefixes" form="qualified" type="string"/>
<attribute name="use-attribute-sets" form="qualified" type="xsl:QNames"/>
<attribute name="version" form="qualified" type="NMTOKEN"/>
<anyAttribute namespace="##other" processContents="skip"/>
</attributeGroup>
<group name="result-element">
<choice>
<element ref="xsl:result-element"/>
<any namespace="##other" processContents="skip"/>
</choice>
</group>
<!-- *** Style Sheet Elements *** -->
<!-- *** *** -->
<element name="stylesheet" type="xsl:wrapper"/>
<element name="transform" type="xsl:wrapper"/>
<complexType name="wrapper">
<complexContent>
<extension base="xsl:anyType">
<sequence>
<element ref="xsl:import" minOccurs="0" maxOccurs="unbounded"/>
<choice minOccurs="0" maxOccurs="unbounded">
<element ref="xsl:top-level-element"/>
<element ref="xsl:variable"/>
<any namespace="##other" processContents="skip"/> <!-- weaker than XSLT 1.0 -->
</choice>
</sequence>
<attribute name="id" type="ID"/>
<attribute name="extension-element-prefixes" type="xsl:tokens"/>
<attribute name="exclude-result-prefixes" type="xsl:tokens"/>
<attribute name="version" type="decimal" use="required"/>
<attribute ref="xml:space"/>
</extension>
</complexContent>
</complexType>
<!-- *** top level elements *** -->
<!-- *** *** -->
<element name="top-level-element" type="xsl:anyType" abstract="true"/>
<element name="top-level-element-and-char-instruction" type="xsl:anyType" abstract="true"/>
<element name="attribute-set" substitutionGroup="xsl:top-level-element">
<!-- ***
<xsl:attribute-set
name = qname
use-attribute-sets = qnames>
Content: xsl:attribute*
</xsl:attribute-set>
-->
<complexType>
<complexContent>
<extension base="xsl:anyType">
<sequence minOccurs="0" maxOccurs="unbounded">
<element ref="xsl:attribute"/>
</sequence>
<attributeGroup ref="xsl:name"/>
<attributeGroup ref="xsl:use-attribute-sets"/>
<attribute ref="xml:space"/>
</extension>
</complexContent>
</complexType>
</element>
<element name="decimal-format" substitutionGroup="xsl:top-level-element">
<!-- ***
<xsl:decimal-format
name = qname
decimal-separator = char
grouping-separator = char
infinity = string
minus-sign = char
NaN = string
percent = char
per-mille = char
zero-digit = char
digit = char
pattern-separator = char />
-->
<complexType>
<complexContent>
<extension base="xsl:anyType">
<attribute name="name" type="xsl:QName"/>
<attribute name="decimal-separator" type="string" use="default" value="."/>
<attribute name="grouping-separator" type="string" use="default" value=","/>
<attribute name="infinity" type="string" use="default" value="Infinity"/>
<attribute name="minus-sign" type="string" use="default" value="-"/>
<attribute name="NaN" type="string" use="default" value="NaN"/>
<attribute name="percent" type="string" use="default" value="%"/>
<attribute name="per-mille" type="string" use="default" value="&#x2030;"/>
<attribute name="zero-digit" type="string" use="default" value="0"/>
<attribute name="digit" type="string" use="default" value="#"/>
<attribute name="pattern-separator" type="string" use="default" value=";"/>
</extension>
</complexContent>
</complexType>
</element>
<element name="include" substitutionGroup="xsl:top-level-element" type="xsl:combine-stylesheets">
<!-- ***
<xsl:include
href = uri-reference />
-->
</element>
<element name="key" substitutionGroup="xsl:top-level-element">
<!-- ***
<xsl:key
name = qname
match = pattern
use = expression />
-->
<complexType>
<complexContent>
<extension base="xsl:anyType">
<attributeGroup ref="xsl:name"/>
<attribute name="match" type="xsl:pattern" use="required"/>
<attribute name="use" type="xsl:expression" use="required"/>
</extension>
</complexContent>
</complexType>
</element>
<element name="namespace-alias" substitutionGroup="xsl:top-level-element">
<!-- ***
-->
<complexType>
<complexContent>
<extension base="xsl:anyType">
<attribute name="stylesheet-prefix" type="xsl:prefix" use="required"/>
<attribute name="result-prefix" type="xsl:prefix" use="required"/>
</extension>
</complexContent>
</complexType>
</element>
<element name="output" substitutionGroup="xsl:top-level-element">
<!-- ***
<xsl:output
method = "xml" | "html" | "text" | qname-but-not-ncname
version = nmtoken
encoding = string
omit-xml-declaration = "yes" | "no"
standalone = "yes" | "no"
doctype-public = string
doctype-system = string
cdata-section-elements = qnames
indent = "yes" | "no"
media-type = string />
-->
<complexType>
<complexContent>
<extension base="xsl:anyType">
<attribute name="method">
<simpleType>
<union>
<simpleType>
<restriction base="string">
<enumeration value="xml"/>
<enumeration value="html"/>
<enumeration value="text"/>
</restriction>
</simpleType>
<simpleType>
<restriction base="xsl:QName">
<pattern value="\c*:\c*"/>
</restriction>
</simpleType>
</union>
</simpleType>
</attribute>
<attribute name="version" type="NMTOKEN"/>
<attribute name="encoding" type="string"/>
<attribute name="omit-xml-declaration" type="xsl:YesOrNo"/>
<attribute name="standalone" type="xsl:YesOrNo"/>
<attribute name="doctype-public" type="string"/>
<attribute name="doctype-system" type="string"/>
<attribute name="cdata-section-elements" type="xsl:QNames"/>
<attribute name="indent" type="xsl:YesOrNo"/>
<attribute name="media-type" type="string"/>
</extension>
</complexContent>
</complexType>
</element>
<element name="param" substitutionGroup="xsl:top-level-element" type="xsl:variable">
<!-- ***
<xsl:param
name = qname
select = expression>
Content: template
</xsl:param>
-->
</element>
<element name="preserve-space" substitutionGroup="xsl:top-level-element">
<!-- ***
<xsl:preserve-space
elements = tokens />
-->
<complexType>
<complexContent>
<extension base="xsl:anyType">
<attribute name="elements" type="xsl:element-names" use="required"/>
</extension>
</complexContent>
</complexType>
</element>
<element name="strip-space" substitutionGroup="xsl:preserve-space"/>
<element name="template" substitutionGroup="xsl:top-level-element">
<!-- ***
<xsl:template
match = pattern
name = qname
priority = number
mode = qname>
Content: (xsl:param*, template)
</xsl:template>
-->
<complexType mixed="true">
<complexContent>
<extension base="xsl:anyType">
<sequence>
<element ref="xsl:param" minOccurs="0" maxOccurs="unbounded"/>
<choice minOccurs="0" maxOccurs="unbounded">
<element ref="xsl:top-level-element-and-char-instruction"/>
<element ref="xsl:instruction"/>
<group ref="xsl:result-element"/>
</choice>
</sequence>
<attribute name="match" type="xsl:pattern"/>
<attribute name="name" type="xsl:QName"/>
<attribute name="priority" type="decimal"/>
<attribute name="mode" type="xsl:QName"/>
<attribute ref="xml:space"/>
</extension>
</complexContent>
</complexType>
</element>
<!-- *** top level elements and char instructions *** -->
<!-- *** *** -->
<element name="variable" type="xsl:variable" substitutionGroup="xsl:char-instruction">
<!-- ***
<xsl:variable
name = qname
select = expression>
Content: template
</xsl:variable>
-->
</element>
<!-- *** instructions *** -->
<!-- *** *** -->
<element name="instruction" type="xsl:anyType" abstract="true"/>
<element name="char-instruction" type="xsl:anyType" abstract="true"
substitutionGroup="xsl:instruction"/>
<element name="apply-imports" type="xsl:anyType" substitutionGroup="xsl:char-instruction">
<!-- ***
<xsl:apply-imports />
-->
</element>
<element name="apply-templates" substitutionGroup="xsl:char-instruction">
<!-- ***
<xsl:apply-templates
select = node-set-expression
mode = qname>
Content: (xsl:sort | xsl:with-param)*
</xsl:apply-templates>
-->
<complexType>
<complexContent>
<extension base="xsl:anyType">
<choice minOccurs="0" maxOccurs="unbounded">
<element ref="xsl:sort"/>
<element ref="xsl:with-param"/>
</choice>
<attribute name="select" type="xsl:expression" use="default" value="node()"/>
<attribute name="mode" type="xsl:QName"/>
</extension>
</complexContent>
</complexType>
</element>
<element name="attribute" type="xsl:attribute-type" substitutionGroup="xsl:instruction"/>
<element name="call-template" substitutionGroup="xsl:char-instruction">
<!-- ***
<xsl:call-template
name = qname>
Content: xsl:with-param*
</xsl:call-template>
-->
<complexType>
<complexContent>
<extension base="xsl:anyType">
<sequence minOccurs="0" maxOccurs="unbounded">
<element ref="xsl:with-param"/>
</sequence>
<attributeGroup ref="xsl:name"/>
</extension>
</complexContent>
</complexType>
</element>
<element name="choose" substitutionGroup="xsl:char-instruction">
<!-- ***
<xsl:choose>
Content: (xsl:when+, xsl:otherwise?)
</xsl:choose>
-->
<complexType>
<complexContent>
<extension base="xsl:anyType">
<sequence>
<element ref="xsl:when" minOccurs="1" maxOccurs="unbounded"/>
<element ref="xsl:otherwise" minOccurs="0"/>
</sequence>
<attribute ref="xml:space"/>
</extension>
</complexContent>
</complexType>
</element>
<element name="comment" substitutionGroup="xsl:instruction">
<!-- ***
<xsl:comment>
Content: template
</xsl:comment>
-->
<complexType mixed="true">
<complexContent>
<extension base="xsl:anyType">
<choice minOccurs="0" maxOccurs="unbounded">
<element ref="xsl:char-instruction"/>
<element ref="xsl:top-level-element-and-char-instruction"/>
</choice>
<attribute ref="xml:space"/>
</extension>
</complexContent>
</complexType>
</element>
<element name="copy" substitutionGroup="xsl:char-instruction">
<!-- ***
<xsl:copy
use-attribute-sets = qnames>
Content: template
</xsl:copy>
-->
<complexType mixed="true">
<complexContent>
<extension base="xsl:anyType">
<group ref="xsl:template" minOccurs="0" maxOccurs="unbounded"/>
<attribute ref="xml:space"/>
<attributeGroup ref="xsl:use-attribute-sets"/>
</extension>
</complexContent>
</complexType>
</element>
<element name="copy-of" substitutionGroup="xsl:char-instruction">
<!-- ***
<xsl:copy-of
select = expression />
-->
<complexType mixed="true">
<complexContent>
<extension base="xsl:anyType">
<attributeGroup ref="xsl:select-required"/>
</extension>
</complexContent>
</complexType>
</element>
<element name="element" substitutionGroup="xsl:instruction">
<!-- ***
<xsl:element
name = { qname }
namespace = { uri-reference }
use-attribute-sets = qnames>
Content: template
</xsl:element>
-->
<complexType mixed="true">
<complexContent>
<extension base="xsl:anyType">
<group ref="xsl:template" minOccurs="0" maxOccurs="unbounded"/>
<attributeGroup ref="xsl:name-avt"/>
<attribute name="namespace" type="xsl:expr-avt"/>
<attributeGroup ref="xsl:use-attribute-sets"/>
<attribute ref="xml:space"/>
</extension>
</complexContent>
</complexType>
</element>
<element name="fallback" substitutionGroup="xsl:char-instruction">
<!-- ***
<xsl:fallback>
Content: template
</xsl:fallback>
-->
<complexType mixed="true">
<complexContent>
<extension base="xsl:anyType">
<group ref="xsl:template" minOccurs="0" maxOccurs="unbounded"/>
<attribute ref="xml:space"/>
</extension>
</complexContent>
</complexType>
</element>
<element name="for-each" substitutionGroup="xsl:char-instruction">
<!-- ***
<xsl:for-each
select = node-set-expression>
Content: (xsl:sort*, template)
</xsl:for-each>
-->
<complexType mixed="true">
<complexContent>
<extension base="xsl:anyType">
<sequence>
<element ref="xsl:sort" minOccurs="0" maxOccurs="unbounded"/>
<choice minOccurs="0" maxOccurs="unbounded">
<element ref="xsl:top-level-element-and-char-instruction"/>
<element ref="xsl:instruction"/>
<group ref="xsl:result-element"/>
</choice>
</sequence>
<attributeGroup ref="xsl:select-required"/>
<attribute ref="xml:space"/>
</extension>
</complexContent>
</complexType>
</element>
<element name="if" substitutionGroup="xsl:char-instruction">
<!-- ***
<xsl:if
test = boolean-expression>
Content: template
</xsl:if>
-->
<complexType mixed="true">
<complexContent>
<extension base="xsl:anyType">
<group ref="xsl:template" minOccurs="0" maxOccurs="unbounded"/>
<attribute name="test" type="xsl:expression" use="required"/>
<attribute ref="xml:space"/>
</extension>
</complexContent>
</complexType>
</element>
<element name="message" substitutionGroup="xsl:char-instruction">
<!-- ***
<xsl:message
terminate = "yes" | "no">
Content: template
</xsl:message>
-->
<complexType mixed="true">
<complexContent>
<extension base="xsl:anyType">
<group ref="xsl:template" minOccurs="0" maxOccurs="unbounded"/>
<attribute ref="xml:space"/>
<attribute name="terminate" use="default" value="no" type="xsl:YesOrNo"/>
</extension>
</complexContent>
</complexType>
</element>
<element name="number" substitutionGroup="xsl:char-instruction">
<!-- ***
<xsl:number
level = "single" | "multiple" | "any"
count = pattern
from = pattern
value = number-expression
format = { string }
lang = { nmtoken }
letter-value = { "alphabetic" | "traditional" }
grouping-separator = { char }
grouping-size = { number } />
-->
<complexType>
<complexContent>
<extension base="xsl:anyType">
<attribute name="level" use="default" value="single">
<simpleType>
<restriction base="NMTOKEN">
<enumeration value="single"/>
<enumeration value="multiple"/>
<enumeration value="any"/>
</restriction>
</simpleType>
</attribute>
<attribute name="count" type="xsl:pattern"/>
<attribute name="from" type="xsl:pattern"/>
<attribute name="value" type="xsl:expression"/>
<attribute name="format" type="xsl:expr-avt" use="default" value="1"/>
<attribute name="lang" type="xsl:expr-avt"/>
<attribute name="letter-value" type="xsl:expr-avt"/>
<attribute name="grouping-separator" type="xsl:expr-avt"/>
<attribute name="grouping-size" type="xsl:expr-avt"/>
</extension>
</complexContent>
</complexType>
</element>
<element name="processing-instruction" substitutionGroup="xsl:instruction">
<!-- ***
<xsl:processing-instruction
name = { ncname }>
Content: template
</xsl:processing-instruction>
-->
<complexType mixed="true">
<complexContent>
<extension base="xsl:anyType">
<choice minOccurs="0" maxOccurs="unbounded">
<element ref="xsl:char-instruction"/>
<element ref="xsl:top-level-element-and-char-instruction"/>
</choice>
<attributeGroup ref="xsl:name-avt"/>
<attribute ref="xml:space"/>
</extension>
</complexContent>
</complexType>
</element>
<element name="text" substitutionGroup="xsl:char-instruction">
<!-- ***
<xsl:text
disable-output-escaping = "yes" | "no">
Content: #PCDATA
</xsl:text>
-->
<complexType mixed="true">
<complexContent>
<extension base="xsl:anyType">
<attributeGroup ref="xsl:disable-output-escaping"/>
<attribute ref="xml:lang"/>
<attribute ref="xml:space"/>
</extension>
</complexContent>
</complexType>
</element>
<element name="value-of" substitutionGroup="xsl:char-instruction">
<!-- ***
<xsl:value-of
select = string-expression
disable-output-escaping = "yes" | "no" />
-->
<complexType>
<complexContent>
<extension base="xsl:anyType">
<attributeGroup ref="xsl:select-required"/>
<attributeGroup ref="xsl:disable-output-escaping"/>
</extension>
</complexContent>
</complexType>
</element>
<!-- *** orphans *** -->
<!-- *** *** -->
<element name="import" type="xsl:combine-stylesheets">
<!-- ***
<xsl:import
href = uri-reference />
-->
</element>
<element name="otherwise">
<!-- ***
<xsl:otherwise>
Content: template
</xsl:otherwise>
-->
<complexType mixed="true">
<complexContent>
<extension base="xsl:anyType">
<group ref="xsl:template" minOccurs="0" maxOccurs="unbounded"/>
<attribute ref="xml:space"/>
</extension>
</complexContent>
</complexType>
</element>
<element name="sort">
<!-- ***
xsl:sort
select = string-expression
lang = { nmtoken }
data-type = { "text" | "number" | qname-but-not-ncname }
order = { "ascending" | "descending" }
case-order = { "upper-first" | "lower-first" } />
-->
<complexType>
<complexContent>
<extension base="xsl:anyType">
<attribute name="select" type="xsl:expression" use="default" value="."/>
<attribute name="lang" type="xsl:expr-avt"/>
<attribute name="data-type" type="xsl:expr-avt" use="default" value="text"/>
<attribute name="order" type="xsl:expr-avt" use="default" value="ascending"/>
<attribute name="case-order" type="xsl:expr-avt"/>
</extension>
</complexContent>
</complexType>
</element>
<element name="when">
<!-- ***
<xsl:when
test = boolean-expression>
Content: template
</xsl:when>
-->
<complexType mixed="true">
<complexContent>
<extension base="xsl:anyType">
<group ref="xsl:template" minOccurs="0" maxOccurs="unbounded"/>
<attribute name="test" type="xsl:expression" use="required"/>
<attribute ref="xml:space"/>
</extension>
</complexContent>
</complexType>
</element>
<element name="with-param" type="xsl:variable">
<!-- ***
<xsl:with-param
name = qname
select = expression>
Content: template
</xsl:with-param>
-->
</element>
<!-- *** utils - internal types and groups *** -->
<!-- *** not for public use *** -->
<!-- *** *** -->
<complexType name="attribute-type" mixed="true">
<!-- ***
<xsl:attribute
name = { qname }
namespace = { uri-reference }>
Content: template
</xsl:attribute>
-->
<complexContent>
<extension base="xsl:anyType">
<choice minOccurs="0" maxOccurs="unbounded">
<element ref="xsl:char-instruction"/>
<element ref="xsl:top-level-element-and-char-instruction"/>
</choice>
<attributeGroup ref="xsl:name-avt"/>
<attribute name="namespace" type="xsl:expr-avt"/>
<attribute ref="xml:space"/>
</extension>
</complexContent>
</complexType>
<simpleType name="tokens">
<list itemType="token"/>
</simpleType>
<simpleType name="QNames">
<list itemType="xsl:QName"/>
</simpleType>
<attributeGroup name="name">
<attribute name="name" type="xsl:QName" use="required"/>
</attributeGroup>
<attributeGroup name="name-avt">
<attribute name="name" type="xsl:expr-avt" use="required"/>
</attributeGroup>
<attributeGroup name="select-optional">
<attribute name="select" type="xsl:expression"/>
</attributeGroup>
<attributeGroup name="select-required">
<attribute name="select" type="xsl:expression" use="required"/>
</attributeGroup>
<attributeGroup name="use-attribute-sets">
<attribute name="use-attribute-sets" type="xsl:QNames"/>
</attributeGroup>
<group name="template">
<choice>
<element ref="xsl:top-level-element-and-char-instruction"/>
<element ref="xsl:instruction"/>
<group ref="xsl:result-element"/>
</choice>
</group>
<complexType name="combine-stylesheets">
<complexContent>
<extension base="xsl:anyType">
<attribute name="href" type="uriReference" use="required"/>
</extension>
</complexContent>
</complexType>
<simpleType name="YesOrNo">
<restriction base="string">
<enumeration value="yes"/>
<enumeration value="no"/>
</restriction>
</simpleType>
<simpleType name="QName">
<union memberTypes="NCName QName"/>
</simpleType>
<simpleType name="element-names">
<list>
<simpleType>
<union memberTypes="QName">
<simpleType>
<restriction base="CDATA">
<pattern value="\*"/>
<pattern value="\i\c*:\*"/>
</restriction>
</simpleType>
</union>
</simpleType>
</list>
</simpleType>
<attributeGroup name="disable-output-escaping">
<attribute name="disable-output-escaping" type="xsl:YesOrNo"
use="default" value="no"/>
</attributeGroup>
<complexType name="variable" mixed="true">
<complexContent>
<extension base="xsl:anyType">
<group ref="xsl:template" minOccurs="0" maxOccurs="unbounded"/>
<attributeGroup ref="xsl:name"/>
<attributeGroup ref="xsl:select-optional"/>
</extension>
</complexContent>
</complexType>
<simpleType name="expr-avt">
<restriction base="string">
<!-- <pattern
value="([^\{\}]|\{\{|\}\})*\{([^&quot;'\{\}]|&quot;[^&quot;]*&quot;|'[^']*')+\}([^\{\}]|\{\{|\}\}|\{([^&quot;'\{\}]|&quot;[^&quot;]*&quot;|'[^']*')+\})*"/> -->
</restriction>
</simpleType>
<simpleType name="expression">
<restriction base="string">
<!-- ****
patterns go here
-->
</restriction>
</simpleType>
<simpleType name="pattern">
<restriction base="string">
<!-- ***
patterns go here
-->
</restriction>
</simpleType>
<simpleType name="prefix">
<union memberTypes="NCName">
<simpleType>
<restriction base="string">
<enumeration value="#default"/>
</restriction>
</simpleType>
</union>
</simpleType>
<complexType name="anyType">
<anyAttribute namespace="##other" processContents="skip"/>
</complexType>
</schema>