<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
	<xsd:annotation>
		<xsd:documentation> 
Saba Learning Content Format Schema
Daniel Lipkin
v1.0
		</xsd:documentation>
	</xsd:annotation>
	<xsd:element name="lcf">
		<xsd:complexType>
			<xsd:sequence>
				<xsd:element name="toc" type="tocType"/>
				<xsd:choice minOccurs="0" maxOccurs="unbounded">
					<xsd:element name="objective" type="objectiveType"/>
				</xsd:choice>
				<xsd:choice maxOccurs="unbounded">
					<xsd:group ref="content"/>
					<xsd:group ref="questionnaire"/>
				</xsd:choice>
			</xsd:sequence>
			<xsd:attributeGroup ref="contentAttributes"/>
			<xsd:attribute name="type" default="class">
				<xsd:simpleType>
					<xsd:restriction base="xsd:string">
						<xsd:enumeration value="class"/>
						<xsd:enumeration value="course"/>
						<xsd:enumeration value="questionnaire"/>
					</xsd:restriction>
				</xsd:simpleType>
			</xsd:attribute>
		</xsd:complexType>
		<xsd:key name="content">
			<xsd:selector xpath="*"/>
			<xsd:field xpath="@id"/>
		</xsd:key>
		<xsd:key name="objective">
			<xsd:selector xpath="//objective"/>
			<xsd:field xpath="@id"/>
		</xsd:key>
		<xsd:key name="questionnaire">
			<xsd:selector xpath="questionnaire"/>
			<xsd:field xpath="@id"/>
		</xsd:key>
		<xsd:keyref name="item" refer="content">
			<xsd:selector xpath="toc//item"/>
			<xsd:field xpath="@ref"/>
		</xsd:keyref>
		<xsd:keyref name="objectiveRef" refer="objective">
			<xsd:selector xpath="*"/>
			<xsd:field xpath="@objectiveRef"/>
		</xsd:keyref>
		<xsd:keyref name="questionnaireRef" refer="questionnaire">
			<xsd:selector xpath="multipleChoice | trueFalse | essay"/>
			<xsd:field xpath="@questionnaire"/>
		</xsd:keyref>
	</xsd:element>
	<xsd:group name="content">
		<xsd:sequence>
			<xsd:element name="text" type="textType"/>
			<xsd:element name="learningObject" type="learningObjectType"/>
			<xsd:element name="questionnaire" type="questionnaireType"/>
		</xsd:sequence>
	</xsd:group>
	<xsd:group name="questionnaire">
		<xsd:sequence>
			<xsd:element name="multipleChoice" type="multipleChoiceType"/>
			<xsd:element name="trueFalse" type="trueFalseType"/>
			<xsd:element name="essay" type="essayType"/>
		</xsd:sequence>
	</xsd:group>
	<xsd:complexType name="tocType">
		<xsd:sequence>
			<xsd:element name="item" type="itemType" maxOccurs="unbounded"/>
		</xsd:sequence>
	</xsd:complexType>
	<xsd:complexType name="itemType">
		<xsd:choice minOccurs="0" maxOccurs="unbounded">
			<xsd:element name="item" type="itemType"/>
		</xsd:choice>
		<xsd:attribute name="title" type="xsd:string"/>
		<xsd:attribute name="ref" type="xsd:IDREF"/>
	</xsd:complexType>
	<xsd:complexType name="objectiveType">
		<xsd:sequence>
			<xsd:element name="objective" type="objectiveType" minOccurs="0" maxOccurs="unbounded"/>
		</xsd:sequence>
		<xsd:attributeGroup ref="commonAttributes"/>
	</xsd:complexType>
	<xsd:complexType name="textType">
		<xsd:simpleContent>
			<xsd:restriction base="xsd:string">
				<xsd:attributeGroup ref="contentAttributes"/>
			</xsd:restriction>
		</xsd:simpleContent>
	</xsd:complexType>
	<xsd:complexType name="learningObjectType">
		<xsd:attributeGroup ref="contentAttributes"/>
		<xsd:attribute name="href" type="xsd:anyURI" use="required"/>
	</xsd:complexType>
	<xsd:complexType name="questionnaireType">
		<xsd:choice minOccurs="0" maxOccurs="unbounded">
			<xsd:element name="scoreband" type="scorebandType"/>
		</xsd:choice>
		<xsd:attributeGroup ref="contentAttributes"/>
		<xsd:attribute name="type" default="test">
			<xsd:simpleType>
				<xsd:restriction base="xsd:string">
					<xsd:enumeration value="test"/>
					<xsd:enumeration value="survey"/>
					<xsd:enumeration value="assessment"/>
				</xsd:restriction>
			</xsd:simpleType>
		</xsd:attribute>
		<xsd:attribute name="passingScore" type="xsd:decimal"/>
		<xsd:attribute name="resumable" type="xsd:boolean"/>
		<xsd:attribute name="displayType" default="separate">
			<xsd:simpleType>
				<xsd:restriction base="xsd:string">
					<xsd:enumeration value="together"/>
					<xsd:enumeration value="separate"/>
				</xsd:restriction>
			</xsd:simpleType>
		</xsd:attribute>
		<xsd:attribute name="randomize" type="xsd:positiveInteger"/>
		<xsd:attribute name="warningTime" type="xsd:positiveInteger"/>
	</xsd:complexType>
	<xsd:complexType name="scorebandType">
		<xsd:choice minOccurs="0">
			<xsd:element name="text" type="textType"/>
		</xsd:choice>
		<xsd:attribute name="id" type="xsd:ID" use="required"/>
		<xsd:attribute name="lowerBound" type="xsd:nonNegativeInteger" use="required"/>
		<xsd:attribute name="upperBound" type="xsd:positiveInteger" use="required"/>
	</xsd:complexType>
	<xsd:complexType name="multipleChoiceType">
		<xsd:sequence>
			<xsd:element name="question" type="questionType"/>
			<xsd:element name="choice" type="choiceType" maxOccurs="unbounded"/>
			<xsd:element name="hints" type="hintsType" minOccurs="0"/>
		</xsd:sequence>
		<xsd:attributeGroup ref="questionAttributes"/>
	</xsd:complexType>
	<xsd:complexType name="questionType">
		<xsd:choice maxOccurs="unbounded">
			<xsd:element name="text" type="textType"/>
			<xsd:element name="learningObject" type="learningObjectType"/>
		</xsd:choice>
	</xsd:complexType>
	<xsd:complexType name="choiceType">
		<xsd:simpleContent>
			<xsd:restriction base="xsd:string">
				<xsd:attribute name="lang" type="xsd:language"/>
				<xsd:attribute name="answer" type="xsd:boolean" default="false"/>
			</xsd:restriction>
		</xsd:simpleContent>
	</xsd:complexType>
	<xsd:complexType name="hintsType">
		<xsd:sequence>
			<xsd:element name="hint" type="hintType" maxOccurs="unbounded"/>
		</xsd:sequence>
		<xsd:attribute name="type" default="multilevel">
			<xsd:simpleType>
				<xsd:restriction base="xsd:string">
					<xsd:enumeration value="incremental"/>
					<xsd:enumeration value="multilevel"/>
				</xsd:restriction>
			</xsd:simpleType>
		</xsd:attribute>
	</xsd:complexType>
	<xsd:complexType name="hintType">
		<xsd:simpleContent>
			<xsd:restriction base="xsd:string">
				<xsd:attribute name="lang" type="xsd:language"/>
			</xsd:restriction>
		</xsd:simpleContent>
	</xsd:complexType>
	<xsd:complexType name="trueFalseType">
		<xsd:sequence>
			<xsd:element name="question" type="questionType"/>
			<xsd:element name="hints" type="hintsType" minOccurs="0"/>
		</xsd:sequence>
		<xsd:attributeGroup ref="questionAttributes"/>
		<xsd:attribute name="answer" type="xsd:boolean" use="required"/>
	</xsd:complexType>
	<xsd:complexType name="essayType">
		<xsd:sequence>
			<xsd:element name="question" type="questionType"/>
			<xsd:element name="hints" type="hintsType" minOccurs="0"/>
		</xsd:sequence>
		<xsd:attributeGroup ref="questionAttributes"/>
	</xsd:complexType>
	<xsd:attributeGroup name="commonAttributes">
		<xsd:attribute name="id" type="xsd:ID" use="required"/>
		<xsd:attribute name="name" type="xsd:string"/>
		<xsd:attribute name="description" type="xsd:string"/>
		<xsd:attribute name="metadataRef" type="xsd:anyURI"/>
		<xsd:attribute name="lang" type="xsd:language"/>
	</xsd:attributeGroup>
	<xsd:attributeGroup name="contentAttributes">
		<xsd:attributeGroup ref="commonAttributes"/>
		<xsd:attribute name="objectiveRef" type="xsd:IDREFS"/>
		<xsd:attribute name="timeAllowed" type="xsd:positiveInteger"/>
		<xsd:attribute name="accessCount" type="xsd:positiveInteger"/>
		<xsd:attribute name="isVisible" type="xsd:boolean"/>
		<xsd:attribute name="startDate" type="xsd:date"/>
		<xsd:attribute name="endDate" type="xsd:date"/>
	</xsd:attributeGroup>
	<xsd:attributeGroup name="questionAttributes">
		<xsd:attributeGroup ref="contentAttributes"/>
		<xsd:attribute name="points" type="xsd:positiveInteger"/>
		<xsd:attribute name="questionnaire" type="xsd:IDREFS"/>
		<xsd:attribute name="title" type="xsd:string"/>
	</xsd:attributeGroup>
</xsd:schema>
