<!-- Course dtd. -->
<!ENTITY MetaData SYSTEM "./ilias_co_4_3.dtd">
<!ENTITY AdvancedMetaData SYSTEM "./ilias_advanced_meta_data_3_9.dtd">
<!-- include the reused dtd -->
%MetaData;
%AdvancedMetaData;

<!-- new elements defined here -->

<!ELEMENT Course (MetaData?,AdvancedMetaData?,Admin+,Tutor*,Member*,Subscriber*,WaitingList*,Settings?,Sort?,ContainerSetting*)>
<!ATTLIST Course
    exportVersion CDATA #REQUIRED
    id CDATA #IMPLIED
    showMembers (Yes | No) #IMPLIED
>
<!-- All course admins
    id: Id is ILIAS user id. User must exist in ILIAS database
    notification: In the moment "0" (No notifications for new subsciptions) or "1" (Notification). Default => "0"
    passed: "No" (User hasn't passed the course) or "Yes" (Passed) => Default is 'no'
-->
<!ELEMENT Admin EMPTY>
<!ATTLIST Admin
    id CDATA #REQUIRED
    notification (Yes | No) #IMPLIED
    passed (Yes | No) #IMPLIED
	contact (Yes | No) #IMPLIED
	action (Attach|Detach) #IMPLIED
>
<!-- All course tutors
    @see element Admin
-->
<!ELEMENT Tutor EMPTY>
<!ATTLIST Tutor
    id CDATA #REQUIRED
    notification (Yes | No) #REQUIRED
    passed (Yes | No) #REQUIRED
	contact (Yes | No) #IMPLIED
	action (Attach|Detach) #IMPLIED
>
<!-- All course members
    @see element Admin
    blocked: Default "0" (not blocked) or "1" (course member is blocked => no access to course content)
-->
<!ELEMENT Member EMPTY>
<!ATTLIST Member
    id CDATA #REQUIRED
    blocked (Yes | No) #IMPLIED
    passed (Yes | No) #IMPLIED
	action (Attach|Detach) #IMPLIED
>
<!-- All users whose registration isn't finished and needs a confirmation by a course admin or tutor
    id: user id. User must exist in ILIAS database.
    subscriptionTime: Unix time of subscription
-->
<!ELEMENT Subscriber EMPTY>
<!ATTLIST Subscriber
    id CDATA #REQUIRED
    subscriptionTime CDATA #REQUIRED
	action (Attach|Detach) #IMPLIED
>
<!-- All users that are on the waiting list of a course.
    id: user id. User must exist in ILIAS database.
    subscriptionTime: Unix time of subscription
-->
<!ELEMENT WaitingList EMPTY>
<!ATTLIST WaitingList
    id CDATA #REQUIRED
    subscriptionTime CDATA #REQUIRED
	action (Attach|Detach) #IMPLIED
>
<!-- Description of course settings -->
<!ELEMENT Settings (Availability?,Syllabus?,ImportantInformation?,Contact?,Registration?, ViewMode?)>

<!-- Availability -->
<!ELEMENT Availability (NotAvailable | Unlimited | TemporarilyAvailable)>

<!-- Offline status => course is not available for course members -->
<!ELEMENT NotAvailable EMPTY>

<!-- Unlimited status -->
<!ELEMENT Unlimited EMPTY>

<!-- Temporarily available -->
<!ELEMENT TemporarilyAvailable (Start,End)>

<!-- Start time (unix time stamp) -->
<!ELEMENT Start (#PCDATA)>

<!-- End time (unix time stamp) -->
<!ELEMENT End (#PCDATA)>

<!-- course syllabus => free text -->
<!ELEMENT Syllabus (#PCDATA)>

<!-- course important information => free text -->
<!ELEMENT ImportantInformation (#PCDATA)>


<!-- Contact data -->
<!ELEMENT Contact (Name?,Responsibility?,Phone?,Email?,Consultation?)>

<!ELEMENT Name (#PCDATA)>
<!ELEMENT Responsibility (#PCDATA)>
<!ELEMENT Phone (#PCDATA)>
<!ELEMENT Email (#PCDATA)>
<!ELEMENT Consultation (#PCDATA)>

<!-- Registration settings -->
<!ELEMENT Registration ((Disabled | Unlimited | TemporarilyAvailable),Password?)>

<!-- Password -->
<!ELEMENT Password (#PCDATA)>

<!-- registration disabled -->
<!ELEMENT Disabled EMPTY >

<!-- Registration settings:
    registrationType: Confirmation => registration needs confirmation by a course admin or tutor
    maxMembers: "0" means unlimited
    notification: if enabled all course admins/tutors whose status is 'notification will receive a message about new registrations
    waitin list: if enabled and the maximum number of members is exceeded, new users get possibility the use the waiting list.
-->
<!ATTLIST Registration
    registrationType (Confirmation | Direct | Password) #IMPLIED
    maxMembers CDATA #IMPLIED
    notification (Yes | No) #IMPLIED
    waitingList (Yes | No) #IMPLIED
>

<!-- Sort order of course items -->
<!ELEMENT Sort EMPTY>

<!-- Definition of sort order of course items -->
<!ATTLIST Sort
    type (Manual | Title | Activation | Creation) #REQUIRED
    direction (ASC | DESC) #IMPLIED
    position (TOP | Bottom) #IMPLIED
    order (Title | Activation | Creation) #IMPLIED
>

<!ELEMENT ContainerSetting (#PCDATA)>
<!ATTLIST ContainerSetting
		id CDATA #REQUIRED>

<!ELEMENT ViewMode (#PCDATA)>
