<?xml version="1.0" encoding="UTF-8"?>
<!-- edited with XMLSpy v2005 rel. 3 U (http://www.altova.com) by Jeffrey Sherwin (Cauldron Solutions) -->
<!-- edited with XMLSPY v5 rel. 4 U (http://www.xmlspy.com) by Balagopal Nair (SeaChange International) -->
<xs:schema xmlns="http://www.cablelabs.com/2006-05-05/ADI2" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.cablelabs.com/2006-05-05/ADI2" elementFormDefault="qualified" attributeFormDefault="unqualified">
	<xs:include schemaLocation="adi2core.xsd"/>
	<!--Global base types-->
	<xs:simpleType name="senderType">
		<xs:restriction base="xs:string">
			<xs:minLength value="1"/>
			<xs:maxLength value="20"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:complexType name="RequestType">
		<xs:annotation>
			<xs:documentation>base type for a request message</xs:documentation>
		</xs:annotation>
		<xs:sequence>
			<xs:any namespace="##any" processContents="lax"/>
		</xs:sequence>
		<xs:attribute name="type" type="xs:string" use="required"/>
		<xs:attribute name="product" type="xs:string" use="required"/>
	</xs:complexType>
	<xs:complexType name="ResponseType">
		<xs:annotation>
			<xs:documentation>base type for a response message</xs:documentation>
		</xs:annotation>
		<xs:attribute name="type" type="xs:string" use="required"/>
		<xs:attribute name="product" type="xs:string" use="required"/>
		<xs:attribute name="providerID" type="ProviderIDType" use="required"/>
		<xs:attribute name="assetID" type="ProviderAssetIDType" use="required"/>
		<xs:attribute name="updateNum" type="xs:integer" use="required"/>
		<xs:attribute name="groupAsset" type="xs:string" use="optional"/>
		<xs:attribute name="status" type="xs:string" use="required"/>
		<xs:attribute name="reason" use="optional">
			<xs:simpleType>
				<xs:restriction base="xs:string">
					<xs:maxLength value="255"/>
				</xs:restriction>
			</xs:simpleType>
		</xs:attribute>
	</xs:complexType>
	<!--Content asset base type-->
	<xs:complexType name="ContentAssetType">
		<xs:sequence>
			<xs:any namespace="##any" processContents="strict"/>
		</xs:sequence>
		<xs:attribute name="type" type="xs:string" use="required"/>
		<xs:attribute name="metadataOnly" type="xs:boolean" use="optional"/>
		<xs:attribute name="fileSize" type="xs:integer" use="optional"/>
		<xs:attribute name="fileName" type="xs:string" use="optional"/>
		<xs:attribute name="mD5CheckSum" type="xs:string" use="optional"/>
		<xs:attribute name="transferContentURL" type="xs:anyURI" use="optional"/>
	</xs:complexType>
	<xs:complexType name="ContentAssetRespType">
		<xs:annotation>
			<xs:documentation>base type for a content asset response message</xs:documentation>
		</xs:annotation>
		<xs:attribute name="type" type="xs:string" use="required"/>
		<xs:attribute name="providerID" type="ProviderIDType" use="required"/>
		<xs:attribute name="assetID" type="ProviderAssetIDType" use="required"/>
		<xs:attribute name="updateNum" type="xs:integer" use="required"/>
		<xs:attribute name="metadataOnly" type="xs:boolean" use="optional"/>
		<xs:attribute name="fileSize" type="xs:integer" use="optional"/>
		<xs:attribute name="fileName" type="xs:string" use="optional"/>
		<xs:attribute name="mD5CheckSum" type="xs:string" use="optional"/>
		<xs:attribute name="status" type="xs:string" use="required"/>
		<xs:attribute name="reason" use="optional">
			<xs:simpleType>
				<xs:restriction base="xs:string">
					<xs:maxLength value="255"/>
				</xs:restriction>
			</xs:simpleType>
		</xs:attribute>
	</xs:complexType>
	<!--Metadata asset base type-->
	<xs:complexType name="MetadataAssetType">
		<xs:complexContent>
			<xs:extension base="RequestType">
				<xs:attribute name="groupProviderID" type="ProviderIDType" use="required"/>
				<xs:attribute name="groupAssetID" type="ProviderAssetIDType" use="required"/>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="MetadataAssetRespType">
		<xs:complexContent>
			<xs:extension base="ResponseType">
				<xs:attribute name="groupProviderID" type="ProviderIDType" use="required"/>
				<xs:attribute name="groupAssetID" type="ProviderAssetIDType" use="required"/>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<!--Group asset base type-->
	<xs:complexType name="GroupAssetType">
		<xs:complexContent>
			<xs:extension base="RequestType"/>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="GroupAssetRespType">
		<xs:complexContent>
			<xs:restriction base="ResponseType">
				<xs:attribute name="groupAsset" use="prohibited"/>
			</xs:restriction>
		</xs:complexContent>
	</xs:complexType>
	<!--Associate asset base type-->
	<xs:complexType name="AssociateContentType">
		<xs:attribute name="type" type="xs:string" use="required"/>
		<xs:attribute name="effectiveDate" type="xs:dateTime" use="optional"/>
		<xs:attribute name="groupProviderID" type="ProviderIDType" use="required"/>
		<xs:attribute name="groupAssetID" type="ProviderAssetIDType" use="required"/>
		<xs:attribute name="providerID" type="ProviderIDType" use="required"/>
		<xs:attribute name="assetID" type="ProviderAssetIDType" use="required"/>
	</xs:complexType>
	<xs:complexType name="AssociateContentRespType">
		<xs:attribute name="type" type="xs:string" use="required"/>
		<xs:attribute name="effectiveDate" type="xs:dateTime" use="optional"/>
		<xs:attribute name="groupProviderID" type="ProviderIDType" use="required"/>
		<xs:attribute name="groupAssetID" type="ProviderAssetIDType" use="required"/>
		<xs:attribute name="providerID" type="ProviderIDType" use="required"/>
		<xs:attribute name="assetID" type="ProviderAssetIDType" use="required"/>
		<xs:attribute name="status" type="xs:string" use="required"/>
		<xs:attribute name="reason" use="optional">
			<xs:simpleType>
				<xs:restriction base="xs:string">
					<xs:maxLength value="255"/>
				</xs:restriction>
			</xs:simpleType>
		</xs:attribute>
	</xs:complexType>
	<!--Document element base type-->
	<xs:complexType name="DocumentType">
		<xs:annotation>
			<xs:documentation>Base type for all ADI2 documents</xs:documentation>
		</xs:annotation>
		<xs:attribute name="sender" type="senderType" use="required"/>
		<xs:attribute name="ackTo" type="xs:anyURI" use="optional"/>
		<xs:attribute name="docNumber" use="required">
			<xs:simpleType>
				<xs:restriction base="xs:string">
					<xs:minLength value="1"/>
					<xs:maxLength value="25"/>
				</xs:restriction>
			</xs:simpleType>
		</xs:attribute>
		<xs:attribute name="createDateTime" type="xs:dateTime" use="required"/>
	</xs:complexType>
	<!--Type implementations-->
	<!--Document root elements-->
	<xs:element name="ADI2">
		<xs:annotation>
			<xs:documentation>ADI2 document root</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:complexContent>
				<xs:extension base="DocumentType">
					<xs:sequence>
						<xs:element name="Contact" type="ContactType"/>
						<xs:choice minOccurs="0" maxOccurs="unbounded">
							<xs:element ref="AddMetadataAsset" minOccurs="0" maxOccurs="unbounded"/>
							<xs:element ref="RemoveMetadataAsset" minOccurs="0" maxOccurs="unbounded"/>
							<xs:element ref="ReplaceMetadataAsset" minOccurs="0" maxOccurs="unbounded"/>
							<xs:element ref="AcceptContentAsset" minOccurs="0" maxOccurs="unbounded"/>
							<xs:element ref="DestroyContentAsset" minOccurs="0" maxOccurs="unbounded"/>
							<xs:element ref="ReplaceContentAsset" minOccurs="0" maxOccurs="unbounded"/>
							<xs:element ref="OpenGroupAsset" minOccurs="0" maxOccurs="unbounded"/>
							<xs:element ref="DropGroupAsset" minOccurs="0" maxOccurs="unbounded"/>
							<xs:element ref="CloseGroupAsset" minOccurs="0" maxOccurs="unbounded"/>
							<xs:element ref="ReplaceGroupAsset" minOccurs="0" maxOccurs="unbounded"/>
							<xs:element ref="AssociateContent" minOccurs="0" maxOccurs="unbounded"/>
						</xs:choice>
					</xs:sequence>
					<xs:attribute name="relativePriority" use="required">
						<xs:simpleType>
							<xs:restriction base="xs:int">
								<xs:minInclusive value="1"/>
								<xs:maxInclusive value="10"/>
							</xs:restriction>
						</xs:simpleType>
					</xs:attribute>
				</xs:extension>
			</xs:complexContent>
		</xs:complexType>
	</xs:element>
	<xs:element name="ACK">
		<xs:annotation>
			<xs:documentation>Document level ack</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:complexContent>
				<xs:extension base="DocumentType">
					<xs:sequence>
						<xs:element name="Contact" type="ContactType"/>
						<xs:element name="DocReceived">
							<xs:complexType>
								<xs:attribute name="docSender" type="xs:string" use="required"/>
								<xs:attribute name="docNumber" use="required">
									<xs:simpleType>
										<xs:restriction base="xs:string">
											<xs:minLength value="1"/>
											<xs:maxLength value="25"/>
										</xs:restriction>
									</xs:simpleType>
								</xs:attribute>
								<xs:attribute name="status" type="xs:string" use="optional"/>
							</xs:complexType>
						</xs:element>
						<xs:choice minOccurs="0" maxOccurs="unbounded">
							<xs:element ref="AddMetadataAssetResp" minOccurs="0" maxOccurs="unbounded"/>
							<xs:element ref="RemoveMetadataAssetResp" minOccurs="0" maxOccurs="unbounded"/>
							<xs:element ref="ReplaceMetadataAssetResp" minOccurs="0" maxOccurs="unbounded"/>
							<xs:element ref="AcceptContentAssetResp" minOccurs="0" maxOccurs="unbounded"/>
							<xs:element ref="DestroyContentAssetResp" minOccurs="0" maxOccurs="unbounded"/>
							<xs:element ref="ReplaceContentAssetResp" minOccurs="0" maxOccurs="unbounded"/>
							<xs:element ref="OpenGroupAssetResp" minOccurs="0" maxOccurs="unbounded"/>
							<xs:element ref="DropGroupAssetResp" minOccurs="0" maxOccurs="unbounded"/>
							<xs:element ref="CloseGroupAssetResp" minOccurs="0" maxOccurs="unbounded"/>
							<xs:element ref="ReplaceGroupAssetResp" minOccurs="0" maxOccurs="unbounded"/>
							<xs:element ref="AssociateContentResp" minOccurs="0" maxOccurs="unbounded"/>
						</xs:choice>
					</xs:sequence>
				</xs:extension>
			</xs:complexContent>
		</xs:complexType>
	</xs:element>
	<xs:element name="NIDC">
		<xs:annotation>
			<xs:documentation>Notice of intent to distribute content document</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:complexContent>
				<xs:extension base="DocumentType">
					<xs:sequence>
						<xs:element ref="AssetNotification" minOccurs="0" maxOccurs="unbounded"/>
						<xs:element ref="CancelAssetNotification" minOccurs="0" maxOccurs="unbounded"/>
					</xs:sequence>
				</xs:extension>
			</xs:complexContent>
		</xs:complexType>
	</xs:element>
	<xs:element name="PNM">
		<xs:annotation>
			<xs:documentation>Provider Notification message</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:complexContent>
				<xs:extension base="DocumentType"/>
			</xs:complexContent>
		</xs:complexType>
	</xs:element>
	<!--Group asset operations-->
	<xs:element name="OpenGroupAsset">
		<xs:complexType>
			<xs:complexContent>
				<xs:extension base="GroupAssetType"/>
			</xs:complexContent>
		</xs:complexType>
	</xs:element>
	<xs:element name="OpenGroupAssetResp">
		<xs:complexType>
			<xs:complexContent>
				<xs:extension base="GroupAssetRespType"/>
			</xs:complexContent>
		</xs:complexType>
	</xs:element>
	<xs:element name="DropGroupAsset" type="GroupAssetType"/>
	<xs:element name="DropGroupAssetResp" type="GroupAssetRespType"/>
	<xs:element name="CloseGroupAsset" type="GroupAssetType"/>
	<xs:element name="CloseGroupAssetResp" type="GroupAssetRespType"/>
	<xs:element name="ReplaceGroupAsset" type="GroupAssetType"/>
	<xs:element name="ReplaceGroupAssetResp" type="GroupAssetRespType"/>
	<!--Metadata asset operations-->
	<xs:element name="AddMetadataAsset" type="MetadataAssetType"/>
	<xs:element name="AddMetadataAssetResp" type="MetadataAssetRespType"/>
	<xs:element name="RemoveMetadataAsset" type="MetadataAssetType"/>
	<xs:element name="RemoveMetadataAssetResp" type="MetadataAssetRespType"/>
	<xs:element name="ReplaceMetadataAsset" type="MetadataAssetType"/>
	<xs:element name="ReplaceMetadataAssetResp" type="MetadataAssetRespType"/>
	<!--Content asset operations-->
	<xs:element name="AcceptContentAsset">
		<xs:complexType>
			<xs:complexContent>
				<xs:extension base="ContentAssetType"/>
			</xs:complexContent>
		</xs:complexType>
	</xs:element>
	<xs:element name="AcceptContentAssetResp" type="ContentAssetRespType"/>
	<xs:element name="DestroyContentAsset" type="ContentAssetType"/>
	<xs:element name="DestroyContentAssetResp" type="ContentAssetRespType"/>
	<xs:element name="ReplaceContentAsset" type="ContentAssetType"/>
	<xs:element name="ReplaceContentAssetResp" type="ContentAssetRespType"/>
	<!--AssociateContent asset operation-->
	<xs:element name="AssociateContent" type="AssociateContentType"/>
	<xs:element name="AssociateContentResp" type="AssociateContentRespType"/>
	<!--NIDC operations-->
	<xs:element name="AssetNotification">
		<xs:complexType>
			<xs:attribute name="startDateTime" type="xs:dateTime" use="required"/>
			<xs:attribute name="endDateTime" type="xs:dateTime" use="required"/>
			<xs:attribute name="providerID" type="ProviderIDType" use="required"/>
			<xs:attribute name="assetID" type="ProviderAssetIDType" use="required"/>
			<xs:attribute name="estSize" type="xs:long" use="optional"/>
			<xs:attribute name="availDate" type="xs:dateTime" use="optional"/>
		</xs:complexType>
	</xs:element>
	<xs:element name="CancelAssetNotification">
		<xs:complexType>
			<xs:attribute name="startDateTime" type="xs:dateTime" use="required"/>
			<xs:attribute name="endDateTime" type="xs:dateTime" use="required"/>
			<xs:attribute name="providerID" type="ProviderIDType" use="required"/>
			<xs:attribute name="assetID" type="ProviderAssetIDType" use="required"/>
			<xs:attribute name="estSize" type="xs:long" use="optional"/>
			<xs:attribute name="availDate" type="xs:dateTime" use="optional"/>
		</xs:complexType>
	</xs:element>
	<!--Provider notification payload-->
	<xs:element name="AssetState">
		<xs:complexType>
			<xs:attribute name="providerID" type="ProviderIDType" use="required"/>
			<xs:attribute name="assetID" type="ProviderAssetIDType" use="required"/>
			<xs:attribute name="notificationCode" type="xs:int" use="required"/>
		</xs:complexType>
	</xs:element>
</xs:schema>
