<?xml version="1.0" encoding="UTF-8"?>
<!--
     WS-Calendar Version 1.0
     Committee Specification Draft 04
     17 June 2011
     Source: http://docs.oasis-open.org/ws-calendar/ws-calendar-spec/v1.0/csd04/xsd/
     Copyright (c) The Calendaring and Scheduling Consortium 2010-2011. All Rights Reserved.
     Copyright (c) OASIS Open 2010-2011. All Rights Reserved. -->

<!-- iCalendar base schema is intended to work in conjunction
     with conformant implementations of IETF RFC 5545
     ( http://www.rfc-editor.org/rfc/rfc5545.txt ),
     the normative specification of iCalendar. -->

<!-- edited with XMLSpy v2010 rel. 3 sp1 (x64) (http://www.altova.com) by Toby Considine (TC9) -->
<!--non-normative, to support development of WS-Calendar - 2010/10/30. Refer to rfc5545 and xCal in the IETF for normative description-->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xcal="urn:ietf:params:xml:ns:icalendar-2.0" targetNamespace="urn:ietf:params:xml:ns:icalendar-2.0" elementFormDefault="qualified">
	<!-- ===================== Standard Extensions =======================  -->
	<xs:include schemaLocation="iCalendar-link-extension.xsd"/>
	<!-- ===================== Proprietary Extensions =======================  -->
	<xs:include schemaLocation="iCalendar-bw-extensions.xsd"/>
	<xs:include schemaLocation="iCalendar-ms-extensions.xsd"/>
	<xs:include schemaLocation="iCalendar-availability-extension.xsd"/>
	<xs:include schemaLocation="iCalendar-wscal-extensions.xsd"/>
	<!-- =====================================================================
       3.4 Calendar Components
       ===================================================================== -->
	<xs:include schemaLocation="iCalendar-props.xsd"/>
	<xs:complexType name="BaseComponentType" abstract="true">
		<xs:annotation>
			<xs:documentation xml:lang="en">
        This type is the basis for all components and provides a base class for
        applications.
        
        Essentially it states that a component is a set of properties.
      </xs:documentation>
		</xs:annotation>
		<xs:sequence>
			<xs:element name="properties" type="xcal:ArrayOfProperties" minOccurs="0"/>
		</xs:sequence>
	</xs:complexType>
	<xs:element name="baseComponent" type="xcal:BaseComponentType" abstract="true"/>
	<xs:element name="vevent" type="xcal:VeventType" substitutionGroup="xcal:vcalendarContainedComponent"/>
	<xs:element name="vtodo" type="xcal:VtodoType" substitutionGroup="xcal:vcalendarContainedComponent"/>
	<xs:element name="vjournal" type="xcal:VjournalType" substitutionGroup="xcal:vcalendarContainedComponent"/>
	<xs:element name="vfreebusy" type="xcal:VfreebusyType" substitutionGroup="xcal:vcalendarContainedComponent"/>
	<xs:element name="vtimezone" type="xcal:VtimezoneType" substitutionGroup="xcal:vcalendarContainedComponent"/>
	<xs:element name="standard" type="xcal:StandardType" substitutionGroup="xcal:baseComponent"/>
	<xs:element name="daylight" type="xcal:DaylightType" substitutionGroup="xcal:baseComponent"/>
	<xs:element name="valarm" type="xcal:ValarmType"/>
	<!-- 3.4 iCalendar Stream -->
	<xs:complexType name="IcalendarType">
		<xs:sequence>
			<xs:element name="vcalendar" type="xcal:VcalendarType" maxOccurs="unbounded"/>
		</xs:sequence>
	</xs:complexType>
	<xs:element name="icalendar" type="xcal:IcalendarType"/>
	<!-- 3.6 Calendar Components -->
	<xs:complexType name="VcalendarType" mixed="false">
		<xs:annotation>
			<xs:documentation xml:lang="en">
        This type is the basis for all components and provides a base class for
        applications.
      </xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="xcal:BaseComponentType">
				<xs:sequence>
					<xs:element name="components" type="xcal:ArrayOfVcalendarContainedComponents"/>
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:element name="vcalendar" type="xcal:VcalendarType"/>
	<xs:element name="vcalendarContainedComponent" type="xcal:VcalendarContainedComponentType" abstract="true"/>
	<xs:complexType name="ArrayOfVcalendarContainedComponents">
		<xs:sequence>
			<xs:element ref="xcal:vcalendarContainedComponent" minOccurs="0" maxOccurs="unbounded"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="VcalendarContainedComponentType" mixed="false">
		<xs:annotation>
			<xs:documentation xml:lang="en">
        This type is the basis for all components that can be contained within
        a vcalendar component
      </xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="xcal:BaseComponentType"/>
		</xs:complexContent>
	</xs:complexType>
	<!-- 3.6.1 Event Component -->
	<xs:complexType name="VeventType" mixed="false">
		<xs:complexContent>
			<xs:extension base="xcal:EventTodoComponentType"/>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="EventTodoComponentType" mixed="false">
		<xs:annotation>
			<xs:documentation xml:lang="en">
        Events and todos only contain alarms
      </xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="xcal:VcalendarContainedComponentType">
				<xs:sequence>
					<xs:element name="components" type="xcal:ArrayOfEventTodoContainedComponents"/>
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="ArrayOfEventTodoContainedComponents">
		<xs:sequence>
			<xs:choice minOccurs="0" maxOccurs="unbounded">
				<xs:element ref="xcal:valarm"/>
			</xs:choice>
		</xs:sequence>
	</xs:complexType>
	<!-- 3.6.2 To-do Component -->
	<xs:complexType name="VtodoType" mixed="false">
		<xs:complexContent>
			<xs:extension base="xcal:EventTodoComponentType"/>
		</xs:complexContent>
	</xs:complexType>
	<!-- 3.6.3 Journal Component -->
	<xs:complexType name="VjournalType" mixed="false">
		<xs:annotation>
			<xs:documentation xml:lang="en">
        Journal components contain no other components
      </xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="xcal:VcalendarContainedComponentType"/>
		</xs:complexContent>
	</xs:complexType>
	<!-- 3.6.4 Free/Busy Component -->
	<xs:complexType name="VfreebusyType" mixed="false">
		<xs:annotation>
			<xs:documentation xml:lang="en">
        Freebusy components contain no other components
      </xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="xcal:VcalendarContainedComponentType"/>
		</xs:complexContent>
	</xs:complexType>
	<!-- 3.6.5 timezone -->
	<xs:complexType name="VtimezoneType" mixed="false">
		<xs:annotation>
			<xs:documentation xml:lang="en">
        Timezones only contain daylight and standard
      </xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="xcal:VcalendarContainedComponentType">
				<xs:sequence>
					<xs:element name="components" type="xcal:ArrayOfTimezoneContainedComponents"/>
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="ArrayOfTimezoneContainedComponents">
		<xs:sequence>
			<xs:choice minOccurs="0" maxOccurs="unbounded">
				<xs:element ref="xcal:standard"/>
				<xs:element ref="xcal:daylight"/>
			</xs:choice>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="StandardType" mixed="false">
		<xs:annotation>
			<xs:documentation xml:lang="en">
        Standard components contain no other components
      </xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="xcal:BaseComponentType"/>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="DaylightType" mixed="false">
		<xs:annotation>
			<xs:documentation xml:lang="en">
        Daylight components contain no other components
      </xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="xcal:BaseComponentType"/>
		</xs:complexContent>
	</xs:complexType>
	<!-- 3.6.6 Alarm Component -->
	<xs:complexType name="ValarmType" mixed="false">
		<xs:complexContent>
			<xs:extension base="xcal:AlarmComponentType"/>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="AlarmComponentType" mixed="false">
		<xs:annotation>
			<xs:documentation xml:lang="en">
        Alarms contain no components
      </xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="xcal:BaseComponentType"/>
		</xs:complexContent>
	</xs:complexType>
</xs:schema>
