<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns="http://iit.nrc.ca/namespace/sld" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://iit.nrc.ca/namespace/sld" elementFormDefault="qualified">
	<xs:annotation>
		<xs:documentation>
      XSD Data File Information
        * Author:  Guillaume Durand, Luc Belliveau
        * Date: October 23rd, 2009
        * Version: 010
        * Status: Public
        * Description:
            This is a representation of the SLD 2.0 Information Model for binding purposes.
            Read the corresponding SLD 2.0 documentation for further information of the information model.
            SLD 2.0 is neither a norm nor a standard. SLD 2.0 is a proposition of expressing a learning activity in a Common Cartridge package.
        * Copyright: © Her Majesty in Right of Canada, 2009
    </xs:documentation>
	</xs:annotation>
	<xs:element name="sld">
		<xs:annotation>
			<xs:documentation>
        SLD Root
      </xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence maxOccurs="unbounded">
				<xs:element name="activity" type="activity-structureType" minOccurs="0">
					<xs:unique name="sld-unique-constraint-type">
						<xs:selector xpath="constraint"/>
						<xs:field xpath="@type"/>
					</xs:unique>
				</xs:element>
				<xs:element name="choice" type="activity-choice" minOccurs="0"/>
			</xs:sequence>
			<xs:attribute name="title" type="xs:normalizedString" use="required"/>
			<xs:attribute name="identifier" type="xs:ID" use="required"/>
		</xs:complexType>
	</xs:element>
	<xs:complexType name="activity-choice">
		<xs:annotation>
			<xs:documentation>
        Activity-choice
      </xs:documentation>
		</xs:annotation>
		<xs:sequence>
			<xs:element name="when" type="activity-choice-when" maxOccurs="unbounded"/>
			<xs:element name="otherwise" type="activity-choice-otherwise" minOccurs="0"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="activity-choice-when">
		<xs:annotation>
			<xs:documentation>
        Activity-choice-when
      </xs:documentation>
		</xs:annotation>
		<xs:sequence maxOccurs="unbounded">
			<xs:element name="activity" type="activity-structureType" minOccurs="0">
				<xs:unique name="when-unique-constraint-type">
					<xs:selector xpath="constraint"/>
					<xs:field xpath="@type"/>
				</xs:unique>
			</xs:element>
			<xs:element name="choice" type="activity-choice" minOccurs="0"/>
		</xs:sequence>
		<xs:attribute name="leftHandOperand" type="ld-player-values-or-string" use="required"/>
		<xs:attribute name="operator" type="operator" use="required"/>
		<xs:attribute name="rightHandOperand" type="xs:normalizedString" use="required"/>
	</xs:complexType>
	<xs:complexType name="activity-choice-otherwise">
		<xs:annotation>
			<xs:documentation>
        Activity-choice-otherwise
      </xs:documentation>
		</xs:annotation>
		<xs:sequence maxOccurs="unbounded">
			<xs:element name="activity" type="activity-structureType" minOccurs="0">
				<xs:unique name="otherwise-unique-constraint-type">
					<xs:selector xpath="constraint"/>
					<xs:field xpath="@type"/>
				</xs:unique>
			</xs:element>
			<xs:element name="choice" type="activity-choice" minOccurs="0"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="activity-structureType">
		<xs:annotation>
			<xs:documentation>
        Activity-structureType
      </xs:documentation>
		</xs:annotation>
		<xs:sequence>
			<xs:element name="title" type="xs:normalizedString"/>
			<xs:element name="role" type="xs:normalizedString" maxOccurs="unbounded"/>
			<xs:element name="information" type="xs:string" minOccurs="0"/>
			<xs:element name="learningObject" type="xs:normalizedString"/>
			<xs:element name="constraint" type="activity-constraint" minOccurs="0" maxOccurs="unbounded"/>
		</xs:sequence>
		<xs:attribute name="type" type="activity-structure-typeType" use="required"/>
	</xs:complexType>
	<xs:complexType name="activity-constraint">
		<xs:annotation>
			<xs:documentation>
        Activity-constraint
      </xs:documentation>
		</xs:annotation>
		<xs:sequence>
			<xs:element name="resolvedBy" type="xs:normalizedString" minOccurs="0" maxOccurs="unbounded"/>
			<xs:choice maxOccurs="2">
				<xs:element name="condition" type="activity-constraint-condition" minOccurs="0"/>
				<xs:element name="and" type="activity-constraint-logic" minOccurs="0"/>
				<xs:element name="or" type="activity-constraint-logic" minOccurs="0"/>
			</xs:choice>
		</xs:sequence>
		<xs:attribute name="type" type="activity-constraint-type" use="required"/>
	</xs:complexType>
	<xs:complexType name="activity-constraint-logic">
		<xs:annotation>
			<xs:documentation>
        Activity-constraint-logic
      </xs:documentation>
		</xs:annotation>
		<xs:sequence maxOccurs="unbounded">
			<xs:element name="condition" type="activity-constraint-condition" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="and" type="activity-constraint-logic" minOccurs="0"/>
			<xs:element name="or" type="activity-constraint-logic" minOccurs="0"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="activity-constraint-condition">
		<xs:annotation>
			<xs:documentation>
        Activity-constraint-condition
      </xs:documentation>
		</xs:annotation>
		<xs:attribute name="leftHandOperand" type="ld-player-values-or-string" use="required"/>
		<xs:attribute name="operator" type="operator" use="required"/>
		<xs:attribute name="rightHandOperand" type="ld-player-values-or-string" use="required"/>
	</xs:complexType>
	<xs:simpleType name="ld-player-values-or-string">
		<xs:annotation>
			<xs:documentation>
        ld-player-values-or-string
      </xs:documentation>
		</xs:annotation>
		<xs:union>
			<xs:simpleType>
				<xs:restriction base="xs:token">
					<xs:enumeration value="$actorsAccessedCount"/>
					<xs:enumeration value="$actorsParticipatedCount"/>
					<xs:enumeration value="$totalActors"/>
					<xs:enumeration value="$activityResult"/>
					<xs:enumeration value="$activityDuration"/>
				</xs:restriction>
			</xs:simpleType>
			<xs:simpleType>
				<xs:restriction base="xs:normalizedString">
					<xs:pattern value="[^$].*"/>
				</xs:restriction>
			</xs:simpleType>
		</xs:union>
	</xs:simpleType>
	<xs:simpleType name="activity-structure-typeType">
		<xs:annotation>
			<xs:documentation>
        activity-structure-typeType
      </xs:documentation>
		</xs:annotation>
		<xs:restriction base="xs:token">
			<xs:enumeration value="single"/>
			<xs:enumeration value="group"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="operator">
		<xs:annotation>
			<xs:documentation>
        operator
      </xs:documentation>
		</xs:annotation>
		<xs:restriction base="xs:normalizedString">
			<xs:enumeration value="equals"/>
			<xs:enumeration value="not-equals"/>
			<xs:enumeration value="greater-than"/>
			<xs:enumeration value="less-than"/>
			<xs:enumeration value="greater-than-or-equals"/>
			<xs:enumeration value="less-than-or-equals"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="activity-constraint-type">
		<xs:annotation>
			<xs:documentation>
        activity-constraint-type
      </xs:documentation>
		</xs:annotation>
		<xs:restriction base="xs:normalizedString">
			<xs:enumeration value="cannotContinue"/>
			<xs:enumeration value="cannotStart"/>
			<xs:enumeration value="mustTerminate"/>
		</xs:restriction>
	</xs:simpleType>
</xs:schema>
