<?xml version="1.0" encoding="UTF-8"?>
<!--
 targetNamespace="http://schemas.totallysmartit.com/questionnaire" 
 xmlns="http://schemas.totallysmartit.com/questionnaire" 
-->
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
	<xsd:element name="questionnaire">
		<xsd:annotation>
			<xsd:documentation>validates question xml files</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType>
			<xsd:sequence>
				<xsd:element name="form">
					<xsd:complexType>
						<xsd:sequence>
							<xsd:element name="name" type="notnullable"/>
							<xsd:element name="action" type="notnullable"/>
							<xsd:element name="method" type="method"/>
						</xsd:sequence>
					</xsd:complexType>
				</xsd:element>
				<xsd:element name="question" maxOccurs="unbounded">
					<xsd:complexType>
						<xsd:sequence>
							<xsd:element name="text" type="xsd:string"/>
							<xsd:element name="response">
								<xsd:complexType>
									<xsd:sequence>
										<xsd:element name="control">
											<xsd:complexType>
												<xsd:choice>
													<xsd:element ref="textbox"/>
													<xsd:element ref="textarea"/>
													<xsd:element ref="radio"/>
													<xsd:element ref="combo"/>
													<xsd:element ref="checkbox"/>
												</xsd:choice>
											</xsd:complexType>
										</xsd:element>
									</xsd:sequence>
								</xsd:complexType>
							</xsd:element>
						</xsd:sequence>
					</xsd:complexType>
				</xsd:element>
			</xsd:sequence>
		</xsd:complexType>
	</xsd:element>
	<!-- text box control -->
	<xsd:element name="textbox">
		<xsd:complexType>
			<xsd:sequence>
				<xsd:element name="datatype">
					<xsd:complexType>
						<xsd:choice>
							<xsd:element ref="numeric"/>
							<xsd:element ref="alphanumeric"/>
							<xsd:element ref="alpha"/>
							<xsd:element ref="date"/>
							<xsd:element ref="any"/>
						</xsd:choice>
					</xsd:complexType>
				</xsd:element>
				<xsd:element name="prompt" type="notnullable"/>
				<xsd:element name="required" type="xsd:boolean"/>
				<xsd:element name="password" type="xsd:boolean"/>
				<xsd:element name="default" type="xsd:string"/>
				<xsd:element name="name" type="notnullable"/>
				<xsd:element name="size" type="xsd:integer"/>
				<xsd:element name="maxlength" type="xsd:integer"/>
			</xsd:sequence>
		</xsd:complexType>
	</xsd:element>
	<!-- numeric textbox -->
	<xsd:element name="numeric">
		<xsd:complexType>
			<xsd:sequence>
				<xsd:element name="minvalue" type="xsd:integer"/>
				<xsd:element name="maxvalue" type="xsd:integer"/>
			</xsd:sequence>
		</xsd:complexType>
	</xsd:element>
	<!-- textbox to hold dates -->
	<xsd:element name="date">
		<xsd:complexType>
			<xsd:sequence>
				<xsd:element name="format" type="dateformat"/>
				<xsd:element name="usecalendar" type="xsd:boolean"/>
				<xsd:element name="separator" type="separator"/>
				<xsd:element name="mindate" type="xsd:string"/>
				<xsd:element name="maxdate" type="xsd:string"/>
			</xsd:sequence>
		</xsd:complexType>
	</xsd:element>
	<!-- alpha textbox-->
	<xsd:element name="alphanumeric" type="stringlength"/>
	<!-- alpha textbox-->
	<xsd:element name="alpha" type="stringlength"/>
	<!-- any-->
	<xsd:element name="any" type="stringlength"/>
	<!-- defined complex type referenced by alpha,alphanumeric and any-->
	<xsd:complexType name="stringlength">
		<xsd:sequence>
			<xsd:element name="minlength" type="xsd:integer"/>
			<xsd:element name="maxlength" type="xsd:integer"/>
		</xsd:sequence>
	</xsd:complexType>
	<!-- text area control -->
	<xsd:element name="textarea">
		<xsd:complexType>
			<xsd:sequence>
				<xsd:element name="prompt" type="notnullable"/>
				<xsd:element name="required" type="xsd:boolean"/>
				<xsd:element name="default" type="xsd:string"/>
				<xsd:element name="name" type="notnullable"/>
				<xsd:element name="cols" type="xsd:integer"/>
				<xsd:element name="rows" type="xsd:integer"/>
			</xsd:sequence>
		</xsd:complexType>
	</xsd:element>
	<!-- radio buttons -->
	<xsd:element name="radio">
		<xsd:complexType>
			<xsd:sequence>
				<xsd:element name="prompt" type="notnullable"/>
				<xsd:element name="required" type="xsd:boolean"/>
				<xsd:element name="default" type="xsd:string"/>
				<xsd:element name="name" type="notnullable"/>
				<xsd:sequence>
					<xsd:element name="item" maxOccurs="unbounded">
						<xsd:complexType>
							<xsd:attribute name="display" type="xsd:string" use="required"/>
							<xsd:attribute name="value" type="xsd:string" use="required"/>
						</xsd:complexType>
					</xsd:element>
				</xsd:sequence>
			</xsd:sequence>
		</xsd:complexType>
	</xsd:element>
	<!-- combo control -->
	<xsd:element name="combo">
		<xsd:complexType>
			<xsd:sequence>
				<xsd:element name="prompt" type="notnullable"/>
				<xsd:element name="minselected" type="xsd:integer"/>
				<xsd:element name="maxselected" type="xsd:integer"/>
				<xsd:element name="default" type="xsd:string"/>
				<xsd:element name="name" type="notnullable"/>
				<xsd:element name="size" type="xsd:integer"/>
				<xsd:sequence>
					<xsd:element name="item" maxOccurs="unbounded">
						<xsd:complexType>
							<xsd:attribute name="display" type="xsd:string" use="required"/>
							<xsd:attribute name="value" type="xsd:string" use="required"/>
						</xsd:complexType>
					</xsd:element>
				</xsd:sequence>
			</xsd:sequence>
		</xsd:complexType>
	</xsd:element>
	<!-- collection of checkboxes control -->
	<xsd:element name="checkbox">
		<xsd:complexType>
			<xsd:sequence>
				<xsd:element name="prompt" type="notnullable"/>
				<xsd:element name="name" type="notnullable"/>
				<xsd:element name="minchecked" type="xsd:integer"/>
				<xsd:element name="maxchecked" type="xsd:integer"/>
				<xsd:sequence>
					<xsd:element name="item" maxOccurs="unbounded">
						<xsd:complexType>
							<xsd:attribute name="display" type="xsd:string" use="required"/>
							<xsd:attribute name="value" type="xsd:string" use="required"/>
						</xsd:complexType>
					</xsd:element>
				</xsd:sequence>
			</xsd:sequence>
		</xsd:complexType>
	</xsd:element>
	<!-- custom types -->
	<xsd:simpleType name="notnullable">
		<xsd:restriction base="xsd:string">
			<xsd:minLength value="1"/>
		</xsd:restriction>
	</xsd:simpleType>
	<xsd:simpleType name="separator">
		<xsd:restriction base="xsd:string">
			<xsd:enumeration value="/"/>
			<xsd:enumeration value="-"/>
		</xsd:restriction>
	</xsd:simpleType>
	<xsd:simpleType name="dateformat">
		<xsd:restriction base="xsd:string">
			<xsd:enumeration value="yyyy-mm-dd"/>
			<xsd:enumeration value="yyyy/mm/dd"/>
			<xsd:enumeration value="dd-mm-yyyy"/>
			<xsd:enumeration value="dd/mm/yyyy"/>
			<xsd:enumeration value="mm-dd-yyyy"/>
			<xsd:enumeration value="mm/dd/yyyy"/>
			<xsd:enumeration value="dd-mmm-yyyy"/>
			<xsd:enumeration value="dd/mmm/yyyy"/>
		</xsd:restriction>
	</xsd:simpleType>
	<xsd:simpleType name="method">
		<xsd:restriction base="xsd:string">
			<xsd:enumeration value="post"/>
			<xsd:enumeration value="get"/>
		</xsd:restriction>
	</xsd:simpleType>
</xsd:schema>

