Subject: IPP> non uu DTD

From: Josh Cohen <[email-masked]>
Date: Fri, 23 Jan 1998 23:35:05 -0800

Here is a suggested DTD for an IPP message..
I recommend that it be used in the spec for the definition
but not for on the wire validation.
This will easily allow arbitrary new headers to be inserted
by clients and servers

<!DOCTYPE request [

<!-- the message prologue /header/ -->
<!ELEMENT prologue ( message.version , operation.type, misc* )>

<!ELEMENT message.version (#PCDATA)>
<!ELEMENT operation.type (#PCDATA)>
<!-- should be a defined type print-job, query, etc -->
<!ELEMENT misc (#PCDATA)>
<!-- random data, zero or more allowed for client brand/whatever -->

<!-- this is the list of 'registered' attributes -->
<!-- this should include ALL attributes in the spec -->
<!ELEMENT printer.uri (#PCDATA)>
<!ELEMENT attributes.charset (#PCDATA)>
<!ELEMENT attributes.natural.lanugage (#PCDATA)>
<!ELEMENT requesting.user.name (#PCDATA)>
<!ELEMENT job.name (#PCDATA) >
<!ELEMENT ipp.attribute.fidelity ( #PCDATA )>
<!ELEMENT document.name ( #PCDATA) >
<!ELEMENT compression ( #PCDATA) >
<!ELEMENT job.k.octets ( #PCDATA )>
<!ELEMENT job.impressions ( #PCDATA )>
<!ELEMENT job.media.sheets ( #PCDATA; )>

<!-- definition for datalink -->
<!-- this is a uri to the data, I dont think we need both -->
<!-- print URI and print job.  print job just has a CID -->
<!-- CID is a url which points to a part in a multipart mime message -->
<!ELEMENT datalinkURI (#PCDATA)>

<!-- for the spec, we dictate which attributes are -->
<!-- allowed in for each operation type            -->

<!ENTITY % print.job.mand " ipp.printer.uri
	| attributes.charset
	| attributes.natural.language
	| requesting.user.name">

<!ENTITY % print.job.opt " ( job.name 
	| ipp.attribute.fidelity
	| document.name 
	| document.format 
	| document.natural.languague
	| compression string	
	| job.k.octets integer
	| job.impressions integer
	| job.media.sheets integer )*"

<!-- now we define the actual message -->
<!ELEMENT ipp.request ( prologue, oper.attr , job.attr?, datalinkURI? )>
<!-- prologue, oper.attr are required, job.attr and datalinkURI are opt --> 
<!ELEMENT oper.attr ( &print.job.mand; ,&print.job.opt; )>
<!ELEMENT job.attr ( &job.attr.list; )*>

---
Josh Cohen <[email-masked]>
Program Manager - Internet Technologies