<?xml version="1.0"?>
<xsd:schema targetNamespace="http://www.w3.org/2002/xforms" xmlns:ev="http://www.w3.org/2001/xml-events" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xforms="http://www.w3.org/2002/xforms" elementFormDefault="qualified">
	<!--
  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>: '' 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"
26-Jun MJD removed 'accesskey' and 'navindex' (over to host language definition)

01-Aug 2003 : Published as PR

15-Sep MJD final namespace
15-Sep MJD corrected content model of <value>
15-Sep MJD changed the name of the import for XML Events to highlight that only the attributes are used

1.0 Second Edition errata

16-Apr 2005 RAM - erratum E4 - optional @model
16-Apr 2005 RAM - erratum E22 - default value for @show
16-Apr 2005 RAM - erratum E54 - remove xforms:minOccurs and xforms:maxOccurs
26-Jun 2005 RAM - erratum E71 - allow an empty case element

16-Jun 2006 JMB - erratum E69 - instance attribute in submission; id in common attributes

15-Aug-2006 CFW - erratum E18 on 2nd ed. Added Action to content model for Case

09-Sep 2006 JMB - non-substantive: explicitly declared some use="optional" settings, 
                  substantive: erratum E18 on 2nd ed. Declared default false for selected attribute of case
                  substantive: erratum E21 on 2nd ed. Added multipart-post to enumeration of method attribute
23-Nov 2006 JMB - substantive: erratum E32 on 2nd ed. switch in repeat
17-Jul 2007 JMB - substantive: erratum E41 on 2nd ed. version attribute and associated simple types

XForms 1.1

25 Oct 2007 CFW, NvdB and JMB - Updated to XForms 1.1
21 Nov 2007 JMB: Fixed description of card-number datatype
08 Apr 2008 JMB: Fixed NCName (was NCNAME)
30 MAY 2008 JMB: Changed card-number to allow zero or more digits
22 JUN 2008 JMB: Renamed UI.Inline to UI.Content
07 SEP 2008 LLK: Added element header attribute combine. header now allows one name, multiple value.
09 MAR 2009 JMB: Changed @separator default to ampersand
19 MAY 2009 JMB: Added submission/@targetref, dispatch/@targetid and dispatch/targetid
10 JUN 2009 JMB: Moved switch/case from global space to being local to switch for clarity
-->
	<xsd:import namespace="http://www.w3.org/2001/xml-events" schemaLocation="http://www.w3.org/MarkUp/SCHEMA/xml-events-attribs-1.xsd"/>
	<xsd:import namespace="http://www.w3.org/2001/XMLSchema" schemaLocation="http://www.w3.org/2001/XMLSchema.xsd"/>

	<!--
structural elements
-->
	<xsd:attributeGroup name="Common.Attributes">
		<xsd:annotation>
			<xsd:documentation>Attributes for _every_ element in XForms</xsd:documentation>
		</xsd:annotation>
		<xsd:attribute name="id" type="xsd:ID" use="optional"/>
		<xsd:anyAttribute namespace="##other"/>
	</xsd:attributeGroup>

	<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="Linking.Attributes">
		<xsd:attribute name="src" type="xsd:anyURI"/>
	</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:attribute name="version" type="xforms:versionList" 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:attribute name="resource" type="xsd:anyURI" use="optional"/>
		</xsd:complexType>
	</xsd:element>

	<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="calculate" type="xforms:XPathExpression" use="optional"/>
			<xsd:attribute name="type" type="xsd:QName" use="optional"/>
			<xsd:attribute name="required" type="xforms:XPathExpression" use="optional"/>
			<xsd:attribute name="constraint" type="xforms:XPathExpression" use="optional"/>
			<xsd:attribute name="relevant" type="xforms:XPathExpression" use="optional"/>
			<xsd:attribute name="readonly" type="xforms:XPathExpression" use="optional"/>
			<xsd:attribute name="p3ptype" type="xsd:string" use="optional"/>
		</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>

	<!--
