<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema targetNamespace="http://www.w3.org/2002/xforms/cr"
            xmlns:xforms="http://www.w3.org/2002/xforms/cr"
            xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns:ev="http://www.w3.org/2001/xml-events"
            elementFormDefault="qualified">

  <xsd:annotation>
    <xsd:documentation>
      <![CDATA[
      $Id: xforms-1.xsd,v 1.3 2003/06/20 08:00:55 mimasa Exp $

      Changes:
      26-Aug MJD fixed typo where more than one child allowed on <instance>
      04-Sep MJD fixed typo on <send> : attribute 'submission' is required
      04-Sep MJD fixed typo on <rebuild><recalculate><revalidate><refresh>:
        'model' attribute is required
      06-Sep MJD clarified specific allowed values of @level on <message>
      06-Sep MJD removed UI Common attributes from <help><hint><alert><label>
      09-Sep MJD changed minOccurrs and maxOccurs to use XPath expressions,
        default values
      09-Sep MJD fixed typo: added linking attributes to <message>
      09-Sep MJD removed <extension> from content models of <mode> and UI
        common elements
      09-Sep MJD fixed typo: removed 'format' attribute
      17-Sep MJD fixed typo: <output> now uses the attribute group for
        binding attributes, instead of similarly named individual attrs
      17-Sep MJD added XPathExpression simpleType for internal use. This
        doesn't actually change anything, but makes
      the Schema a better documentation resource (instead of using
        xsd:string for everything)
      17-Sep MJD removed 'mediatype' attribute from <submission>, as it was
        unused
      17-Sep MJD fixed typo: only 'ref' and 'bind' attributes, not 'model'
        on <submission>
      17-Sep MJD added XML Events attributes to <model>
      17-Sep MJD in accordance with 3.2.1, removed all id attributes
      19-Sep MJD fixed typo: clarified that nested <action>s are permitted.
      19-Sep MJD factor UI.Inline into <group>. Renamed <group>s and
        <attributeGroup>s to match the prose names
      19-Sep MJD changed to agreed-upon namespace for CR
      25-Sep MJD fixed typo: added UI.Inlne to content model of <message>,
        enabled mixed content
      29-Sep MJD fixed typo: 'model' required on <reset>
      29-Sep MJD fixed typo: binding attributes allowed on <submit>
      29-Sep MJD fixed typo: explicit enumerated values for 'show' on <load>
      04-Oct MJD 'resource' attribute not required

      12-Nov 2002 : Published as CR

      13-Jan MJD added new attribute includenamespaceprefixes on <submission>
      13-Jan MJD added UI Common elements to content model of <group>
      03-Feb MJD synchoninzed duration types with 15 Nov Query Operators
        document
      31-Mar MJD added mediatype attribute on <submission>
      14-May MJD typo : "xsd:NCName"
      ]]>
    </xsd:documentation>
  </xsd:annotation>
  
  <xsd:import namespace="http://www.w3.org/XML/1998/namespace"
    schemaLocation="http://www.w3.org/2001/xml.xsd">
    <xsd:annotation>
      <xsd:documentation>Get access to xml:lang and friends</xsd:documentation>
    </xsd:annotation>
  </xsd:import>

  <xsd:import namespace="http://www.w3.org/2001/xml-events"
    schemaLocation="xml-events-attribs-1.xsd"/>

  <xsd:import namespace="http://www.w3.org/2001/XMLSchema"
    schemaLocation="http://www.w3.org/2001/XMLSchema.xsd"/>

  <xsd:annotation>
    <xsd:documentation>structural elements</xsd:documentation>
  </xsd:annotation>

  <xsd:attributeGroup name="Common.Attributes">
    <xsd:annotation>
      <xsd:documentation>
        Attributes for _every_ element in XForms
      </xsd:documentation>
    </xsd:annotation>
    <xsd:anyAttribute namespace="##other" processContents="lax"/>
  </xsd:attributeGroup>

  <xsd:element name="model">
    <xsd:complexType>
      <xsd:sequence minOccurs="0" maxOccurs="unbounded">
        <xsd:choice>
          <xsd:element ref="xforms:instance"/>
          <xsd:element ref="xsd:schema"/>
          <xsd:element ref="xforms:submission"/>
          <xsd:element ref="xforms:bind"/>
          <xsd:group ref="xforms:Action"/>
        </xsd:choice>
      </xsd:sequence>
      <xsd:attributeGroup ref="xforms:Common.Attributes"/>
      <xsd:attributeGroup ref="xforms:XML.Events"/>
      <xsd:attribute name="functions" type="xforms:QNameList" use="optional"/>
      <xsd:attribute name="schema" type="xforms:anyURIList" use="optional"/>
    </xsd:complexType>
  </xsd:element>

  <xsd:element name="instance">
    <xsd:annotation>
      <xsd:documentation>instance container.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType>
      <xsd:sequence>
        <xsd:any namespace="##any" processContents="skip" minOccurs="0"/>
      </xsd:sequence>
      <xsd:attributeGroup ref="xforms:Common.Attributes"/>
      <xsd:attributeGroup ref="xforms:Linking.Attributes"/>
    </xsd:complexType>
  </xsd:element>

  <xsd:element name="submission">
    <xsd:annotation>
      <xsd:documentation>submit info container.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType>
      <xsd:sequence minOccurs="0" maxOccurs="unbounded">
        <xsd:group ref="xforms:Action"/>
      </xsd:sequence>
      <xsd:attributeGroup ref="xforms:Common.Attributes"/>
      <xsd:attribute name="ref" type="xforms:XPathExpression"/>
      <xsd:attribute name="bind" type="xsd:IDREF"/>
      <xsd:attribute name="action" type="xsd:anyURI" use="optional"/>
      <xsd:attribute name="method" use="required">
        <xsd:simpleType>
          <xsd:union memberTypes="xforms:QNameButNotNCNAME">
            <xsd:simpleType>
              <xsd:restriction base="xsd:string">
                <xsd:enumeration value="post"/>
                <xsd:enumeration value="put"/>
                <xsd:enumeration value="get"/>
                <xsd:enumeration value="form-data-post"/>
                <xsd:enumeration value="urlencoded-post"/>
              </xsd:restriction>
            </xsd:simpleType>
          </xsd:union>
        </xsd:simpleType>
      </xsd:attribute>
      <xsd:attribute name="version" type="xsd:NMTOKEN" use="optional"/>
      <xsd:attribute name="indent" type="xsd:boolean" use="optional"/>
      <xsd:attribute name="encoding" type="xsd:string" use="optional"/>
      <xsd:attribute name="omit-xml-declaration" type="xsd:boolean"
        use="optional"/>
      <xsd:attribute name="standalone" type="xsd:boolean" use="optional"/>
      <xsd:attribute name="cdata-section-elements" type="xforms:QNameList"
        use="optional"/>
      <xsd:attribute name="replace" use="optional" default="all">
        <xsd:simpleType>
          <xsd:union memberTypes="xforms:QNameButNotNCNAME">
            <xsd:simpleType>
              <xsd:restriction base="xsd:string">
                <xsd:enumeration value="all"/>
                <xsd:enumeration value="instance"/>
                <xsd:enumeration value="none"/>
              </xsd:restriction>
            </xsd:simpleType>
          </xsd:union>
        </xsd:simpleType>
      </xsd:attribute>
      <xsd:attribute name="separator" use="optional" default=";">
        <xsd:simpleType>
          <xsd:restriction base="xsd:string">
            <xsd:enumeration value=";"/>
            <xsd:enumeration value="&amp;"/>
          </xsd:restriction>
        </xsd:simpleType>
      </xsd:attribute>
      <xsd:attribute name="includenamespaceprefixes" use="optional">
        <xsd:simpleType>
          <xsd:list>
            <xsd:simpleType>
              <xsd:union>
                <xsd:simpleType>
                  <xsd:restriction base='xsd:NCName'/>
                </xsd:simpleType>
                <xsd:simpleType>
                  <xsd:restriction base='xsd:string'>
                    <xsd:enumeration value='#default'/>
                  </xsd:restriction>
                </xsd:simpleType>
              </xsd:union>
            </xsd:simpleType>
          </xsd:list>
        </xsd:simpleType>
      </xsd:attribute>
      <xsd:attribute name="mediatype" type="xsd:string" use="optional"/>
    </xsd:complexType>
  </xsd:element>

  <xsd:attributeGroup name="Linking.Attributes">
    <xsd:attribute name="src" type="xsd:anyURI"/>
  </xsd:attributeGroup>

  <xsd:element name="bind">
    <xsd:annotation>
      <xsd:documentation>Definition of bind container.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType>
      <xsd:sequence minOccurs="0" maxOccurs="unbounded">
        <xsd:element ref="xforms:bind"/>
      </xsd:sequence>
      <xsd:attributeGroup ref="xforms:Common.Attributes"/>
      <xsd:attribute name="nodeset" type="xforms:XPathExpression"
        use="optional"/>
      <xsd:attribute name="type" type="xsd:QName" use="optional"/>
      <xsd:attribute name="readonly" type="xforms:XPathExpression"
        use="optional"/>
      <xsd:attribute name="required" type="xforms:XPathExpression"
        use="optional"/>
      <xsd:attribute name="relevant" type="xforms:XPathExpression"
        use="optional"/>
      <xsd:attribute name="constraint" type="xforms:XPathExpression"
        use="optional"/>
      <xsd:attribute name="calculate" type="xforms:XPathExpression"
        use="optional"/>
      <xsd:attribute name="maxOccurs" type="xforms:XPathExpression"
        use="optional" default="INF"/>
      <xsd:attribute name="minOccurs" type="xforms:XPathExpression"
        use="optional" default="0"/>
      <xsd:attribute name="p3ptype" type="xsd:string" use="optional"/>
    </xsd:complexType>
  </xsd:element>

  <xsd:annotation>
    <xsd:documentation>User Interface form controls</xsd:documentation>
  </xsd:annotation>

  <xsd:group name="Form.Controls">
    <xsd:choice>
      <xsd:element ref="xforms:input"/>
      <xsd:element ref="xforms:textarea"/>
      <xsd:element ref="xforms:secret"/>
      <xsd:element ref="xforms:output"/>
      <xsd:element ref="xforms:upload"/>
      <xsd:element ref="xforms:select1"/>
      <xsd:element ref="xforms:select"/>
      <xsd:element ref="xforms:range"/>
      <xsd:element ref="xforms:submit"/>
      <xsd:element ref="xforms:trigger"/>
    </xsd:choice>
  </xsd:group>

  <xsd:attributeGroup name="Single.Node.Binding.Attributes">
    <xsd:attribute name="model" type="xsd:IDREF" use="optional"/>
    <xsd:attribute name="ref" type="xforms:XPathExpression" use="optional"/>
    <xsd:attribute name="bind" type="xsd:IDREF" use="optional"/>
  </xsd:attributeGroup>

  <xsd:attributeGroup name="Nodeset.Binding.Attributes">
    <xsd:attribute name="model" type="xsd:IDREF" use="optional"/>
    <xsd:attribute name="nodeset" type="xforms:XPathExpression"
      use="optional"/>
    <xsd:attribute name="bind" type="xsd:IDREF" use="optional"/>
  </xsd:attributeGroup>

  <xsd:attributeGroup name="UI.Common.Attrs">
    <xsd:attribute name="accesskey" type="xsd:string" use="optional"/>
    <xsd:attribute name="navindex" type="xsd:nonNegativeInteger"
      use="optional"/>
    <xsd:attribute name="appearance" type="xforms:appearanceType"
      use="optional"/>
  </xsd:attributeGroup>

  <xsd:group name="UI.Inline">
    <xsd:sequence>
      <xsd:choice minOccurs="0">
        <xsd:element ref="xforms:output"/>
        <!-- containing document language to add additional allowed
             content here -->
      </xsd:choice>
    </xsd:sequence>
  </xsd:group>

  <xsd:element name="label">
    <xsd:complexType mixed="true">
      <xsd:group ref="xforms:UI.Inline"/>
      <xsd:attributeGroup ref="xforms:Common.Attributes"/>
      <xsd:attributeGroup ref="xforms:Single.Node.Binding.Attributes"/>
      <xsd:attributeGroup ref="xforms:Linking.Attributes"/>
    </xsd:complexType>
  </xsd:element>

  <xsd:element name="hint">
    <xsd:complexType mixed="true">
      <xsd:group ref="xforms:UI.Inline"/>
      <xsd:attributeGroup ref="xforms:Common.Attributes"/>
      <xsd:attributeGroup ref="xforms:Single.Node.Binding.Attributes"/>
      <xsd:attributeGroup ref="xforms:Linking.Attributes"/>
    </xsd:complexType>
  </xsd:element>

  <xsd:element name="help">
    <xsd:complexType mixed="true">
      <xsd:group ref="xforms:UI.Inline"/>
      <xsd:attributeGroup ref="xforms:Common.Attributes"/>
      <xsd:attributeGroup ref="xforms:Single.Node.Binding.Attributes"/>
      <xsd:attributeGroup ref="xforms:Linking.Attributes"/>
    </xsd:complexType>
  </xsd:element>

  <xsd:element name="alert">
    <xsd:complexType mixed="true">
      <xsd:group ref="xforms:UI.Inline"/>
      <xsd:attributeGroup ref="xforms:Common.Attributes"/>
      <xsd:attributeGroup ref="xforms:Single.Node.Binding.Attributes"/>
      <xsd:attributeGroup ref="xforms:Linking.Attributes"/>
    </xsd:complexType>
  </xsd:element>

  <xsd:element name="extension">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:any namespace="##other"/>
      </xsd:sequence>
      <xsd:attributeGroup ref="xforms:Common.Attributes"/>
    </xsd:complexType>
  </xsd:element>

  <xsd:element name="choices">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="xforms:label" minOccurs="0"/>
        <xsd:sequence maxOccurs="unbounded">
          <xsd:choice>
            <xsd:element ref="xforms:choices"/>
            <xsd:element ref="xforms:item"/>
            <xsd:element ref="xforms:itemset"/>
          </xsd:choice>
        </xsd:sequence>
      </xsd:sequence>
      <xsd:attributeGroup ref="xforms:Common.Attributes"/>
    </xsd:complexType>
  </xsd:element>

  <xsd:element name="value">
    <xsd:complexType mixed="true">
      <xsd:sequence>
        <xsd:any namespace="##any" processContents="skip"/>
      </xsd:sequence>
      <xsd:attributeGroup ref="xforms:Common.Attributes"/>
      <xsd:attributeGroup ref="xforms:Single.Node.Binding.Attributes"/>
    </xsd:complexType>
  </xsd:element>

  <xsd:element name="item">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="xforms:label"/>
        <xsd:element ref="xforms:value"/>
        <xsd:group ref="xforms:UI.Common" minOccurs="0" maxOccurs="unbounded"/>
      </xsd:sequence>
      <xsd:attributeGroup ref="xforms:Common.Attributes"/>
    </xsd:complexType>
  </xsd:element>

  <xsd:element name="itemset">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="xforms:label"/>
        <xsd:choice>
          <xsd:element ref="xforms:value"/>
          <xsd:element ref="xforms:copy"/>
        </xsd:choice>
        <xsd:group ref="xforms:UI.Common" minOccurs="0" maxOccurs="unbounded"/>
      </xsd:sequence>
      <xsd:attributeGroup ref="xforms:Common.Attributes"/>
      <xsd:attributeGroup ref="xforms:Nodeset.Binding.Attributes"/>
    </xsd:complexType>
  </xsd:element>

  <xsd:element name="copy">
    <xsd:complexType>
      <xsd:attributeGroup ref="xforms:Common.Attributes"/>
      <xsd:attributeGroup ref="xforms:Single.Node.Binding.Attributes"/>
    </xsd:complexType>
  </xsd:element>

  <xsd:element name="filename">
    <xsd:complexType>
      <xsd:attributeGroup ref="xforms:Common.Attributes"/>
      <xsd:attributeGroup ref="xforms:Single.Node.Binding.Attributes"/>
    </xsd:complexType>
  </xsd:element>

  <xsd:element name="mediatype">
    <xsd:complexType>
      <xsd:attributeGroup ref="xforms:Common.Attributes"/>
      <xsd:attributeGroup ref="xforms:Single.Node.Binding.Attributes"/>
    </xsd:complexType>
  </xsd:element>

  <xsd:group name="UI.Common">
    <xsd:sequence>
      <xsd:choice minOccurs="0" maxOccurs="unbounded">
        <xsd:element ref="xforms:help"/>
        <xsd:element ref="xforms:hint"/>
        <xsd:element ref="xforms:alert"/>
        <xsd:group ref="xforms:Action"/>
      </xsd:choice>
    </xsd:sequence>
  </xsd:group>

  <xsd:element name="input">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="xforms:label"/>
        <xsd:group ref="xforms:UI.Common" minOccurs="0" maxOccurs="unbounded"/>
      </xsd:sequence>
      <xsd:attributeGroup ref="xforms:Common.Attributes"/>
      <xsd:attributeGroup ref="xforms:Single.Node.Binding.Attributes"/>
      <xsd:attribute name="inputmode" type="xsd:string" use="optional"/>
      <xsd:attributeGroup ref="xforms:UI.Common.Attrs"/>
      <xsd:attribute name="incremental" type="xsd:boolean" use="optional"
        default="false"/>
    </xsd:complexType>
  </xsd:element>

  <xsd:element name="textarea">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="xforms:label"/>
        <xsd:group ref="xforms:UI.Common" minOccurs="0" maxOccurs="unbounded"/>
      </xsd:sequence>
      <xsd:attributeGroup ref="xforms:Common.Attributes"/>
      <xsd:attributeGroup ref="xforms:Single.Node.Binding.Attributes"/>
      <xsd:attribute name="inputmode" type="xsd:string" use="optional"/>
      <xsd:attributeGroup ref="xforms:UI.Common.Attrs"/>
      <xsd:attribute name="incremental" type="xsd:boolean" use="optional"
        default="false"/>
    </xsd:complexType>
  </xsd:element>

  <xsd:element name="secret">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="xforms:label"/>
        <xsd:group ref="xforms:UI.Common" minOccurs="0" maxOccurs="unbounded"/>
      </xsd:sequence>
      <xsd:attributeGroup ref="xforms:Common.Attributes"/>
      <xsd:attributeGroup ref="xforms:Single.Node.Binding.Attributes"/>
      <xsd:attribute name="inputmode" type="xsd:string" use="optional"/>
      <xsd:attributeGroup ref="xforms:UI.Common.Attrs"/>
      <xsd:attribute name="incremental" type="xsd:boolean" use="optional"
        default="false"/>
    </xsd:complexType>
  </xsd:element>

  <xsd:element name="upload">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="xforms:label"/>
        <xsd:element ref="xforms:filename" minOccurs="0"/>
        <xsd:element ref="xforms:mediatype" minOccurs="0"/>
        <xsd:group ref="xforms:UI.Common" minOccurs="0" maxOccurs="unbounded"/>
      </xsd:sequence>
      <xsd:attributeGroup ref="xforms:Common.Attributes"/>
      <xsd:attributeGroup ref="xforms:Single.Node.Binding.Attributes"/>
      <xsd:attributeGroup ref="xforms:UI.Common.Attrs"/>
      <xsd:attribute name="mediatype" type="xsd:string" use="optional"/>
      <xsd:attribute name="incremental" type="xsd:boolean" use="optional"
        default="false"/>
    </xsd:complexType>
  </xsd:element>

  <xsd:group name="List.UI.Common">
    <xsd:sequence>
      <xsd:choice>
        <xsd:element ref="xforms:item"/>
        <xsd:element ref="xforms:itemset"/>
        <xsd:element ref="xforms:choices"/>
      </xsd:choice>
    </xsd:sequence>
  </xsd:group>

  <xsd:element name="select1">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="xforms:label"/>
        <xsd:group ref="xforms:List.UI.Common" maxOccurs="unbounded"/>
        <xsd:group ref="xforms:UI.Common" minOccurs="0" maxOccurs="unbounded"/>
      </xsd:sequence>
      <xsd:attributeGroup ref="xforms:Common.Attributes"/>
      <xsd:attributeGroup ref="xforms:Single.Node.Binding.Attributes"/>
      <xsd:attributeGroup ref="xforms:UI.Common.Attrs"/>
      <xsd:attribute name="selection" use="optional" default="closed">
        <xsd:simpleType>
          <xsd:restriction base="xsd:string">
            <xsd:enumeration value="open"/>
            <xsd:enumeration value="closed"/>
          </xsd:restriction>
        </xsd:simpleType>
      </xsd:attribute>
      <xsd:attribute name="incremental" type="xsd:boolean" use="optional"
        default="true"/>
    </xsd:complexType>
  </xsd:element>

  <xsd:element name="select">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="xforms:label"/>
        <xsd:group ref="xforms:List.UI.Common" maxOccurs="unbounded"/>
        <xsd:group ref="xforms:UI.Common" minOccurs="0" maxOccurs="unbounded"/>
      </xsd:sequence>
      <xsd:attributeGroup ref="xforms:Common.Attributes"/>
      <xsd:attributeGroup ref="xforms:Single.Node.Binding.Attributes"/>
      <xsd:attributeGroup ref="xforms:UI.Common.Attrs"/>
      <xsd:attribute name="selection" use="optional" default="closed">
        <xsd:simpleType>
          <xsd:restriction base="xsd:string">
            <xsd:enumeration value="open"/>
            <xsd:enumeration value="closed"/>
          </xsd:restriction>
        </xsd:simpleType>
      </xsd:attribute>
      <xsd:attribute name="incremental" type="xsd:boolean" use="optional"
        default="true"/>
    </xsd:complexType>
  </xsd:element>

  <xsd:element name="range">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="xforms:label"/>
        <xsd:group ref="xforms:UI.Common" minOccurs="0" maxOccurs="unbounded"/>
      </xsd:sequence>
      <xsd:attributeGroup ref="xforms:Common.Attributes"/>
      <xsd:attributeGroup ref="xforms:Single.Node.Binding.Attributes"/>
      <xsd:attributeGroup ref="xforms:UI.Common.Attrs"/>
      <xsd:attribute name="start" type="xsd:string" use="optional"/>
      <xsd:attribute name="end" type="xsd:string" use="optional"/>
      <xsd:attribute name="step" type="xsd:string" use="optional"/>
      <xsd:attribute name="incremental" type="xsd:boolean" use="optional"
        default="false"/>
    </xsd:complexType>
  </xsd:element>

  <xsd:element name="trigger">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="xforms:label"/>
        <xsd:group ref="xforms:UI.Common" minOccurs="0" maxOccurs="unbounded"/>
      </xsd:sequence>
      <xsd:attributeGroup ref="xforms:Common.Attributes"/>
      <xsd:attributeGroup ref="xforms:Single.Node.Binding.Attributes"/>
      <xsd:attributeGroup ref="xforms:UI.Common.Attrs"/>
    </xsd:complexType>
  </xsd:element>

  <xsd:element name="output">
    <xsd:complexType>
      <xsd:sequence minOccurs="0">
        <xsd:element ref="xforms:label"/>
      </xsd:sequence>
      <xsd:attributeGroup ref="xforms:Common.Attributes"/>
      <xsd:attributeGroup ref="xforms:Single.Node.Binding.Attributes"/>
      <xsd:attribute name="appearance" type="xforms:appearanceType"
        use="optional"/>
      <xsd:attribute name="value" type="xforms:XPathExpression"
        use="optional"/>
    </xsd:complexType>
  </xsd:element>

  <xsd:element name="submit">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="xforms:label"/>
        <xsd:group ref="xforms:UI.Common" minOccurs="0" maxOccurs="unbounded"/>
      </xsd:sequence>
      <xsd:attributeGroup ref="xforms:Common.Attributes"/>
      <xsd:attribute name="submission" type="xsd:IDREF" use="required"/>
      <xsd:attributeGroup ref="xforms:Single.Node.Binding.Attributes"/>
      <xsd:attributeGroup ref="xforms:UI.Common.Attrs"/>
    </xsd:complexType>
  </xsd:element>

  <xsd:annotation>
    <xsd:documentation>XForms Actions</xsd:documentation>
  </xsd:annotation>

  <xsd:attributeGroup name="XML.Events">
    <xsd:attribute ref="ev:event"/>
    <xsd:attribute ref="ev:observer"/>
    <xsd:attribute ref="ev:target"/>
    <xsd:attribute ref="ev:handler"/>
    <xsd:attribute ref="ev:phase"/>
    <xsd:attribute ref="ev:propagate"/>
    <xsd:attribute ref="ev:defaultAction"/>
  </xsd:attributeGroup>

  <xsd:group name="Action">
    <xsd:sequence>
      <xsd:choice minOccurs="0" maxOccurs="unbounded">
        <xsd:element ref="xforms:action"/>
        <xsd:element ref="xforms:dispatch"/>
        <xsd:element ref="xforms:rebuild"/>
        <xsd:element ref="xforms:recalculate"/>
        <xsd:element ref="xforms:revalidate"/>
        <xsd:element ref="xforms:refresh"/>
        <xsd:element ref="xforms:setfocus"/>
        <xsd:element ref="xforms:load"/>
        <xsd:element ref="xforms:setvalue"/>
        <xsd:element ref="xforms:send"/>
        <xsd:element ref="xforms:reset"/>
        <xsd:element ref="xforms:insert"/>
        <xsd:element ref="xforms:delete"/>
        <xsd:element ref="xforms:setindex"/>
        <xsd:element ref="xforms:toggle"/>
        <xsd:element ref="xforms:message"/>
      </xsd:choice>
    </xsd:sequence>
  </xsd:group>

  <xsd:element name="action">
    <xsd:complexType>
      <xsd:sequence maxOccurs="unbounded">
        <xsd:group ref="xforms:Action"/>
      </xsd:sequence>
      <xsd:attributeGroup ref="xforms:Common.Attributes"/>
      <xsd:attributeGroup ref="xforms:XML.Events"/>
    </xsd:complexType>
  </xsd:element>

  <xsd:element name="dispatch">
    <xsd:complexType>
      <xsd:attributeGroup ref="xforms:Common.Attributes"/>
      <xsd:attribute name="name" type="xsd:NMTOKEN" use="required"/>
      <xsd:attribute name="target" type="xsd:IDREF" use="required"/>
      <xsd:attribute name="bubbles" type="xsd:boolean" use="optional"
        default="true"/>
      <xsd:attribute name="cancelable" type="xsd:boolean" use="optional"
        default="true"/>
      <xsd:attributeGroup ref="xforms:XML.Events"/>
    </xsd:complexType>
  </xsd:element>

  <xsd:element name="rebuild">
    <xsd:complexType>
      <xsd:attributeGroup ref="xforms:Common.Attributes"/>
      <xsd:attribute name="model" type="xsd:IDREF" use="required"/>
      <xsd:attributeGroup ref="xforms:XML.Events"/>
    </xsd:complexType>
  </xsd:element>

  <xsd:element name="revalidate">
    <xsd:complexType>
      <xsd:attributeGroup ref="xforms:Common.Attributes"/>
      <xsd:attribute name="model" type="xsd:IDREF" use="required"/>
      <xsd:attributeGroup ref="xforms:XML.Events"/>
    </xsd:complexType>
  </xsd:element>

  <xsd:element name="recalculate">
    <xsd:complexType>
      <xsd:attributeGroup ref="xforms:Common.Attributes"/>
      <xsd:attribute name="model" type="xsd:IDREF" use="required"/>
      <xsd:attributeGroup ref="xforms:XML.Events"/>
    </xsd:complexType>
  </xsd:element>

  <xsd:element name="refresh">
    <xsd:complexType>
      <xsd:attributeGroup ref="xforms:Common.Attributes"/>
      <xsd:attribute name="model" type="xsd:IDREF" use="required"/>
      <xsd:attributeGroup ref="xforms:XML.Events"/>
    </xsd:complexType>
  </xsd:element>

  <xsd:element name="setfocus">
    <xsd:complexType>
      <xsd:attributeGroup ref="xforms:Common.Attributes"/>
      <xsd:attribute name="control" type="xsd:IDREF" use="required"/>
      <xsd:attributeGroup ref="xforms:XML.Events"/>
    </xsd:complexType>
  </xsd:element>

  <xsd:element name="load">
    <xsd:complexType>
      <xsd:attributeGroup ref="xforms:Common.Attributes"/>
      <xsd:attributeGroup ref="xforms:Single.Node.Binding.Attributes"/>
      <xsd:attribute name="resource" type="xsd:anyURI"/>
      <xsd:attribute name="show" use="optional">
        <xsd:simpleType>
          <xsd:restriction base="xsd:string">
            <xsd:enumeration value="new"/>
            <xsd:enumeration value="replace"/>
          </xsd:restriction>
        </xsd:simpleType>
      </xsd:attribute>
      <xsd:attributeGroup ref="xforms:XML.Events"/>
    </xsd:complexType>
  </xsd:element>

  <xsd:element name="setvalue">
    <xsd:complexType>
      <xsd:simpleContent>
        <xsd:extension base="xsd:string">
          <xsd:attributeGroup ref="xforms:Common.Attributes"/>
          <xsd:attributeGroup ref="xforms:Single.Node.Binding.Attributes"/>
          <xsd:attribute name="value" type="xforms:XPathExpression"/>
          <xsd:attributeGroup ref="xforms:XML.Events"/>
        </xsd:extension>
      </xsd:simpleContent>
    </xsd:complexType>
  </xsd:element>

  <xsd:element name="send">
    <xsd:complexType>
      <xsd:attributeGroup ref="xforms:Common.Attributes"/>
      <xsd:attribute name="submission" type="xsd:IDREF" use="required"/>
      <xsd:attributeGroup ref="xforms:XML.Events"/>
    </xsd:complexType>
  </xsd:element>

  <xsd:element name="reset">
    <xsd:complexType>
      <xsd:attributeGroup ref="xforms:Common.Attributes"/>
      <xsd:attributeGroup ref="xforms:XML.Events"/>
      <xsd:attribute name="model" type="xsd:IDREF" use="required"/>
    </xsd:complexType>
  </xsd:element>

  <xsd:element name="insert">
    <xsd:complexType>
      <xsd:attributeGroup ref="xforms:Common.Attributes"/>
      <xsd:attributeGroup ref="xforms:Nodeset.Binding.Attributes"/>
      <xsd:attribute name="at" type="xforms:XPathExpression" use="required"/>
      <xsd:attribute name="position" use="required">
        <xsd:simpleType>
          <xsd:restriction base="xsd:string">
            <xsd:enumeration value="before"/>
            <xsd:enumeration value="after"/>
          </xsd:restriction>
        </xsd:simpleType>
      </xsd:attribute>
      <xsd:attributeGroup ref="xforms:XML.Events"/>
    </xsd:complexType>
  </xsd:element>

  <xsd:element name="delete">
    <xsd:complexType>
      <xsd:attributeGroup ref="xforms:Common.Attributes"/>
      <xsd:attributeGroup ref="xforms:Nodeset.Binding.Attributes"/>
      <xsd:attribute name="at" type="xforms:XPathExpression" use="required"/>
      <xsd:attributeGroup ref="xforms:XML.Events"/>
    </xsd:complexType>
  </xsd:element>

  <xsd:element name="setindex">
    <xsd:complexType>
      <xsd:attributeGroup ref="xforms:Common.Attributes"/>
      <xsd:attribute name="repeat" type="xsd:IDREF" use="required"/>
      <xsd:attribute name="index" type="xforms:XPathExpression"
        use="required"/>
      <xsd:attributeGroup ref="xforms:XML.Events"/>
    </xsd:complexType>
  </xsd:element>

  <xsd:element name="toggle">
    <xsd:complexType>
      <xsd:attributeGroup ref="xforms:Common.Attributes"/>
      <xsd:attribute name="case" type="xsd:IDREF" use="required"/>
      <xsd:attributeGroup ref="xforms:XML.Events"/>
    </xsd:complexType>
  </xsd:element>

  <xsd:element name="message">
    <xsd:complexType mixed="true">
      <xsd:group ref="xforms:UI.Inline"/>
      <xsd:attributeGroup ref="xforms:Common.Attributes"/>
      <xsd:attributeGroup ref="xforms:Single.Node.Binding.Attributes"/>
      <xsd:attribute name="level" use="required">
        <xsd:simpleType>
          <xsd:union memberTypes="xforms:QNameButNotNCNAME">
            <xsd:simpleType>
              <xsd:restriction base="xsd:string">
                <xsd:enumeration value="ephemeral"/>
                <xsd:enumeration value="modeless"/>
                <xsd:enumeration value="modal"/>
              </xsd:restriction>
            </xsd:simpleType>
          </xsd:union>
        </xsd:simpleType>
      </xsd:attribute>
      <xsd:attributeGroup ref="xforms:Linking.Attributes"/>
      <xsd:attributeGroup ref="xforms:XML.Events"/>
    </xsd:complexType>
  </xsd:element>

  <xsd:annotation>
    <xsd:documentation>Advanced User Interface</xsd:documentation>
  </xsd:annotation>

  <xsd:attribute name="repeat-nodeset" type="xforms:XPathExpression"/>

  <xsd:attribute name="repeat-model" type="xsd:IDREF"/>

  <xsd:attribute name="repeat-bind" type="xsd:IDREF"/>

  <xsd:attribute name="repeat-startindex" type="xsd:positiveInteger"/>

  <xsd:attribute name="repeat-number" type="xsd:nonNegativeInteger"/>

  <xsd:element name="repeat">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:sequence minOccurs="0" maxOccurs="unbounded">
          <xsd:choice>
            <xsd:group ref="xforms:Form.Controls"/>
            <xsd:element ref="xforms:group"/>
            <xsd:element ref="xforms:repeat"/>
            <!-- containing document language to add additional allowed
                 content here -->
          </xsd:choice>
        </xsd:sequence>
      </xsd:sequence>
      <xsd:attributeGroup ref="xforms:Common.Attributes"/>
      <xsd:attributeGroup ref="xforms:Nodeset.Binding.Attributes"/>
      <xsd:attributeGroup ref="xforms:UI.Common.Attrs"/>
      <xsd:attribute name="startindex" type="xsd:positiveInteger"/>
      <xsd:attribute name="number" type="xsd:nonNegativeInteger"/>
    </xsd:complexType>
  </xsd:element>

  <xsd:element name="group">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="xforms:label" minOccurs="0"/>
        <xsd:sequence minOccurs="0" maxOccurs="unbounded">
          <xsd:choice>
            <xsd:group ref="xforms:UI.Common"/>
            <xsd:group ref="xforms:Form.Controls"/>
            <xsd:element ref="xforms:group"/>
            <xsd:element ref="xforms:switch"/>
            <xsd:element ref="xforms:repeat"/>
            <!-- containing document language to add additional allowed
                 content here -->
          </xsd:choice>
        </xsd:sequence>
      </xsd:sequence>
      <xsd:attributeGroup ref="xforms:Common.Attributes"/>
      <xsd:attributeGroup ref="xforms:Single.Node.Binding.Attributes"/>
      <xsd:attributeGroup ref="xforms:UI.Common.Attrs"/>
    </xsd:complexType>
  </xsd:element>

  <xsd:element name="switch">
    <xsd:complexType>
      <xsd:sequence maxOccurs="unbounded">
        <xsd:element ref="xforms:case"/>
      </xsd:sequence>
      <xsd:attributeGroup ref="xforms:Common.Attributes"/>
      <xsd:attributeGroup ref="xforms:Single.Node.Binding.Attributes"/>
      <xsd:attributeGroup ref="xforms:UI.Common.Attrs"/>
    </xsd:complexType>
  </xsd:element>

  <xsd:element name="case">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="xforms:label" minOccurs="0"/>
        <xsd:sequence maxOccurs="unbounded">
          <xsd:choice>
            <xsd:group ref="xforms:Form.Controls"/>
            <xsd:element ref="xforms:group"/>
            <xsd:element ref="xforms:switch"/>
            <xsd:element ref="xforms:repeat"/>
            <!-- containing document language to add additional allowed
                 content here -->
          </xsd:choice>
        </xsd:sequence>
      </xsd:sequence>
      <xsd:attribute name="selected" type="xsd:boolean" use="optional"/>
      <xsd:attributeGroup ref="xforms:Common.Attributes"/>
    </xsd:complexType>
  </xsd:element>

  <xsd:annotation>
    <xsd:documentation>New simpleTypes</xsd:documentation>
  </xsd:annotation>

  <xsd:simpleType name="XPathExpression">
    <xsd:restriction base="xsd:string"/>
  </xsd:simpleType>

  <xsd:simpleType name="QNameList">
    <xsd:list itemType="xsd:QName"/>
  </xsd:simpleType>

  <xsd:simpleType name="anyURIList">
    <xsd:list itemType="xsd:anyURI"/>
  </xsd:simpleType>

  <xsd:simpleType name="QNameButNotNCNAME">
    <xsd:restriction base="xsd:QName">
      <xsd:pattern value="[^:]+:[^:]+"/>
    </xsd:restriction>
  </xsd:simpleType>

  <xsd:simpleType name="appearanceType">
    <xsd:union memberTypes="xforms:QNameButNotNCNAME">
      <xsd:simpleType>
        <xsd:restriction base="xsd:string">
          <xsd:enumeration value="full"/>
          <xsd:enumeration value="compact"/>
          <xsd:enumeration value="minimal"/>
        </xsd:restriction>
      </xsd:simpleType>
    </xsd:union>
  </xsd:simpleType>

  <xsd:simpleType name="listItem">
    <xsd:restriction base="xsd:string">
      <xsd:pattern value="\S+"/>
    </xsd:restriction>
  </xsd:simpleType>

  <xsd:simpleType name="listItems">
    <xsd:list itemType="xforms:listItem"/>
  </xsd:simpleType>

  <xsd:simpleType name="dayTimeDuration">
    <xsd:restriction base="xsd:duration">
      <xsd:pattern
        value="[\-]?P([0-9]+D(T([0-9]+(H([0-9]+(M([0-9]+(\.[0-9]*)?S
     	       |\.[0-9]+S)?|(\.[0-9]*)?S)|(\.[0-9]*)?S)?|M([0-9]+
     	       (\.[0-9]*)?S|\.[0-9]+S)?|(\.[0-9]*)?S)|\.[0-9]+S))?
     	       |T([0-9]+(H([0-9]+(M([0-9]+(\.[0-9]*)?S|\.[0-9]+S)?
     	       |(\.[0-9]*)?S)|(\.[0-9]*)?S)?|M([0-9]+(\.[0-9]*)?S|\.[0-9]+S)?
     	       |(\.[0-9]*)?S)|\.[0-9]+S))"/>
    </xsd:restriction>
  </xsd:simpleType>

  <xsd:simpleType name="yearMonthDuration">
    <xsd:restriction base="xsd:duration">
      <xsd:pattern value="[\-]?P[0-9]+(Y([0-9]+M)?|M)"/>
    </xsd:restriction>
  </xsd:simpleType>

</xsd:schema>
