The Document Type Definition (DTD)

<!--  ==========================================================  -->
<!--  ADVERTISEMENT - entire ad                                   -->
<!--                                                              -->
<!--  action means:                                               -->
<!--                                                              -->
<!--     create  - ad is new; id should not already exist         -->
<!--     update  - replace ad that matches on id                  -->
<!--     kill    - withdraw ad immediately                        -->
<!--     inquiry - report ad status                               -->
<!--     preview - validate, but don't publish ad                 -->
<!--                                                              -->
<!--  ==========================================================  -->
<!ELEMENT advertisement (id,status?,expiration?,reference?,comment?,contact*,source?,advertiser,coding,text,publication+)>
<!ATTLIST advertisement
  action (create|update|kill|inquiry|preview) "create"
>


<!--  **********************************************************  -->
<!--                  ADMINISTRATIVE INFORMATION                  -->
<!--  **********************************************************  -->

<!--  ==========================================================  -->
<!--  ID - globally unique identifier for ad                      -->
<!--                                                              -->
<!--  version can be used to distinguish different versions of    -->
<!--  the same ad.                                                -->
<!--  ==========================================================  -->
<!ELEMENT id (#PCDATA)>
<!ATTLIST id 
  version CDATA ""
>

<!--  ==========================================================  -->
<!--  STATUS - system state of ad, as described below             -->
<!--                                                              -->
<!--  state means:                                                -->
<!--                                                              -->
<!--     accepted - ad is accepted for publication                -->
<!--     rejected - ad not accepted; see <message> tags           -->
<!--     partial  - ad is incomplete so it can't be processed     -->
<!--     finished - ad has run its entire schedule                -->
<!--     killed   - ad was killed before ever running             -->
<!--     killed_x - ad was killed after at least one publication  -->
<!--     valid    - preview ad passes validation                  -->
<!--     unknown  - inquiry ad does not exist                     -->
<!--                                                              -->
<!--  ==========================================================  -->
<!ELEMENT status EMPTY>
<!ATTLIST status 
  value (accepted|rejected|partial|finished|killed|killed_x|valid|unknown) "partial"
>

<!--  ==========================================================  -->
<!--  EXPIRATION - date or date/time ad should be withdrawn       -->
<!--  ==========================================================  -->
<!ELEMENT expiration (#PCDATA)>

<!--  ==========================================================  -->
<!--  REFERENCE - text carried to advertiser's invoice            -->
<!--  ==========================================================  -->
<!ELEMENT reference (#PCDATA)>

<!--  ==========================================================  -->
<!--  COMMENT - advertiser's notes for publisher                  -->
<!--  ==========================================================  -->
<!ELEMENT comment (#PCDATA)>


<!--  **********************************************************  -->
<!--                           CONTACTS                           -->
<!--  **********************************************************  -->

<!--  ==========================================================  -->
<!--  CONTACT - contact info for parties related to this ad       -->
<!--                                                              -->
<!--  id is used to uniquely identify each contact. contract_ref  -->
<!--  tags that appear later reference a specific contact by      -->
<!--  assigning the contact's id value to their link attribute.   -->
<!--  ==========================================================  -->
<!ELEMENT contact (name,(address|phone|fax|email|url)*)>
<!ATTLIST contact 
  id ID #IMPLIED
>

<!--  ==========================================================  -->
<!--  NAME - contact name                                         -->
<!--  ==========================================================  -->
<!ELEMENT name (#PCDATA)>

<!--  ==========================================================  -->
<!--  ADDRESS - contact address                                   -->
<!--  ==========================================================  -->
<!ELEMENT address (#PCDATA|address_line|city|state|postal|country)*>
<!ELEMENT address_line (#PCDATA)>
<!ELEMENT city (#PCDATA)>
<!ELEMENT state (#PCDATA)>
<!ELEMENT postal (#PCDATA)>
<!ELEMENT country (#PCDATA)>

<!--  ==========================================================  -->
<!--  MISCELLANEOUS CONTACT INFO - phone, fax, email, url         -->
<!--  ==========================================================  -->
<!ELEMENT phone (#PCDATA)>
<!ELEMENT fax (#PCDATA)>
<!ELEMENT email (#PCDATA)>
<!ELEMENT url (#PCDATA)>

<!--  ==========================================================  -->
<!--  CONTACT_REF - contact reference                             -->
<!--                                                              -->
<!--  link gets a value that equals the id of a <contact>         -->
<!--  ==========================================================  -->
<!ELEMENT contact_ref (#PCDATA)>
<!ATTLIST contact_ref
  link IDREF #IMPLIED
>


<!--  **********************************************************  -->
<!--                     TRACKING INFORMATION                     -->
<!--  **********************************************************  -->

<!--  ==========================================================  -->
<!--  SOURCE - ad origiination and update record                  -->
<!--  ==========================================================  -->
<!ELEMENT source (updated,created,base?)>

<!--  ==========================================================  -->
<!--  UPDATED - time and agent of latest ad update                -->
<!--  ==========================================================  -->
<!ELEMENT updated (timestamp,userid)>

<!--  ==========================================================  -->
<!--  CREATION - time and agent of original ad store              -->
<!--  ==========================================================  -->
<!ELEMENT created (timestamp,userid)>

<!--  ==========================================================  -->
<!--  BASE - ad pickup source                                     -->
<!--                                                              -->
<!--  version can be used to denote the specific version that     -->
<!--  was picked up.                                              -->
<!--  ==========================================================  -->
<!ELEMENT base (#PCDATA)>
<!ATTLIST base 
  version CDATA ""
>

<!--  ==========================================================  -->
<!--  MISCELLANEOUS SOURCE INFO - timestamp, userid               -->
<!--  ==========================================================  -->
<!ELEMENT timestamp (#PCDATA)>
<!ELEMENT userid (#PCDATA)>


<!--  **********************************************************  -->
<!--                          ADVERTISER                          -->
<!--  **********************************************************  -->

<!--  ==========================================================  -->
<!--  ADVERTISER - identity and payment information               -->
<!--  ==========================================================  -->
<!ELEMENT advertiser (account,contact_ref,payment)>

<!--  ==========================================================  -->
<!--  ACCOUNT - private ad originator account reference           -->
<!--                                                              -->
<!--  type means:                                                 -->
<!--                                                              -->
<!--     transient - direct advertiser w/o account relataionship  -->
<!--     agency    - contract advertiser via agency               -->
<!--     direct    - contract advertiser w/o agency               -->
<!--     misc      - advertiser w/o account via agency            -->
<!--                                                              -->
<!--  ==========================================================  -->
<!ELEMENT account (#PCDATA)>
<!ATTLIST account 
  type (transient|agency|direct|misc) "transient"
>

<!--  ==========================================================  -->
<!--  PAYMENT - payment arrangements                              -->
<!--  ==========================================================  -->
<!ELEMENT payment (cash|charge|check|invoice|no_charge)>

<!--  ==========================================================  -->
<!--  CASH                                                        -->
<!--  ==========================================================  -->
<!ELEMENT cash (#PCDATA)>

<!--  ==========================================================  -->
<!--  CHARGE                                                      -->
<!--  ==========================================================  -->
<!ELEMENT charge (charge_card,charge_account,charge_expiration,contact_ref,charge_authorization)>
<!ELEMENT charge_card (#PCDATA)>
<!ATTLIST charge_card
  brand (amex|discover|master_card|visa) #REQUIRED
>
<!ELEMENT charge_account_number (#PCDATA)>
<!ELEMENT charge_expiration (#PCDATA)>
<!ELEMENT charge_authorization (#PCDATA)>
<!ATTLIST charge_authorization 
  status CDATA #REQUIRED
>

<!--  ==========================================================  -->
<!--  CHECK                                                       -->
<!--  ==========================================================  -->
<!ELEMENT check (check_number,check_account,contact_ref)>
<!ELEMENT check_number (#PCDATA)>
<!ELEMENT check_account (#PCDATA)>

<!--  ==========================================================  -->
<!--  INVOICE                                                     -->
<!--  ==========================================================  -->
<!ELEMENT invoice (#PCDATA)>

<!--  ==========================================================  -->
<!--  NO_CHARGE                                                   -->
<!--                                                              -->
<!--  offset account is the internal account that is charged      -->
<!--  for the cost of the ad.                                     -->
<!--                                                              -->
<!--  reason means:                                               -->
<!--                                                              -->
<!--     house_ad         - publisher is paying for ad            -->
<!--     credit_for_error - credit, explained in PCDATA           -->
<!--     special          - special, explained in PCDATA          -->
<!--     other            - other, explained in PCDATA            -->
<!--                                                              -->
<!--  ==========================================================  -->
<!ELEMENT no_charge (#PCDATA)>
<!ATTLIST no_charge 
  offset_account CDATA #REQUIRED
  reason (house_ad|credit_for_error|special|other) #REQUIRED
>


<!--  **********************************************************  -->
<!--                            CODING                            -->
<!--  **********************************************************  -->

<!--  ==========================================================  -->
<!--  CODING                                                      -->
<!--                                                              -->
<!--  Note that coding includes an actual <contact> instead of    -->
<!--  a <contact_ref>. This is to allow the advertiser to         -->
<!--  control which contact details are to be published.          -->
<!--  ==========================================================  -->
<!ELEMENT coding ((automotive|employment|real_estate),contact)>

<!--  ==========================================================  -->
<!--  AUTOMOTIVE                                                  -->
<!--  ==========================================================  -->
<!ELEMENT automotive (auto_side?,auto_category?,auto_year?,auto_make?,auto_model?,auto_mileage?,auto_price?,auto_exterior?,auto_interior?,auto_body?,auto_vin?)>
<!ELEMENT auto_side (#PCDATA)>
<!ATTLIST auto_side
  value (sell|buy) "sell"
>
<!ELEMENT auto_category (#PCDATA)>
<!ATTLIST auto_category
  value (unknown|new|used|antique) "unknown"
>
<!ELEMENT auto_year (#PCDATA)>
<!ELEMENT auto_make (#PCDATA)>
<!ELEMENT auto_model (#PCDATA)>
<!ELEMENT auto_mileage (#PCDATA)>
<!ELEMENT auto_price (#PCDATA)>
<!ELEMENT auto_exterior (#PCDATA)>
<!ELEMENT auto_interior (#PCDATA)>
<!ELEMENT auto_body (#PCDATA)>
<!ATTLIST auto_body
  value (unknown|sedan|coupe|convertible|suv|4x4|pickup|van|minivan) "unknown"
>
<!ELEMENT auto_vin (#PCDATA)>

<!--  ==========================================================  -->
<!--  EMPLOYMENT                                                  -->
<!--  ==========================================================  -->
<!ELEMENT employment (empl_side?,empl_category?,empl_experience?,empl_salary?,empl_basis?,empl_skills?,empl_benefits?)>
<!ELEMENT empl_side (#PCDATA)>
<!ATTLIST empl_side
  value (offered|wanted) "offered"
>
<!ELEMENT empl_category (#PCDATA)>
<!ELEMENT empl_title (#PCDATA)>
<!ELEMENT empl_experience (#PCDATA)>
<!ELEMENT empl_salary (#PCDATA)>
<!ATTLIST empl_salary
 unit (unknown|annual|hourly|weekly|monthly) "unknown"
>
<!ELEMENT empl_basis (#PCDATA)>
<!ATTLIST empl_basis
  value (unknown|full_time|part_time|contract) "unknown"
>
<!ELEMENT empl_skills (#PCDATA)>
<!ELEMENT empl_benefits (#PCDATA)>

<!--  ==========================================================  -->
<!--  REAL ESTATE                                                 -->
<!--  ==========================================================  -->
<!ELEMENT real_estate (real_side?,real_category?,real_year_built?,real_class?,real_price?,real_bedrooms?,real_bathrooms?,real_location?)>
<!ELEMENT real_side (#PCDATA)>
<!ATTLIST real_side
  value (sell|buy|rent|to_rent) "sell"
>
<!ELEMENT real_category (#PCDATA)>
<!ATTLIST real_category
  value (unknown|new_construction|resale|land) "unknown"
>
<!ELEMENT real_year_built (#PCDATA)>
<!ELEMENT real_class (#PCDATA)>
<!ATTLIST real_class
  value (unknown|single_family|multiple_family|apartment|condominium|residential_building|commercial_building|residential_property|commercial_property) "unknown"
>
<!ELEMENT real_price (#PCDATA)>
<!ELEMENT real_bedrooms (#PCDATA)>
<!ELEMENT real_bathrooms (#PCDATA)>
<!ELEMENT real_location (address|real_neighborhood)>
<!ELEMENT real_neighborhood (#PCDATA)>


<!--  **********************************************************  -->
<!--                           AD TEXT                            -->
<!--  **********************************************************  -->


<!ENTITY % inline "#PCDATA|font|glyph|image|keyword|mailbox|margin">
<!ENTITY % spacer "space|tab">
<!ENTITY % flow   "center|left|line|right">


<!--  ==========================================================  -->
<!--  TEXT - ad Text including formatting                         -->
<!--  ==========================================================  -->
<!ELEMENT text    (%inline;|%flow;|reply)*>


<!--  ==========================================================  -->
<!--  CENTER - center text within prevailing margins              -->
<!--                                                              -->
<!--  center causes a break.                                      -->
<!--  Interior content is flowed to best fit.                     -->
<!--  ==========================================================  -->
<!ELEMENT center  (%inline;|reply)*>


<!--  ==========================================================  -->
<!--  FONT - select font size                                     -->
<!--                                                              -->
<!--  size is the new font size. agate is a synonym for the       -->
<!--  smallest available font size. The sizes allowed vary for    -->
<!--  different ads, so some sizes allowed in the DTD may be      -->
<!--  adjusted to the closest size allowed for the ad.            -->
<!--                                                              -->
<!--  font causes a break because only one font size per line is  -->
<!--  allowed.                                                    -->
<!--  ==========================================================  -->
<!ELEMENT font    (%inline;|%flow;|reply)*>
<!ATTLIST font
  size (agate|5|6|10|12|13|14|18|24|30|31|36|48|60|72) "agate"
>


<!--  ==========================================================  -->
<!--  GLYPH - call for a special (non-ASCII) character            -->
<!--                                                              -->
<!--  name selects the desired glyph. Values allowed:             -->
<!--                                                              -->
<!--     en     - space the width of a capital N                  -->
<!--     em     - space the width of a capital M                  -->
<!--     thin   - minimal (non-stretchable) space                 -->
<!--     figure - space the width of a digit                      -->
<!--     dash   - dash the width of a capital M                   -->
<!--     open   - open double quotation mark                      -->
<!--     close  - close double quotation mark                     -->
<!--     fractions: 1/8, 3/8, 5/8, 7/8, 1/4, 3/4, 1/3, 2/3, 1/2   -->
<!--     expressed: 1-8, 3-8, 5-8, 7-8, 1-4, 3-4, 1-3, 2-3, 1-2   -->
<!--                                                              -->
<!--  glyph is non-breaking.                                      -->
<!--  ==========================================================  -->
<!ELEMENT glyph   EMPTY>
<!ATTLIST glyph
  name (en|em|thin|figure|dash|open|close|1-8|3-8|5-8|7-8|1-4|3-4|1-3|2-3|1-2) #REQUIRED
>


<!--  ==========================================================  -->
<!--  IMAGE - include a logo, halftone, or other graphic          -->
<!--                                                              -->
<!--  depth is the image depth measured in agate lines.           -->
<!--                                                              -->
<!--  name can be blank to set vertical space in ad. Otherwise,   -->
<!--  name and depth must match a library image that is available -->
<!--  to advertiser for this ad (by class, etc.).                 -->
<!--                                                              -->
<!--  generic="yes" limits name matching to generic images.       -->
<!--                                                              -->
<!--  image causes a break images are required to occupy the      -->
<!--  entire ad width. Note that images are not subject to        -->
<!--  settings.                                                   -->
<!--  ==========================================================  -->
<!ELEMENT image   EMPTY>
<!ATTLIST image
  depth   CDATA    #REQUIRED
  generic (no|yes) "no"
  name    CDATA    ""
>


<!--  ==========================================================  -->
<!--  KEYWORD - bind ad text to ad coding                         -->
<!--                                                              -->
<!--  name specifies the tag for a coding element, which must be  -->
<!--  present in the same ad.                                     -->
<!--                                                              -->
<!--  format gives rule for expressing coding value as text.      -->
<!--  For example, format="m/dd/yyyy" could be used for a date.   -->
<!--                                                              -->
<!--  scale is used to adjust the coding value before formatting. -->
<!--  For example scale="1000" is used to express mileage as      -->
<!--  as 'k miles' because the coding value is divided by 1000.   -->
<!--                                                              -->
<!--  punct is appended to the formatted keyword value, but only  -->
<!--  when the value has a non-zero length. Otherwise, punct is   -->
<!--  omitted.                                                    -->
<!--                                                              -->
<!--  NOTICE. The interior of the keyword element is pre-filled   -->
<!--  with the formatted coding value, so downline users don't    -->
<!--  need special handling for keyword.                          -->
<!--                                                              -->
<!--  keyword is non-breaking.                                    -->
<!--  ==========================================================  -->
<!ELEMENT keyword (#PCDATA)>
<!ATTLIST keyword
  format  CDATA    ""
  name    CDATA    #REQUIRED
  punct   CDATA    ""
  scale   CDATA    ""
>


<!--  ==========================================================  -->
<!--  LEFT - left-justify text within prevailing margins          -->
<!--                                                              -->
<!--  left causes a break.                                        -->
<!--  Interior content is flowed to best fit.                     -->
<!--  ==========================================================  -->
<!ELEMENT left    (%inline;|reply)*>


<!--  ==========================================================  -->
<!--  LINE - mark off a line for special spacing or tabulation    -->
<!--                                                              -->
<!--  The line interior is set to full justification to the       -->
<!--  prevailing margins. The <space/> or <tab/> elements, if     -->
<!--  present, influence how the line is justified. Absent these  -->
<!--  tags, excess line space is divided evenly among the         -->
<!--  interword spaces. See <space/> and <tab/> for comments on   -->
<!--  how they affect <line>.                                     -->
<!--                                                              -->
<!--  line causes a break.                                        -->
<!--  ==========================================================  -->
<!ELEMENT line    (%inline;|%spacer;|reply)*>


<!--  ==========================================================  -->
<!--  MAILBOX - publication-assigned reply forwarding code        -->
<!--                                                              -->
<!--  agent is the identifier for the forwarding agent.           -->
<!--                                                              -->
<!--  If the advertiser has arrange for reply forwarding, it is   -->
<!--  necessary to include a forwarding code in the ad.  This     -->
<!--  allows the reply forwarder to match a reply with the        -->
<!--  appropriate forwarding information. The advertiser uses     -->
<!--  <mailbox> to mark the location where the forwarding code    -->
<!--  is to appear in the ad.                                     -->
<!--                                                              -->
<!--  NOTICE. The interior of the mailbox element is pre-filled   -->
<!--  with the assigned code, so downline users don't need        -->
<!--  special handling for mailbox.  Despite this, downline       -->
<!--  users, if they accept ads that use forwarding should        -->
<!--  provide forwarding agent-specific reply instructions.       -->
<!--                                                              -->
<!--  mailbox is non-breaking.                                    -->
<!--  ==========================================================  -->
<!ELEMENT mailbox (#PCDATA)>
<!ATTLIST mailbox
  agent CDATA ""
>


<!--  ==========================================================  -->
<!--  MARGIN - establish margins                                  -->
<!--                                                              -->
<!--  Margin units are agate en spaces.                           -->
<!--                                                              -->
<!--  hang is the hanging indent margin. That is, the left        -->
<!--  margin for all but the first line. If hang="none", then     -->
<!--  the left margin prevails for all lines. Otherwise the       -->
<!--  left margin prevails for the first line and the hang        -->
<!--  margin prevails for all other lines.                        -->
<!--                                                              -->
<!--  left is the left margin. If left="same", the left margin    -->
<!--  in effect prior to <margin> is used.                        -->
<!--                                                              -->
<!--  right is the right margin. If right="same", the right       -->
<!--  margin in effect prior to <margin> is used.                 -->
<!--                                                              -->
<!--  The initial margins are left="0", right="0", and            -->
<!--  hang="none".                                                -->
<!--                                                              -->
<!--  margin causes a break.                                      -->
<!--  ==========================================================  -->
<!ELEMENT margin  (%inline;|%flow;|reply)*>
<!ATTLIST margin
  hang    (none|0|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15) "none"
  left    (same|0|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15) "same"
  right   (same|0|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15) "same"
>


<!--  ==========================================================  -->
<!--  REPLY - reply request phrase                                -->
<!--                                                              -->
<!--  agent is the identifier for the forwarding agent.           -->
<!--                                                              -->
<!--  <reply> is a generalization of <mailbox> for the benefit    -->
<!--  of advertisers who a) user reply forwarding and b) target   -->
<!--  ads to multiple publications. These advertisers can         -->
<!--  different reply instructions for each publication. The      -->
<!--  <reply> is used to mark the location in the ad text where   -->
<!--  the publisher-specific reply instructions are to appear.    -->
<!--                                                              -->
<!--  NOTICE. The interior of the reply element is pre-filled     -->
<!--  with the text assigned for a particular publisher, so       -->
<!--  downline users can avoid special handling for reply.        -->
<!--  Despite this, downline users, if they accept ads that use   -->
<!--  forwarding should provide forwarding agent-specific reply   -->
<!--  instructions. A more sophisticated downline user could act  -->
<!--  as forwarding agent and/or substitute different reply       -->
<!--  instructions.                                               -->
<!--                                                              -->
<!--  reply is non-breaking.                                      -->
<!--  ==========================================================  -->
<!ELEMENT reply   (%inline;)*>
<!ATTLIST reply
  agent CDATA ""
>


<!--  ==========================================================  -->
<!--  RIGHT - right-justify text within prevailing margins        -->
<!--                                                              -->
<!--  right causes a break.                                       -->
<!--  Interior content is flowed to best fit.                     -->
<!--  ==========================================================  -->
<!ELEMENT right   (%inline;|reply)*>


<!--  ==========================================================  -->
<!--  SPACE - mark point for justification space in a line        -->
<!--                                                              -->
<!--  The <space> element is only allowed interior to a <line>    -->
<!--  element. Furthermore, if one or more <space> elements are   -->
<!--  present in a particular <line> element, no <tab> elements   -->
<!--  are allowed.                                                -->
<!--                                                              -->
<!--  The <line> contents are set to full justification at the    -->
<!--  prevailing margins. Excess space is distributed evenly      -->
<!--  among all interior <space> elements.                        -->
<!--                                                              -->
<!--  space is non-breaking.                                      -->
<!--  ==========================================================  -->
<!ELEMENT space   EMPTY>


<!--  ==========================================================  -->
<!--  TAB - split a line into two into left and right halves      -->
<!--                                                              -->
<!--  The <tab> element is only allowed interior to a <line>      -->
<!--  element. Furthermore, at most one <tab> element is allowed  -->
<!--  in a particular <line> element, and no <space> elements     -->
<!--  are allowed.                                                -->
<!--                                                              -->
<!--  leader="yes" requests dot leadering between the left and    -->
<!--  right text.                                                 -->
<!--                                                              -->
<!--  flow="yes" requests that the left text be flowed to a       -->
<!--  second line if the whole <line> is overset. With flow="no", -->
<!--  the left text is set on one line and the right text on the  -->
<!--  next when the <line> is overset.                            -->
<!--                                                              -->
<!--  tab is non-breaking.                                        -->
<!--  ==========================================================  -->
<!ELEMENT tab     EMPTY>
<!ATTLIST tab
  leader (no|yes) "no"
  flow   (no|yes) "no"
>


<!--  **********************************************************  -->
<!--                   PUBLICATION INFORMATION                    -->
<!--  **********************************************************  -->

<!--  ==========================================================  -->
<!--  PUBLICATION - placement data                                -->
<!--                                                              -->
<!--  name identifies a particular publisher. Interior values,    -->
<!--  such as class and zone are in the publication's name space  -->
<!--  ==========================================================  -->
<!ELEMENT publication (pub_alias?,pub_price?,pub_options?,class*)>
<!ATTLIST publication
  name CDATA #REQUIRED
>

<!--  ==========================================================  -->
<!--  PUB_ALIAS - alternate ad id; local to publication           -->
<!--  ==========================================================  -->
<!ELEMENT pub_alias (#PCDATA)>

<!--  ==========================================================  -->
<!--  PUB_PRICE - total ad cost                                   -->
<!--  ==========================================================  -->
<!ELEMENT pub_price (#PCDATA)>

<!--  ==========================================================  -->
<!--  PUB_OPTIONS - special ad features (usually at extra cost)   -->
<!--  ==========================================================  -->
<!ELEMENT pub_options (claim?,columns?,forwarding?,tearsheet?,shading?)>

<!--  ==========================================================  -->
<!--  CLAIM - base pricing on a different number of inserts       -->
<!--                                                              -->
<!--  Multiple ads ordered at once for the same class can be      -->
<!--  counted together as the basis for a combination ad rate.    -->
<!--  If claim exceeds the number of inserts ordered, a lower     -->
<!--  price may be quoted based on the claimed combination.       -->
<!--  Claim does not affect actual billing, so the advertiser     -->
<!--  pays the regular rate if the other ad(s) don't run.         -->
<!--  ==========================================================  -->
<!ELEMENT claim (#PCDATA)>

<!--  ==========================================================  -->
<!--  COLUMNS - specify a multi-column ad                         -->
<!--  ==========================================================  -->
<!ELEMENT columns (#PCDATA)>

<!--  ==========================================================  -->
<!--  FORWARDING - request ad reply forwarding service            -->
<!--                                                              -->
<!--  collect means:                                              -->
<!--                                                              -->
<!--     mail  - assign mailbox for us mail replies               -->
<!--     voice - assign voice mailbox for telephone replies       -->
<!--     email - assign mailbox id for email replies              -->
<!--     none  - no forwarding                                    -->
<!--                                                              -->
<!--  forward means:                                              -->
<!--                                                              -->
<!--     same  - forward replies like they were collected         -->
<!--                                                              -->
<!--     hold  - hold mail or print and hold email                -->
<!--             requires collect="mail" or collect="email"       -->
<!--                                                              -->
<!--     mail  - forward mail or print and mail email             -->
<!--             requires collect="mail" or collect="email"       -->
<!--                                                              -->
<!--     fax   - forward email via fax                            -->
<!--             requires collect="email"                         -->
<!--                                                              -->
<!--  ==========================================================  -->
<!ELEMENT forwarding (%inline;|contact_ref|rate)*>
<!ATTLIST forwarding
  collect (mail|voice|email|none) "mail"
  forward (same|hold|mail|fax) "same"
>

<!--  ==========================================================  -->
<!--  TEARSHEET - request copy of published ad (torn from paper)  -->
<!--  ==========================================================  -->
<!ELEMENT tearsheet (#PCDATA|contact_ref|rate)*>

<!--  ==========================================================  -->
<!--  SHADING - request ad background shading                     -->
<!--  ==========================================================  -->
<!ELEMENT shading (rate*)>

<!--  ==========================================================  -->
<!--  CLASS - set classification & publishing schedule            -->
<!--  ==========================================================  -->
<!ELEMENT class (#PCDATA|title|classword|lines|billed_lines|sortkey|zone|rundate)*>

<!--  ==========================================================  -->
<!--  CLASSWORD - keywords for loose classification remapping     -->
<!--  ==========================================================  -->
<!ELEMENT classword (#PCDATA)>

<!--  ==========================================================  -->
<!--  LINES - agate lines ad set to for this classification       -->
<!--  ==========================================================  -->
<!ELEMENT lines (#PCDATA)>

<!--  ==========================================================  -->
<!--  BILLED_LINES - agate lines ad billed for this class         -->
<!--                                                              -->
<!--  Note: This element is omitted if, as usual, billed lines    -->
<!--  equals set lines. They only differ if ad is too small       -->
<!--  compared to the minimun size allowed in the class.          -->
<!--  ==========================================================  -->
<!ELEMENT billed_lines (#PCDATA)>

<!--  ==========================================================  -->
<!--  SORTKEY - ad sort key; some classes restrict key choices    -->
<!--  ==========================================================  -->
<!ELEMENT sortkey (#PCDATA)>

<!--  ==========================================================  -->
<!--  ZONE - zone code to select ad audience                      -->
<!--  ==========================================================  -->
<!ELEMENT zone (#PCDATA|title)*>

<!--  ==========================================================  -->
<!--  RUNDATE - yyyymmdd date for add plus publication record     -->
<!--  ==========================================================  -->
<!ELEMENT rundate (#PCDATA|rate|instance)*>

<!--  ==========================================================  -->
<!--  INSTANCE - publication record and related details           -->
<!--  ==========================================================  -->
<!ELEMENT instance (edition,section,page,column,offset)>
<!ELEMENT edition (#PCDATA)>
<!ELEMENT section (#PCDATA)>
<!ELEMENT page (#PCDATA)>
<!ELEMENT column (#PCDATA)>
<!ELEMENT offset (#PCDATA)>


<!--  **********************************************************  -->
<!--                    MISCELLANEOUS ELEMENTS                    -->
<!--  **********************************************************  -->

<!--  ==========================================================  -->
<!--  RATE - record of pricing rule as it relates to this ad      -->
<!--                                                              -->
<!--  basis give invoice explanation for rate.                    -->
<!--                                                              -->
<!--  unit means:                                                 -->
<!--                                                              -->
<!--     line      - rate quoted is per agate line billed         -->
<!--     ad        - rate quoted is once per ad                   -->
<!--     recipient - rate is per tearsheet recipient              -->
<!--     standard  - percentage increase of all standard charges  -->
<!--                                                              -->
<!--  type means:                                                 -->
<!--                                                              -->
<!--     actual    - rate is applied to final ad price            -->
<!--     comparison- rate is not applied; ad earns discount rate  -->
<!--                                                              -->
<!--  ==========================================================  -->
<!ELEMENT rate (#PCDATA)>
<!ATTLIST rate 
  basis CDATA #REQUIRED
  unit (line|ad|recipient|standard) #REQUIRED
  type (actual|comparison) "actual"
>

<!--  ==========================================================  -->
<!--  TITLE - the looked-up title of a coded value (e.g. zone)    -->
<!--  ==========================================================  -->
<!ELEMENT title (#PCDATA)>