User Interface form controls
-->
	<xsd:group name="Core.Form.Controls">
		<xsd:choice>
			<xsd:element ref="xforms:input"/>
			<xsd:element ref="xforms:secret"/>
			<xsd:element ref="xforms:textarea"/>
			<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:group name="Container.Form.Controls">
		<xsd:choice>
			<xsd:element ref="xforms:group"/>
			<xsd:element ref="xforms:switch"/>
			<xsd:element ref="xforms:repeat"/>
		</xsd:choice>
	</xsd:group>

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

	<xsd:group name="UI.Content">
		<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: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="label">
		<xsd:complexType mixed="true">
			<xsd:group ref="xforms:UI.Content"/>
			<xsd:attributeGroup ref="xforms:Common.Attributes"/>
			<xsd:attributeGroup ref="xforms:Single.Node.Binding.Attributes"/>
		</xsd:complexType>
	</xsd:element>
	<xsd:element name="hint">
		<xsd:complexType mixed="true">
			<xsd:group ref="xforms:UI.Content"/>
			<xsd:attributeGroup ref="xforms:Common.Attributes"/>
			<xsd:attributeGroup ref="xforms:Single.Node.Binding.Attributes"/>
		</xsd:complexType>
	</xsd:element>
	<xsd:element name="help">
		<xsd:complexType mixed="true">
			<xsd:group ref="xforms:UI.Content"/>
			<xsd:attributeGroup ref="xforms:Common.Attributes"/>
			<xsd:attributeGroup ref="xforms:Single.Node.Binding.Attributes"/>
		</xsd:complexType>
	</xsd:element>
	<xsd:element name="alert">
		<xsd:complexType mixed="true">
			<xsd:group ref="xforms:UI.Content"/>
			<xsd:attributeGroup ref="xforms:Common.Attributes"/>
			<xsd:attributeGroup ref="xforms:Single.Node.Binding.Attributes"/>
		</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="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="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>
			<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" use="optional"/>
				</xsd:extension>
			</xsd:simpleContent>
		</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:complexType name="filename">
		<xsd:attributeGroup ref="xforms:Common.Attributes"/>
		<xsd:attributeGroup ref="xforms:Single.Node.Binding.Attributes"/>
	</xsd:complexType>
	<xsd:complexType name="mediatype">
		<xsd:attributeGroup ref="xforms:Common.Attributes"/>
		<xsd:attributeGroup ref="xforms:Single.Node.Binding.Attributes"/>
	</xsd:complexType>
	<xsd:complexType name="mediatypeWithValue">
		<xsd:complexContent>
			<xsd:extension base="xforms:mediatype">
        			<xsd:attribute name="value" type="xforms:XPathExpression" use="optional"/>
			</xsd:extension>
		</xsd:complexContent>
	</xsd:complexType>

	<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="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="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="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:element name="filename" type="xforms:filename" minOccurs="0"/>
				<xsd:element name="mediatype" type="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: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:element ref="xforms:mediatype" minOccurs="0"/>
				-->
				<xsd:element name="mediatype" type="xforms:mediatypeWithValue" 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:attribute name="appearance" type="xforms:appearanceType" use="optional"/>
			<xsd:attribute name="value" type="xforms:XPathExpression" use="optional"/>
			<xsd:attribute name="mediatype" type="xsd:string" 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="optional"/>
			<xsd:attributeGroup ref="xforms:Single.Node.Binding.Attributes"/>
			<xsd:attributeGroup ref="xforms:UI.Common.Attrs"/>
		</xsd:complexType>
	</xsd:element>

	<!--
Advanced User Interface
-->
	<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:Core.Form.Controls"/>
						<xsd:group ref="xforms:Container.Form.Controls"/>
						<xsd:group ref="xforms:Action"/>
						<!-- 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:Core.Form.Controls"/>
						<xsd:group ref="xforms:Container.Form.Controls"/>
						<xsd:group ref="xforms:UI.Common"/>
						<!-- 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 name="case">
					<xsd:complexType>
						<xsd:sequence>
							<xsd:element ref="xforms:label" minOccurs="0"/>
							<xsd:sequence minOccurs="0" maxOccurs="unbounded">
								<xsd:choice>
									<xsd:group ref="xforms:Core.Form.Controls"/>
									<xsd:group ref="xforms:Container.Form.Controls"/>
									<xsd:group ref="xforms:Action"/>
									<!-- containing document language to add additional allowed content here -->
								</xsd:choice>
							</xsd:sequence>
						</xsd:sequence>
						<xsd:attribute name="selected" type="xsd:boolean" use="optional" default="false"/>
						<xsd:attributeGroup ref="xforms:Common.Attributes"/>
					</xsd:complexType>
				</xsd:element>
			</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>

	<!--
