]> git.argeo.org Git - lgpl/argeo-commons.git/blobdiff - org.argeo.cms/src/org/argeo/cms/acr/schemas/schema-for-xslt20.xsd
Introduce XSD support.
[lgpl/argeo-commons.git] / org.argeo.cms / src / org / argeo / cms / acr / schemas / schema-for-xslt20.xsd
diff --git a/org.argeo.cms/src/org/argeo/cms/acr/schemas/schema-for-xslt20.xsd b/org.argeo.cms/src/org/argeo/cms/acr/schemas/schema-for-xslt20.xsd
new file mode 100644 (file)
index 0000000..0a95ffc
--- /dev/null
@@ -0,0 +1,1134 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" targetNamespace="http://www.w3.org/1999/XSL/Transform" elementFormDefault="qualified">
+
+<!-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
+<xs:annotation>
+  <xs:documentation>
+  
+    This is a schema for XSLT 2.0 stylesheets.
+    
+    It defines all the elements that appear in the XSLT namespace; it also
+    provides hooks that allow the inclusion of user-defined literal result elements,
+    extension instructions, and top-level data elements.
+    
+    The schema is derived (with kind permission) from a schema for XSLT 1.0 stylesheets
+    produced by Asir S Vedamuthu of WebMethods Inc.
+    
+    This schema is available for use under the conditions of the W3C Software License
+    published at http://www.w3.org/Consortium/Legal/copyright-software-19980720
+    
+    The schema is organized as follows:
+    
+    PART A: definitions of complex types and model groups used as the basis 
+            for element definitions
+    PART B: definitions of individual XSLT elements
+    PART C: definitions for literal result elements
+    PART D: definitions of simple types used in attribute definitions
+    
+    This schema does not attempt to define all the constraints that apply to a valid
+    XSLT 2.0 stylesheet module. It is the intention that all valid stylesheet modules 
+    should conform to this schema; however, the schema is non-normative and in the event 
+    of any conflict, the text of the Recommendation takes precedence.
+
+    This schema does not implement the special rules that apply when a stylesheet
+    has sections that use forwards-compatible-mode. In this mode, setting version="3.0"
+    allows elements from the XSLT namespace to be used that are not defined in XSLT 2.0.
+
+    Simplified stylesheets (those with a literal result element as the outermost element)
+    will validate against this schema only if validation starts in lax mode.
+    
+    This version is dated 2007-03-16
+    Authors: Michael H Kay, Saxonica Limited
+             Jeni Tennison, Jeni Tennison Consulting Ltd.
+             
+    2007-03-15: added xsl:document element
+                revised xsl:sequence element
+                see http://www.w3.org/Bugs/Public/show_bug.cgi?id=4237         
+    
+  </xs:documentation>
+</xs:annotation>   
+<!-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
+<!--
+The declaration of xml:space and xml:lang may need to be commented out because
+of problems processing the schema using various tools
+-->
+      
+<xs:import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="http://www.w3.org/2001/xml.xsd"/>
+
+<!-- 
+    An XSLT stylesheet may contain an in-line schema within an xsl:import-schema element,
+    so the Schema for schemas needs to be imported
+-->
+  
+<xs:import namespace="http://www.w3.org/2001/XMLSchema" schemaLocation="http://www.w3.org/2001/XMLSchema.xsd"/>
+
+<!-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
+<xs:annotation>
+  <xs:documentation>
+    PART A: definitions of complex types and model groups used as the basis 
+            for element definitions
+  </xs:documentation>
+</xs:annotation>   
+<!-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
+
+<xs:complexType name="generic-element-type" mixed="true">
+  <xs:attribute name="default-collation" type="xsl:uri-list"/>
+  <xs:attribute name="exclude-result-prefixes" type="xsl:prefix-list-or-all"/>
+  <xs:attribute name="extension-element-prefixes" type="xsl:prefix-list"/>
+  <xs:attribute name="use-when" type="xsl:expression"/>
+  <xs:attribute name="xpath-default-namespace" type="xs:anyURI"/>
+  <xs:anyAttribute namespace="##other" processContents="lax"/>
+</xs:complexType>
+
+<xs:complexType name="versioned-element-type" mixed="true">
+  <xs:complexContent>
+    <xs:extension base="xsl:generic-element-type">    
+      <xs:attribute name="version" type="xs:decimal" use="optional"/>
+    </xs:extension>
+  </xs:complexContent>
+</xs:complexType>
+
+<xs:complexType name="element-only-versioned-element-type" mixed="false">
+  <xs:complexContent>
+    <xs:restriction base="xsl:versioned-element-type">
+      <xs:anyAttribute namespace="##other" processContents="lax"/>
+    </xs:restriction>
+  </xs:complexContent>
+</xs:complexType>
+
+<xs:complexType name="sequence-constructor">
+  <xs:complexContent mixed="true">
+    <xs:extension base="xsl:versioned-element-type">    
+      <xs:group ref="xsl:sequence-constructor-group" minOccurs="0" maxOccurs="unbounded"/>
+    </xs:extension>
+  </xs:complexContent>
+</xs:complexType>
+
+<xs:group name="sequence-constructor-group">
+  <xs:choice>
+    <xs:element ref="xsl:variable"/>
+    <xs:element ref="xsl:instruction"/>
+    <xs:group ref="xsl:result-elements"/>
+  </xs:choice>
+</xs:group>
+
+<xs:element name="declaration" type="xsl:generic-element-type" abstract="true"/>
+
+<xs:element name="instruction" type="xsl:versioned-element-type" abstract="true"/>
+
+<!-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
+<xs:annotation>
+  <xs:documentation>
+    PART B: definitions of individual XSLT elements    
+    Elements are listed in alphabetical order.    
+  </xs:documentation>
+</xs:annotation>   
+<!-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
+
+<xs:element name="analyze-string" substitutionGroup="xsl:instruction">
+  <xs:complexType>
+    <xs:complexContent>
+      <xs:extension base="xsl:element-only-versioned-element-type">
+        <xs:sequence>
+          <xs:element ref="xsl:matching-substring" minOccurs="0"/>
+          <xs:element ref="xsl:non-matching-substring" minOccurs="0"/>
+          <xs:element ref="xsl:fallback" minOccurs="0" maxOccurs="unbounded"/>
+        </xs:sequence>
+        <xs:attribute name="select" type="xsl:expression" use="required"/>
+        <xs:attribute name="regex" type="xsl:avt" use="required"/>
+        <xs:attribute name="flags" type="xsl:avt" default=""/>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+</xs:element>
+
+<xs:element name="apply-imports" substitutionGroup="xsl:instruction">
+  <xs:complexType>
+    <xs:complexContent>
+      <xs:extension base="xsl:element-only-versioned-element-type">
+        <xs:sequence>
+          <xs:element ref="xsl:with-param" minOccurs="0" maxOccurs="unbounded"/>
+        </xs:sequence>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+</xs:element>
+
+<xs:element name="apply-templates" substitutionGroup="xsl:instruction">
+  <xs:complexType>
+    <xs:complexContent>
+      <xs:extension base="xsl:element-only-versioned-element-type">
+        <xs:choice minOccurs="0" maxOccurs="unbounded">
+          <xs:element ref="xsl:sort"/>
+          <xs:element ref="xsl:with-param"/>
+        </xs:choice>
+        <xs:attribute name="select" type="xsl:expression" default="child::node()"/>
+        <xs:attribute name="mode" type="xsl:mode"/>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+</xs:element>
+
+<xs:element name="attribute" substitutionGroup="xsl:instruction">
+  <xs:complexType>
+    <xs:complexContent mixed="true">
+      <xs:extension base="xsl:sequence-constructor">
+        <xs:attribute name="name" type="xsl:avt" use="required"/>
+        <xs:attribute name="namespace" type="xsl:avt"/>
+        <xs:attribute name="select" type="xsl:expression"/>
+        <xs:attribute name="separator" type="xsl:avt"/>   
+        <xs:attribute name="type" type="xsl:QName"/>
+        <xs:attribute name="validation" type="xsl:validation-type"/>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+</xs:element>        
+
+<xs:element name="attribute-set" substitutionGroup="xsl:declaration">
+  <xs:complexType>
+    <xs:complexContent>
+      <xs:extension base="xsl:element-only-versioned-element-type">
+        <xs:sequence minOccurs="0" maxOccurs="unbounded">
+          <xs:element ref="xsl:attribute"/>
+        </xs:sequence>
+        <xs:attribute name="name" type="xsl:QName" use="required"/>
+        <xs:attribute name="use-attribute-sets" type="xsl:QNames" default=""/>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+</xs:element>
+
+<xs:element name="call-template" substitutionGroup="xsl:instruction">
+  <xs:complexType>
+    <xs:complexContent>
+      <xs:extension base="xsl:element-only-versioned-element-type">
+        <xs:sequence>
+          <xs:element ref="xsl:with-param" minOccurs="0" maxOccurs="unbounded"/>
+        </xs:sequence>
+        <xs:attribute name="name" type="xsl:QName" use="required"/>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+</xs:element>
+
+<xs:element name="character-map" substitutionGroup="xsl:declaration">
+  <xs:complexType>
+    <xs:complexContent>
+      <xs:extension base="xsl:element-only-versioned-element-type">
+        <xs:sequence>
+          <xs:element ref="xsl:output-character" minOccurs="0" maxOccurs="unbounded"/>
+        </xs:sequence>
+        <xs:attribute name="name" type="xsl:QName" use="required"/>
+        <xs:attribute name="use-character-maps" type="xsl:QNames" default=""/>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+</xs:element>
+
+<xs:element name="choose" substitutionGroup="xsl:instruction">
+  <xs:complexType>
+    <xs:complexContent>
+      <xs:extension base="xsl:element-only-versioned-element-type">
+        <xs:sequence>
+          <xs:element ref="xsl:when" maxOccurs="unbounded"/>
+          <xs:element ref="xsl:otherwise" minOccurs="0"/>
+        </xs:sequence>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+</xs:element>
+
+<xs:element name="comment" substitutionGroup="xsl:instruction">
+  <xs:complexType>
+    <xs:complexContent mixed="true">
+      <xs:extension base="xsl:sequence-constructor">
+        <xs:attribute name="select" type="xsl:expression"/>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+</xs:element>
+
+<xs:element name="copy" substitutionGroup="xsl:instruction">
+  <xs:complexType>
+    <xs:complexContent mixed="true">
+      <xs:extension base="xsl:sequence-constructor">
+        <xs:attribute name="copy-namespaces" type="xsl:yes-or-no" default="yes"/>
+        <xs:attribute name="inherit-namespaces" type="xsl:yes-or-no" default="yes"/>
+        <xs:attribute name="use-attribute-sets" type="xsl:QNames" default=""/>
+        <xs:attribute name="type" type="xsl:QName"/>
+        <xs:attribute name="validation" type="xsl:validation-type"/>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+</xs:element>
+
+<xs:element name="copy-of" substitutionGroup="xsl:instruction">
+  <xs:complexType>
+    <xs:complexContent mixed="true">
+      <xs:extension base="xsl:versioned-element-type">
+        <xs:attribute name="select" type="xsl:expression" use="required"/>
+        <xs:attribute name="copy-namespaces" type="xsl:yes-or-no" default="yes"/>
+        <xs:attribute name="type" type="xsl:QName"/>
+        <xs:attribute name="validation" type="xsl:validation-type"/>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+</xs:element>
+
+<xs:element name="document" substitutionGroup="xsl:instruction">
+  <xs:complexType>
+    <xs:complexContent mixed="true">
+      <xs:extension base="xsl:sequence-constructor">
+        <xs:attribute name="type" type="xsl:QName"/>
+        <xs:attribute name="validation" type="xsl:validation-type"/>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+</xs:element>
+
+<xs:element name="decimal-format" substitutionGroup="xsl:declaration">
+  <xs:complexType>
+    <xs:complexContent>
+      <xs:extension base="xsl:element-only-versioned-element-type">
+        <xs:attribute name="name" type="xsl:QName"/>
+        <xs:attribute name="decimal-separator" type="xsl:char" default="."/>
+        <xs:attribute name="grouping-separator" type="xsl:char" default=","/>
+        <xs:attribute name="infinity" type="xs:string" default="Infinity"/>
+        <xs:attribute name="minus-sign" type="xsl:char" default="-"/>
+        <xs:attribute name="NaN" type="xs:string" default="NaN"/>
+        <xs:attribute name="percent" type="xsl:char" default="%"/>
+        <xs:attribute name="per-mille" type="xsl:char" default="‰"/>
+        <xs:attribute name="zero-digit" type="xsl:char" default="0"/>
+        <xs:attribute name="digit" type="xsl:char" default="#"/>
+        <xs:attribute name="pattern-separator" type="xsl:char" default=";"/>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+</xs:element>
+
+<xs:element name="element" substitutionGroup="xsl:instruction">
+  <xs:complexType mixed="true">
+    <xs:complexContent>
+      <xs:extension base="xsl:sequence-constructor">
+        <xs:attribute name="name" type="xsl:avt" use="required"/>
+        <xs:attribute name="namespace" type="xsl:avt"/>
+        <xs:attribute name="inherit-namespaces" type="xsl:yes-or-no" default="yes"/>
+        <xs:attribute name="use-attribute-sets" type="xsl:QNames" default=""/>
+        <xs:attribute name="type" type="xsl:QName"/>
+        <xs:attribute name="validation" type="xsl:validation-type"/>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+</xs:element>
+
+<xs:element name="fallback" substitutionGroup="xsl:instruction" type="xsl:sequence-constructor"/>
+
+<xs:element name="for-each" substitutionGroup="xsl:instruction">
+  <xs:complexType>
+    <xs:complexContent mixed="true">
+      <xs:extension base="xsl:versioned-element-type">
+        <xs:sequence>
+          <xs:element ref="xsl:sort" minOccurs="0" maxOccurs="unbounded"/>
+          <xs:group ref="xsl:sequence-constructor-group" minOccurs="0" maxOccurs="unbounded"/>
+        </xs:sequence>
+        <xs:attribute name="select" type="xsl:expression" use="required"/>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+</xs:element>
+
+<xs:element name="for-each-group" substitutionGroup="xsl:instruction">
+  <xs:complexType>
+    <xs:complexContent mixed="true">
+      <xs:extension base="xsl:versioned-element-type">
+        <xs:sequence>
+          <xs:element ref="xsl:sort" minOccurs="0" maxOccurs="unbounded"/>
+          <xs:group ref="xsl:sequence-constructor-group" minOccurs="0" maxOccurs="unbounded"/>
+        </xs:sequence>
+        <xs:attribute name="select" type="xsl:expression" use="required"/>
+        <xs:attribute name="group-by" type="xsl:expression"/>
+        <xs:attribute name="group-adjacent" type="xsl:expression"/>            
+        <xs:attribute name="group-starting-with" type="xsl:pattern"/>            
+        <xs:attribute name="group-ending-with" type="xsl:pattern"/>            
+        <xs:attribute name="collation" type="xs:anyURI"/>            
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+</xs:element>
+
+<xs:element name="function" substitutionGroup="xsl:declaration">
+  <xs:complexType>
+    <xs:complexContent mixed="true">
+      <xs:extension base="xsl:versioned-element-type">
+        <xs:sequence>
+          <xs:element ref="xsl:param" minOccurs="0" maxOccurs="unbounded"/>
+          <xs:group ref="xsl:sequence-constructor-group" minOccurs="0" maxOccurs="unbounded"/>
+        </xs:sequence>
+        <xs:attribute name="name" type="xsl:QName" use="required"/>
+        <xs:attribute name="override" type="xsl:yes-or-no" default="yes"/>
+        <xs:attribute name="as" type="xsl:sequence-type" default="item()*"/>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+</xs:element>
+
+<xs:element name="if" substitutionGroup="xsl:instruction">
+  <xs:complexType>
+    <xs:complexContent mixed="true">
+      <xs:extension base="xsl:sequence-constructor">
+        <xs:attribute name="test" type="xsl:expression" use="required"/>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+</xs:element>
+
+<xs:element name="import">
+  <xs:complexType>
+    <xs:complexContent>
+      <xs:extension base="xsl:element-only-versioned-element-type">
+        <xs:attribute name="href" type="xs:anyURI" use="required"/>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+</xs:element>
+
+<xs:element name="import-schema" substitutionGroup="xsl:declaration">
+  <xs:complexType>
+    <xs:complexContent>
+      <xs:extension base="xsl:element-only-versioned-element-type">
+        <xs:sequence>
+          <xs:element ref="xs:schema" minOccurs="0" maxOccurs="1"/>
+        </xs:sequence>
+        <xs:attribute name="namespace" type="xs:anyURI"/>
+        <xs:attribute name="schema-location" type="xs:anyURI"/>                  
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+</xs:element>
+
+<xs:element name="include" substitutionGroup="xsl:declaration">
+    <xs:complexType>
+      <xs:complexContent>
+        <xs:extension base="xsl:element-only-versioned-element-type">
+          <xs:attribute name="href" type="xs:anyURI" use="required"/>
+        </xs:extension>
+      </xs:complexContent>
+  </xs:complexType>
+</xs:element>
+
+<xs:element name="key" substitutionGroup="xsl:declaration">
+  <xs:complexType>
+    <xs:complexContent mixed="true">
+      <xs:extension base="xsl:sequence-constructor">
+        <xs:attribute name="name" type="xsl:QName" use="required"/>
+        <xs:attribute name="match" type="xsl:pattern" use="required"/>
+        <xs:attribute name="use" type="xsl:expression"/>
+        <xs:attribute name="collation" type="xs:anyURI"/>               
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+</xs:element>
+
+<xs:element name="matching-substring" type="xsl:sequence-constructor"/>
+
+<xs:element name="message" substitutionGroup="xsl:instruction">
+  <xs:complexType>
+    <xs:complexContent mixed="true">
+      <xs:extension base="xsl:sequence-constructor">
+        <xs:attribute name="select" type="xsl:expression"/>
+        <xs:attribute name="terminate" type="xsl:avt" default="no"/>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+</xs:element>
+
+<xs:element name="namespace" substitutionGroup="xsl:instruction">
+  <xs:complexType>
+    <xs:complexContent mixed="true">
+      <xs:extension base="xsl:sequence-constructor">
+        <xs:attribute name="name" type="xsl:avt" use="required"/>
+        <xs:attribute name="select" type="xsl:expression"/>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+</xs:element>
+
+<xs:element name="namespace-alias" substitutionGroup="xsl:declaration">
+  <xs:complexType>
+    <xs:complexContent>
+      <xs:extension base="xsl:element-only-versioned-element-type">
+        <xs:attribute name="stylesheet-prefix" type="xsl:prefix-or-default" use="required"/>
+        <xs:attribute name="result-prefix" type="xsl:prefix-or-default" use="required"/>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+</xs:element>
+
+<xs:element name="next-match" substitutionGroup="xsl:instruction">
+  <xs:complexType>
+    <xs:complexContent>
+      <xs:extension base="xsl:element-only-versioned-element-type">
+        <xs:choice minOccurs="0" maxOccurs="unbounded">
+          <xs:element ref="xsl:with-param"/>
+          <xs:element ref="xsl:fallback"/>
+        </xs:choice>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+</xs:element>
+
+<xs:element name="non-matching-substring" type="xsl:sequence-constructor"/>
+
+<xs:element name="number" substitutionGroup="xsl:instruction">
+  <xs:complexType>
+    <xs:complexContent mixed="true">
+      <xs:extension base="xsl:versioned-element-type">
+        <xs:attribute name="value" type="xsl:expression"/>
+        <xs:attribute name="select" type="xsl:expression"/>
+        <xs:attribute name="level" type="xsl:level" default="single"/>
+        <xs:attribute name="count" type="xsl:pattern"/>
+        <xs:attribute name="from" type="xsl:pattern"/>
+        <xs:attribute name="format" type="xsl:avt" default="1"/>
+        <xs:attribute name="lang" type="xsl:avt"/>
+        <xs:attribute name="letter-value" type="xsl:avt"/>
+        <xs:attribute name="ordinal" type="xsl:avt"/>        
+        <xs:attribute name="grouping-separator" type="xsl:avt"/>
+        <xs:attribute name="grouping-size" type="xsl:avt"/>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+</xs:element>
+
+<xs:element name="otherwise" type="xsl:sequence-constructor"/>
+
+<xs:element name="output" substitutionGroup="xsl:declaration">
+  <xs:complexType>
+    <xs:complexContent mixed="true">
+      <xs:extension base="xsl:generic-element-type">
+        <xs:attribute name="name" type="xsl:QName"/>
+        <xs:attribute name="method" type="xsl:method"/>
+        <xs:attribute name="byte-order-mark" type="xsl:yes-or-no"/>
+        <xs:attribute name="cdata-section-elements" type="xsl:QNames"/>
+        <xs:attribute name="doctype-public" type="xs:string"/>
+        <xs:attribute name="doctype-system" type="xs:string"/>
+        <xs:attribute name="encoding" type="xs:string"/>
+        <xs:attribute name="escape-uri-attributes" type="xsl:yes-or-no"/>
+        <xs:attribute name="include-content-type" type="xsl:yes-or-no"/>
+        <xs:attribute name="indent" type="xsl:yes-or-no"/>
+        <xs:attribute name="media-type" type="xs:string"/>
+        <xs:attribute name="normalization-form" type="xs:NMTOKEN"/>
+        <xs:attribute name="omit-xml-declaration" type="xsl:yes-or-no"/>
+        <xs:attribute name="standalone" type="xsl:yes-or-no-or-omit"/>
+        <xs:attribute name="undeclare-prefixes" type="xsl:yes-or-no"/>
+        <xs:attribute name="use-character-maps" type="xsl:QNames"/>
+        <xs:attribute name="version" type="xs:NMTOKEN"/>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+</xs:element>
+
+<xs:element name="output-character">
+  <xs:complexType>
+    <xs:complexContent>
+      <xs:extension base="xsl:element-only-versioned-element-type">
+        <xs:attribute name="character" type="xsl:char" use="required"/>
+        <xs:attribute name="string" type="xs:string" use="required"/>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+</xs:element>
+
+<xs:element name="param">
+  <xs:complexType>
+    <xs:complexContent mixed="true">
+      <xs:extension base="xsl:sequence-constructor">
+        <xs:attribute name="name" type="xsl:QName" use="required"/>
+        <xs:attribute name="select" type="xsl:expression"/>
+        <xs:attribute name="as" type="xsl:sequence-type"/>
+        <xs:attribute name="required" type="xsl:yes-or-no"/>
+        <xs:attribute name="tunnel" type="xsl:yes-or-no"/>        
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+</xs:element>
+
+<xs:element name="perform-sort" substitutionGroup="xsl:instruction">
+  <xs:complexType>
+    <xs:complexContent mixed="true">
+      <xs:extension base="xsl:versioned-element-type">
+        <xs:sequence>
+          <xs:element ref="xsl:sort" minOccurs="1" maxOccurs="unbounded"/>
+          <xs:group ref="xsl:sequence-constructor-group" minOccurs="0" maxOccurs="unbounded"/>
+        </xs:sequence>
+        <xs:attribute name="select" type="xsl:expression"/>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+</xs:element>
+
+<xs:element name="preserve-space" substitutionGroup="xsl:declaration">
+  <xs:complexType>
+    <xs:complexContent>
+      <xs:extension base="xsl:element-only-versioned-element-type">
+        <xs:attribute name="elements" type="xsl:nametests" use="required"/>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+</xs:element>
+
+<xs:element name="processing-instruction" substitutionGroup="xsl:instruction">
+  <xs:complexType>
+    <xs:complexContent mixed="true">
+      <xs:extension base="xsl:sequence-constructor">
+        <xs:attribute name="name" type="xsl:avt" use="required"/>
+        <xs:attribute name="select" type="xsl:expression"/>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+</xs:element>
+
+<xs:element name="result-document" substitutionGroup="xsl:instruction">
+  <xs:complexType>
+    <xs:complexContent mixed="true">
+      <xs:extension base="xsl:sequence-constructor">
+        <xs:attribute name="format" type="xsl:avt"/>
+        <xs:attribute name="href" type="xsl:avt"/>
+        <xs:attribute name="type" type="xsl:QName"/>
+        <xs:attribute name="validation" type="xsl:validation-type"/>
+        <xs:attribute name="method" type="xsl:avt"/>
+        <xs:attribute name="byte-order-mark" type="xsl:avt"/>
+        <xs:attribute name="cdata-section-elements" type="xsl:avt"/>
+        <xs:attribute name="doctype-public" type="xsl:avt"/>
+        <xs:attribute name="doctype-system" type="xsl:avt"/>
+        <xs:attribute name="encoding" type="xsl:avt"/>
+        <xs:attribute name="escape-uri-attributes" type="xsl:avt"/>
+        <xs:attribute name="include-content-type" type="xsl:avt"/>
+        <xs:attribute name="indent" type="xsl:avt"/>
+        <xs:attribute name="media-type" type="xsl:avt"/>
+        <xs:attribute name="normalization-form" type="xsl:avt"/>
+        <xs:attribute name="omit-xml-declaration" type="xsl:avt"/>
+        <xs:attribute name="standalone" type="xsl:avt"/>
+        <xs:attribute name="undeclare-prefixes" type="xsl:avt"/>
+        <xs:attribute name="use-character-maps" type="xsl:QNames"/>
+        <xs:attribute name="output-version" type="xsl:avt"/>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+</xs:element>
+
+<xs:element name="sequence" substitutionGroup="xsl:instruction">
+  <xs:complexType>
+    <xs:complexContent mixed="true">
+      <xs:extension base="xsl:element-only-versioned-element-type">
+        <xs:sequence minOccurs="0" maxOccurs="unbounded">
+          <xs:element ref="xsl:fallback"/>
+        </xs:sequence>
+        <xs:attribute name="select" type="xsl:expression"/>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+</xs:element>
+
+<xs:element name="sort">
+  <xs:complexType>
+    <xs:complexContent mixed="true">
+      <xs:extension base="xsl:sequence-constructor">
+        <xs:attribute name="select" type="xsl:expression"/>  
+        <xs:attribute name="lang" type="xsl:avt"/>        
+        <xs:attribute name="data-type" type="xsl:avt" default="text"/>        
+        <xs:attribute name="order" type="xsl:avt" default="ascending"/>        
+        <xs:attribute name="case-order" type="xsl:avt"/>
+        <xs:attribute name="collation" type="xsl:avt"/>
+        <xs:attribute name="stable" type="xsl:yes-or-no"/>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+</xs:element>
+
+<xs:element name="strip-space" substitutionGroup="xsl:declaration">
+  <xs:complexType>
+    <xs:complexContent>
+      <xs:extension base="xsl:element-only-versioned-element-type">
+        <xs:attribute name="elements" type="xsl:nametests" use="required"/>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+</xs:element>
+
+<xs:element name="stylesheet" substitutionGroup="xsl:transform"/>
+
+<xs:element name="template" substitutionGroup="xsl:declaration">
+  <xs:complexType>
+    <xs:complexContent mixed="true">
+      <xs:extension base="xsl:versioned-element-type">
+        <xs:sequence>
+          <xs:element ref="xsl:param" minOccurs="0" maxOccurs="unbounded"/>
+          <xs:group ref="xsl:sequence-constructor-group" minOccurs="0" maxOccurs="unbounded"/>
+        </xs:sequence>
+        <xs:attribute name="match" type="xsl:pattern"/>
+        <xs:attribute name="priority" type="xs:decimal"/>
+        <xs:attribute name="mode" type="xsl:modes"/>
+        <xs:attribute name="name" type="xsl:QName"/>
+        <xs:attribute name="as" type="xsl:sequence-type" default="item()*"/>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+</xs:element>
+
+<xs:complexType name="text-element-base-type">
+  <xs:simpleContent>
+    <xs:restriction base="xsl:versioned-element-type">
+      <xs:simpleType>
+        <xs:restriction base="xs:string"/>
+      </xs:simpleType>
+      <xs:anyAttribute namespace="##other" processContents="lax"/>
+    </xs:restriction>
+  </xs:simpleContent>
+</xs:complexType>
+
+<xs:element name="text" substitutionGroup="xsl:instruction">
+  <xs:complexType>
+    <xs:simpleContent>
+      <xs:extension base="xsl:text-element-base-type">
+        <xs:attribute name="disable-output-escaping" type="xsl:yes-or-no" default="no"/>
+      </xs:extension>
+    </xs:simpleContent>
+  </xs:complexType>
+</xs:element>
+
+<xs:complexType name="transform-element-base-type">
+  <xs:complexContent>
+    <xs:restriction base="xsl:element-only-versioned-element-type">
+      <xs:attribute name="version" type="xs:decimal" use="required"/>
+      <xs:anyAttribute namespace="##other" processContents="lax"/>
+    </xs:restriction>
+  </xs:complexContent>
+</xs:complexType>
+
+<xs:element name="transform">
+  <xs:complexType>
+    <xs:complexContent>
+      <xs:extension base="xsl:transform-element-base-type">
+        <xs:sequence>
+          <xs:element ref="xsl:import" minOccurs="0" maxOccurs="unbounded"/>
+          <xs:choice minOccurs="0" maxOccurs="unbounded">
+            <xs:element ref="xsl:declaration"/>
+            <xs:element ref="xsl:variable"/>
+            <xs:element ref="xsl:param"/>              
+            <xs:any namespace="##other" processContents="lax"/> <!-- weaker than XSLT 1.0 -->
+          </xs:choice>
+        </xs:sequence>
+        <xs:attribute name="id" type="xs:ID"/>
+        <xs:attribute name="default-validation" type="xsl:validation-strip-or-preserve" default="strip"/>
+        <xs:attribute name="input-type-annotations" type="xsl:input-type-annotations-type" default="unspecified"/>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+</xs:element>
+
+<xs:element name="value-of" substitutionGroup="xsl:instruction">
+  <xs:complexType>
+    <xs:complexContent mixed="true">
+      <xs:extension base="xsl:sequence-constructor">
+        <xs:attribute name="select" type="xsl:expression"/>
+        <xs:attribute name="separator" type="xsl:avt"/>            
+        <xs:attribute name="disable-output-escaping" type="xsl:yes-or-no" default="no"/>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+</xs:element>
+
+<xs:element name="variable">
+  <xs:complexType>
+    <xs:complexContent mixed="true">
+      <xs:extension base="xsl:sequence-constructor">
+        <xs:attribute name="name" type="xsl:QName" use="required"/>
+        <xs:attribute name="select" type="xsl:expression" use="optional"/>
+        <xs:attribute name="as" type="xsl:sequence-type" use="optional"/>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+</xs:element>
+
+<xs:element name="when">
+  <xs:complexType>
+    <xs:complexContent mixed="true">
+      <xs:extension base="xsl:sequence-constructor">
+        <xs:attribute name="test" type="xsl:expression" use="required"/>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+</xs:element>
+
+<xs:element name="with-param">
+  <xs:complexType>
+    <xs:complexContent mixed="true">
+      <xs:extension base="xsl:sequence-constructor">
+        <xs:attribute name="name" type="xsl:QName" use="required"/>
+        <xs:attribute name="select" type="xsl:expression"/>
+        <xs:attribute name="as" type="xsl:sequence-type"/>
+        <xs:attribute name="tunnel" type="xsl:yes-or-no"/>   
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+</xs:element>
+
+<!-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
+<xs:annotation>
+  <xs:documentation>
+    PART C: definition of literal result elements
+    
+    There are three ways to define the literal result elements
+    permissible in a stylesheet.
+    
+    (a) do nothing. This allows any element to be used as a literal
+        result element, provided it is not in the XSLT namespace
+    
+    (b) declare all permitted literal result elements as members
+        of the xsl:literal-result-element substitution group
+        
+    (c) redefine the model group xsl:result-elements to accommodate
+        all permitted literal result elements.
+        
+    Literal result elements are allowed to take certain attributes
+    in the XSLT namespace. These are defined in the attribute group
+    literal-result-element-attributes, which can be included in the
+    definition of any literal result element.
+    
+  </xs:documentation>
+</xs:annotation>   
+<!-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
+
+<xs:element name="literal-result-element" abstract="true" type="xs:anyType"/>
+
+<xs:attributeGroup name="literal-result-element-attributes">
+  <xs:attribute name="default-collation" form="qualified" type="xsl:uri-list"/>
+  <xs:attribute name="extension-element-prefixes" form="qualified" type="xsl:prefixes"/>
+  <xs:attribute name="exclude-result-prefixes" form="qualified" type="xsl:prefixes"/>
+  <xs:attribute name="xpath-default-namespace" form="qualified" type="xs:anyURI"/>    
+  <xs:attribute name="inherit-namespaces" form="qualified" type="xsl:yes-or-no" default="yes"/>
+  <xs:attribute name="use-attribute-sets" form="qualified" type="xsl:QNames" default=""/>
+  <xs:attribute name="use-when" form="qualified" type="xsl:expression"/>
+  <xs:attribute name="version" form="qualified" type="xs:decimal"/>
+  <xs:attribute name="type" form="qualified" type="xsl:QName"/>
+  <xs:attribute name="validation" form="qualified" type="xsl:validation-type"/>
+</xs:attributeGroup>
+
+<xs:group name="result-elements">
+  <xs:choice>
+    <xs:element ref="xsl:literal-result-element"/>
+    <xs:any namespace="##other" processContents="lax"/>
+    <xs:any namespace="##local" processContents="lax"/>
+  </xs:choice>
+</xs:group>
+
+
+<!-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
+<xs:annotation>
+  <xs:documentation>
+    PART D: definitions of simple types used in stylesheet attributes 
+  </xs:documentation>
+</xs:annotation>   
+<!-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
+
+<xs:simpleType name="avt">
+  <xs:annotation>
+    <xs:documentation>
+      This type is used for all attributes that allow an attribute value template.
+      The general rules for the syntax of attribute value templates, and the specific
+      rules for each such attribute, are described in the XSLT 2.0 Recommendation.
+    </xs:documentation>
+  </xs:annotation>
+  <xs:restriction base="xs:string"/>
+</xs:simpleType>
+
+<xs:simpleType name="char">
+  <xs:annotation>
+    <xs:documentation>
+      A string containing exactly one character.
+    </xs:documentation>
+  </xs:annotation>
+  <xs:restriction base="xs:string">
+    <xs:length value="1"/>
+  </xs:restriction>
+</xs:simpleType>
+
+<xs:simpleType name="expression">
+  <xs:annotation>
+    <xs:documentation>
+      An XPath 2.0 expression.
+    </xs:documentation>
+  </xs:annotation>
+  <xs:restriction base="xs:token">
+    <xs:pattern value=".+"/>
+  </xs:restriction>
+</xs:simpleType>
+
+<xs:simpleType name="input-type-annotations-type">
+  <xs:annotation>
+    <xs:documentation>
+      Describes how type annotations in source documents are handled.
+    </xs:documentation>
+  </xs:annotation>
+  <xs:restriction base="xs:token">
+    <xs:enumeration value="preserve"/>
+    <xs:enumeration value="strip"/>   
+    <xs:enumeration value="unspecified"/>        
+  </xs:restriction>
+</xs:simpleType>
+
+<xs:simpleType name="level">
+  <xs:annotation>
+    <xs:documentation>
+      The level attribute of xsl:number: 
+      one of single, multiple, or any.
+    </xs:documentation>
+  </xs:annotation>
+  <xs:restriction base="xs:NCName">
+    <xs:enumeration value="single"/>
+    <xs:enumeration value="multiple"/>
+    <xs:enumeration value="any"/>
+  </xs:restriction>
+</xs:simpleType>
+
+<xs:simpleType name="mode">
+  <xs:annotation>
+    <xs:documentation>
+      The mode attribute of xsl:apply-templates: 
+      either a QName, or #current, or #default.
+    </xs:documentation>
+  </xs:annotation>
+  <xs:union memberTypes="xsl:QName">
+    <xs:simpleType>
+      <xs:restriction base="xs:token">
+        <xs:enumeration value="#default"/>
+        <xs:enumeration value="#current"/>
+      </xs:restriction>
+    </xs:simpleType>
+  </xs:union>
+</xs:simpleType>
+
+<xs:simpleType name="modes">
+  <xs:annotation>
+    <xs:documentation>
+      The mode attribute of xsl:template: 
+      either a list, each member being either a QName or #default;
+      or the value #all
+    </xs:documentation>
+  </xs:annotation>
+  <xs:union>
+    <xs:simpleType>
+      <xs:list>
+        <xs:simpleType>
+          <xs:union memberTypes="xsl:QName">
+            <xs:simpleType>
+              <xs:restriction base="xs:token">
+                <xs:enumeration value="#default"/>
+              </xs:restriction>
+            </xs:simpleType>
+          </xs:union>
+        </xs:simpleType>
+      </xs:list>
+    </xs:simpleType>
+    <xs:simpleType>
+      <xs:restriction base="xs:token">
+        <xs:enumeration value="#all"/>
+      </xs:restriction>
+    </xs:simpleType>
+  </xs:union>
+</xs:simpleType>
+
+<xs:simpleType name="nametests">
+  <xs:annotation>
+    <xs:documentation>
+      A list of NameTests, as defined in the XPath 2.0 Recommendation.
+      Each NameTest is either a QName, or "*", or "prefix:*", or "*:localname"
+    </xs:documentation>
+  </xs:annotation>
+  <xs:list>
+    <xs:simpleType>
+      <xs:union memberTypes="xsl:QName">
+        <xs:simpleType>
+          <xs:restriction base="xs:token">
+            <xs:enumeration value="*"/>
+          </xs:restriction>
+        </xs:simpleType>
+        <xs:simpleType>
+          <xs:restriction base="xs:token">
+            <xs:pattern value="\i\c*:\*"/>
+            <xs:pattern value="\*:\i\c*"/>            
+          </xs:restriction>
+        </xs:simpleType>
+      </xs:union>
+    </xs:simpleType>
+  </xs:list>
+</xs:simpleType>
+
+<xs:simpleType name="prefixes">
+  <xs:list itemType="xs:NCName"/>
+</xs:simpleType>
+
+<xs:simpleType name="prefix-list-or-all">
+  <xs:union memberTypes="xsl:prefix-list">
+    <xs:simpleType>
+      <xs:restriction base="xs:token">
+        <xs:enumeration value="#all"/>
+      </xs:restriction>
+    </xs:simpleType>
+  </xs:union>
+</xs:simpleType>
+      
+<xs:simpleType name="prefix-list">
+  <xs:list itemType="xsl:prefix-or-default"/>
+</xs:simpleType>
+
+<xs:simpleType name="method">
+  <xs:annotation>
+    <xs:documentation>
+      The method attribute of xsl:output:
+      Either one of the recognized names "xml", "xhtml", "html", "text",
+      or a QName that must include a prefix.
+    </xs:documentation>
+  </xs:annotation>
+  <xs:union>
+    <xs:simpleType>
+      <xs:restriction base="xs:NCName">
+        <xs:enumeration value="xml"/>
+        <xs:enumeration value="xhtml"/>
+        <xs:enumeration value="html"/>
+        <xs:enumeration value="text"/>
+      </xs:restriction>
+    </xs:simpleType>
+    <xs:simpleType>
+      <xs:restriction base="xsl:QName">
+        <xs:pattern value="\c*:\c*"/>
+      </xs:restriction>
+    </xs:simpleType>
+  </xs:union>
+</xs:simpleType>
+
+<xs:simpleType name="pattern">
+  <xs:annotation>
+    <xs:documentation>
+      A match pattern as defined in the XSLT 2.0 Recommendation.
+      The syntax for patterns is a restricted form of the syntax for
+      XPath 2.0 expressions.
+    </xs:documentation>
+  </xs:annotation>
+  <xs:restriction base="xsl:expression"/>
+</xs:simpleType>
+
+<xs:simpleType name="prefix-or-default">
+  <xs:annotation>
+    <xs:documentation>
+      Either a namespace prefix, or #default.
+      Used in the xsl:namespace-alias element.
+    </xs:documentation>
+  </xs:annotation>
+  <xs:union memberTypes="xs:NCName">
+    <xs:simpleType>
+      <xs:restriction base="xs:token">
+        <xs:enumeration value="#default"/>
+      </xs:restriction>
+    </xs:simpleType>
+  </xs:union>
+</xs:simpleType>
+
+<xs:simpleType name="QNames">
+  <xs:annotation>
+    <xs:documentation>
+      A list of QNames.
+      Used in the [xsl:]use-attribute-sets attribute of various elements,
+      and in the cdata-section-elements attribute of xsl:output
+    </xs:documentation>
+  </xs:annotation>
+  <xs:list itemType="xsl:QName"/>          
+</xs:simpleType>
+
+<xs:simpleType name="QName">
+  <xs:annotation>
+    <xs:documentation>
+      A QName.
+      This schema does not use the built-in type xs:QName, but rather defines its own
+      QName type. Although xs:QName would define the correct validation on these attributes,
+      a schema processor would expand unprefixed QNames incorrectly when constructing the PSVI,
+      because (as defined in XML Schema errata) an unprefixed xs:QName is assumed to be in
+      the default namespace, which is not the correct assumption for XSLT.
+      The data type is defined as a restriction of the built-in type Name, restricted
+      so that it can only contain one colon which must not be the first or last character.
+    </xs:documentation>
+  </xs:annotation>
+  <xs:restriction base="xs:Name">
+    <xs:pattern value="([^:]+:)?[^:]+"/>      
+  </xs:restriction>        
+</xs:simpleType>
+
+<xs:simpleType name="sequence-type">
+  <xs:annotation>
+    <xs:documentation>
+      The description of a data type, conforming to the
+      SequenceType production defined in the XPath 2.0 Recommendation
+    </xs:documentation>
+  </xs:annotation>
+  <xs:restriction base="xs:token">
+    <xs:pattern value=".+"/>      
+  </xs:restriction>
+</xs:simpleType>
+
+<xs:simpleType name="uri-list">
+  <xs:list itemType="xs:anyURI"/>
+</xs:simpleType>
+
+<xs:simpleType name="validation-strip-or-preserve">
+  <xs:annotation>
+    <xs:documentation>
+      Describes different ways of type-annotating an element or attribute.
+    </xs:documentation>
+  </xs:annotation>
+  <xs:restriction base="xsl:validation-type">
+    <xs:enumeration value="preserve"/>
+    <xs:enumeration value="strip"/>    
+  </xs:restriction>
+</xs:simpleType>
+
+<xs:simpleType name="validation-type">
+  <xs:annotation>
+    <xs:documentation>
+      Describes different ways of type-annotating an element or attribute.
+    </xs:documentation>
+  </xs:annotation>
+  <xs:restriction base="xs:token">
+    <xs:enumeration value="strict"/>
+    <xs:enumeration value="lax"/>
+    <xs:enumeration value="preserve"/>
+    <xs:enumeration value="strip"/>    
+  </xs:restriction>
+</xs:simpleType>
+
+<xs:simpleType name="yes-or-no">
+  <xs:annotation>
+    <xs:documentation>
+      One of the values "yes" or "no".
+    </xs:documentation>
+  </xs:annotation>
+  <xs:restriction base="xs:token">
+    <xs:enumeration value="yes"/>
+    <xs:enumeration value="no"/>
+  </xs:restriction>
+</xs:simpleType>
+
+<xs:simpleType name="yes-or-no-or-omit">
+  <xs:annotation>
+    <xs:documentation>
+      One of the values "yes" or "no" or "omit".
+    </xs:documentation>
+  </xs:annotation>
+  <xs:restriction base="xs:token">
+    <xs:enumeration value="yes"/>
+    <xs:enumeration value="no"/>
+    <xs:enumeration value="omit"/>
+  </xs:restriction>
+</xs:simpleType>
+
+</xs:schema>
\ No newline at end of file