<?xml version="1.0" encoding="UTF-8"?>
   <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
             targetNamespace="urn:ietf:params:xml:ns:cpl"
             xmlns="urn:ietf:params:xml:ns:cpl" >
	<xs:group name="Switch">
		<xs:choice>
			<xs:element name="address-switch" type="AddressSwitchType"/>
			<xs:element name="string-switch" type="StringSwitchType"/>
			<xs:element name="language-switch" type="LanguageSwitchType"/>
			<xs:element name="time-switch" type="TimeSwitchType"/>
			<xs:element name="priority-switch" type="PrioritySwitchType"/>
		</xs:choice>
	</xs:group>
	<xs:group name="Location">
		<xs:choice>
			<xs:element name="location" type="LocationType"/>
			<xs:element name="lookup" type="LookupType"/>
			<xs:element name="remove-location" type="RemoveLocationType"/>
		</xs:choice>
	</xs:group>
	<xs:group name="SignallingAction">
		<xs:choice>
			<xs:element name="proxy" type="ProxyAction"/>
			<xs:element name="redirect" type="RedirectAction"/>
			<xs:element name="reject" type="RejectAction"/>
		</xs:choice>
	</xs:group>
	<xs:group name="OtherAction">
		<xs:choice>
			<xs:element name="mail" type="MailAction"/>
			<xs:element name="log" type="LogAction"/>
			<xs:any/>
		</xs:choice>
	</xs:group>
	<xs:group name="Sub">
		<xs:all>
			<xs:element name="sub" type="SubAction"/>
		</xs:all>
	</xs:group>
	<xs:group name="Node">
		<xs:choice minOccurs="0">
			<xs:group ref="Switch"/>
			<xs:group ref="Location"/>
			<xs:group ref="SignallingAction"/>
			<xs:group ref="OtherAction"/>
			<xs:group ref="Sub"/>
		</xs:choice>
	</xs:group>
	<xs:complexType name="OtherwiseAction">
		<xs:group ref="Node"/>
	</xs:complexType>
	<xs:complexType name="NotPresentAction">
		<xs:group ref="Node"/>
	</xs:complexType>
	<xs:simpleType name="YesNoType">
		<xs:restriction base="xs:NMTOKEN">
			<xs:enumeration value="yes"/>
			<xs:enumeration value="no"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="CommaDelimiterType">
		<xs:restriction base="xs:string">
			<xs:enumeration value=","/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="AddressFieldType">
		<xs:restriction base="xs:NMTOKEN">
			<xs:enumeration value="origin"/>
			<xs:enumeration value="destination"/>
			<xs:enumeration value="original-destination"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="AddressSubfieldType">
		<xs:restriction base="xs:NMTOKEN">
			<xs:enumeration value="address-type"/>
			<xs:enumeration value="user"/>
			<xs:enumeration value="host"/>
			<xs:enumeration value="port"/>
			<xs:enumeration value="tel"/>
			<xs:enumeration value="display"/>
			<xs:enumeration value="password"/>
			<xs:enumeration value="alias-type"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:complexType name="AddressType">
		<xs:group ref="Node"/>
		<xs:attribute name="is" type="xs:string"/>
		<xs:attribute name="contains" type="xs:string"/>
		<xs:attribute name="subdomain-of" type="xs:string"/>
	</xs:complexType>
	<xs:complexType name="AddressSwitchType">
		<xs:sequence>
			<xs:element name="address" type="AddressType" minOccurs="0" maxOccurs="unbounded"/>
			<xs:sequence minOccurs="0">
				<xs:element name="not-present" type="NotPresentAction"/>
				<xs:element name="address" type="AddressType" minOccurs="0" maxOccurs="unbounded"/>
			</xs:sequence>
			<xs:element name="otherwise" type="OtherwiseAction" minOccurs="0"/>
		</xs:sequence>
		<xs:attribute name="field" type="AddressFieldType" use="required"/>
		<xs:attribute name="subfield" type="AddressSubfieldType" use="optional"/>
	</xs:complexType>
	<xs:simpleType name="StringFieldType">
		<xs:restriction base="xs:NMTOKEN">
			<xs:enumeration value="subject"/>
			<xs:enumeration value="organization"/>
			<xs:enumeration value="user-agent"/>
			<xs:enumeration value="display"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:complexType name="StringType">
		<xs:group ref="Node"/>
		<xs:attribute name="is" type="xs:string" use="optional"/>
		<xs:attribute name="contains" type="xs:string" use="optional"/>
	</xs:complexType>
	<xs:complexType name="StringSwitchType">
		<xs:sequence>
			<xs:element name="string" type="StringType" minOccurs="0" maxOccurs="unbounded"/>
			<xs:sequence minOccurs="0">
				<xs:element name="not-present" type="NotPresentAction"/>
				<xs:element name="string" type="StringType" minOccurs="0" maxOccurs="unbounded"/>
			</xs:sequence>
			<xs:element name="otherwise" type="OtherwiseAction" minOccurs="0"/>
		</xs:sequence>
		<xs:attribute name="field" type="StringFieldType" use="required"/>
	</xs:complexType>
	<xs:simpleType name="LanguageTagType">
		<xs:restriction base="xs:string"/>
	</xs:simpleType>
	<xs:complexType name="LanguageType">
		<xs:group ref="Node"/>
		<xs:attribute name="matches" type="LanguageTagType" use="required"/>
	</xs:complexType>
	<xs:complexType name="LanguageSwitchType">
		<xs:sequence>
			<xs:element name="language" type="LanguageType" minOccurs="0" maxOccurs="unbounded"/>
			<xs:sequence minOccurs="0">
				<xs:element name="not-present" type="NotPresentAction"/>
				<xs:element name="language" type="LanguageType" minOccurs="0" maxOccurs="unbounded"/>
			</xs:sequence>
			<xs:element name="otherwise" type="OtherwiseAction" minOccurs="0"/>
		</xs:sequence>
	</xs:complexType>
	<xs:simpleType name="FreqType">
		<xs:restriction base="xs:NMTOKEN">
			<xs:pattern value="[s|S][e|E][c|C][o|O][n|N][d|D][l|L][y|Y]"/>
			<xs:pattern value="[m|M][i|I][n|N][u|U][t|T][e|E][l|L][y|Y]"/>
			<xs:pattern value="[h|H][o|O][u|U][r|R][l|L][y|Y]"/>
			<xs:pattern value="[d|D][a|A][i|I][l|L][y|Y]"/>
			<xs:pattern value="[w|W][e|E][e|E][k|K][l|L][y|Y]"/>
			<xs:pattern value="[m|M][o|N][n|N][t|T][h|H][l|L][y|Y]"/>
			<xs:pattern value="[y|Y][e|E][a|A][r|R][l|L][y|Y]"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="DayType">
		<xs:restriction base="xs:NMTOKEN">
			<xs:pattern value="[m|M][o|O]"/>
			<xs:pattern value="[t|T][u|U]"/>
			<xs:pattern value="[w|W][e|E]"/>
			<xs:pattern value="[t|T][h|H]"/>
			<xs:pattern value="[f|F][r|R]"/>
			<xs:pattern value="[s|S][a|A]"/>
			<xs:pattern value="[s|S][u|U]"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="PositiveYearDayType">
		<xs:restriction base="xs:integer">
			<xs:minInclusive value="1"/>
			<xs:maxInclusive value="366"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="NegativeYearDayType">
		<xs:restriction base="xs:integer">
			<xs:minInclusive value="-366"/>
			<xs:maxInclusive value="-1"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="YearDayType">
		<xs:union memberTypes="PositiveYearDayType NegativeYearDayType"/>
	</xs:simpleType>
	<xs:simpleType name="ByYearDayType">
		<xs:annotation>Should be list of YearDayType</xs:annotation>
		<xs:restriction base="xs:string">
			<xs:pattern value="([+|-]?([1-9]|[1-9][0-9]|[1-2][0-9][0-9]|[3][0-5][0-9]|[3][6][0-6]))(,([+|-]?([1-9]|[1-9][0-9]|[1-2][0-9][0-9]|[3][0-5][0-9]|[3][6][0-6])))*"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="PositiveMonthDayType">
		<xs:restriction base="xs:integer">
			<xs:minInclusive value="1"/>
			<xs:maxInclusive value="31"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="NegativeMonthDayType">
		<xs:restriction base="xs:integer">
			<xs:minInclusive value="-31"/>
			<xs:maxInclusive value="-1"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="MonthDayType">
		<xs:union memberTypes="PositiveMonthDayType NegativeMonthDayType"/>
	</xs:simpleType>
	<xs:simpleType name="ByMonthDayType">
		<xs:annotation>Should be list of MonthDayType</xs:annotation>
		<xs:restriction base="xs:string">
			<xs:pattern value="([+|-]?([1-9]|[1-2][0-9]|[3][0-1]))(,([+|-]?([1-9]|[1-2][0-9]|[3][0-1])))*"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="ExtendedDayType">
		<xs:restriction base="xs:string">
			<xs:pattern value="([+|-]?([1-9]|[1-9][0-9]|[1-2][0-9][0-9]|[3][0-5][0-9]|[3][6][0-6]))?([M|m][O|o]|[T|t][U|u]|[W|w][E|e]|[T|t][H|h]|[F|f][R|r]|[S|s][A|a]|[S|s][U|u])"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="ByDayType">
		<xs:annotation>Should be list of ExtendedDayType</xs:annotation>
		<xs:restriction base="xs:string">
			<xs:pattern value="([+|-]?([1-9]|[1-9][0-9]|[1-2][0-9][0-9]|[3][0-5][0-9]|[3][6][0-6]))?([M|m][O|o]|[T|t][U|u]|[W|w][E|e]|[T|t][H|h]|[F|f][R|r]|[S|s][A|a]|[S|s][U|u])(,([+|-]?([1-9]|[1-9][0-9]|[1-2][0-9][0-9]|[3][0-5][0-9]|[3][6][0-6]))?([M|m][O|o]|[T|t][U|u]|[W|w][E|e]|[T|t][H|h]|[F|f][R|r]|[S|s][A|a]|[S|s][U|u]))*"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="SecondMinuteType">
		<xs:restriction base="xs:integer">
			<xs:minInclusive value="0"/>
			<xs:maxInclusive value="59"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="BySecondMinuteType">
		<xs:annotation>Should be list of SecondMinuteType</xs:annotation>
		<xs:restriction base="xs:string">
			<xs:pattern value="([0-9]|[1-5][0-9])(,([0-9]|[1-5][0-9]))*"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="HourType">
		<xs:restriction base="xs:integer">
			<xs:minInclusive value="0"/>
			<xs:maxInclusive value="23"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="ByHourType">
		<xs:annotation>Should be list of HourType</xs:annotation>
		<xs:restriction base="xs:string">
			<xs:pattern value="([0-9]|[1][0-9]|[2][0-3])(,([0-9]|[1][0-9]|[2][0-3]))*"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="PositiveWeekType">
		<xs:restriction base="xs:integer">
			<xs:minInclusive value="1"/>
			<xs:maxInclusive value="53"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="NegativeWeekType">
		<xs:restriction base="xs:integer">
			<xs:minInclusive value="-53"/>
			<xs:maxInclusive value="-1"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="WeekType">
		<xs:union memberTypes="PositiveWeekType NegativeWeekType"/>
	</xs:simpleType>
	<xs:simpleType name="ByWeekType">
		<xs:restriction base="xs:string">
			<xs:pattern value="([+|-]?([1-9]|[1-4][0-9]|[5][0-3]))(,([+|-]?([1-9]|[1-4][0-9]|[5][0-3])))*"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="MonthType">
		<xs:restriction base="xs:integer">
			<xs:maxInclusive value="12"/>
			<xs:minInclusive value="1"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="ByMonthType">
		<xs:restriction base="xs:string">
			<xs:pattern value="([1-9]|[1][1-2])(,([1-9]|[1][1-2]))*"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:complexType name="TimeType">
		<xs:group ref="Node"/>
		<xs:attribute name="dtstart" type="xs:string" use="required">
			<xs:annotation>Should be xs:datetime</xs:annotation>
		</xs:attribute>
		<xs:attribute name="dtend" type="xs:string">
			<xs:annotation>Should be xs:datetime</xs:annotation>
		</xs:attribute>
		<xs:attribute name="duration" type="xs:string">
			<xs:annotation>Should be xs:duration</xs:annotation>
		</xs:attribute>
		<xs:attribute name="freq" type="FreqType"/>
		<xs:attribute name="until" type="xs:string">
			<xs:annotation>Should be xs:datetime</xs:annotation>
		</xs:attribute>
		<xs:attribute name="count" type="xs:integer"/>
		<xs:attribute name="interval" type="xs:integer" default="1"/>
		<xs:attribute name="bysecond" type="BySecondMinuteType"/>
		<xs:attribute name="byminute" type="BySecondMinuteType"/>
		<xs:attribute name="byhour" type="ByHourType"/>
		<xs:attribute name="byday" type="ByDayType"/>
		<xs:attribute name="bymonthday" type="ByMonthDayType"/>
		<xs:attribute name="byyearday" type="ByYearDayType"/>
		<xs:attribute name="byweekno" type="ByWeekType"/>
		<xs:attribute name="bymonth" type="ByMonthType"/>
		<xs:attribute name="wkst" type="DayType" default="MO"/>
		<xs:attribute name="bysetpos" type="YearDayType"/>
	</xs:complexType>
	<xs:simpleType name="TZIDType">
		<xs:restriction base="xs:string"/>
	</xs:simpleType>
	<xs:simpleType name="TZURLType">
		<xs:restriction base="xs:anyURI"/>
	</xs:simpleType>
	<xs:complexType name="TimeSwitchType">
		<xs:sequence>
			<xs:element name="time" type="TimeType"/>
			<xs:sequence minOccurs="0">
				<xs:element name="not-present" type="NotPresentAction"/>
				<xs:element name="time" type="TimeType" minOccurs="0" maxOccurs="unbounded"/>
			</xs:sequence>
			<xs:element name="otherwise" type="OtherwiseAction" minOccurs="0"/>
		</xs:sequence>
		<xs:attribute name="tzid" type="TZIDType"/>
		<xs:attribute name="tzurl" type="TZURLType"/>
	</xs:complexType>
	<xs:simpleType name="PriorityValues">
		<xs:restriction base="xs:NMTOKEN">
			<xs:pattern value="[e|E][m|M][e|E][r|R][g|G][e|E][n|N][c|C][y|Y]"/>
			<xs:pattern value="[u|U][r|R][g|G][e|E][n|N][t|T]"/>
			<xs:pattern value="[n|N][o|O][r|R][m|M][a|A][l|L]"/>
			<xs:pattern value="[n|N][o|O][n|N]-[u|U][r|R][g|G][e|E][n|N][t|T]"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:complexType name="PriorityType">
		<xs:group ref="Node"/>
		<xs:attribute name="less" type="PriorityValues"/>
		<xs:attribute name="greater" type="PriorityValues"/>
		<xs:attribute name="equal" type="PriorityValues"/>
	</xs:complexType>
	<xs:complexType name="PrioritySwitchType">
		<xs:sequence>
			<xs:element name="priority" type="PriorityType"/>
			<xs:sequence minOccurs="0">
				<xs:element name="not-present" type="NotPresentAction"/>
				<xs:element name="priority" type="PriorityType" minOccurs="0" maxOccurs="unbounded"/>
			</xs:sequence>
			<xs:element name="otherwise" type="OtherwiseAction" minOccurs="0"/>
		</xs:sequence>
	</xs:complexType>
	<xs:simpleType name="LocationPriorityType">
		<xs:restriction base="xs:float">
			<xs:minInclusive value="0.0"/>
			<xs:maxInclusive value="1.0"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:complexType name="LocationType">
		<xs:group ref="Node"/>
		<xs:attribute name="url" type="xs:anyURI"/>
		<xs:attribute name="priority" type="LocationPriorityType"/>
		<xs:attribute name="clear" type="YesNoType" default="no"/>
	</xs:complexType>
	<xs:complexType name="LookupType">
		<xs:sequence>
			<xs:element name="success" minOccurs="0">
				<xs:complexType>
					<xs:group ref="Node"/>
				</xs:complexType>
			</xs:element>
			<xs:element name="notfound" minOccurs="0">
				<xs:complexType>
					<xs:group ref="Node"/>
				</xs:complexType>
			</xs:element>
			<xs:element name="failure" minOccurs="0">
				<xs:complexType>
					<xs:group ref="Node"/>
				</xs:complexType>
			</xs:element>
		</xs:sequence>
		<xs:attribute name="source" type="xs:string" use="required"/>
		<xs:attribute name="timeout" type="xs:integer" default="30"/>
		<xs:attribute name="use" type="xs:string"/>
		<xs:attribute name="ignore" type="xs:string"/>
		<xs:attribute name="clear" type="YesNoType" default="no"/>
	</xs:complexType>
	<xs:complexType name="RemoveLocationType">
		<xs:group ref="Node"/>
		<xs:attribute name="location" type="xs:string"/>
		<xs:attribute name="param" type="xs:string"/>
		<xs:attribute name="value" type="xs:string"/>
	</xs:complexType>
	<xs:simpleType name="OrderingType">
		<xs:restriction base="xs:NMTOKEN">
			<xs:enumeration value="parallel"/>
			<xs:enumeration value="sequential"/>
			<xs:enumeration value="first-only"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:complexType name="ProxyAction">
		<xs:sequence>
			<xs:element name="busy" minOccurs="0">
				<xs:complexType>
					<xs:group ref="Node"/>
				</xs:complexType>
			</xs:element>
			<xs:element name="noanswer" minOccurs="0">
				<xs:complexType>
					<xs:group ref="Node"/>
				</xs:complexType>
			</xs:element>
			<xs:element name="failure" minOccurs="0">
				<xs:complexType>
					<xs:group ref="Node"/>
				</xs:complexType>
			</xs:element>
			<xs:element name="redirection" minOccurs="0">
				<xs:complexType>
					<xs:group ref="Node"/>
				</xs:complexType>
			</xs:element>
			<xs:element name="default" minOccurs="0">
				<xs:complexType>
					<xs:group ref="Node"/>
				</xs:complexType>
			</xs:element>
		</xs:sequence>
		<xs:attribute name="timeout" type="xs:integer" use="optional"/>
		<xs:attribute name="recursive" type="YesNoType" use="optional" default="yes"/>
		<xs:attribute name="ordering" type="OrderingType" use="optional" default="parallel"/>
	</xs:complexType>
	<xs:complexType name="RedirectAction">
		<xs:attribute name="permanent" type="YesNoType" default="no"/>
	</xs:complexType>
	<xs:simpleType name="StatusType">
		<xs:restriction base="xs:NMTOKEN">
			<xs:enumeration value="busy"/>
			<xs:enumeration value="notfound"/>
			<xs:enumeration value="reject"/>
			<xs:enumeration value="error"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:complexType name="RejectAction">
		<xs:attribute name="status" type="StatusType"/>
		<xs:attribute name="reason" type="xs:string"/>
	</xs:complexType>
	<xs:complexType name="MailAction">
		<xs:group ref="Node"/>
		<xs:attribute name="url" type="xs:anyURI" use="required"/>
	</xs:complexType>
	<xs:complexType name="LogAction">
		<xs:group ref="Node"/>
		<xs:attribute name="name" type="xs:string"/>
		<xs:attribute name="comment" type="xs:string"/>
	</xs:complexType>
	<xs:complexType name="SubAction">
		<xs:attribute name="ref" type="xs:string"/>
	</xs:complexType>
	<xs:complexType name="AncillaryType"/>
	<xs:complexType name="SubactionType">
		<xs:group ref="Node"/>
		<xs:attribute name="id" use="required"/>
	</xs:complexType>
	<xs:complexType name="IncomingType">
		<xs:group ref="Node"/>
	</xs:complexType>
	<xs:complexType name="OutgoingType">
		<xs:group ref="Node"/>
	</xs:complexType>
	<xs:element name="cpl">
		<xs:complexType>
			<xs:sequence>
				<xs:element name="ancillary" type="AncillaryType" minOccurs="0"/>
				<xs:element name="subaction" type="SubactionType" minOccurs="0"/>
				<xs:choice minOccurs="0">
					<xs:element name="incoming" type="IncomingType"/>
					<xs:element name="outgoing" type="OutgoingType"/>
				</xs:choice>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
</xs:schema>