XForms Actions
-->

	<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:attributeGroup name="Common.Action.Attributes">
		<xsd:annotation>
			<xsd:documentation>Attributes for _every_ action in XForms</xsd:documentation>
		</xsd:annotation>
		<xsd:attribute name="if" type="xforms:XPathExpression" use="optional"/>
		<xsd:attribute name="while" type="xforms:XPathExpression" use="optional"/>
	</xsd:attributeGroup>

	<xsd:group name="Action">
		<xsd:sequence>
			<xsd:choice minOccurs="0" maxOccurs="unbounded">
				<xsd:element ref="xforms:action"/>
				<xsd:element ref="xforms:setvalue"/>
				<xsd:element ref="xforms:insert"/>
				<xsd:element ref="xforms:delete"/>
				<xsd:element ref="xforms:setindex"/>
				<xsd:element ref="xforms:toggle"/>
				<xsd:element ref="xforms:setfocus"/>
				<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:reset"/>
				<xsd:element ref="xforms:load"/>
				<xsd:element ref="xforms:send"/>
				<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:attributeGroup ref="xforms:Common.Action.Attributes"/>
		</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" use="optional"/>
					<xsd:attributeGroup ref="xforms:XML.Events"/>
					<xsd:attributeGroup ref="xforms:Common.Action.Attributes"/>
				</xsd:extension>
			</xsd:simpleContent>
		</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="optional"/>
			<xsd:attribute name="context" type="xforms:XPathExpression" use="optional"/>
			<xsd:attribute name="origin" type="xforms:XPathExpression" use="optional"/>
			<xsd:attribute name="position" use="optional">
				<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:attributeGroup ref="xforms:Common.Action.Attributes"/>
		</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="optional"/>
			<xsd:attribute name="context" type="xforms:XPathExpression" use="optional"/>
			<xsd:attributeGroup ref="xforms:XML.Events"/>
			<xsd:attributeGroup ref="xforms:Common.Action.Attributes"/>
		</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:attributeGroup ref="xforms:Common.Action.Attributes"/>
		</xsd:complexType>
	</xsd:element>
	<xsd:element name="toggle">
		<xsd:complexType>
			<xsd:sequence minOccurs="0" maxOccurs="1">
				<xsd:element name="case" type="xforms:ValueTemplate"/>
			</xsd:sequence>
			<xsd:attributeGroup ref="xforms:Common.Attributes"/>
			<xsd:attribute name="case" type="xsd:IDREF" use="optional"/>
			<xsd:attributeGroup ref="xforms:XML.Events"/>
			<xsd:attributeGroup ref="xforms:Common.Action.Attributes"/>
		</xsd:complexType>
	</xsd:element>
	<xsd:element name="setfocus">
		<xsd:complexType>
			<xsd:sequence minOccurs="0" maxOccurs="1">
				<xsd:element name="control" type="xforms:ValueTemplate"/>
			</xsd:sequence>			
			<xsd:attributeGroup ref="xforms:Common.Attributes"/>
			<xsd:attribute name="control" type="xsd:IDREF" use="optional"/>
			<xsd:attributeGroup ref="xforms:XML.Events"/>
			<xsd:attributeGroup ref="xforms:Common.Action.Attributes"/>
		</xsd:complexType>
	</xsd:element>
	<xsd:element name="dispatch">
		<xsd:complexType>
		        <!-- Need to be able to say only zero or one of each child, but order independent.
		             This gets as close as possible with schema. -->
			<xsd:sequence minOccurs="0" maxOccurs="3">
			    <xsd:choice>
				<xsd:element name="name" type="xforms:ValueTemplate"/>
				<xsd:element name="targetid" type="xforms:ValueTemplate"/>
				<xsd:element name="target" type="xforms:ValueTemplate"/>
				<xsd:element name="delay" type="xforms:ValueTemplate"/>
		            </xsd:choice>
			</xsd:sequence>				
			<xsd:attributeGroup ref="xforms:Common.Attributes"/>
			<xsd:attribute name="name" type="xsd:NMTOKEN" use="optional"/>
			<xsd:attribute name="targetid" type="xsd:IDREF" use="optional"/>
			<xsd:attribute name="target" type="xsd:IDREF" use="optional"/>
			<xsd:attribute name="delay" type="xsd:string" use="optional" default=""/>
			<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:attributeGroup ref="xforms:Common.Action.Attributes"/>
		</xsd:complexType>
	</xsd:element>
	<xsd:element name="rebuild">
		<xsd:complexType>
			<xsd:attributeGroup ref="xforms:Common.Attributes"/>
			<xsd:attribute name="model" type="xsd:IDREF" use="optional"/>
			<xsd:attributeGroup ref="xforms:XML.Events"/>
			<xsd:attributeGroup ref="xforms:Common.Action.Attributes"/>
		</xsd:complexType>
	</xsd:element>
	<xsd:element name="recalculate">
		<xsd:complexType>
			<xsd:attributeGroup ref="xforms:Common.Attributes"/>
			<xsd:attribute name="model" type="xsd:IDREF" use="optional"/>
			<xsd:attributeGroup ref="xforms:XML.Events"/>
			<xsd:attributeGroup ref="xforms:Common.Action.Attributes"/>
		</xsd:complexType>
	</xsd:element>
	<xsd:element name="revalidate">
		<xsd:complexType>
			<xsd:attributeGroup ref="xforms:Common.Attributes"/>
			<xsd:attribute name="model" type="xsd:IDREF" use="optional"/>
			<xsd:attributeGroup ref="xforms:XML.Events"/>
			<xsd:attributeGroup ref="xforms:Common.Action.Attributes"/>
		</xsd:complexType>
	</xsd:element>
	<xsd:element name="refresh">
		<xsd:complexType>
			<xsd:attributeGroup ref="xforms:Common.Attributes"/>
			<xsd:attribute name="model" type="xsd:IDREF" use="optional"/>
			<xsd:attributeGroup ref="xforms:XML.Events"/>
			<xsd:attributeGroup ref="xforms:Common.Action.Attributes"/>
		</xsd:complexType>
	</xsd:element>
	<xsd:element name="reset">
		<xsd:complexType>
			<xsd:attributeGroup ref="xforms:Common.Attributes"/>
			<xsd:attributeGroup ref="xforms:XML.Events"/>
			<xsd:attributeGroup ref="xforms:Common.Action.Attributes"/>
			<xsd:attribute name="model" type="xsd:IDREF" use="optional"/>
		</xsd:complexType>
	</xsd:element>
	<xsd:element name="load">
		<xsd:complexType>
			<xsd:sequence minOccurs="0" maxOccurs="1">
				<xsd:element name="resource" type="xforms:ValueTemplate"/>
			</xsd:sequence>			
			<xsd:attributeGroup ref="xforms:Common.Attributes"/>
			<xsd:attributeGroup ref="xforms:Single.Node.Binding.Attributes"/>
			<xsd:attribute name="resource" type="xsd:anyURI" use="optional"/>
			<xsd:attribute name="show" use="optional" default="replace">
				<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:attributeGroup ref="xforms:Common.Action.Attributes"/>
		</xsd:complexType>
	</xsd:element>
	<xsd:element name="send">
		<xsd:complexType>
			<xsd:attributeGroup ref="xforms:Common.Attributes"/>
			<xsd:attribute name="submission" type="xsd:IDREF" use="optional"/>
			<xsd:attributeGroup ref="xforms:XML.Events"/>
			<xsd:attributeGroup ref="xforms:Common.Action.Attributes"/>
		</xsd:complexType>
	</xsd:element>
	<xsd:element name="message">
		<xsd:complexType mixed="true">
			<xsd:group ref="xforms:UI.Content"/>
			<xsd:attributeGroup ref="xforms:Common.Attributes"/>
			<xsd:attributeGroup ref="xforms:Single.Node.Binding.Attributes"/>
			<xsd:attribute name="level" use="optional" default="modal">
				<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:XML.Events"/>
			<xsd:attributeGroup ref="xforms:Common.Action.Attributes"/>
		</xsd:complexType>
	</xsd:element>

	<xsd:element name="submission">
		<xsd:annotation>
			<xsd:documentation>submit info container.</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType>
			<xsd:sequence>
			        <!-- There should only be zero or one resource, zero or one method, and zero or more header 
			             We can't say exactly this, but we get as close as possible -->
				<xsd:choice minOccurs="0" maxOccurs="unbounded">
        				<xsd:element name="resource" type="xforms:ValueTemplate"/>
        				<xsd:element name="method" type="xforms:ValueTemplate"/>
        				<xsd:element name="header">
        					<xsd:complexType>
        					        <!-- Both name and value+ are required, but order independent -->
        						<xsd:choice>
        						     <xsd:sequence>
        							     <xsd:element name="name" type="xforms:ValueTemplate" />
        							     <xsd:element name="value" type="xforms:ValueTemplate"
                                        minOccurs="1" maxOccurs="unbounded" />
        						     </xsd:sequence>
        						     <xsd:sequence>
        							     <xsd:element name="value" type="xforms:ValueTemplate"
                                        minOccurs="1" maxOccurs="unbounded" />
        							     <xsd:element name="name" type="xforms:ValueTemplate" />
        						     </xsd:sequence>
        						</xsd:choice>
                    <xsd:attribute name="combine" use="optional" default="append">
                            <xsd:simpleType>
                                    <xsd:restriction base="xsd:string">
                                            <xsd:enumeration value="append"/>
                                            <xsd:enumeration value="prepend"/>
                                            <xsd:enumeration value="replace"/>
                                    </xsd:restriction>
                            </xsd:simpleType>
                    </xsd:attribute>
        					</xsd:complexType>
        				</xsd:element>
				</xsd:choice>
				<!-- As is the case everywhere else, action handlers are last -->
				<xsd:group ref="xforms:Action"/>
			</xsd:sequence>
			<xsd:attributeGroup ref="xforms:Common.Attributes"/>
			
			<xsd:attribute name="ref" type="xforms:XPathExpression" use="optional"/>
			<xsd:attribute name="bind" type="xsd:IDREF" use="optional"/>
			
			<!-- Either the resource attribute, action attribute, or resource child element is required -->
			<xsd:attribute name="resource" type="xsd:anyURI" use="optional"/>
			<xsd:attribute name="action" type="xsd:anyURI" use="optional"/>
			
			<xsd:attribute name="mode" use="optional" default="asynchronous">
				<xsd:simpleType>
					<xsd:restriction base="xsd:string">
						<xsd:enumeration value="asynchronous"/>
						<xsd:enumeration value="synchronous"/>
					</xsd:restriction>
				</xsd:simpleType>
			</xsd:attribute>

			<!-- Either the method attribute or the method child element is required -->
			<xsd:attribute name="method" use="optional">
				<xsd:simpleType>
					<xsd:union memberTypes="xforms:QNameButNotNCNAME xsd:NCName">
						<xsd:simpleType>
							<xsd:restriction base="xsd:string">
								<xsd:enumeration value="post"/>
								<xsd:enumeration value="put"/>
								<xsd:enumeration value="get"/>
								<xsd:enumeration value="delete"/>
								<xsd:enumeration value="multipart-post"/>
								<xsd:enumeration value="form-data-post"/>
								<xsd:enumeration value="urlencoded-post"/>
							</xsd:restriction>
						</xsd:simpleType>
					</xsd:union>
				</xsd:simpleType>
			</xsd:attribute>

                        <!-- The defaults for these are false if serialization is 'none' and true otherwise -->
			<xsd:attribute name="validate" type="xsd:boolean" use="optional"/>
			<xsd:attribute name="relevant" type="xsd:boolean" use="optional"/>
			
			<!-- The default is based on the selected method, e.g. application/xml for the post method -->
			<xsd:attribute name="serialization" type="xsd:string" use="optional"/>
			
			<xsd:attribute name="version" type="xsd:NMTOKEN" use="optional" default="1.0"/>
			<xsd:attribute name="indent" type="xsd:boolean" use="optional" default="false"/>
			<xsd:attribute name="mediatype" type="xsd:string" use="optional" default="application/xml"/>
			<xsd:attribute name="encoding" type="xsd:string" use="optional" default="UTF-8"/>
			
			<xsd:attribute name="omit-xml-declaration" type="xsd:boolean" use="optional" default="false"/>
			<!-- This is optional with no default because omitting the attribute behaves differently 
			     than including it with any value -->
			<xsd:attribute name="standalone" type="xsd:boolean" use="optional"/>
			
			<xsd:attribute name="cdata-section-elements" type="xforms:QNameList" use="optional" default=""/>
			
			<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="text"/>
								<xsd:enumeration value="none"/>
							</xsd:restriction>
						</xsd:simpleType>
					</xsd:union>
				</xsd:simpleType>
			</xsd:attribute>
			
			<!-- Default is not specified because the default is to replace the instance being submitted -->
			<xsd:attribute name="instance" type="xsd:IDREF" use="optional"/>
			
			<xsd:attribute name="separator" use="optional" default="&amp;">
				<xsd:simpleType>
					<xsd:restriction base="xsd:string">
						<xsd:enumeration value="&amp;"/>
						<xsd:enumeration value=";"/>
					</xsd:restriction>
				</xsd:simpleType>
			</xsd:attribute>
			
			<!-- Default is not specified because the defalut is to replace the whole instance indicated 
			     by the instance attribute -->
			<xsd:attribute name="targetref" type="xforms:XPathExpression" use="optional"/>
			<xsd:attribute name="target" type="xforms:XPathExpression" use="optional"/>
			
			<!-- Default not specified because omitting the attribute behaves differently than
			     including it with any value -->
			<xsd:attribute name="includenamespaceprefixes" use="optional">
				<xsd:simpleType>
					<xsd:list>
						<xsd:simpleType>
							<xsd:union memberTypes="xsd:NCName">
								<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:complexType>
	</xsd:element>

        <!-- 
