<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xs:schema version="1.0" xmlns:content="http://www.cablelabs.com/namespaces/opencable/xsd/recapi/1.0/content"
	xmlns:ns1="http://www.cablelabs.com/namespaces/opencable/xsd/recapi/1.0/" xmlns:audio="http://www.cablelabs.com/namespaces/opencable/xsd/recapi/1.0/audio"
	xmlns:tax="http://www.cablelabs.com/namespaces/opencable/xsd/recapi/1.0/taxonomy" xmlns:xs="http://www.w3.org/2001/XMLSchema"
	xmlns:core="http://www.cablelabs.com/namespaces/opencable/xsd/recapi/1.0/core" xmlns:user="http://www.cablelabs.com/namespaces/opencable/xsd/recapi/1.0/user"
	xmlns:video="http://www.cablelabs.com/namespaces/opencable/xsd/recapi/1.0/video">

	<xs:import namespace="http://www.cablelabs.com/namespaces/opencable/xsd/recapi/1.0/video"
		schemaLocation="video.xsd" />

	<xs:import namespace="http://www.cablelabs.com/namespaces/opencable/xsd/recapi/1.0/audio"
		schemaLocation="audio.xsd" />

	<xs:import namespace="http://www.cablelabs.com/namespaces/opencable/xsd/recapi/1.0/content"
		schemaLocation="content.xsd" />

	<xs:import namespace="http://www.cablelabs.com/namespaces/opencable/xsd/recapi/1.0/"
		schemaLocation="elements.xsd" />

	<xs:import namespace="http://www.cablelabs.com/namespaces/opencable/xsd/recapi/1.0/core"
		schemaLocation="core.xsd" />

	<xs:import namespace="http://www.cablelabs.com/namespaces/opencable/xsd/recapi/1.0/taxonomy"
		schemaLocation="taxonomy.xsd" />

	<xs:import namespace="http://www.cablelabs.com/namespaces/opencable/xsd/recapi/1.0/user"
		schemaLocation="user.xsd" />

	<xs:complexType name="actor">
		<xs:sequence>
			<xs:element ref="video:name" minOccurs="0" />
			<xs:element ref="video:role" minOccurs="0" />
		</xs:sequence>
	</xs:complexType>

	<xs:complexType name="album">
		<xs:complexContent>
			<xs:extension base="content">
				<xs:sequence>
					<xs:element ref="audio:tracks" />
					<xs:element ref="audio:artworkUrl" minOccurs="0" />
					<xs:element ref="content:title" minOccurs="0" />
					<xs:element ref="content:description" minOccurs="0" />
					<xs:element name="classifications" form="qualified"
						minOccurs="0" maxOccurs="unbounded">
						<xs:complexType>
							<xs:sequence>
								<xs:element ref="ns1:classification" minOccurs="0"
									maxOccurs="unbounded" />
							</xs:sequence>
						</xs:complexType>
					</xs:element>
				</xs:sequence>
				<xs:attribute ref="core:id" use="required" />
				<xs:attribute ref="core:contentId" use="required" />
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>

	<xs:complexType name="content" abstract="true">
		<xs:sequence>
			<xs:element name="contentId" type="xs:string" minOccurs="0" />
			<xs:element name="id" type="xs:string" minOccurs="0" />
		</xs:sequence>
	</xs:complexType>

	<xs:complexType name="classification">
		<xs:sequence>
			<xs:element ref="tax:name" />
			<xs:element name="subClassifications" form="qualified"
				minOccurs="0" maxOccurs="unbounded">
				<xs:complexType>
					<xs:sequence>
						<xs:element ref="ns1:classification" minOccurs="0"
							maxOccurs="unbounded" />
					</xs:sequence>
				</xs:complexType>
			</xs:element>
		</xs:sequence>
		<xs:attribute ref="tax:id" use="required" />
		<xs:attribute ref="tax:taxonomyId" use="required" />
	</xs:complexType>

	<xs:complexType name="audioContent">
		<xs:complexContent>
			<xs:extension base="content">
				<xs:sequence>
					<xs:element ref="audio:artist" minOccurs="0" />
					<xs:element ref="audio:format" minOccurs="0" />
					<xs:element ref="audio:size" minOccurs="0" />
					<xs:element ref="audio:bitRate" minOccurs="0" />
					<xs:element ref="audio:sampleRate" minOccurs="0" />
					<xs:element ref="audio:length" minOccurs="0" />
					<xs:element ref="ns1:album" />
					<xs:element ref="content:title" minOccurs="0" />
					<xs:element ref="content:description" minOccurs="0" />
					<xs:element name="classifications" form="qualified"
						minOccurs="0" maxOccurs="unbounded">
						<xs:complexType>
							<xs:sequence>
								<xs:element ref="ns1:classification" minOccurs="0"
									maxOccurs="unbounded" />
							</xs:sequence>
						</xs:complexType>
					</xs:element>
				</xs:sequence>
				<xs:attribute ref="core:id" use="required" />
				<xs:attribute ref="core:contentId" use="required" />
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>

	<xs:complexType name="contentList">
		<xs:sequence>
			<xs:element name="recommendations" form="qualified"
				minOccurs="0" maxOccurs="unbounded">
				<xs:complexType>
					<xs:sequence>
						<xs:element ref="ns1:recommendedContent" minOccurs="0"
							maxOccurs="unbounded" />
					</xs:sequence>
				</xs:complexType>
			</xs:element>
			<xs:element ref="core:ignoredSearchParam" minOccurs="0" />
			<xs:element ref="core:ignoredResultProperty" minOccurs="0" />
			<xs:element ref="core:totalResults" />
			<xs:element ref="core:invalidUserIds" minOccurs="0" />
			<xs:element ref="ns1:recommendInfo" />
		</xs:sequence>
	</xs:complexType>

	<xs:complexType name="recommendedContent">
		<xs:sequence>
			<xs:element ref="core:message" minOccurs="0" />
			<xs:choice>
				<xs:element ref="ns1:album" />
				<xs:element ref="ns1:audioContent" />
				<xs:element ref="ns1:extendedContent" />
				<xs:element ref="ns1:videoContent" />
				<xs:element ref="ns1:series" />
			</xs:choice>
		</xs:sequence>
	</xs:complexType>

	<xs:complexType name="extendedContent">
		<xs:complexContent>
			<xs:extension base="content">
				<xs:sequence>
					<xs:element ref="content:title" minOccurs="0" />
					<xs:element ref="content:description" minOccurs="0" />
					<xs:element name="classifications" form="qualified"
						minOccurs="0" maxOccurs="unbounded">
						<xs:complexType>
							<xs:sequence>
								<xs:element ref="ns1:classification" minOccurs="0"
									maxOccurs="unbounded" />
							</xs:sequence>
						</xs:complexType>
					</xs:element>
				</xs:sequence>
				<xs:attribute ref="core:id" use="required" />
				<xs:attribute ref="core:contentId" use="required" />
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>

	<xs:complexType name="videoContent">
		<xs:complexContent>
			<xs:extension base="content">
				<xs:sequence>
					<xs:element ref="video:director" minOccurs="0" />
					<xs:element name="actors" form="qualified" minOccurs="0">
						<xs:complexType>
							<xs:sequence>
								<xs:element ref="ns1:actor" minOccurs="0" maxOccurs="unbounded" />
							</xs:sequence>
						</xs:complexType>
					</xs:element>
					<xs:element ref="video:contentType" minOccurs="0" />
					<xs:element name="assets" form="qualified" minOccurs="0">
						<xs:complexType>
							<xs:sequence>
								<xs:element ref="ns1:videoAsset" minOccurs="0"
									maxOccurs="unbounded" />
							</xs:sequence>
						</xs:complexType>
					</xs:element>
					<xs:element ref="video:seriesId" minOccurs="0" />
					<xs:element ref="content:title" minOccurs="0" />
					<xs:element ref="content:description" minOccurs="0" />
					<xs:element name="classifications" form="qualified"
						minOccurs="0">
						<xs:complexType>
							<xs:sequence>
								<xs:element ref="ns1:classification" minOccurs="0"
									maxOccurs="unbounded" />
							</xs:sequence>
						</xs:complexType>
					</xs:element>
				</xs:sequence>
				<xs:attribute ref="core:id" use="required" />
				<xs:attribute ref="core:contentId" use="required" />
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>

	<xs:complexType name="videoAsset">
		<xs:sequence>
			<xs:element ref="video:location" minOccurs="0" />
			<xs:element ref="video:format" minOccurs="0" />
		</xs:sequence>
	</xs:complexType>

	<xs:complexType name="series">
		<xs:complexContent>
			<xs:extension base="content">
				<xs:sequence>
					<xs:element name="episodes" form="qualified" minOccurs="0">
						<xs:complexType>
							<xs:sequence>
								<xs:element ref="ns1:videoContent" minOccurs="0"
									maxOccurs="unbounded" />
							</xs:sequence>
						</xs:complexType>
					</xs:element>
					<xs:element ref="content:title" minOccurs="0" />
					<xs:element ref="content:description" minOccurs="0" />
					<xs:element name="classifications" form="qualified"
						minOccurs="0">
						<xs:complexType>
							<xs:sequence>
								<xs:element ref="ns1:classification" minOccurs="0"
									maxOccurs="unbounded" />
							</xs:sequence>
						</xs:complexType>
					</xs:element>
				</xs:sequence>
				<xs:attribute ref="core:id" use="required" />
				<xs:attribute ref="core:contentId" use="required" />
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>

	<xs:complexType name="recommendInfo">
		<xs:sequence>
			<xs:element ref="core:messages" />
		</xs:sequence>
	</xs:complexType>

	<xs:complexType name="group">
		<xs:complexContent>
			<xs:extension base="user">
				<xs:sequence>
					<xs:element name="members" form="qualified" minOccurs="0">
						<xs:complexType>
							<xs:sequence>
								<xs:choice minOccurs="0" maxOccurs="unbounded">
									<xs:element ref="ns1:group" />
									<xs:element ref="ns1:houseHoldDevice" />
									<xs:element ref="ns1:person" />
								</xs:choice>
							</xs:sequence>
						</xs:complexType>
					</xs:element>
					<xs:element ref="user:description" minOccurs="0" />
					<xs:element ref="user:data" minOccurs="0" />
					<xs:element ref="user:country" minOccurs="0" />
					<xs:element ref="user:name" minOccurs="0" />
				</xs:sequence>
				<xs:attribute ref="user:id" use="required" />
				<xs:attribute ref="user:userId" use="required" />
				<xs:attribute ref="user:active" use="required" />
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>

	<xs:complexType name="user" abstract="true">
		<xs:sequence>
			<xs:element name="active" type="xs:boolean" />
			<xs:element name="country" type="xs:string" minOccurs="0" />
			<xs:element name="data" type="xs:string" minOccurs="0" />
			<xs:element name="description" type="xs:string" minOccurs="0" />
			<xs:element name="id" type="xs:string" minOccurs="0" />
			<xs:element name="name" type="xs:string" minOccurs="0" />
			<xs:element name="userId" type="xs:string" minOccurs="0" />
		</xs:sequence>
	</xs:complexType>

	<xs:complexType name="houseHoldDevice">
		<xs:complexContent>
			<xs:extension base="user">
				<xs:sequence>
					<xs:element name="users" form="qualified" minOccurs="0">
						<xs:complexType>
							<xs:sequence>
								<xs:choice minOccurs="0" maxOccurs="unbounded">
									<xs:element ref="ns1:group" />
									<xs:element ref="ns1:houseHoldDevice" />
									<xs:element ref="ns1:person" />
								</xs:choice>
							</xs:sequence>
						</xs:complexType>
					</xs:element>
					<xs:element ref="user:description" minOccurs="0" />
					<xs:element ref="user:data" minOccurs="0" />
					<xs:element ref="user:country" minOccurs="0" />
					<xs:element ref="user:name" minOccurs="0" />
				</xs:sequence>
				<xs:attribute ref="user:deviceId" />
				<xs:attribute ref="user:id" use="required" />
				<xs:attribute ref="user:userId" use="required" />
				<xs:attribute ref="user:active" use="required" />
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>

	<xs:complexType name="person">
		<xs:complexContent>
			<xs:extension base="user">
				<xs:sequence>
					<xs:element ref="user:birthYear" minOccurs="0" />
					<xs:element ref="user:description" minOccurs="0" />
					<xs:element ref="user:data" minOccurs="0" />
					<xs:element ref="user:country" minOccurs="0" />
					<xs:element ref="user:name" minOccurs="0" />
				</xs:sequence>
				<xs:attribute ref="user:gender" />
				<xs:attribute ref="user:id" use="required" />
				<xs:attribute ref="user:userId" use="required" />
				<xs:attribute ref="user:active" use="required" />
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>

	<xs:complexType name="taxonomy">
		<xs:sequence>
			<xs:element ref="tax:name" />
			<xs:element name="rootClassifications" form="qualified"
				minOccurs="0">
				<xs:complexType>
					<xs:sequence>
						<xs:element ref="ns1:classification" minOccurs="0"
							maxOccurs="unbounded" />
					</xs:sequence>
				</xs:complexType>
			</xs:element>
		</xs:sequence>
		<xs:attribute ref="tax:id" use="required" />
	</xs:complexType>

	<xs:complexType name="taxonomyList">
		<xs:sequence>
			<xs:element name="taxonomies" form="qualified" minOccurs="0">
				<xs:complexType>
					<xs:sequence>
						<xs:element ref="ns1:taxonomy" minOccurs="0" maxOccurs="unbounded" />
					</xs:sequence>
				</xs:complexType>
			</xs:element>
			<xs:element ref="tax:ignoredSearchParam" minOccurs="0" />
			<xs:element ref="tax:ignoredResultProperty" minOccurs="0" />
		</xs:sequence>
	</xs:complexType>

	<xs:complexType name="userList">
		<xs:sequence>
			<xs:element name="users" form="qualified" minOccurs="0">
				<xs:complexType>
					<xs:sequence>
						<xs:choice minOccurs="0" maxOccurs="unbounded">
							<xs:element ref="ns1:group" />
							<xs:element ref="ns1:houseHoldDevice" />
							<xs:element ref="ns1:person" />
						</xs:choice>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
			<xs:element ref="user:ignoredSearchParam" minOccurs="0" />
			<xs:element ref="user:ignoredResultProperty" minOccurs="0" />
		</xs:sequence>
	</xs:complexType>

	<xs:simpleType name="audioFormatType">
		<xs:restriction base="xs:string">
			<xs:enumeration value="WAV" />
			<xs:enumeration value="MP3" />
		</xs:restriction>
	</xs:simpleType>

	<xs:simpleType name="contentType">
		<xs:restriction base="xs:string">
			<xs:enumeration value="FEATURE_FILM" />
			<xs:enumeration value="SHORT_FILM" />
			<xs:enumeration value="TV_SHOW" />
			<xs:enumeration value="TV_SERIES" />
		</xs:restriction>
	</xs:simpleType>

	<xs:simpleType name="videoFormatType">
		<xs:restriction base="xs:string">
			<xs:enumeration value="WAV" />
			<xs:enumeration value="MPEG" />
			<xs:enumeration value="QUICK_TIME" />
		</xs:restriction>
	</xs:simpleType>

	<xs:simpleType name="gender">
		<xs:restriction base="xs:string">
			<xs:enumeration value="MALE" />
			<xs:enumeration value="FEMALE" />
		</xs:restriction>
	</xs:simpleType>

	<xs:simpleType name="resultSortType">
		<xs:restriction base="xs:string">
			<xs:enumeration value="RELEVANCY" />
			<xs:enumeration value="ALPHABETICAL" />
		</xs:restriction>
	</xs:simpleType>
</xs:schema>

