﻿<?xml version="1.0" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
	targetNamespace="http://www.daisy.org/DRM/2005/BookAuthorization"
	elementFormDefault="qualified"
	xmlns:ds="http://www.w3.org/2000/09/xmldsig#"
    xmlns:xe="http://www.w3.org/2001/04/xmlenc#"
    xmlns:odrlx="http://odrl.net/1.1/ODRL-EX"
    xmlns:odrld="http://odrl.net/1.1/ODRL-DD"
    xmlns:dba="http://www.daisy.org/DRM/2005/BookAuthorization"
>
	<xs:annotation>
		<xs:documentation>
			DAISY DRM:  XML Schema for authorization object
			Version 1, rev 8 (31 Jan 2006)
		</xs:documentation>
	</xs:annotation>

	<xs:import namespace="http://www.w3.org/2001/04/xmlenc#"
			   schemaLocation="http://www.w3.org/TR/xmlenc-core/xenc-schema.xsd" />
    <xs:import namespace="http://www.w3.org/2000/09/xmldsig#"
    		   schemaLocation="http://www.w3.org/TR/2002/REC-xmldsig-core-20020212/xmldsig-core-schema.xsd"  />
	<xs:import namespace="http://odrl.net/1.1/ODRL-EX"
			   schemaLocation="http://odrl.net/1.1/ODRL-EX-11.xsd" />
	<xs:import namespace="http://odrl.net/1.1/ODRL-DD"
			   schemaLocation="http://odrl.net/1.1/ODRL-DD-11.xsd" />

	<xs:element name="BookAuthorization">
		<xs:annotation>
			<xs:documentation>
				BookAuthorization = container for authorization object
				BookAuthorization (Issuer, Book, odrlx:rights, Keys*)
			</xs:documentation>
		</xs:annotation>

		<xs:complexType>
			<xs:sequence>
				<xs:element name="Issuer" type="dba:IssuerType" />

				<xs:element name="Book" type="dba:BookType" />

				<xs:element ref="odrlx:rights" />

				<xs:element name="Keys" type="dba:KeysType" minOccurs="0" maxOccurs="unbounded" />
			</xs:sequence>
		</xs:complexType>
	</xs:element>


	<xs:complexType name="IssuerType">
		<xs:annotation>
			<xs:documentation>
				Issuer = Issuer identification
				Issuer (#PCDATA)
			</xs:documentation>
		</xs:annotation>

		<xs:simpleContent>
			<xs:extension base="xs:string">
				<xs:attribute name="uid" type="dba:IdString" />
			</xs:extension>
		</xs:simpleContent>
	</xs:complexType>

	<xs:simpleType name="IdString">
		<xs:annotation>
			<xs:documentation>
				IdString = data type for issue IDs (e.g., DAISY.us-Acme)
				Name parts use all allowed XML name characters except period
			</xs:documentation>
		</xs:annotation>
		<xs:restriction base="xs:string">
			<xs:pattern value="([A-Za-z0-9-_:])+(\.([A-Za-z0-9-_:])+)*" />
		</xs:restriction>
	</xs:simpleType>

	<xs:complexType name="BookType" >
		<xs:annotation>
			<xs:documentation>
				Book = container for book identification data
				Book EMPTY
			</xs:documentation>
		</xs:annotation>

		<xs:attribute name="uid" type="xs:string" />
	</xs:complexType>

	<xs:complexType name="KeysType">
		<xs:annotation>
			<xs:documentation>
				Keys = content key(s) secured using a single authorization key; also encrypted rights expression
				Keys (ds:KeyInfo, ContentKey+, EncryptedRights)
			</xs:documentation>
		</xs:annotation>
		<xs:sequence>
			<xs:element ref="ds:KeyInfo" />
			<xs:element name="ContentKey" type="dba:ContentKeyType" maxOccurs="unbounded" />
			<xs:element name="EncryptedRights" type="dba:EncryptedRightsType" />
		</xs:sequence>
	</xs:complexType>

	<xs:complexType name="ContentKeyType">
		<xs:annotation>
			<xs:documentation>
				ContentKey = a specific encrypted content key applied to a specific media type
				ContentKey (xe:EncryptedKey)
				ATTLIST = media (all|text|audio|image)
			</xs:documentation>
		</xs:annotation>

		<xs:sequence>
			<xs:element ref="xe:EncryptedKey" minOccurs="1" maxOccurs="1" />
		</xs:sequence>
		<xs:attribute name="media" use="required" >
			<xs:simpleType>
				<xs:restriction base="xs:string">
					<xs:enumeration value="all" />
					<xs:enumeration value="text" />
					<xs:enumeration value="audio" />
					<xs:enumeration value="image" />
				</xs:restriction>
			</xs:simpleType>
		</xs:attribute>
	</xs:complexType>

	<xs:complexType name="EncryptedRightsType">
		<xs:annotation>
			<xs:documentation>
				EncryptedRights = container for the encrypted rights expression and the key used to encrypt it
				EncryptedRights (xe:EncryptedKey, xe:EncryptedData)
			</xs:documentation>
		</xs:annotation>

		<xs:sequence>
			<xs:element ref="xe:EncryptedKey" minOccurs="1" maxOccurs="1" />
			<xs:element ref="xe:EncryptedData" minOccurs="1" maxOccurs="1" />
		</xs:sequence>
	</xs:complexType>

	<xs:element name="KeyRequestURI" type="dba:KeyRequestURIType" />

	<xs:complexType name="KeyRequestURIType">
		<xs:annotation>
			<xs:documentation>
				KeyRequestURI = URI to which a request for the key can be sent (if necessary and possible)
			</xs:documentation>
		</xs:annotation>
		<xs:simpleContent>
			<xs:extension base="xs:anyURI">
				<xs:attribute name="media-type" use="required" >
					<xs:simpleType>
						<xs:restriction base="xs:string">
							<xs:enumeration value="application/x-pdtbkxo+xml" />
							<xs:enumeration value="application/soap+xml" />
						</xs:restriction>
					</xs:simpleType>
				</xs:attribute>
			</xs:extension>
		</xs:simpleContent>
	</xs:complexType>

</xs:schema>
