A Schema for XForms

<?xml version="1.0"?>
<!-- edited with XML Spy v4.0 U beta 3 build Aug 24 2001 (http://www.xmlspy.com)
     by Micah Dubinko (W3C XForms Working Group) -->
<xsd:schema targetNamespace="http://www.w3.org/2001/08/xforms"
     xmlns:xlink="http://www.w3.org/1999/xlink"
     xmlns:xsd="http://www.w3.org/2001/XMLSchema"
     xmlns:xform="http://www.w3.org/2001/08/xforms"
     xmlns:xml="http://www.w3.org/XML/1998/namespace"
     elementFormDefault="qualified">
  <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>
  <!-- 
structural elements
-->
  <xsd:attributeGroup name="horzAttrs">
    <xsd:annotation>
      <xsd:documentation>Attributes for _every_ element in XForms</xsd:documentation>
    </xsd:annotation>
    <xsd:attribute name="id" type="xsd:ID"/>
    <xsd:anyAttribute namespace="##other"/>
  </xsd:attributeGroup>
  <xsd:element name="xform">
    <xsd:complexType>
      <xsd:all>
        <xsd:element ref="xform:submitInfo" minOccurs="0"/>
        <xsd:element ref="xform:privacy" minOccurs="0"/>
        <xsd:element ref="xform:model" minOccurs="0"/>
        <xsd:element ref="xform:instance" minOccurs="0"/>
        <xsd:element ref="xform:bindings" minOccurs="0"/>
        <xsd:element ref="xform:action" minOccurs="0"/>
        <xsd:element ref="xform:extension" minOccurs="0"/>
      </xsd:all>
      <xsd:attribute name="id" type="xsd:ID" use="optional"/>
      <xsd:attributeGroup ref="xform:linkingAttributes"/>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="model">
    <xsd:annotation>
      <xsd:documentation>Definition of model container.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType>
      <xsd:attribute name="id" type="xsd:ID" use="optional"/>
      <xsd:attributeGroup ref="xform:linkingAttributes"/>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="instance">
    <xsd:annotation>
      <xsd:documentation>Definition of instance container.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType>
      <xsd:sequence>
        <xsd:any namespace="##any" maxOccurs="unbounded"/>
      </xsd:sequence>
      <xsd:attribute name="id" type="xsd:ID" use="optional"/>
      <xsd:attributeGroup ref="xform:linkingAttributes"/>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="privacy">
    <xsd:annotation>
      <xsd:documentation>Definition of the privacy reference.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType>
      <xsd:attribute name="id" type="xsd:ID" use="optional"/>
      <xsd:attributeGroup ref="xform:linkingAttributes"/>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="bindings">
    <xsd:annotation>
      <xsd:documentation>Definition of the bindings container</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType>
      <xsd:sequence maxOccurs="unbounded">
        <xsd:element ref="xform:bind"/>
      </xsd:sequence>
      <xsd:attribute name="id" type="xsd:ID" use="optional"/>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="submitInfo">
    <xsd:annotation>
      <xsd:documentation>Definition of submit info container.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType>
      <xsd:attribute name="id" type="xsd:ID" use="optional"/>
      <xsd:attribute name="action" type="xsd:anyURI" use="optional"/>
      <xsd:attribute name="encType" type="xsd:string" use="optional"/>
      <xsd:attribute name="method" type="xsd:string" use="optional"/>
      <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="mediaType" type="xsd:string" use="optional"/>
      <xsd:attribute name="omitXMLDeclaration" type="xsd:boolean" use="optional"/>
      <xsd:attribute name="standalone" type="xsd:boolean" use="optional"/>
      <xsd:attribute name="CDATASectionElements" type="xform:QNameList" use="optional"/>
    </xsd:complexType>
  </xsd:element>
  <xsd:attributeGroup name="linkingAttributes">
    <xsd:attribute name="href" type="xsd:anyURI"/>
  </xsd:attributeGroup>
  <xsd:element name="bind">
    <xsd:annotation>
      <xsd:documentation>Definition of bind container.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType>
      <xsd:attribute name="id" type="xsd:ID" use="optional"/>
      <xsd:attribute name="ref" type="xsd:string" use="optional"/>
      <xsd:attribute name="type" type="xsd:QName" use="optional"/>
      <xsd:attribute name="readOnly" type="xsd:string" use="optional"/>
      <xsd:attribute name="required" type="xsd:string" use="optional"/>
      <xsd:attribute name="relevant" type="xsd:string" use="optional"/>
      <xsd:attribute name="isValid" type="xsd:string" use="optional"/>
      <xsd:attribute name="calculate" type="xsd:string" use="optional"/>
      <xsd:attribute name="maxOccurs" type="xform:numberOrUnbounded" use="optional"/>
      <xsd:attribute name="minOccurs" type="xsd:nonNegativeInteger" use="optional"/>
    </xsd:complexType>
  </xsd:element>
  <!--
User Interface form controls
-->
  <xsd:group name="formControls">
    <xsd:choice>
      <xsd:element ref="xform:input"/>
      <xsd:element ref="xform:textarea"/>
      <xsd:element ref="xform:secret"/>
      <xsd:element ref="xform:output"/>
      <xsd:element ref="xform:upload"/>
      <xsd:element ref="xform:selectOne"/>
      <xsd:element ref="xform:selectMany"/>
      <xsd:element ref="xform:selectBoolean"/>
      <xsd:element ref="xform:range"/>
      <xsd:element ref="xform:submit"/>
      <xsd:element ref="xform:button"/>
    </xsd:choice>
  </xsd:group>
  <xsd:attributeGroup name="bindFirstAttributes">
    <xsd:attribute name="xform" type="xsd:IDREF" use="optional"/>
    <xsd:attribute name="ref" type="xsd:string" use="optional"/>
    <xsd:attribute name="bind" type="xsd:IDREF" use="optional"/>
  </xsd:attributeGroup>
  <xsd:attributeGroup name="bindAllAttributes">
    <xsd:attribute name="xform" type="xsd:IDREF" use="optional"/>
    <xsd:attribute name="nodeset" type="xsd:string" use="optional"/>
    <xsd:attribute name="bind" type="xsd:IDREF" use="optional"/>
  </xsd:attributeGroup>
  <xsd:attributeGroup name="commonUIAttributes">
    <xsd:attribute ref="xml:lang" type="xsd:language" use="optional"/>
    <xsd:attribute name="class" type="xsd:string" use="optional"/>
    <xsd:attribute name="accessKey" type="xsd:string" use="optional"/>
    <xsd:attribute name="navIndex" type="xsd:nonNegativeInteger" use="optional"/>
  </xsd:attributeGroup>
  <xsd:element name="caption">
    <xsd:complexType mixed="true">
      <xsd:sequence>
        <xsd:any namespace="##any"/>
      </xsd:sequence>
      <xsd:attribute name="id" type="xsd:ID" use="optional"/>
      <xsd:attributeGroup ref="xform:commonUIAttributes"/>
      <xsd:attributeGroup ref="xform:linkingAttributes"/>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="hint">
    <xsd:complexType mixed="true">
      <xsd:sequence>
        <xsd:any namespace="##any"/>
      </xsd:sequence>
      <xsd:attribute name="id" type="xsd:ID" use="optional"/>
      <xsd:attributeGroup ref="xform:commonUIAttributes"/>
      <xsd:attributeGroup ref="xform:linkingAttributes"/>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="help">
    <xsd:complexType mixed="true">
      <xsd:sequence>
        <xsd:any namespace="##any"/>
      </xsd:sequence>
      <xsd:attribute name="id" type="xsd:ID" use="optional"/>
      <xsd:attributeGroup ref="xform:commonUIAttributes"/>
      <xsd:attributeGroup ref="xform:linkingAttributes"/>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="alert">
    <xsd:complexType mixed="false">
      <xsd:group ref="xform:commonUIChildren"/>
      <xsd:attribute name="id" type="xsd:ID" use="optional"/>
      <xsd:attributeGroup ref="xform:commonUIAttributes"/>
      <xsd:attributeGroup ref="xform:linkingAttributes"/>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="action">
    <xsd:complexType>
      <xsd:sequence maxOccurs="unbounded">
        <xsd:group ref="xform:actionGroup"/>
      </xsd:sequence>
      <xsd:attribute name="id" type="xsd:ID" use="optional"/>
      <xsd:attribute name="event" type="xsd:NCName" use="optional"/>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="extension">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:any namespace="##other"/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
  <xsd:group name="choiceItemGroup">
    <xsd:choice>
      <xsd:element ref="xform:choices"/>
      <xsd:element ref="xform:item"/>
      <xsd:element ref="xform:itemref"/>
    </xsd:choice>
  </xsd:group>
  <xsd:element name="choices">
    <xsd:complexType>
      <xsd:choice maxOccurs="unbounded">
        <xsd:group ref="xform:choiceItemGroup"/>
      </xsd:choice>
      <xsd:attribute name="id" type="xsd:ID"/>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="item">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:group ref="xform:commonUIChildren"/>
      </xsd:sequence>
      <xsd:attribute name="id" type="xsd:ID"/>
      <xsd:attribute name="value" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="itemref">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:group ref="xform:commonUIChildren"/>
      </xsd:sequence>
      <xsd:attribute name="id" type="xsd:ID"/>
      <xsd:attribute name="ref" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  <xsd:group name="commonUIChildren">
    <xsd:all>
      <xsd:element ref="xform:caption"/>
      <xsd:element ref="xform:help" minOccurs="0"/>
      <xsd:element ref="xform:hint" minOccurs="0"/>
      <xsd:element ref="xform:alert" minOccurs="0"/>
      <xsd:element ref="xform:action" minOccurs="0"/>
      <xsd:element ref="xform:extension" minOccurs="0"/>
    </xsd:all>
  </xsd:group>
  <xsd:element name="input">
    <xsd:complexType>
      <xsd:group ref="xform:commonUIChildren"/>
      <xsd:attribute name="id" type="xsd:ID" use="optional"/>
      <xsd:attributeGroup ref="xform:bindFirstAttributes"/>
      <xsd:attributeGroup ref="xform:commonUIAttributes"/>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="textarea">
    <xsd:complexType>
      <xsd:group ref="xform:commonUIChildren"/>
      <xsd:attribute name="id" type="xsd:ID" use="optional"/>
      <xsd:attributeGroup ref="xform:bindFirstAttributes"/>
      <xsd:attributeGroup ref="xform:commonUIAttributes"/>
      <xsd:attributeGroup ref="xform:linkingAttributes"/>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="secret">
    <xsd:complexType>
      <xsd:group ref="xform:commonUIChildren"/>
      <xsd:attribute name="id" type="xsd:ID"/>
      <xsd:attributeGroup ref="xform:bindFirstAttributes"/>
      <xsd:attributeGroup ref="xform:commonUIAttributes"/>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="upload">
    <xsd:complexType>
      <xsd:group ref="xform:commonUIChildren"/>
      <xsd:attribute name="id" type="xsd:ID" use="optional"/>
      <xsd:attributeGroup ref="xform:bindFirstAttributes"/>
      <xsd:attributeGroup ref="xform:commonUIAttributes"/>
      <xsd:attribute name="mediaType" type="xform:tokenList" use="optional"/>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="selectOne">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:group ref="xform:commonUIChildren"/>
        <xsd:element ref="xform:choices"/>
      </xsd:sequence>
      <xsd:attribute name="id" type="xsd:ID" use="optional"/>
      <xsd:attributeGroup ref="xform:bindFirstAttributes"/>
      <xsd:attributeGroup ref="xform:commonUIAttributes"/>
      <xsd:attribute name="selectUI" type="xform:selectUIType" use="optional"/>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="selectMany">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:group ref="xform:commonUIChildren"/>
        <xsd:choice>
          <xsd:element ref="xform:choices"/>
          <xsd:element ref="xform:repeat"/>
        </xsd:choice>
      </xsd:sequence>
      <xsd:attribute name="id" type="xsd:ID" use="optional"/>
      <xsd:attributeGroup ref="xform:bindFirstAttributes"/>
      <xsd:attributeGroup ref="xform:commonUIAttributes"/>
      <xsd:attribute name="selectUI" type="xform:selectUIType" use="optional"/>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="selectBoolean">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:group ref="xform:commonUIChildren"/>
        <xsd:element ref="xform:choices"/>
      </xsd:sequence>
      <xsd:attribute name="id" type="xsd:ID" use="optional"/>
      <xsd:attributeGroup ref="xform:bindFirstAttributes"/>
      <xsd:attributeGroup ref="xform:commonUIAttributes"/>
      <xsd:attribute name="selectUI" type="xform:selectUIType" use="optional"/>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="range">
    <xsd:complexType>
      <xsd:group ref="xform:commonUIChildren"/>
      <xsd:attribute name="id" type="xsd:ID" use="optional"/>
      <xsd:attributeGroup ref="xform:bindFirstAttributes"/>
      <xsd:attributeGroup ref="xform:commonUIAttributes"/>
      <xsd:attribute name="start" type="xsd:string" use="required"/>
      <xsd:attribute name="end" type="xsd:string" use="required"/>
      <xsd:attribute name="stepSize" type="xsd:string" use="optional"/>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="button">
    <xsd:complexType>
      <xsd:group ref="xform:commonUIChildren"/>
      <xsd:attribute name="id" type="xsd:ID" use="optional"/>
      <xsd:attributeGroup ref="xform:bindFirstAttributes"/>
      <xsd:attributeGroup ref="xform:commonUIAttributes"/>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="output">
    <xsd:complexType>
      <xsd:attribute name="id" type="xsd:ID" use="optional"/>
      <xsd:attribute name="ref" type="xsd:string" use="optional"/>
      <xsd:attribute name="xform" type="xsd:string" use="optional"/>
      <xsd:attribute name="format" type="xsd:string" use="optional"/>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="submit">
    <xsd:complexType>
      <xsd:group ref="xform:commonUIChildren"/>
      <xsd:attribute name="id" type="xsd:ID" use="optional"/>
      <xsd:attributeGroup ref="xform:bindAllAttributes"/>
    </xsd:complexType>
  </xsd:element>
  <!--
XForms Actions
-->
  <xsd:group name="actionGroup">
    <xsd:choice>
      <xsd:element ref="xform:dispatch"/>
      <xsd:element ref="xform:refresh"/>
      <xsd:element ref="xform:revalidate"/>
      <xsd:element ref="xform:recalculate"/>
      <xsd:element ref="xform:setFocus"/>
      <xsd:element ref="xform:setValue"/>
      <xsd:element ref="xform:submitInstance"/>
      <xsd:element ref="xform:resetInstance"/>
      <xsd:element ref="xform:insert"/>
      <xsd:element ref="xform:delete"/>
      <xsd:element ref="xform:scroll"/>
      <xsd:element ref="xform:setRepeatCursor"/>
      <xsd:element ref="xform:toggle"/>
      <xsd:element ref="xform:script"/>
    </xsd:choice>
  </xsd:group>
  <xsd:element name="dispatch">
    <xsd:complexType>
      <xsd:attribute name="id" type="xsd:ID" use="optional"/>
      <xsd:attribute name="event" type="xsd:NMTOKEN" use="required"/>
      <xsd:attribute name="target" type="xsd:IDREF" use="required"/>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="refresh">
    <xsd:complexType>
      <xsd:attribute name="id" type="xsd:ID" use="optional"/>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="recalculate">
    <xsd:complexType>
      <xsd:attribute name="id" type="xsd:ID" use="optional"/>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="revalidate">
    <xsd:complexType>
      <xsd:attribute name="id" type="xsd:ID" use="optional"/>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="setFocus">
    <xsd:complexType>
      <xsd:attribute name="id" type="xsd:ID" use="optional"/>
      <xsd:attribute name="idref" type="xsd:IDREF" use="optional"/>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="setValue">
    <xsd:complexType>
      <xsd:attribute name="id" type="xsd:ID" use="optional"/>
      <xsd:attributeGroup ref="xform:bindFirstAttributes"/>
      <xsd:attribute name="value" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="submitInstance">
    <xsd:complexType>
      <xsd:attribute name="id" type="xsd:ID" use="optional"/>
      <xsd:attributeGroup ref="xform:bindAllAttributes"/>
      <xsd:attribute name="withResponse" type="xsd:string" default="replace"/>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="resetInstance">
    <xsd:complexType>
      <xsd:attribute name="id" type="xsd:ID" use="optional"/>
      <xsd:attributeGroup ref="xform:bindAllAttributes"/>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="insert">
    <xsd:complexType>
      <xsd:attribute name="id" type="xsd:ID" use="optional"/>
      <xsd:attribute name="repeat" type="xsd:IDREF" use="required"/>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="delete">
    <xsd:complexType>
      <xsd:attribute name="id" type="xsd:ID" use="optional"/>
      <xsd:attribute name="repeat" type="xsd:IDREF" use="required"/>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="scroll">
    <xsd:complexType>
      <xsd:attribute name="id" type="xsd:ID" use="optional"/>
      <xsd:attribute name="repeat" type="xsd:IDREF" use="required"/>
      <xsd:attribute name="step" type="xsd:integer" use="optional"/>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="setRepeatCursor">
    <xsd:complexType>
      <xsd:attribute name="id" type="xsd:ID" use="optional"/>
      <xsd:attribute name="repeat" type="xsd:IDREF" use="required"/>
      <xsd:attribute name="cursor" type="xsd:string" use="required"/>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="toggle">
    <xsd:complexType>
      <xsd:attribute name="id" type="xsd:ID" use="optional"/>
      <xsd:attribute name="switch" type="xsd:IDREF" use="required"/>
      <xsd:attribute name="case" type="xsd:IDREF" use="required"/>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="script">
    <xsd:complexType>
      <xsd:attribute name="id" type="xsd:ID"/>
    </xsd:complexType>
  </xsd:element>
  <!--
Advanced User Interface
-->
  <xsd:element name="group">
    <xsd:complexType>
      <xsd:choice maxOccurs="unbounded">
        <xsd:group ref="xform:formControls"/>
        <xsd:element ref="xform:group"/>
        <xsd:element ref="xform:repeat"/>
        <xsd:element ref="xform:component"/>
        <xsd:element ref="xform:switch"/>
        <xsd:any namespace="##other"/>
      </xsd:choice>
      <xsd:attribute name="id" type="xsd:ID" use="optional"/>
      <xsd:attributeGroup ref="xform:bindFirstAttributes"/>
      <xsd:attributeGroup ref="xform:commonUIAttributes"/>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="switch">
    <xsd:complexType>
      <xsd:sequence maxOccurs="unbounded">
        <xsd:element ref="xform:case"/>
      </xsd:sequence>
      <xsd:attribute name="id" type="xsd:ID" use="required"/>
      <xsd:attributeGroup ref="xform:bindFirstAttributes"/>
      <xsd:attributeGroup ref="xform:commonUIAttributes"/>
      <xsd:attribute name="default" type="xsd:IDREF" use="optional"/>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="case">
    <xsd:complexType>
      <xsd:sequence maxOccurs="unbounded">
        <xsd:any namespace="##any"/>
      </xsd:sequence>
      <xsd:attribute name="id" type="xsd:ID" use="required"/>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="repeat">
    <xsd:complexType>
      <xsd:sequence maxOccurs="unbounded">
        <xsd:any namespace="##any"/>
      </xsd:sequence>
      <xsd:attribute name="id" type="xsd:ID" use="optional"/>
      <xsd:attributeGroup ref="xform:bindAllAttributes"/>
      <xsd:attributeGroup ref="xform:commonUIAttributes"/>
      <xsd:attribute name="startIndex" type="xsd:positiveInteger" use="optional"/>
      <xsd:attribute name="number" type="xsd:nonNegativeInteger" use="optional"/>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="defComponent">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="xform:param" maxOccurs="unbounded"/>
        <xsd:choice maxOccurs="unbounded">
          <xsd:group ref="xform:formControls"/>
          <xsd:element ref="xform:group"/>
          <xsd:element ref="xform:repeat"/>
          <xsd:element ref="xform:component"/>
          <xsd:element ref="xform:switch"/>
        </xsd:choice>
      </xsd:sequence>
      <xsd:attribute name="id" type="xsd:ID" use="optional"/>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="param">
    <xsd:complexType>
      <xsd:attribute name="id" type="xsd:ID" use="optional"/>
      <xsd:attribute name="name" type="xsd:NMTOKEN" use="required"/>
      <xsd:attribute name="value" type="xsd:string" use="optional"/>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="valueOf">
    <xsd:complexType>
      <xsd:attribute name="id" type="xsd:ID" use="optional"/>
      <xsd:attribute name="select" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="component">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="xform:param" maxOccurs="unbounded"/>
      </xsd:sequence>
      <xsd:attribute name="id" type="xsd:ID" use="optional"/>
      <xsd:attributeGroup ref="xform:bindFirstAttributes"/>
      <xsd:attributeGroup ref="xform:commonUIAttributes"/>
      <xsd:attribute name="component" type="xsd:IDREF" use="required"/>
    </xsd:complexType>
  </xsd:element>
  <!--
New simpleTypes
-->
  <xsd:simpleType name="QNameList">
    <xsd:list itemType="xsd:QName"/>
  </xsd:simpleType>
  <xsd:simpleType name="tokenList">
    <xsd:list itemType="xsd:token"/>
  </xsd:simpleType>
  <xsd:simpleType name="selectUIType">
    <xsd:restriction base="xsd:string">
      <xsd:enumeration value="radioGroup"/>
      <xsd:enumeration value="checkboxGroup"/>
      <xsd:enumeration value="pulldown"/>
      <xsd:enumeration value="listbox"/>
      <xsd:enumeration value="combo"/>
    </xsd:restriction>
  </xsd:simpleType>
  <xsd:simpleType name="numberOrUnbounded">
    <xsd:union memberTypes="xsd:nonNegativeInteger">
      <xsd:simpleType>
        <xsd:restriction base="xsd:string">
          <xsd:enumeration value="unbounded"/>
        </xsd:restriction>
      </xsd:simpleType>
    </xsd:union>
  </xsd:simpleType>
</xsd:schema>