Internal helper types 
-->

	<xsd:simpleType name="versionList">
		<xsd:list itemType="xforms:versionNumber"/>
	</xsd:simpleType>
	<xsd:simpleType name="versionNumber">
		<xsd:restriction base="xsd:string">
			<xsd:pattern value="[1-9]\d*\.\d+"/>
		</xsd:restriction>
	</xsd:simpleType>
	<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:complexType name="ValueTemplate">
		<xsd:simpleContent>
			<xsd:extension base="xsd:string">
				<xsd:attribute name="value" type="xforms:XPathExpression" use="optional"/>
			</xsd:extension>
		</xsd:simpleContent>
	</xsd:complexType>

        <!--
New simpleTypes provided to form authors
-->

	<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="dateTime">
		<xsd:union>
			<xsd:simpleType>
				<xsd:restriction base="xsd:dateTime"/>
			</xsd:simpleType>
			<xsd:simpleType>
				<xsd:restriction base="xsd:string">
					<xsd:length value="0"/>
				</xsd:restriction>
			</xsd:simpleType>
		</xsd:union>
	</xsd:simpleType>
	
	<xsd:simpleType name="time">
		<xsd:union>
			<xsd:simpleType>
				<xsd:restriction base="xsd:time"/>
			</xsd:simpleType>
			<xsd:simpleType>
				<xsd:restriction base="xsd:string">
					<xsd:length value="0"/>
				</xsd:restriction>
			</xsd:simpleType>
		</xsd:union>
	</xsd:simpleType>
	
	<xsd:simpleType name="date">
		<xsd:union>
			<xsd:simpleType>
				<xsd:restriction base="xsd:date"/>
			</xsd:simpleType>
			<xsd:simpleType>
				<xsd:restriction base="xsd:string">
					<xsd:length value="0"/>
				</xsd:restriction>
			</xsd:simpleType>
		</xsd:union>
	</xsd:simpleType>
	
	<xsd:simpleType name="gYearMonth">
		<xsd:union>
			<xsd:simpleType>
				<xsd:restriction base="xsd:gYearMonth"/>
			</xsd:simpleType>
			<xsd:simpleType>
				<xsd:restriction base="xsd:string">
					<xsd:length value="0"/>
				</xsd:restriction>
			</xsd:simpleType>
		</xsd:union>
	</xsd:simpleType>
	
	<xsd:simpleType name="gYear">
		<xsd:union>
			<xsd:simpleType>
				<xsd:restriction base="xsd:gYear"/>
			</xsd:simpleType>
			<xsd:simpleType>
				<xsd:restriction base="xsd:string">
					<xsd:length value="0"/>
				</xsd:restriction>
			</xsd:simpleType>
		</xsd:union>
	</xsd:simpleType>
	
	<xsd:simpleType name="gMonthDay">
		<xsd:union>
			<xsd:simpleType>
				<xsd:restriction base="xsd:gMonthDay"/>
			</xsd:simpleType>
			<xsd:simpleType>
				<xsd:restriction base="xsd:string">
					<xsd:length value="0"/>
				</xsd:restriction>
			</xsd:simpleType>
		</xsd:union>
	</xsd:simpleType>
	
	<xsd:simpleType name="gDay">
		<xsd:union>
			<xsd:simpleType>
				<xsd:restriction base="xsd:gDay"/>
			</xsd:simpleType>
			<xsd:simpleType>
				<xsd:restriction base="xsd:string">
					<xsd:length value="0"/>
				</xsd:restriction>
			</xsd:simpleType>
		</xsd:union>
	</xsd:simpleType>
	
	<xsd:simpleType name="gMonth">
		<xsd:union>
			<xsd:simpleType>
				<xsd:restriction base="xsd:gMonth"/>
			</xsd:simpleType>
			<xsd:simpleType>
				<xsd:restriction base="xsd:string">
					<xsd:length value="0"/>
				</xsd:restriction>
			</xsd:simpleType>
		</xsd:union>
	</xsd:simpleType>
	
	<xsd:simpleType name="string">
		<xsd:restriction base="xsd:string"/>
	</xsd:simpleType>
	
	<xsd:simpleType name="boolean">
		<xsd:union>
			<xsd:simpleType>
				<xsd:restriction base="xsd:boolean"/>
			</xsd:simpleType>
			<xsd:simpleType>
				<xsd:restriction base="xsd:string">
					<xsd:length value="0"/>
				</xsd:restriction>
			</xsd:simpleType>
		</xsd:union>
	</xsd:simpleType>
	
	<xsd:simpleType name="base64Binary">
		<xsd:union>
			<xsd:simpleType>
				<xsd:restriction base="xsd:base64Binary"/>
			</xsd:simpleType>
			<xsd:simpleType>
				<xsd:restriction base="xsd:string">
					<xsd:length value="0"/>
				</xsd:restriction>
			</xsd:simpleType>
		</xsd:union>
	</xsd:simpleType>
	
	<xsd:simpleType name="hexBinary">
		<xsd:union>
			<xsd:simpleType>
				<xsd:restriction base="xsd:hexBinary"/>
			</xsd:simpleType>
			<xsd:simpleType>
				<xsd:restriction base="xsd:string">
					<xsd:length value="0"/>
				</xsd:restriction>
			</xsd:simpleType>
		</xsd:union>
	</xsd:simpleType>
	
	<xsd:simpleType name="float">
		<xsd:union>
			<xsd:simpleType>
				<xsd:restriction base="xsd:float"/>
			</xsd:simpleType>
			<xsd:simpleType>
				<xsd:restriction base="xsd:string">
					<xsd:length value="0"/>
				</xsd:restriction>
			</xsd:simpleType>
		</xsd:union>
	</xsd:simpleType>
	
	<xsd:simpleType name="decimal">
		<xsd:union>
			<xsd:simpleType>
				<xsd:restriction base="xsd:decimal"/>
			</xsd:simpleType>
			<xsd:simpleType>
				<xsd:restriction base="xsd:string">
					<xsd:length value="0"/>
				</xsd:restriction>
			</xsd:simpleType>
		</xsd:union>
	</xsd:simpleType>
	
	<xsd:simpleType name="double">
		<xsd:union>
			<xsd:simpleType>
				<xsd:restriction base="xsd:double"/>
			</xsd:simpleType>
			<xsd:simpleType>
				<xsd:restriction base="xsd:string">
					<xsd:length value="0"/>
				</xsd:restriction>
			</xsd:simpleType>
		</xsd:union>
	</xsd:simpleType>
	
	<xsd:simpleType name="anyURI">
		<xsd:union>
			<xsd:simpleType>
				<xsd:restriction base="xsd:anyURI"/>
			</xsd:simpleType>
			<xsd:simpleType>
				<xsd:restriction base="xsd:string">
					<xsd:length value="0"/>
				</xsd:restriction>
			</xsd:simpleType>
		</xsd:union>
	</xsd:simpleType>
	
	<xsd:simpleType name="QName">
		<xsd:union>
			<xsd:simpleType>
				<xsd:restriction base="xsd:QName"/>
			</xsd:simpleType>
			<xsd:simpleType>
				<xsd:restriction base="xsd:string">
					<xsd:length value="0"/>
				</xsd:restriction>
			</xsd:simpleType>
		</xsd:union>
	</xsd:simpleType>
	
	<xsd:simpleType name="normalizedString">
		<xsd:union>
			<xsd:simpleType>
				<xsd:restriction base="xsd:normalizedString"/>
			</xsd:simpleType>
			<xsd:simpleType>
				<xsd:restriction base="xsd:string">
					<xsd:length value="0"/>
				</xsd:restriction>
			</xsd:simpleType>
		</xsd:union>
	</xsd:simpleType>
	
	<xsd:simpleType name="token">
		<xsd:union>
			<xsd:simpleType>
				<xsd:restriction base="xsd:token"/>
			</xsd:simpleType>
			<xsd:simpleType>
				<xsd:restriction base="xsd:string">
					<xsd:length value="0"/>
				</xsd:restriction>
			</xsd:simpleType>
		</xsd:union>
	</xsd:simpleType>
	
	<xsd:simpleType name="language">
		<xsd:union>
			<xsd:simpleType>
				<xsd:restriction base="xsd:language"/>
			</xsd:simpleType>
			<xsd:simpleType>
				<xsd:restriction base="xsd:string">
					<xsd:length value="0"/>
				</xsd:restriction>
			</xsd:simpleType>
		</xsd:union>
	</xsd:simpleType>
	
	<xsd:simpleType name="Name">
		<xsd:union>
			<xsd:simpleType>
				<xsd:restriction base="xsd:Name"/>
			</xsd:simpleType>
			<xsd:simpleType>
				<xsd:restriction base="xsd:string">
					<xsd:length value="0"/>
				</xsd:restriction>
			</xsd:simpleType>
		</xsd:union>
	</xsd:simpleType>
	
	<xsd:simpleType name="NCName">
		<xsd:union>
			<xsd:simpleType>
				<xsd:restriction base="xsd:NCName"/>
			</xsd:simpleType>
			<xsd:simpleType>
				<xsd:restriction base="xsd:string">
					<xsd:length value="0"/>
				</xsd:restriction>
			</xsd:simpleType>
		</xsd:union>
	</xsd:simpleType>
	
	<xsd:simpleType name="ID">
		<xsd:union>
			<xsd:simpleType>
				<xsd:restriction base="xsd:ID"/>
			</xsd:simpleType>
			<xsd:simpleType>
				<xsd:restriction base="xsd:string">
					<xsd:length value="0"/>
				</xsd:restriction>
			</xsd:simpleType>
		</xsd:union>
	</xsd:simpleType>
	
	<xsd:simpleType name="IDREF">
		<xsd:union>
			<xsd:simpleType>
				<xsd:restriction base="xsd:IDREF"/>
			</xsd:simpleType>
			<xsd:simpleType>
				<xsd:restriction base="xsd:string">
					<xsd:length value="0"/>
				</xsd:restriction>
			</xsd:simpleType>
		</xsd:union>
	</xsd:simpleType>
	
	<xsd:simpleType name="IDREFS">
		<xsd:union>
			<xsd:simpleType>
				<xsd:restriction base="xsd:IDREFS"/>
			</xsd:simpleType>
			<xsd:simpleType>
				<xsd:restriction base="xsd:string">
					<xsd:length value="0"/>
				</xsd:restriction>
			</xsd:simpleType>
		</xsd:union>
	</xsd:simpleType>
	
	<xsd:simpleType name="NMTOKEN">
		<xsd:union>
			<xsd:simpleType>
				<xsd:restriction base="xsd:NMTOKEN"/>
			</xsd:simpleType>
			<xsd:simpleType>
				<xsd:restriction base="xsd:string">
					<xsd:length value="0"/>
				</xsd:restriction>
			</xsd:simpleType>
		</xsd:union>
	</xsd:simpleType>
	
	<xsd:simpleType name="NMTOKENS">
		<xsd:union>
			<xsd:simpleType>
				<xsd:restriction base="xsd:NMTOKENS"/>
			</xsd:simpleType>
			<xsd:simpleType>
				<xsd:restriction base="xsd:string">
					<xsd:length value="0"/>
				</xsd:restriction>
			</xsd:simpleType>
		</xsd:union>
	</xsd:simpleType>
	
	<xsd:simpleType name="integer">
		<xsd:union>
			<xsd:simpleType>
				<xsd:restriction base="xsd:integer"/>
			</xsd:simpleType>
			<xsd:simpleType>
				<xsd:restriction base="xsd:string">
					<xsd:length value="0"/>
				</xsd:restriction>
			</xsd:simpleType>
		</xsd:union>
	</xsd:simpleType>
	
	<xsd:simpleType name="negativeInteger">
		<xsd:union>
			<xsd:simpleType>
				<xsd:restriction base="xsd:negativeInteger"/>
			</xsd:simpleType>
			<xsd:simpleType>
				<xsd:restriction base="xsd:string">
					<xsd:length value="0"/>
				</xsd:restriction>
			</xsd:simpleType>
		</xsd:union>
	</xsd:simpleType>
	
	<xsd:simpleType name="long">
		<xsd:union>
			<xsd:simpleType>
				<xsd:restriction base="xsd:long"/>
			</xsd:simpleType>
			<xsd:simpleType>
				<xsd:restriction base="xsd:string">
					<xsd:length value="0"/>
				</xsd:restriction>
			</xsd:simpleType>
		</xsd:union>
	</xsd:simpleType>
	
	<xsd:simpleType name="int">
		<xsd:union>
			<xsd:simpleType>
				<xsd:restriction base="xsd:int"/>
			</xsd:simpleType>
			<xsd:simpleType>
				<xsd:restriction base="xsd:string">
					<xsd:length value="0"/>
				</xsd:restriction>
			</xsd:simpleType>
		</xsd:union>
	</xsd:simpleType>
	
	<xsd:simpleType name="short">
		<xsd:union>
			<xsd:simpleType>
				<xsd:restriction base="xsd:short"/>
			</xsd:simpleType>
			<xsd:simpleType>
				<xsd:restriction base="xsd:string">
					<xsd:length value="0"/>
				</xsd:restriction>
			</xsd:simpleType>
		</xsd:union>
	</xsd:simpleType>
	
	<xsd:simpleType name="byte">
		<xsd:union>
			<xsd:simpleType>
				<xsd:restriction base="xsd:byte"/>
			</xsd:simpleType>
			<xsd:simpleType>
				<xsd:restriction base="xsd:string">
					<xsd:length value="0"/>
				</xsd:restriction>
			</xsd:simpleType>
		</xsd:union>
	</xsd:simpleType>
	
	<xsd:simpleType name="nonNegativeInteger">
		<xsd:union>
			<xsd:simpleType>
				<xsd:restriction base="xsd:nonNegativeInteger"/>
			</xsd:simpleType>
			<xsd:simpleType>
				<xsd:restriction base="xsd:string">
					<xsd:length value="0"/>
				</xsd:restriction>
			</xsd:simpleType>
		</xsd:union>
	</xsd:simpleType>
	
	<xsd:simpleType name="unsignedLong">
		<xsd:union>
			<xsd:simpleType>
				<xsd:restriction base="xsd:unsignedLong"/>
			</xsd:simpleType>
			<xsd:simpleType>
				<xsd:restriction base="xsd:string">
					<xsd:length value="0"/>
				</xsd:restriction>
			</xsd:simpleType>
		</xsd:union>
	</xsd:simpleType>
	
	<xsd:simpleType name="unsignedInt">
		<xsd:union>
			<xsd:simpleType>
				<xsd:restriction base="xsd:unsignedInt"/>
			</xsd:simpleType>
			<xsd:simpleType>
				<xsd:restriction base="xsd:string">
					<xsd:length value="0"/>
				</xsd:restriction>
			</xsd:simpleType>
		</xsd:union>
	</xsd:simpleType>
	
	<xsd:simpleType name="unsignedShort">
		<xsd:union>
			<xsd:simpleType>
				<xsd:restriction base="xsd:unsignedShort"/>
			</xsd:simpleType>
			<xsd:simpleType>
				<xsd:restriction base="xsd:string">
					<xsd:length value="0"/>
				</xsd:restriction>
			</xsd:simpleType>
		</xsd:union>
	</xsd:simpleType>
	
	<xsd:simpleType name="unsignedByte">
		<xsd:union>
			<xsd:simpleType>
				<xsd:restriction base="xsd:unsignedByte"/>
			</xsd:simpleType>
			<xsd:simpleType>
				<xsd:restriction base="xsd:string">
					<xsd:length value="0"/>
				</xsd:restriction>
			</xsd:simpleType>
		</xsd:union>
	</xsd:simpleType>
	
	<xsd:simpleType name="positiveInteger">
		<xsd:union>
			<xsd:simpleType>
				<xsd:restriction base="xsd:positiveInteger"/>
			</xsd:simpleType>
			<xsd:simpleType>
				<xsd:restriction base="xsd:string">
					<xsd:length value="0"/>
				</xsd:restriction>
			</xsd:simpleType>
		</xsd:union>
	</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:simpleType name="email">
		<xsd:restriction base="xsd:string">
			<xsd:pattern value="([A-Za-z0-9!#-'\*\+\-/=\?\^_`\{-~]+(\.[A-Za-z0-9!#-'\*\+\-/=\?\^_`\{-~]+)*@[A-Za-z0-9!#-'\*\+\-/=\?\^_`\{-~]+(\.[A-Za-z0-9!#-'\*\+\-/=\?\^_`\{-~]+)*)?"/>
		</xsd:restriction>
	</xsd:simpleType>

	<xsd:simpleType name="card-number">
		<xsd:annotation>
			<xsd:documentation>
			This type defines the basic lexical properties for a dataypte that can be used to represent
			various ID numbers such as for debit and credit cards.
			This type does not apply the Luhn checksum algorithm.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:restriction base="xsd:string">
			<xsd:pattern value="[0-9]*"/>
		</xsd:restriction>
	</xsd:simpleType>


</xsd:schema>
