<?xml version="1.0" encoding="UTF-8"?>
<xs:schema targetNamespace="http://www.printtalk.org" xmlns:pt="http://www.printtalk.org" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://www.CIP4.org/JDFSchema_1_1" elementFormDefault="qualified" attributeFormDefault="qualified">
	<xs:import namespace="http://www.CIP4.org/JDFSchema_1_1" schemaLocation="http://www.cip4.org/Schema/JDFSchema_1_1/JDF.xsd"/>
	<!--Defintions of types used within the PrintTalk Header-->
	<!--Type to express Credentials-->
	<xs:complexType name="credentialType">
		<xs:all>
			<xs:element name="Identity" type="xs:string"/>
			<xs:element name="SharedSecret" type="xs:string" minOccurs="0"/>
		</xs:all>
		<xs:attribute name="domain" type="xs:string" use="required"/>
	</xs:complexType>
	<!--Type to be used in the 'From' and 'To' elements of the Header-->
	<xs:complexType name="identifyType">
		<xs:sequence>
			<xs:element name="Credential" type="pt:credentialType" maxOccurs="unbounded"/>
		</xs:sequence>
	</xs:complexType>
	<!--Type to be used in the 'Sender' element of the Header-->
	<xs:complexType name="senderType">
		<xs:complexContent>
			<xs:extension base="pt:identifyType">
				<xs:sequence>
					<xs:element name="UserAgent" type="xs:string"/>
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<!--Type of the PrintTalk Header-->
	<xs:complexType name="headerType">
		<xs:all>
			<xs:element name="To" type="pt:identifyType"/>
			<xs:element name="From" type="pt:identifyType"/>
			<xs:element name="Sender" type="pt:senderType"/>
		</xs:all>
	</xs:complexType>
	<!--Defintions of types used within the PrintTalk Request-->
	<!--Abstract type which is the basis for all business objects-->
	<xs:complexType name="abstractBOType">
		<xs:sequence>
			<xs:element ref="Comment" minOccurs="0" maxOccurs="unbounded"/>
		</xs:sequence>
		<xs:attribute name="AgentID" type="xs:NMTOKEN" use="required"/>
		<xs:attribute name="AgentDisplayName" type="xs:string" use="required"/>
		<xs:attribute name="RequestDate" type="xs:dateTime" use="required"/>
		<xs:attribute name="BusinessID" type="xs:NMTOKEN" use="required"/>
		<xs:attribute name="BusinessRefID" type="xs:NMTOKEN" use="optional"/>
		<xs:attribute name="AuxID" type="xs:NMTOKEN" use="optional"/>
		<xs:attribute name="DescriptiveName" type="xs:string" use="optional"/>
	</xs:complexType>
	<!--Type for an Invoice. Extends the abstract BO type-->
	<xs:complexType name="invoiceType">
		<xs:complexContent>
			<xs:extension base="pt:abstractBOType">
				<xs:all>
					<xs:element ref="JDF"/>
				</xs:all>
				<xs:attribute name="Currency" type="xs:NMTOKEN" use="optional"/>
				<xs:attribute name="Expires" type="xs:dateTime" use="required"/>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<!--Type for a Purchase Order. Extends the Invoice type-->
	<xs:complexType name="poType">
		<xs:complexContent>
			<xs:extension base="pt:invoiceType">
				<xs:attribute name="ReorderID" type="xs:NMTOKENS" use="optional"/>
				<xs:attribute name="ReplaceID" type="xs:NMTOKEN" use="optional"/>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<!--Type for RFQs and Quotes. Extends the PO type-->
	<xs:complexType name="rfqQuoteType">
		<xs:complexContent>
			<xs:extension base="pt:poType">
				<xs:attribute name="Estimate" type="xs:boolean" use="optional"/>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<!--Type for Confirmation, Cancellation, and Refusal. Extends the abstract type-->
	<xs:complexType name="ccrType">
		<xs:complexContent>
			<xs:extension base="pt:abstractBOType">
				<xs:sequence>
					<xs:element ref="Contact" minOccurs="0" maxOccurs="unbounded"/>
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<!--Subtypes to be used within OrderStatusRequest/Response, ProofApprovalRequest/Response-->
	<!--General type for a response-->
	<xs:complexType name="respType">
		<xs:simpleContent>
			<xs:extension base="xs:string">
				<xs:attribute name="JobIDRef" type="xs:string" use="required"/>
			</xs:extension>
		</xs:simpleContent>
	</xs:complexType>
	<!--Enumeration of proof response values-->
	<xs:simpleType name="proofEnumType">
		<xs:restriction base="xs:string">
			<xs:enumeration value="Approved"/>
			<xs:enumeration value="ApprovedWithEdits"/>
			<xs:enumeration value="Rejected"/>
		</xs:restriction>
	</xs:simpleType>
	<!--Proof Response extends general response type by enumeration-->
	<xs:complexType name="proofRespType">
		<xs:simpleContent>
			<xs:extension base="pt:respType">
				<xs:attribute name="Response" type="pt:proofEnumType" use="required"/>
			</xs:extension>
		</xs:simpleContent>
	</xs:complexType>
	<!--General type for a request-->
	<xs:complexType name="reqType">
		<xs:attribute name="JobIDRef" type="xs:string" use="required"/>
	</xs:complexType>
	<!--Proof Request extends general request type by ProofLocation and Comment-->
	<xs:complexType name="proofReqType">
		<xs:complexContent>
			<xs:extension base="pt:reqType">
				<xs:sequence>
					<xs:element ref="Comment" minOccurs="0" maxOccurs="unbounded"/>
				</xs:sequence>
				<xs:attribute name="ProofLocation" type="xs:anyURI" use="optional"/>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<!--Type for OrderStatusRequest. Extends the type for Confirmation, Cancellation, and Refusal (CCR).-->
	<xs:complexType name="osreqType">
		<xs:complexContent>
			<xs:extension base="pt:ccrType">
				<xs:sequence>
					<xs:element name="StatusRequest" type="pt:reqType" minOccurs="0" maxOccurs="unbounded"/>
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<!--Type for OrderStatusResponse. Extends the CCR-type.-->
	<xs:complexType name="osrespType">
		<xs:complexContent>
			<xs:extension base="pt:ccrType">
				<xs:sequence>
					<xs:element name="Status" type="pt:respType" minOccurs="0" maxOccurs="unbounded"/>
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<!--Type for ProofApprovalRequest. Extends the CCR-type.-->
	<xs:complexType name="pareqType">
		<xs:complexContent>
			<xs:extension base="pt:ccrType">
				<xs:sequence>
					<xs:element name="ProofRequest" type="pt:proofReqType" minOccurs="0" maxOccurs="unbounded"/>
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<!--Type for ProofApprovalResponse. Extends the CCR-type.-->
	<xs:complexType name="parespType">
		<xs:complexContent>
			<xs:extension base="pt:ccrType">
				<xs:sequence>
					<xs:element name="ProofResponse" type="pt:proofRespType" minOccurs="0" maxOccurs="unbounded"/>
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<!--Type for the PrintTalk Request. One of the business objects can be selected.-->
	<xs:complexType name="requestType">
		<xs:choice>
			<xs:element name="RFQ" type="pt:rfqQuoteType"/>
			<xs:element name="Quote" type="pt:rfqQuoteType"/>
			<xs:element name="PurchaseOrder" type="pt:poType"/>
			<xs:element name="Confirmation" type="pt:ccrType"/>
			<xs:element name="Invoice" type="pt:invoiceType"/>
			<xs:element name="Cancellation" type="pt:ccrType"/>
			<xs:element name="Refusal" type="pt:ccrType"/>
			<xs:element name="OrderStatusRequest" type="pt:osreqType"/>
			<xs:element name="OrderStatusResponse" type="pt:osrespType"/>
			<xs:element name="ProofApprovalRequest" type="pt:pareqType"/>
			<xs:element name="ProofApprovalResponse" type="pt:parespType"/>
		</xs:choice>
	</xs:complexType>
	<!--Type for a PrintTalk document consisting of PrintTalk Header and PrintTalk Request.-->
	<xs:complexType name="printtalkType">
		<xs:sequence>
			<xs:element name="Header" type="pt:headerType"/>
			<xs:element name="Request" type="pt:requestType"/>
		</xs:sequence>
		<xs:attribute name="version" type="xs:string" use="required"/>
		<xs:attribute name="payloadID" type="xs:string" use="required"/>
		<xs:attribute name="timestamp" type="xs:dateTime" use="optional"/>
	</xs:complexType>
	<!--The PrintTalk element.-->
	<xs:element name="PrintTalk" type="pt:printtalkType"/>
</xs:schema>

