<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns:iwp="urn:itu-t:sg17:2010:04-iwp"
	xmlns="http://www.w3.org/2001/XMLSchema"
	xmlns:xenc="http://www.w3.org/2001/04/xmlenc#" 
	xmlns:ds="http://www.w3.org/2000/09/xmldsig#" 
	targetNamespace="urn:itu-t:sg17:2010:04-iwp" 
	elementFormDefault="qualified"
	attributeFormDefault="unqualified">
	<import namespace="http://www.w3.org/XML/1998/namespace" 
				schemaLocation="http://www.w3.org/2001/xml.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="http://www.w3.org/2000/09/xmldsig#" 
				schemaLocation="http://www.w3.org/TR/2002/REC-xmldsig-core-20020212/xmldsig-core-schema.xsd"/>
	
	<!--   Elements -->
	<element name="authenticationHelloRequest" type="iwp:AuthenticationHelloRequest"/>
	<element name="authenticationHelloResponse" type="iwp:AuthenticationHelloResponse"/>
	<element name="authenticationRequest" type="iwp:AuthenticationRequest"/>
	<element name="authenticationResponse" type="iwp:AuthenticationResponse"/>
	<element name="negotiationRequest" type="iwp:NegotiationRequest"/>
	<element name="negotiationResponse" type="iwp:NegotiationResponse"/>
	<element name="transmissionHelloRequest" type="iwp:TransmissionHelloRequest"/>
	<element name="transmissionHelloResponse" type="iwp:TransmissionHelloResponse"/>
	<element name="identificationRequest" type="iwp:IdentificationRequest"/>
	<element name="identificationResponse" type="iwp:IdentificationResponse"/>
	<element name="transmissionRequest" type="iwp:TransmissionRequest"/>
	<element name="transmissionResponse" type="iwp:TransmissionResponse"/>
	
	<!--   Basic Types -->
	<complexType name="Request" abstract="true"/>

	<complexType name="Response" abstract="true">
		<attribute name="status" type="string" use="required"/>
	</complexType>

	<simpleType name="Version">
		<restriction base="string">
			<pattern value="\d{1,2}\.\d{1,9}"/>
		</restriction>
	</simpleType>

	<complexType name="idListType">
		<sequence>
			<element name="id" type="anyURI" maxOccurs="unbounded"/>
		</sequence>
	</complexType>

	<simpleType name="Nonce">
		<restriction base="base64Binary">
			<minLength value="16"/>
			<maxLength value="512"/>
		</restriction>
	</simpleType>

	<complexType name="Extensions">
		<sequence maxOccurs="unbounded">
			<any namespace="##any" minOccurs="0"/>
		</sequence>
		<attribute name="critical" type="boolean"/>
	</complexType>

	<complexType name="Identifier">
		<sequence>
			<element name="keyIdentifier" type="base64Binary"/>
		</sequence>
	</complexType>

	<simpleType name="TransmissionRequestControlType">
		<restriction base="string">
			<enumeration value="start"/>
			<enumeration value="finish"/>
		</restriction>
	</simpleType>

	<simpleType name="TransmissionResponseControlType">
		<restriction base="string">
			<enumeration value="pause"/>
			<enumeration value="resume"/>
			<enumeration value="finish"/>
		</restriction>
	</simpleType>

	<!--   iwp-TransmissionHelloRequest-->
	<complexType name="TransmissionHelloRequest">
		<complexContent>
			<extension base="iwp:Request">
				<sequence>
					<element name="entityId" type="iwp:Identifier"/>
					<element name="extensions" type="iwp:Extensions" minOccurs="0"/>
				</sequence>
			</extension>
		</complexContent>
	</complexType>

	<!--   iwp-TransmissionHelloResponse -->
	<complexType name="TransmissionHelloResponse">
		<complexContent>
			<extension base="iwp:Response">
				<sequence>
					<element name="entityId" type="iwp:Identifier"/>
					<element name="nonce" type="iwp:Nonce"/>
					<element name="extensions" type="iwp:Extensions" minOccurs="0"/>
				</sequence>
			</extension>
		</complexContent>
	</complexType>

	<!--   iwp-AuthenticationHelloRequest   -->
	<complexType name="AuthenticationHelloRequest">
		<complexContent>
			<extension base="iwp:Request">
				<sequence>
					<element name="protocolVersion" type="iwp:Version"/>
					<element name="authenticationMethods" type="iwp:idListType"/>
					<element name="extensions" type="iwp:Extensions" minOccurs="0"/>
				</sequence>
			</extension>
		</complexContent>
	</complexType>

	<!--   iwp-AuthenticationHelloResponse   -->
	<complexType name="AuthenticationHelloResponse">
		<complexContent>
			<extension base="iwp:Response">
				<sequence>
					<element name="protocolVersion" type="iwp:Version"/>
						<element name="selectedAuthenticationMethod" type="anyURI"/>
					<element name="extensions" type="iwp:Extensions" minOccurs="0"/>
				</sequence>
			</extension>
		</complexContent>
	</complexType>

	<!--   iwp-AuthenticationRequest   -->
	<complexType name="AuthenticationRequest" abstract="true"/>
	<complexType name="AuthenticationResponse" abstract="true"/>

	<!--   iwp-NegotationRequest   -->
	<complexType name="NegotiationRequest">
		<complexContent>
			<extension base="iwp:Request">
				<sequence>
					<element name="items" type="iwp:NegotiationRequestItemType"/>
					<element name="nonce" type="iwp:Nonce"/>
					<element name="extensions" type="iwp:Extensions" minOccurs="0"/>
					
				</sequence>
			</extension>
		</complexContent>
	</complexType>

	<!--   iwp-NegotiationResponse   -->
	<complexType name="NegotiationResponse">
		<complexContent>
			<extension base="iwp:Response">
				<sequence>
					<element name="items" type="iwp:NegotiationResponseItemType"/>
					<element name="extensions" type="iwp:Extensions" minOccurs="0"/>
					<element name="signature" type="base64Binary"/>
				</sequence>
			</extension>
		</complexContent>
	</complexType>
	<complexType name="NegotiationRequestItemType">
		<sequence>
			<element name="rightsFormats" type="iwp:idListType"/>
			<element name="metadataFormats" type="iwp:idListType"/>
			<element name="secureChannels" type="iwp:idListType"/>
		</sequence>
	</complexType>
	<complexType name="NegotiationResponseItemType">
		<sequence>
			<element name="selectedRightsFormat" type="anyURI"/>
			<element name="selectedMetadataFormat" type="anyURI"/>
			<element name="selectedSecureChannel" type="anyURI"/>
		</sequence>
	</complexType>

	<!--   iwp-IdentificationRequest   -->
	<complexType name="IdentificationRequest">
		<complexContent>
			<extension base="iwp:Request">
				<sequence>
					<element name="nonce" type="iwp:Nonce"/>
					<element name="extensions" type="iwp:Extensions" minOccurs="0"/>
					<element name="signature" type="base64Binary"/>
				</sequence>
			</extension>
		</complexContent>
	</complexType>

	<!--   iwp-IdentificationResponse   -->
	<complexType name="IdentificationResponse">
		<complexContent>
			<extension base="iwp:Response">
				<sequence>
					<element name="extensions" type="iwp:Extensions" minOccurs="0"/>
					<element name="signature" type="base64Binary"/>
				</sequence>
			</extension>
		</complexContent>
	</complexType>

	<!--   iwp-TransmissionRequest   -->
	<complexType name="TransmissionRequest">
		<complexContent>
			<extension base="iwp:Request">
				<attribute name="controlCommand" type="iwp:TransmissionRequestControlType" use="required"/>
			</extension>
		</complexContent>
	</complexType>

	<!--   iwp-TransmissionResponse   -->
	<complexType name="TransmissionResponse">
		<complexContent>
			<extension base="iwp:Response">
				<attribute name="controlCommand" type="iwp:TransmissionResponseControlType" use="required"/>
			</extension>
		</complexContent>
	</complexType>
</schema>