<?xml version="1.0" encoding="UTF-8"?>
<schema targetNamespace="urn:mpeg:mpegB:schema:IPMP-XML-MESSAGES:2007"
		xmlns:ipmpmsg="urn:mpeg:mpegB:schema:IPMP-XML-MESSAGES:2007"
		xmlns="http://www.w3.org/2001/XMLSchema" 
		xmlns:dsig="http://www.w3.org/2000/09/xmldsig#" 
		xmlns:xenc="http://www.w3.org/2001/04/xmlenc#" 
		xmlns:ipmpinfo="urn:mpeg:mpeg21:2004:01-IPMPINFO-NS"  
		xmlns:rel-r="urn:mpeg:mpeg21:2003:01-REL-R-NS" 
		xmlns:dii="urn:mpeg:mpeg21:2002:01-DII-NS"
		xmlns:ipmpdidl="urn:mpeg:mpeg21:2004:01-IPMPDIDL-NS"  
		elementFormDefault="qualified" attributeFormDefault="unqualified">
	<import namespace="urn:mpeg:mpeg21:2004:01-IPMPINFO-NS" schemaLocation="http://www.dmpf.org/schemas/ipmpinfo.xsd"/>
	<import namespace="urn:mpeg:mpeg21:2004:01-IPMPDIDL-NS" schemaLocation="http://www.dmpf.org/schemas/ipmpdidl.xsd"/>
	<import namespace="http://www.w3.org/2000/09/xmldsig#" schemaLocation="http://www.w3.org/TR/2002/REC-xmldsig-core-20020212/xmldsig-core-schema.xsd"/>
	<import namespace="http://www.w3.org/2001/04/xmlenc#" schemaLocation="http://www.w3.org/TR/2002/REC-xmlenc-core-20021210/xenc-schema.xsd"/>
	<import namespace="urn:mpeg:mpeg21:2003:01-REL-R-NS" schemaLocation="http://www.dmpf.org/schemas/rel-r.xsd"/>
	<import namespace="urn:mpeg:mpeg21:2002:01-DII-NS" schemaLocation="http://www.dmpf.org/schemas/dii.xsd"/>
	<!-- Abstract Base Type from which both DRM Message Containers and DRM Messages inherit -->
	<complexType name="IPMPBaseType" abstract="true"/>
	<!--ToolMessageBase-->
	<element name="ToolMessageBase" type="ipmpmsg:ToolMessageBaseType" abstract="true"/>
	<complexType name="ToolMessageBaseType" abstract="true">
		<complexContent>
			<extension base="ipmpmsg:IPMPBaseType">
				<sequence>
					<element name="Sender" type="anyURI"/>
					<element name="Recipient" type="anyURI"/>
				</sequence>
			</extension>
		</complexContent>
	</complexType>
	<!--Data_BaseClass-->
	<element name="Data_BaseClass" type="ipmpmsg:Data_BaseClassType" abstract="true"/>
	<complexType name="Data_BaseClassType" abstract="true">
		<complexContent>
			<extension base="ipmpmsg:IPMPBaseType">
				<sequence>
					<element name="dataID" type="unsignedInt"/>
				</sequence>
			</extension>
		</complexContent>
	</complexType>
	<!-- **************************************************************** -->
	<!--  DRM Message Containers  -->
	<!-- **************************************************************** -->
	<!-- MessageFromDI-->
	<element name="MessageFromDI" type="ipmpmsg:MessageFromDIType" substitutionGroup="ipmpmsg:ToolMessageBase"/>
	<complexType name="MessageFromDIType">
		<complexContent>
			<extension base="ipmpmsg:ToolMessageBaseType">
				<sequence>
					<element ref="ipmpmsg:Data_BaseClass" minOccurs="0" maxOccurs="unbounded"/>
				</sequence>
			</extension>
		</complexContent>
	</complexType>
	<!--MessageFromTool-->
	<element name="MessageFromTool" type="ipmpmsg:MessageFromToolType" substitutionGroup="ipmpmsg:ToolMessageBase"/>
	<complexType name="MessageFromToolType">
		<complexContent>
			<extension base="ipmpmsg:ToolMessageBaseType">
				<sequence>
					<element ref="ipmpmsg:Data_BaseClass" minOccurs="0" maxOccurs="unbounded"/>
				</sequence>
			</extension>
		</complexContent>
	</complexType>
	<!-- **************************************************************** -->
	<!-- DRM Messages -->
	<!-- **************************************************************** -->
	<!-- AUTHENTICATION MESSAGES -->
	<!--InitAuthentication-->
	<element name="InitAuthentication" type="ipmpmsg:InitAuthenticationType" substitutionGroup="ipmpmsg:Data_BaseClass"/>
	<complexType name="InitAuthenticationType">
		<complexContent>
			<extension base="ipmpmsg:Data_BaseClassType">
				<sequence>
					<element name="ContextID" type="anyURI" minOccurs="0"/>
					<element name="AuthType" type="ipmpmsg:AUTType"/>
					<!--Context ID of the logical instance of the Tool with which mutual authentication is to be performed-->
				</sequence>
			</extension>
		</complexContent>
	</complexType>
	<simpleType name="AUTType">
		<annotation>
			<documentation>
				"01" - No Authentication Required 
				"02" - No ID verify, Do secure channel 
				"03" - Do ID verify, No secure channel
				"04" - Do ID verify, Do secure channel
			</documentation>
		</annotation>
		<restriction base="integer">
			<enumeration value="01"/>
			<enumeration value="02"/>
			<enumeration value="03"/>
			<enumeration value="04"/>
		</restriction>
	</simpleType>
	<!--MutualAuthentication-->
	<element name="MutualAuthentication" type="ipmpmsg:MutualAuthenticationType" substitutionGroup="ipmpmsg:Data_BaseClass"/>
	<complexType name="MutualAuthenticationType">
		<complexContent>
			<extension base="ipmpmsg:Data_BaseClassType">
				<sequence>
					<choice minOccurs="0">
						<element name="requestNegotiation" type="ipmpmsg:requestNegotiationType"/>
						<element name="successNegotiation" type="ipmpmsg:successNegotiationType"/>
						<element name="failedNegotiation" type="boolean" fixed="true"/>
					</choice>
					<element name="authenticationData" type="hexBinary" minOccurs="0"/>
					<element name="authCodes" type="ipmpmsg:AuthCodesType" minOccurs="0"/>
				</sequence>
			</extension>
		</complexContent>
	</complexType>
	<complexType name="requestNegotiationType">
		<sequence>
			<element name="candidateAlgorithms" type="ipmpmsg:AlgorithmDescriptorType"/>
		</sequence>
	</complexType>
	<complexType name="AlgorithmDescriptorType">
		<sequence>
			<element name="algoID" type="anyURI" maxOccurs="unbounded"/>
			<element name="opaqueData" type="base64Binary" minOccurs="0"/>
		</sequence>
	</complexType>
	<complexType name="successNegotiationType">
		<sequence>
			<element name="agreedAlgorithms" type="ipmpmsg:AlgorithmDescriptorType" maxOccurs="unbounded"/>
		</sequence>
	</complexType>
	<complexType name="AuthCodesType">
		<sequence>
			<element name="certificates" type="dsig:KeyInfoType" maxOccurs="unbounded"/>
			<element name="trustData" type="hexBinary" minOccurs="0"/>
		</sequence>
	</complexType>
	<!--SecureContainer-->
	<element name="SecureContainer" type="ipmpmsg:SecureContainerType" substitutionGroup="ipmpmsg:Data_BaseClass"/>
	<annotation>
		<documentation>
			To fill the protectedMsgTag field below, use values from
			Table 1 in doc ISO/IEC 14496-13:2004
		</documentation>
	</annotation>
	<complexType name="SecureContainerType">
		<complexContent>
			<extension base="ipmpmsg:Data_BaseClassType">
				<choice>
					<sequence>
						<element name="encryptedData" type="hexBinary"/>
						<element name="MAC" type="hexBinary" minOccurs="0"/>
					</sequence>
					<sequence>
						<element name="protectedMsgTag" type="short"/>
						<element name="protectedMsg" type="hexBinary"/>
						<element name="MAC" type="hexBinary" minOccurs="0"/>
					</sequence>
				</choice>
			</extension>
		</complexContent>
	</complexType>
	<!-- DRM TOOL CONNECTION AND DISCONNECTION MESSAGES -->
	<!--GetTools-->
	<element name="GetTools" type="ipmpmsg:GetToolsType" substitutionGroup="ipmpmsg:Data_BaseClass"/>
	<complexType name="GetToolsType">
		<complexContent>
			<extension base="ipmpmsg:Data_BaseClassType"/>
		</complexContent>
	</complexType>
	<!--GetToolsResponse-->
	<element name="GetToolsResponse" type="ipmpmsg:GetToolsResponseType" substitutionGroup="ipmpmsg:Data_BaseClass"/>
	<complexType name="GetToolsResponseType">
		<complexContent>
			<extension base="ipmpmsg:Data_BaseClassType">
				<sequence>
					<element ref="ipmpmsg:Tool" minOccurs="0" maxOccurs="unbounded"/>
				</sequence>
			</extension>
		</complexContent>
	</complexType>
	<element name="Tool" type="ipmpmsg:toolType"/>
	<!--It represents a DRM Tool, an extension of ipmpinfo:Tool-->
	<complexType name="toolType">
		<complexContent>
			<extension base="ipmpinfo:ToolType">
				<sequence>
					<element name="alternates" type="ipmpinfo:ToolType" minOccurs="0"/>
					<element ref="ipmpmsg:ParametricDescription" minOccurs="0" maxOccurs="unbounded"/>
				</sequence>
			</extension>
		</complexContent>
	</complexType>
	<!--GetToolContext-->
	<element name="GetToolContext" type="ipmpmsg:GetToolContextType" substitutionGroup="ipmpmsg:Data_BaseClass"/>
	<complexType name="GetToolContextType">
		<complexContent>
			<extension base="ipmpmsg:Data_BaseClassType"/>
		</complexContent>
	</complexType>
	<!--GetToolContextResponse-->
	<element name="GetToolContextResponse" type="ipmpmsg:GetToolContextResponseType" substitutionGroup="ipmpmsg:Data_BaseClass"/>
	<complexType name="GetToolContextResponseType">
		<complexContent>
			<extension base="ipmpmsg:Data_BaseClassType">
				<sequence>
					<element name="ToolContextID" type="unsignedInt" minOccurs="0" maxOccurs="unbounded"/>
				</sequence>
			</extension>
		</complexContent>
	</complexType>
	<!--ConnectTool-->
	<element name="ConnectTool" type="ipmpmsg:ConnectToolType" substitutionGroup="ipmpmsg:Data_BaseClass"/>
	<complexType name="ConnectToolType">
		<complexContent>
			<extension base="ipmpmsg:Data_BaseClassType">
				<sequence>
					<element ref="ipmpinfo:Tool"/>
				</sequence>
			</extension>
		</complexContent>
	</complexType>
	<!--DisconnectTool-->
	<element name="DisconnectTool" type="ipmpmsg:DisconnectToolType" substitutionGroup="ipmpmsg:Data_BaseClass"/>
	<complexType name="DisconnectToolType">
		<complexContent>
			<extension base="ipmpmsg:Data_BaseClassType">
				<sequence>
					<element name="ToolContextID" type="unsignedInt"/>
				</sequence>
			</extension>
		</complexContent>
	</complexType>
	<!--ParamtericDescription-->
	<element name="ParametricDescription" type="ipmpmsg:ParametricDescriptionType" substitutionGroup="ipmpmsg:Data_BaseClass"/>
	<complexType name="ParametricDescriptionType">
		<complexContent>
			<extension base="ipmpmsg:Data_BaseClassType">
				<sequence>
					<element name="descriptionComment" type="string" minOccurs="0"/>
					<element name="majorVersion" type="byte"/>
					<element name="minorVersion" type="byte"/>
					<element name="paramToolDescription" type="ipmpmsg:paramToolDescriptionType" minOccurs="0"/>
				</sequence>
			</extension>
		</complexContent>
	</complexType>
	<complexType name="paramToolDescriptionType">
		<sequence>
			<element name="class" type="string"/>
			<element name="subClass" type="string"/>
			<element name="typeData" type="string" minOccurs="0"/>
			<element name="type" type="string" minOccurs="0"/>
			<element name="addedData" type="string" minOccurs="0"/>
		</sequence>
	</complexType>
	<!--ToolParamCapabilitiesQuery-->
	<element name="ToolParamCapabilitiesQuery" type="ipmpmsg:ToolParamCapabilitiesQueryType" substitutionGroup="ipmpmsg:Data_BaseClass"/>
	<complexType name="ToolParamCapabilitiesQueryType">
		<complexContent>
			<extension base="ipmpmsg:Data_BaseClassType">
				<sequence>
					<element name="toolParamDesc" type="ipmpmsg:ParametricDescriptionType"/>
				</sequence>
			</extension>
		</complexContent>
	</complexType>
	<!--ToolParamCapabilitiesResponse-->
	<element name="ToolParamCapabilitiesResponse" type="ipmpmsg:ToolParamCapabilitiesResponseType" substitutionGroup="ipmpmsg:Data_BaseClass"/>
	<complexType name="ToolParamCapabilitiesResponseType">
		<complexContent>
			<extension base="ipmpmsg:Data_BaseClassType">
				<sequence>
					<element name="capabilitiesSupported" type="boolean"/>
				</sequence>
			</extension>
		</complexContent>
	</complexType>
	<!-- DRM TOOL NOTIFICATION -->
	<!--NotifyToolEvent-->
	<element name="NotifyToolEvent" type="ipmpmsg:NotifyToolEventType" substitutionGroup="ipmpmsg:Data_BaseClass"/>
	<complexType name="NotifyToolEventType">
		<complexContent>
			<extension base="ipmpmsg:Data_BaseClassType">
				<sequence>
					<sequence minOccurs="0">
						<element name="OD_ID" type="unsignedInt"/>
						<element name="ESD_ID" type="unsignedInt"/>
					</sequence>
					<element ref="ipmpmsg:EventType" maxOccurs="unbounded"/>
					<element name="toolContextID" type="unsignedInt"/>
				</sequence>
			</extension>
		</complexContent>
	</complexType>
	<element name="EventType" type="ipmpmsg:EvType"/>
	<simpleType name="EvType">
		<annotation>
			<documentation>
				"00" – CONNECTED
				"01" - CONNECTION_FAILED
				"02" - DISCONNECTED 
				"03" - DISCONNECTION_FAILED 
				"04" - WATERMARKDETECTED 
				"05" - PARSE_TOOLPACKDATA_SUCCESS 
				"06" - PARSE_TOOLPACKDATA_FAILED 
				"07" - UNABLE_TO_PROCESS
				"08" - TOOL_GROUP_NOT_FOUND
                "09" - TERMINATION_FAILED
			    "10" - CONTROLPOINT_NOT_SUPPORTED
			    "11" - UNABLE_TO_PARSE_LICENSE
			    "12" - NO_VALID_LICENSE
			    "13" - LICENSE_VALIDATION_FAILED
			    "14" - READY_TO_PLAY
			    "15" - READY_TO_BE_TERMINATED
			</documentation>
		</annotation>
		<restriction base="integer">
			<enumeration value="00"/>
			<enumeration value="01"/>
			<enumeration value="02"/>
			<enumeration value="03"/>
			<enumeration value="04"/>
			<enumeration value="05"/>
			<enumeration value="06"/>
			<enumeration value="07"/>
			<enumeration value="08"/>
			<enumeration value="09"/>
			<enumeration value="10"/>
			<enumeration value="11"/>
			<enumeration value="12"/>
			<enumeration value="13"/>
			<enumeration value="14"/>
			<enumeration value="15"/>
		</restriction>
	</simpleType>
	<!--AddToolNotificationListener-->
	<element name="AddToolNotificationListener" type="ipmpmsg:AddToolNotificationListenerType" substitutionGroup="ipmpmsg:Data_BaseClass"/>
	<complexType name="AddToolNotificationListenerType">
		<complexContent>
			<extension base="ipmpmsg:Data_BaseClassType">
				<sequence>
					<element name="scope" type="string"/>
					<element ref="ipmpmsg:EventType" maxOccurs="unbounded"/>
					<!--see scope list in MPEG IPMPX spec-->
				</sequence>
			</extension>
		</complexContent>
	</complexType>
	<!--RemoveToolNotificationListener-->
	<element name="RemoveToolNotificationListener" type="ipmpmsg:RemoveToolNotificationListenerType" substitutionGroup="ipmpmsg:Data_BaseClass"/>
	<complexType name="RemoveToolNotificationListenerType">
		<complexContent>
			<extension base="ipmpmsg:Data_BaseClassType">
				<sequence>
					<element ref="ipmpmsg:EventType" maxOccurs="unbounded"/>
				</sequence>
			</extension>
		</complexContent>
	</complexType>
	<!-- DRM PROCESSING -->
	<!--KeyData-->
	<element name="KeyData" type="ipmpmsg:KeyDataType" substitutionGroup="ipmpmsg:Data_BaseClass"/>
	<complexType name="KeyDataType">
		<complexContent>
			<extension base="ipmpmsg:Data_BaseClassType">
				<sequence>
					<choice maxOccurs="unbounded">
						<element ref="ipmpmsg:Key"/>
						<element ref="ipmpmsg:TimeKey"/>
					</choice>
					<element name="opaqueData" type="base64Binary" minOccurs="0"/>
				</sequence>
			</extension>
		</complexContent>
	</complexType>
	<complexType name="KeyBaseType" abstract="true"/>
	<element name="Key" type="ipmpmsg:KeyType"/>
	<complexType name="KeyType">
		<complexContent>
			<extension base="ipmpmsg:KeyBaseType">
				<sequence>
					<choice>
						<element ref="xenc:EncryptedData"/>
						<element ref="xenc:EncryptedKey"/>
					</choice>
				</sequence>
			</extension>
		</complexContent>
	</complexType>
	<element name="TimeKey" type="ipmpmsg:TimeKeyType"/>
	<complexType name="TimeKeyType">
		<complexContent>
			<extension base="ipmpmsg:KeyType">
				<sequence>
					<element name="startDTS" type="unsignedLong" minOccurs="0"/>
					<element name="startPacketID" type="unsignedInt" minOccurs="0"/>
					<element name="expireDTS" type="unsignedLong" minOccurs="0"/>
					<element name="expirePacketID" type="unsignedInt" minOccurs="0"/>
				</sequence>
			</extension>
		</complexContent>
	</complexType>
	<!--RightsData-->
	<element name="RightsData" type="ipmpmsg:RightsDataType" substitutionGroup="ipmpmsg:Data_BaseClass"/>
	<complexType name="RightsDataType">
		<complexContent>
			<extension base="ipmpmsg:Data_BaseClassType">
				<sequence>
					<element name="rightsInfo" type="rel-r:License"/>
				</sequence>
			</extension>
		</complexContent>
	</complexType>
	<!--CanProcess-->
	<element name="CanProcess" type="ipmpmsg:CanProcessType" substitutionGroup="ipmpmsg:Data_BaseClass"/>
	<complexType name="CanProcessType">
		<complexContent>
			<extension base="ipmpmsg:Data_BaseClassType">
				<sequence>
					<element name="canProcess" type="boolean"/>
				</sequence>
			</extension>
		</complexContent>
	</complexType>
	<!--OpaqueData-->
	<element name="OpaqueData" type="ipmpmsg:OpaqueDataType" substitutionGroup="ipmpmsg:Data_BaseClass"/>
	<complexType name="OpaqueDataType">
		<complexContent>
			<extension base="ipmpmsg:Data_BaseClassType">
				<sequence>
					<element name="opaqueData" type="base64Binary"/>
				</sequence>
			</extension>
		</complexContent>
	</complexType>
	<!--AudioWatermarkingInit-->
	<element name="AudioWatermarkingInit" type="ipmpmsg:AudioWatermarkingInitType" substitutionGroup="ipmpmsg:Data_BaseClass"/>
	<complexType name="AudioWatermarkingInitType">
		<complexContent>
			<extension base="ipmpmsg:Data_BaseClassType">
				<sequence>
					<element name="inputFormat" type="ipmpmsg:AudioFormatType"/>
					<element name="requiredOp" type="ipmpmsg:requiredOpType"/>
					<element name="wmPayload" type="string" minOccurs="0"/>
					<element name="wmRecipientID" type="anyURI" minOccurs="0"/>
					<element name="opaqueData" type="base64Binary" minOccurs="0"/>
				</sequence>
			</extension>
		</complexContent>
	</complexType>
	<complexType name="AudioFormatType">
		<sequence minOccurs="0">
			<element name="nChannels" type="byte"/>
			<element name="bitPerSample" type="byte"/>
			<element name="frequency" type="decimal"/>
		</sequence>
		<attribute name="mimeType" type="string" use="required"/>
	</complexType>
	<simpleType name="requiredOpType">
		<annotation>
			<documentation>
				"00" - INSERT_WM "01" - EXTRACT_WM "02" - REMARK_WM "03"
				- DETECT_COMPRESSION
			</documentation>
		</annotation>
		<restriction base="integer">
			<enumeration value="00"/>
			<enumeration value="01"/>
			<enumeration value="02"/>
			<enumeration value="03"/>
		</restriction>
		<!--see type list in MPEG IPMPX spec-->
	</simpleType>
	<!--VideoWatermarkingInit-->
	<element name="VideoWatermarkingInit" type="ipmpmsg:VideoWatermarkingInitType" substitutionGroup="ipmpmsg:Data_BaseClass"/>
	<complexType name="VideoWatermarkingInitType">
		<complexContent>
			<extension base="ipmpmsg:Data_BaseClassType">
				<sequence>
					<element name="inputFormat" type="ipmpmsg:VideoFormatType"/>
					<element name="requiredOp" type="ipmpmsg:requiredOpType"/>
					<element name="wmPayload" type="string" minOccurs="0"/>
					<element name="wmRecipientID" type="anyURI" minOccurs="0"/>
					<element name="opaqueData" type="base64Binary" minOccurs="0"/>
				</sequence>
			</extension>
		</complexContent>
	</complexType>
	<complexType name="VideoFormatType">
		<sequence minOccurs="0">
			<element name="frame_horizontal_size" type="unsignedShort"/>
			<element name="frame_vertical_size" type="unsignedShort"/>
			<element name="chroma_format" type="byte"/>
		</sequence>
		<attribute name="mimeType" type="string" use="required"/>
	</complexType>
	<!--SendAudioWatermark-->
	<element name="SendAudioWatermark" type="ipmpmsg:SendAudioWatermarkType" substitutionGroup="ipmpmsg:Data_BaseClass"/>
	<complexType name="SendAudioWatermarkType">
		<complexContent>
			<extension base="ipmpmsg:Data_BaseClassType">
				<sequence>
					<element name="wm_status" type="ipmpmsg:wm_statusType"/>
					<element name="compression_status" type="ipmpmsg:compression_statusType"/>
					<element name="payload" type="string" minOccurs="0"/>
					<element name="opaqueData" type="base64Binary" minOccurs="0"/>
				</sequence>
			</extension>
		</complexContent>
	</complexType>
	<simpleType name="wm_statusType">
		<annotation>
			<documentation>
				"00" - WM_PAYLOAD "01" - WM_NOPAYLOAD "02" - NO_WM "03"
				- WM_UNKNOWN
			</documentation>
		</annotation>
		<restriction base="integer">
			<enumeration value="00"/>
			<enumeration value="01"/>
			<enumeration value="02"/>
			<enumeration value="03"/>
		</restriction>
	</simpleType>
	<simpleType name="compression_statusType">
		<annotation>
			<documentation>
				"00" - COMPRESSION "01" - NO_COMPRESSION "02" -
				COMP_UNKNOWN
			</documentation>
		</annotation>
		<restriction base="integer">
			<enumeration value="00"/>
			<enumeration value="01"/>
			<enumeration value="02"/>
		</restriction>
	</simpleType>
	<!--SendVideoWatermark-->
	<element name="SendVideoWatermark" type="ipmpmsg:SendVideoWatermarkType" substitutionGroup="ipmpmsg:Data_BaseClass"/>
	<complexType name="SendVideoWatermarkType">
		<complexContent>
			<extension base="ipmpmsg:Data_BaseClassType">
				<sequence>
					<element name="wm_status" type="ipmpmsg:wm_statusType"/>
					<element name="compression_status" type="ipmpmsg:compression_statusType"/>
					<element name="payload" type="string" minOccurs="0"/>
					<element name="opaqueData" type="base64Binary" minOccurs="0"/>
				</sequence>
			</extension>
		</complexContent>
	</complexType>
	<!--SelectiveDecryptionInit-->
	<element name="SelectiveDecryptionInit" type="ipmpmsg:SelectiveDecryptionInitType" substitutionGroup="ipmpmsg:Data_BaseClass"/>
	<complexType name="SelectiveDecryptionInitType">
		<complexContent>
			<extension base="ipmpmsg:Data_BaseClassType">
				<sequence>
					<element name="mimeType" type="string"/>
					<element name="profileLevelIndication" type="string"/>
					<element name="compliance" type="string"/>
					<element name="bufInfoStruct" type="ipmpmsg:bufInfoStructType" minOccurs="0" maxOccurs="unbounded"/>
					<choice>
						<element name="contentSpecific" type="ipmpmsg:contentSpecificType" minOccurs="0"/>
						<sequence>
							<element name="nSegments" type="short"/>
							<element name="RLE_Data" type="short" maxOccurs="unbounded"/>
						</sequence>
					</choice>
				</sequence>
			</extension>
		</complexContent>
	</complexType>
	<complexType name="bufInfoStructType">
		<sequence>
			<element name="cipher_Id" type="anyURI"/>
			<element name="syncBoundary" type="string"/>
			<choice>
				<sequence>
					<element name="mode" type="anyURI" minOccurs="0"/>
					<element name="blockSize" type="short"/>
					<element name="keySize" type="short"/>
				</sequence>
				<element name="Stream_Cipher_Specific_Init_Info" type="hexBinary"/>
			</choice>
		</sequence>
	</complexType>
	<complexType name="contentSpecificType">
		<sequence>
			<element name="numFields" type="short"/>
			<element name="fieldStruct" type="ipmpmsg:fieldStructType" maxOccurs="unbounded"/>
		</sequence>
	</complexType>
	<complexType name="fieldStructType">
		<sequence>
			<element name="field_id" type="anyURI"/>
			<element name="fieldScope" type="short"/>
			<element name="buf" type="short"/>
			<element name="map" type="ipmpmsg:mapType" minOccurs="0"/>
		</sequence>
	</complexType>
	<complexType name="mapType">
		<sequence>
			<element name="sizeMapTable" type="short" minOccurs="0"/>
			<element name="mappingTable" type="short" minOccurs="0" maxOccurs="unbounded"/>
			<element name="shuffleSpecificInfo" type="hexBinary" minOccurs="0"/>
		</sequence>
	</complexType>
	<!-- USER INTERACTION MESSAGES -->
	<!--UserQuery-->
	<element name="UserQuery" type="ipmpmsg:UserQueryType" substitutionGroup="ipmpmsg:Data_BaseClass"/>
	<complexType name="UserQueryType">
		<complexContent>
			<extension base="ipmpmsg:Data_BaseClassType">
				<sequence>
					<element name="altText" type="ipmpmsg:altTextType" maxOccurs="unbounded"/>
				</sequence>
			</extension>
		</complexContent>
	</complexType>
	<complexType name="altTextType">
		<sequence>
			<element name="languageCode" type="language"/>
			<element name="titleText" type="string" minOccurs="0"/>
			<element name="displayText" type="ipmpmsg:displayTextType" minOccurs="0" maxOccurs="unbounded"/>
			<element name="needReplyText" type="ipmpmsg:replyTextType" minOccurs="0" maxOccurs="unbounded"/>
			<element name="inclOptionSelect" type="ipmpmsg:inclOptionSelectType" minOccurs="0" maxOccurs="unbounded"/>
			<element name="SMIL_URL" type="string" minOccurs="0" maxOccurs="unbounded"/>
			<element name="SMIL" type="hexBinary" minOccurs="0"/>
			<!-- ISO 639-2:1998 bibliographic three character language code-->
		</sequence>
	</complexType>
	<complexType name="displayTextType">
		<sequence>
			<element name="text" type="string"/>
		</sequence>
		<attribute name="ID" type="unsignedShort" use="required"/>
	</complexType>
	<complexType name="replyTextType">
		<sequence>
			<element name="text" type="string"/>
		</sequence>
		<attribute name="ID" type="unsignedShort" use="required"/>
		<attribute name="subID" type="unsignedShort" use="required"/>
		<attribute name="isHidden" type="boolean"/>
	</complexType>
	<complexType name="inclOptionSelectType">
		<sequence>
			<element name="promptText" type="string"/>
		</sequence>
		<attribute name="ID" type="unsignedShort" use="required"/>
		<attribute name="subID" type="unsignedShort" use="required"/>
		<attribute name="isExclusive" type="boolean"/>
	</complexType>
	<!--UserQueryResponse-->
	<element name="UserQueryResponse" type="ipmpmsg:UserQueryResponseType" substitutionGroup="ipmpmsg:Data_BaseClass"/>
	<complexType name="UserQueryResponseType">
		<complexContent>
			<extension base="ipmpmsg:Data_BaseClassType">
				<sequence>
					<element name="replyText" type="ipmpmsg:responseReplyTextType" minOccurs="0" maxOccurs="unbounded"/>
				</sequence>
			</extension>
		</complexContent>
	</complexType>
	<complexType name="responseReplyTextType">
		<sequence>
			<element name="languageCode" type="language"/>
			<element name="replyText" type="ipmpmsg:replyTextType" minOccurs="0" maxOccurs="unbounded"/>
			<element name="optionResult" type="ipmpmsg:optionResultType" minOccurs="0" maxOccurs="unbounded"/>
			<!-- ISO 639-2:1998 bibliographic three character language code-->
		</sequence>
	</complexType>
	<complexType name="optionResultType">
		<sequence>
			<element name="result" type="boolean"/>
		</sequence>
		<attribute name="ID" type="unsignedShort" use="optional"/>
		<attribute name="subID" type="unsignedShort" use="optional"/>
	</complexType>
	<!-- SPECIFIC IPMP MESSAGES FOR THE MEDIA STREAMING PLAYER MAF -->
	<!-- InitialiseTool -->
	<element name="InitialiseTool" type="ipmpmsg:InitialiseToolType" substitutionGroup="ipmpmsg:Data_BaseClass"/>
	<complexType name="InitialiseToolType">
		<complexContent>
			<extension base="ipmpmsg:Data_BaseClassType">
				<sequence>
					<sequence minOccurs="0" maxOccurs="unbounded">
						<element ref="ipmpmsg:ControlPointID"/>
						<element ref="ipmpmsg:ControlPointAddress" minOccurs="0"/>
					</sequence>
					<element ref="ipmpmsg:Data_BaseClass" minOccurs="0" maxOccurs="unbounded"/>
				</sequence>
			</extension>
		</complexContent>
	</complexType>
	<element name="ControlPointID" type="ipmpmsg:ControlPointType"/>
	<complexType name="ControlPointType">
		<annotation>
			<documentation>
				The Control Point ID is an identifier given by a
				DMP-appointed Registration Authority with the purpose of
				indicating a position in the media resource processings
				chain, as defined in the DMP Terminology. 
				The following values are currently permitted : 
				"00" - NO_CONTROL_POINT 
				"01" - CONTROL_POINT_BEFORE_DEMULTIPLEXING 
				"02" - CONTROL_POINT_BEFORE_AUDIO_DECODING 
				"03" - CONTROL_POINT_AFTER_AUDIO_DECODING 
				"04" - CONTROL_POINT_BEFORE_VIDEO_DECODING 
				"05" - CONTROL_POINT_AFTER_VIDEO_DECODING 
				"06" - CONTROL_POINT_BEFORE_STORING 
				"07" - CONTROL_POINT_BEFORE_PLAYBACK 
				"08" - CONTROL_POINT_BEFORE_TRANSFERRING
			</documentation>
		</annotation>
		<sequence>
			<element name="ID" type="integer"/>
		</sequence>
	</complexType>
	<element name="ControlPointAddress" type="base64Binary"/>
	<!--ToolPack Extensions-->
	<!--GetToolGroupReference-->
	<element name="GetToolGroupReference" type="ipmpmsg:GetToolGroupReferenceType" substitutionGroup="ipmpmsg:Data_BaseClass"/>
	<complexType name="GetToolGroupReferenceType">
		<complexContent>
			<extension base="ipmpmsg:Data_BaseClassType"/>
		</complexContent>
	</complexType>
	<!--GetToolGroupReferenceResponse-->
	<element name="GetToolGroupReferenceResponse" type="ipmpmsg:GetToolGroupReferenceResponseType" substitutionGroup="ipmpmsg:Data_BaseClass"/>
	<complexType name="GetToolGroupReferenceResponseType">
		<complexContent>
			<extension base="ipmpmsg:Data_BaseClassType">
				<sequence>
					<element name="ToolGroupReference" type="base64Binary"/>
				</sequence>
			</extension>
		</complexContent>
	</complexType>
	<!--GetToolReference-->
	<element name="GetToolReference" type="ipmpmsg:GetToolReferenceType" substitutionGroup="ipmpmsg:Data_BaseClass"/>
	<complexType name="GetToolReferenceType">
		<complexContent>
			<extension base="ipmpmsg:Data_BaseClassType">
				<sequence>
					<element ref="ipmpmsg:IPMPToolID" maxOccurs="unbounded"/>
				</sequence>
			</extension>
		</complexContent>
	</complexType>
	<element name="IPMPToolID" type="anyURI"/>
	<!--GetToolReferenceResponse-->
	<element name="GetToolReferenceResponse" type="ipmpmsg:GetToolReferenceResponseType" substitutionGroup="ipmpmsg:Data_BaseClass"/>
	<complexType name="GetToolReferenceResponseType">
		<complexContent>
			<extension base="ipmpmsg:Data_BaseClassType">
				<sequence>
					<sequence maxOccurs="unbounded">
						<element ref="ipmpmsg:IPMPToolID"/>
						<element name="ToolReference" type="base64Binary"/>
					</sequence>
				</sequence>
			</extension>
		</complexContent>
	</complexType>
	<!--ToolPackDataRequest-->
	<element name="GetToolPackData" type="ipmpmsg:GetToolPackDataType" substitutionGroup="ipmpmsg:Data_BaseClass"/>
	<complexType name="GetToolPackDataType">
		<complexContent>
			<extension base="ipmpmsg:Data_BaseClassType"/>
		</complexContent>
	</complexType>
	<!--ToolPackData-->
	<element name="ToolPackData" type="ipmpmsg:ToolPackDataType" substitutionGroup="ipmpmsg:Data_BaseClass"/>
	<complexType name="ToolPackDataType">
		<complexContent>
			<extension base="ipmpmsg:Data_BaseClassType">
				<sequence>
					<element name="opaqueData" type="base64Binary"/>
				</sequence>
			</extension>
		</complexContent>
	</complexType>
	<!-- ******************************************************************** -->
	<!--  Interface Messages Between the  Resource Processor and IPMP Processor  -->
	<!-- ******************************************************************** -->
	<element name="InitialiseIPMPProcessor" type="ipmpmsg:InitialiseIPMPProcessorType" substitutionGroup="ipmpmsg:Data_BaseClass"/>
	<complexType name="InitialiseIPMPProcessorType">
		<complexContent>
			<extension base="ipmpmsg:Data_BaseClassType">
				<sequence>
					<sequence minOccurs="0" maxOccurs="unbounded">
						<element ref="ipmpmsg:ControlPointID"/>
						<element ref="ipmpmsg:ControlPointAddress" minOccurs="0"/>
					</sequence>
					<element ref="ipmpinfo:IPMPGeneralInfoDescriptor" minOccurs="0"/>
					<element ref="ipmpdidl:ProtectedAsset" minOccurs="0" maxOccurs="unbounded"/>
				</sequence>
			</extension>
		</complexContent>
	</complexType>
	<element name="GetProtectedAsset" type="ipmpmsg:GetProtectedAssetType" substitutionGroup="ipmpmsg:Data_BaseClass"/>
	<complexType name="GetProtectedAssetType">
		<complexContent>
			<extension base="ipmpmsg:Data_BaseClassType"/>
		</complexContent>
	</complexType>
	<element name="GetProtectedAssetResponse" type="ipmpmsg:GetProtectedAssetResponseType"/>
	<complexType name="GetProtectedAssetResponseType">
		<complexContent>
			<extension base="ipmpmsg:Data_BaseClassType">
				<sequence>
					<element ref="ipmpdidl:ProtectedAsset" maxOccurs="unbounded"/>
				</sequence>
			</extension>
		</complexContent>
	</complexType>
	<element name="GetRightsData" type="ipmpmsg:GetRightsDataType" substitutionGroup="ipmpmsg:Data_BaseClass"/>
	<complexType name="GetRightsDataType">
		<complexContent>
			<extension base="ipmpmsg:Data_BaseClassType">
				<sequence>
					<element ref="dii:Identifier" maxOccurs="unbounded"/>
				</sequence>
			</extension>
		</complexContent>
	</complexType>
	<element name="NotifyIPMPProcessorEvent" type="ipmpmsg:NotifyIPMPProcessorEventType" substitutionGroup="ipmpmsg:Data_BaseClass"/>
	<complexType name="NotifyIPMPProcessorEventType">
		<complexContent>
			<extension base="ipmpmsg:Data_BaseClassType">
				<sequence>
					<element ref="ipmpmsg:EventType" maxOccurs="unbounded"/>
				</sequence>
			</extension>
		</complexContent>
	</complexType>
	<element name="TerminateIPMPProcessor" type="ipmpmsg:TerminateIPMPProcessorType" substitutionGroup="ipmpmsg:Data_BaseClass"/>
	<complexType name="TerminateIPMPProcessorType">
		<complexContent>
			<extension base="ipmpmsg:Data_BaseClassType"/>
		</complexContent>
	</complexType>
	<!-- **************************************************************** -->
	<!--  Legacy Messages  -->
	<!-- **************************************************************** -->
	<!-- IPMP_Message -->
	<element name="IPMP_Message" type="ipmpmsg:IPMP_MessageType"/>
	<complexType name="IPMP_MessageType">
		<complexContent>
			<extension base="ipmpmsg:IPMPBaseType">
				<sequence>
					<choice>
						<element name="URLString" type="anyURI"/>
						<sequence>
							<element name="IPMP_DescriptorIDEx" type="anyURI"/>
							<element ref="ipmpmsg:Data_BaseClass" minOccurs="0" maxOccurs="unbounded"/>
						</sequence>
						<element name="IPMP_data" type="hexBinary"/>
					</choice>
				</sequence>
			</extension>
		</complexContent>
	</complexType>
	<!--MessageFromBitstream-->
	<element name="MessageFromBitstream" type="ipmpmsg:MessageFromBitstreamType" substitutionGroup="ipmpmsg:ToolMessageBase"/>
	<complexType name="MessageFromBitstreamType">
		<complexContent>
			<extension base="ipmpmsg:ToolMessageBaseType">
				<sequence>
					<element ref="ipmpmsg:IPMP_Message" minOccurs="0" maxOccurs="unbounded"/>
				</sequence>
			</extension>
		</complexContent>
	</complexType>
	<!--DescriptorFromBitstream-->
	<element name="DescriptorFromBitstream" type="ipmpmsg:DescriptorFromBitstreamType" substitutionGroup="ipmpmsg:ToolMessageBase"/>
	<complexType name="DescriptorFromBitstreamType">
		<complexContent>
			<extension base="ipmpmsg:ToolMessageBaseType">
				<sequence>
					<element name="IPMP_Descriptor" type="hexBinary" minOccurs="0" maxOccurs="unbounded"/>
				</sequence>
			</extension>
		</complexContent>
	</complexType>
</schema>
