<!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 <josh@microsoft.com> Program Manager - Internet Technologies