[DTD]............... problème de code

hugo -  
 hugo102 -
Bonjour à tous.

Voila, j ai un probleme au niveau des lignes de code du dtd, et quand je corrige une erreur, il m'en affiche une autre et ansi de suite. Enfin je decouvre le dtd....donc c 'est probablement pour ça.
Alors si qq veut bien me dire où se situe mon (mes) erreur(s), ce serait tres gentils de sa part.
<!NOTATION cgm    PUBLIC "-//USA-DOD//NOTATION Computer Graphics Metafile//EN">
<!ELEMENT amm - - ((title,mfmatr,chapter*)|increv|tr+)
				+(revst|revend|cocst|cocend|docunit|hotlink) >
<!ATTLIST   amm
		spl      CDATA    #REQUIRED
		model    CDATA    #REQUIRED
		oidate      NUMBER   #REQUIRED
		revdate     NUMBER   #REQUIRED
		tsn      CDATA    #REQUIRED
		cus      CDATA    #IMPLIED
		docnbr      CDATA    #IMPLIED
		lang     CDATA    #REQUIRED
		chg      (N|R|U)     'N'            >

2 réponses

  1. teebobeet
     
    Salut,
    Premiere chose, si tu te lances dans les DTD, pourquoi ne passes tu pas aux XSD, c'est ce qui est actuel, et c'est enfin un lanage SGML, ce qui veut dire que c'est dans un fichier xml que tu decris ton fichier xml (schematiquement), c'est plus precise et potentiellement plus rapide a verifier pour le parser dans le cas des gros fichiers...
    Ceci etant dit, ca serait plus constructifs que tu nous dises QUELLE erreur il affiche, ou au moins que tu nous donnes ton fichier XML pourque l'on puisse tester nous meme :o)
    0
  2. hugo102
     
    Bon, en fait, on m a donné 2 dtd et je dois comparer les balises une a une. Etant donné que cela represente un travail enorme, j aurais aimé voir les dtd sous forme de schéma en forme d'arbre. Pour cela j ai téléchargé "Visual Dtd Editor". Je joins le dtd complet :
    <!-- ======================================================= -->
    <!--  This is the DTD for Task Numbered JEMTOSS              -->
    <!--  TURBOMECA Engine Manual, Version 1.0  01/06/03         -->
    <!-- ======================================================= -->
    <!--  Original DTD :                                         -->
    <!--                 DTD ATA em.dtd Version 2.2    01/14/97  -->
    <!-- ======================================================= -->
    <!--  Update :                       Version number :        -->
    <!--          First version                          001     -->
    <!--                                                         -->
    <!--          02/10/2003                             002     -->
    <!--                                                         -->
    
    <!-- Changement de structure des pr?requis, -->
    <!-- suite a evolution des modeles Turbomeca -->
    <!-- -->
    <!-- Prise en charge des equations (ajout 31/03/2004) -->
    <!-- -->
    <!-- ======================================================= -->
    <!-- -->
    <!-- DTD reference: "-//ATA-TASK//DTD EM-VER1.0-TURBOMECA//EN" -->
    <!-- -->
    <!-- The following set of declarations may be referred -->
    <!-- to using a public entity as follows: -->
    <!-- -->
    <!-- <!DOCTYPE em PUBLIC "-//ATA-TASK//DTD EM-VER1.0-TURBOMECA//EN" -->
    <!-- -->
    <!-- ======================================================= -->
    <!-- DOCTYPE em [ -->
    <!-- ======================================================= -->
    <!-- NOTATIONS -->
    <!-- ======================================================= -->
    <!-- -->
    <!NOTATION cgm PUBLIC "-//USA-DOD//NOTATION Computer Graphics Metafile//EN">
    <!NOTATION ccitt4 PUBLIC "-//USA-DOD//NOTATION CCITT Group 4 Facsimile//EN">
    <!-- -->
    <!-- ====================================================== -->
    <!-- ENTITIES -->
    <!-- ======================================================= -->
    <!ENTITY % g.r "(reftask*, grphcref*, refext*, refint*)" >
    <!ENTITY % w.c.n "(warning*, caution*, note*)" >
    <!ENTITY % text "(para | tabdat | table |
    unlist | numlist | deflist | graphic)+">
    <!ENTITY % deleted "(deleted, chgdesc*)" >
    <!ENTITY % yesorno "NUMBER" >
    <!ENTITY % revatt
    "chg (N | D | R | U) #REQUIRED
    key ID #REQUIRED
    revdate NUMBER #REQUIRED" >
    <!-- -->
    <!ENTITY % ISOtech PUBLIC "ISO 8879-1986//ENTITIES General Technical//EN">
    %ISOtech;
    <!ENTITY % ISOpub PUBLIC "ISO 8879-1986//ENTITIES Publishing//EN">
    %ISOpub;
    <!ENTITY % ISOnum PUBLIC "ISO 8879-1986//ENTITIES Numeric and Special Graphic//EN">
    %ISOnum;
    <!ENTITY % ISOgrk1 PUBLIC "ISO 8879-1986//ENTITIES Greek Letters//EN">
    %ISOgrk1;
    <!ENTITY % ISOlat1 PUBLIC "ISO 8879-1986//ENTITIES Added Latin 1//EN" >
    %ISOlat1;

    <!-- -->
    <!-- ====================================================== -->
    <!-- EM TOP LEVEL STRUCTURE -->
    <!-- ======================================================= -->
    <!ELEMENT em - - (issue, (task | tr), endverso?)
    +(revst | revend) >
    <!ATTLIST em
    spl CDATA #REQUIRED
    e_family CDATA #REQUIRED
    e_version CDATA #REQUIRED
    manual (MM | MR | MRPM | COM | COR | CR | TCI) #REQUIRED
    oidate NUMBER #REQUIRED
    tsn CDATA #IMPLIED
    docnbr CDATA #REQUIRED
    lang (FR |EN |DE |SP) #REQUIRED
    chg (N | R | U | D) 'N' >

    <!-- ====================================================== -->
    <!-- ISSUE - REVISION DATE -->
    <!-- ======================================================= -->

    <!ELEMENT issue - o EMPTY >
    <!ATTLIST issue
    year NUMBER #REQUIRED
    month CDATA #REQUIRED
    day CDATA #REQUIRED
    revnum NUMBER #REQUIRED
    quality (UNVERIFIED | DRAFT | DRAFT2| PREMASTER | MASTER) #REQUIRED >

    <!-- -->
    <!-- ======================================================= -->
    <!-- TR - TEMPORARY REVISION -->
    <!-- ======================================================= -->
    <!ELEMENT tr - - (trfmatr, (task+ | graphic+ | sblist))>
    <!-- -->
    <!-- ======================================================= -->
    <!-- TR - FRONT MATTER -->
    <!-- ======================================================= -->
    <!ELEMENT trfmatr - - (title, trreason, (%text;)?) >
    <!ATTLIST trfmatr
    trnbr CDATA #REQUIRED
    issdate NUMBER #REQUIRED
    trdel CDATA #IMPLIED
    trrepl CDATA #IMPLIED >
    <!ELEMENT trreason - - %text; >

    <!-- ====================================================== -->
    <!-- TASK -->
    <!-- -->
    <!-- ======================================================= -->
    <!ELEMENT task - - (effect,title,
    (mfmatr | ((tfmatr|repair|si)?,
    (proc+ | tabperiodinspect+))),
    graphic*) >
    <!-- -->
    <!-- ======================================================= -->
    <!ATTLIST task
    chapnbr CDATA #REQUIRED
    sectnbr CDATA #REQUIRED
    subjnbr CDATA #REQUIRED
    func CDATA #REQUIRED
    seq CDATA #REQUIRED
    confltr CDATA #REQUIRED
    varnbr CDATA #REQUIRED
    pgblknbr CDATA #REQUIRED
    %revatt; >

    <!-- -->
    <!-- ====================================================== -->
    <!-- ENGINE MANUAL FRONT MATTER -->
    <!-- ======================================================= -->
    <!-- -->
    <!-- ======================================================= -->
    <!-- trlist and intro made optional so the em DTD can be -->
    <!-- used for a Consumable Materials Index -->
    <!-- ======================================================= -->
    <!-- -->
    <!ELEMENT mfmatr - - (transltr?, frontpage?, info?, approval?,
    nulist?, trlist?, conindex?, sblist*,
    chapnbrli?, chaptitleli?, chaplocli?,
    intro?, howtouse?, warninglist?, lists?,
    lep?, contents?)>
    <!ELEMENT transltr - - (chgdesc*, locadate, (%text;), auth, table)+ >
    <!ELEMENT locadate - - (#PCDATA) >
    <!ELEMENT auth - - (%text;) >
    <!ELEMENT info - - (para+)>
    <!ELEMENT approval - - (para+, agreenbr?, docnum?,
    (approdate | isempty), note*) >
    <!ELEMENT agreenbr - - (#PCDATA) >
    <!ELEMENT approdate - o EMPTY >
    <!ATTLIST approdate
    year NUMBER #REQUIRED
    month CDATA #REQUIRED
    day CDATA #REQUIRED >
    <!ELEMENT trlist - - (trdata+ | isempty | table) >
    <!ELEMENT trdata - - (effect?, trnbr, trstatus, trloc+)>
    <!ELEMENT conindex - - (chgdesc*, title, (prclist1 | table)+)+>
    <!ELEMENT sblist - - (effect?, chgdesc*, title, %text;,
    (sbdata+ | isempty)) >
    <!ELEMENT sbdata - - (sbnbr, sbdesc?, issdate?, ics) >
    <!ELEMENT intro - - ((chgdesc*, title, prclist1) | proc)+ >
    <!ELEMENT howtouse - - ((chgdesc*, title, prclist1) | proc)+ >
    <!ELEMENT warninglist - - (proc+ | warning+ | isempty) >
    <!ELEMENT (sbnbr | sbdesc | issdate | ics |
    trnbr | trstatus | trloc) - - (#PCDATA)>
    <!-- -->
    <!ATTLIST (transltr | trlist | conindex | intro | howtouse)
    oldkey NAME #IMPLIED
    %revatt; >
    <!ATTLIST sblist
    %revatt; >

    <!-- ====================================================== -->
    <!-- FRONT PAGE -->
    <!-- ======================================================= -->
    <!ELEMENT frontpage - - (volnum, docnum, oiprintdate) >

    <!ELEMENT volnum - o (#PCDATA) >
    <!ATTLIST volnum
    volnbr NUMBER #REQUIRED
    voltotal NUMBER #REQUIRED >
    <!ELEMENT docnum - o (#PCDATA) >
    <!ELEMENT oiprintdate - o EMPTY >
    <!ATTLIST oiprintdate
    year NUMBER #REQUIRED
    month CDATA #REQUIRED
    day CDATA #REQUIRED >

    <!-- ====================================================== -->
    <!-- LIST OF NORMAL UPDATES -->
    <!-- ======================================================= -->
    <!ELEMENT nulist - - (nudata+ | isempty | table) >
    <!ELEMENT nudata - - (nunbr, nuupdate, nuoperator, nuinsdate)>
    <!ELEMENT nunbr - - (#PCDATA) >
    <!ELEMENT nuupdate - o EMPTY >
    <!ATTLIST nuupdate
    year NUMBER #REQUIRED
    month CDATA #REQUIRED
    day CDATA #REQUIRED >
    <!ELEMENT nuoperator - - (#PCDATA) >
    <!ELEMENT nuinsdate - o EMPTY >
    <!ATTLIST nuinsdate
    year NUMBER #IMPLIED
    month CDATA #IMPLIED
    day CDATA #IMPLIED >

    <!-- ====================================================== -->
    <!-- LIST OF CHAPTERS BY NUMBER -->
    <!-- ======================================================= -->
    <!ELEMENT chapnbrli - - (title, note,
    (chapternbr+ | isempty | table)) >
    <!ELEMENT chapternbr - - (chapnbr, title, chapterdate,
    chapterrev, sectionnbr+) >
    <!ELEMENT chapnbr - - (#PCDATA) >
    <!ELEMENT chapterdate - o EMPTY >
    <!ATTLIST chapterdate
    year NUMBER #REQUIRED
    month CDATA #REQUIRED
    day CDATA #REQUIRED >
    <!ELEMENT chapterrev - - (#PCDATA) >
    <!ELEMENT sectionnbr - - (sectsubj, title, chapterdate?, chapterrev?) >
    <!ELEMENT sectsubj - o EMPTY >
    <!ATTLIST sectsubj
    sectnbr NUMBER #REQUIRED
    subjnbr NUMBER #REQUIRED >

    <!-- ====================================================== -->
    <!-- LIST OF CHAPTERS BY TITLE -->
    <!-- ======================================================= -->
    <!ELEMENT chaptitleli - - (title, note,
    (chaptitle+ | isempty | table)) >
    <!ELEMENT chaptitle - - (title, chapcss) >
    <!ELEMENT chapcss - o EMPTY >
    <!ATTLIST chapcss
    chapnbr NUMBER #REQUIRED
    sectnbr NUMBER #REQUIRED
    subjnbr NUMBER #REQUIRED >

    <!-- ====================================================== -->
    <!-- LIST OF CHAPTERS BY LOCATION -->
    <!-- ======================================================= -->
    <!ELEMENT chaplocli - - (title, note?,
    (chaploc+ | isempty | table)) >
    <!ELEMENT chaploc - - (sheet, title) >
    <!ATTLIST chaploc
    chapnbr NUMBER #REQUIRED
    sectnbr NUMBER #REQUIRED
    subjnbr NUMBER #REQUIRED
    chg (N | D | R | U) #REQUIRED >

    <!-- ====================================================== -->
    <!-- LIST OF EFFECTIVE PAGES -->
    <!-- ======================================================= -->
    <!ELEMENT lep - - (lepcontents) >
    <!ATTLIST lep
    chapnbr CDATA #REQUIRED >
    <!ELEMENT lepcontents - o (lepentry+) >

    <!ELEMENT lepentry - o (leptcss?, leptask?,
    leptname, leppage, lepdate) >
    <!ATTLIST lepentry
    chapnbr CDATA #IMPLIED
    sectnbr CDATA #IMPLIED
    subjnbr CDATA #IMPLIED
    func CDATA #IMPLIED
    seq CDATA #IMPLIED
    confltr CDATA #IMPLIED
    varnbr CDATA #IMPLIED >
    <!ELEMENT leptcss - o (#PCDATA) >
    <!ELEMENT leptask - o (#PCDATA) >
    <!ELEMENT leptname - o (#PCDATA) >
    <!ELEMENT leppage - o (#PCDATA) >
    <!ATTLIST leppage
    chg %yesorno; "0" >
    <!ELEMENT lepdate - o EMPTY >
    <!ATTLIST lepdate
    year NUMBER #REQUIRED
    month CDATA #REQUIRED
    day CDATA #REQUIRED >

    <!-- ====================================================== -->
    <!-- TABLE OF CONTENTS -->
    <!-- ======================================================= -->
    <!ELEMENT contents - o (chapname, toctcss, tocsect+) >
    <!ATTLIST contents chapnbr CDATA #REQUIRED >
    <!ELEMENT chapname - o (#PCDATA) >

    <!ELEMENT tocsect - o (sectname, toctcss, toctask?, tocsubj+) >
    <!ELEMENT tocsubj - o (subjname, toctcss, tocentry+) >
    <!ELEMENT sectname - o (#PCDATA) >
    <!ELEMENT subjname - o (#PCDATA) >

    <!ELEMENT tocentry - o (toctname, toctcss, toctask,
    tocpage, toceffect) >
    <!ATTLIST tocentry
    chapnbr CDATA #IMPLIED
    sectnbr CDATA #IMPLIED
    subjnbr CDATA #IMPLIED
    func CDATA #IMPLIED
    seq CDATA #IMPLIED
    confltr CDATA #IMPLIED
    varnbr CDATA #IMPLIED >
    <!ELEMENT toctname - o (#PCDATA) >
    <!ELEMENT toctcss - o (#PCDATA) >
    <!ELEMENT toctask - o (#PCDATA) >
    <!ELEMENT tocpage - o (#PCDATA) >
    <!ELEMENT toceffect - o (#PCDATA) >

    <!-- ======================================================= -->
    <!-- WARNING LIST -->
    <!-- ======================================================= -->
    <!ELEMENT warningli - - (warning+) >

    <!-- ======================================================= -->
    <!-- REPERTOIRES -->
    <!-- ======================================================= -->

    <!ELEMENT lists - - ((title?, (%text;)*,
    (toolitemindex | tooltaskindex | storeindex
    | repairgenindex | repairindex | siindex
    | adl | vendlist))
    | proc+) >

    <!ELEMENT toolitemindex - - (isempty | table) >
    <!ELEMENT tooltaskindex - - (isempty | table) >
    <!ELEMENT storeindex - - (isempty | table) >
    <!ELEMENT repairgenindex - - (isempty | table) >
    <!ELEMENT repairindex - - (isempty | table) >
    <!ELEMENT siindex - - (isempty | table) >

    <!-- ======================================================= -->
    <!-- LIST OF ADDITIONAL DOCUMENTATION -->
    <!-- ======================================================= -->
    <!ELEMENT adl - - (adlentry+) >
    <!ELEMENT adlentry - - (manualtype, manualref) >
    <!ELEMENT manualtype - - (#PCDATA) >
    <!ELEMENT manualref - - (#PCDATA) >

    <!-- ======================================================= -->
    <!-- Vendors list -->
    <!-- ======================================================= -->

    <!ELEMENT vendlist - - (title, (%text;)?, vendata+) >
    <!ATTLIST vendlist
    oldkey NAME #IMPLIED
    %revatt; >

    <!ELEMENT vendata - - (mfr, mad) >

    <!ELEMENT mfr - - (#PCDATA) >
    <!ELEMENT mad - - (venname?, venaddr*, veninfo*) >
    <!ELEMENT venname - - (#PCDATA) >
    <!ELEMENT venaddr - - (#PCDATA) >
    <!ELEMENT veninfo - - (#PCDATA) >

    <!-- ====================================================== -->
    <!-- PROC -->
    <!-- ======================================================= -->
    <!ELEMENT proc - - ((
    (chgdesc*, warning*, caution*, title,(%g.r;),(%w.c.n;),
    ((%text;), warningli?, note*)*,
    (tfmatr? | ((taskproc, graphic*)|ctrl|
    uselimitedpartli |
    tbomoduleli | disassref |
    tboaccessoryli | cpvlli |
    tabperiodinspect)*) )
    | %deleted;)
    ) >
    <!-- -->
    <!-- ======================================================= -->
    <!-- -->
    <!-- ======================================================= -->
    <!-- TFMATR -->
    <!-- ======================================================= -->
    <!ELEMENT tfmatr - - (tprereq+) >
    <!-- title not optional, so tprereq would never be empty -->
    <!ELEMENT tprereq - - (title, ((((%w.c.n;) | (%text;))*, list1?) |
    (stdli, tedli?, sspareli?, spareli?,
    conli?, reqprotectli?, reqpersli?) |
    (tedli, sspareli?, spareli?, conli?,
    reqprotectli?, reqpersli?) |
    reqtaskli | isempty?)) >
    <!-- -->
    <!-- ======================================================= -->
    <!-- TASKPROC -->
    <!-- ======================================================= -->
    <!ELEMENT taskproc - - (warning*, caution*, title, (%g.r;), (%w.c.n;),
    (((subtask*, graphic*)*
    | tolerance+
    | list1
    | (para | tabdat |table | unlist | numlist))*
    | isempty))
    >
    <!-- -->
    <!-- ======================================================= -->
    <!-- SUBTASK -->
    <!-- ======================================================= -->
    <!ELEMENT subtask - - (effect?,
    ((chgdesc*, title,(%g.r;), (%w.c.n;),
    (list2 | table* | tabdat*)) | %deleted;)) >
    <!ATTLIST subtask
    chapnbr NUMBER #REQUIRED
    sectnbr NUMBER #REQUIRED
    subjnbr NUMBER #REQUIRED
    func CDATA #REQUIRED
    seq CDATA #REQUIRED
    confltr CDATA ' '
    varnbr CDATA ' '
    key ID #REQUIRED >

    <!-- -->
    <!-- ======================================================= -->
    <!-- Controle visuel et dimensionnel -->
    <!-- ======================================================= -->
    <!ELEMENT ctrl - - (ctrlhead, headctrl, malfunction+,
    note*, fighead, sheet) >
    <!ATTLIST ctrl
    fignbr NUMBER #REQUIRED >
    <!ELEMENT ctrlhead - - (title, (csn | itr)+ , remarks) >
    <!ELEMENT remarks - - %text; >
    <!ELEMENT malfunction - - (location, anomaly+, note*) >
    <!ELEMENT location - - (#PCDATA) >
    <!ELEMENT anomaly - - (constatation, code, criteria+, note*) >
    <!ELEMENT constatation - - (#PCDATA) >
    <!ELEMENT code - - (#PCDATA) >
    <!ELEMENT criteria - - (para, action) >
    <!ATTLIST criteria
    cat NUMBER #IMPLIED
    rep %yesorno; "0"
    rev %yesorno; "0" >
    <!ELEMENT action - - (para+) >
    <!ELEMENT headctrl - o EMPTY >
    <!ELEMENT fighead - o EMPTY >

    <!-- Item de reparation -->
    <!ELEMENT itr - o EMPTY >
    <!ATTLIST itr
    itrnbr NUMBER #REQUIRED >
    <!-- -->
    <!-- ======================================================= -->
    <!-- Jeux et tolerances -->
    <!-- ======================================================= -->
    <!ELEMENT tolerance - - (tolhead, headtol, tol+, note*,
    fighead, sheet) >
    <!ATTLIST tolerance
    fignbr NUMBER #REQUIRED >
    <!ELEMENT tolhead - - (title, csn+) >
    <!ELEMENT tol - - (location, csn?, partname,
    size, fits, note*, comments) >
    <!ATTLIST tol
    type (D | R | L | A) #REQUIRED
    cat NUMBER #REQUIRED >
    <!ELEMENT partname - - (#PCDATA) >
    <!ELEMENT size - - (sizemax, sizemin) >
    <!ELEMENT sizemax - - (#PCDATA) >
    <!ELEMENT sizemin - - (#PCDATA) >
    <!ELEMENT fits - - (fitsmin, fitsmax, fitslimit) >
    <!ELEMENT fitsmin - - (#PCDATA) >
    <!ELEMENT fitsmax - - (#PCDATA) >
    <!ELEMENT fitslimit - - (#PCDATA) >
    <!ELEMENT comments - - (#PCDATA) >

    <!ELEMENT headtol - o EMPTY >
    <!-- -->
    <!-- ======================================================= -->
    <!-- Controle des pieces a vie limite -->
    <!-- ======================================================= -->
    <!ELEMENT cpvlli - - (((cpvl+) | isempty), note*) >
    <!ELEMENT cpvl - - (componentname, csn) >
    <!-- -->
    <!-- ======================================================= -->
    <!-- Reparation -->
    <!-- ======================================================= -->
    <!ELEMENT repair - - (repfinding, repsoluce, repcomments, repprereqli) >
    <!ATTLIST repair
    repairnbr NUMBER #REQUIRED >
    <!ELEMENT repfinding - - (para) >
    <!ELEMENT repsoluce - - (para) >
    <!ELEMENT repcomments - - (para) >
    <!ELEMENT repprereqli - - (repprereq+ | isempty) >
    <!ELEMENT repprereq - - (repreqnum, repreqdescript, repreqproced) >
    <!ELEMENT repreqnum - - (#PCDATA) >
    <!ELEMENT repreqdescript - - (#PCDATA) >
    <!ELEMENT repreqproced - - (#PCDATA) >

    <!-- SOLUTION DE REPARATION -->
    <!ELEMENT sr - - (srname?, srnbr?) >
    <!ATTLIST sr
    key ID #REQUIRED
    chg (N | R | U | D) 'N' >
    <!ELEMENT srname - - (#PCDATA) >
    <!ELEMENT srnbr - - (#PCDATA) >

    <!-- -->
    <!-- ======================================================= -->
    <!-- IMS -->
    <!-- ======================================================= -->
    <!ELEMENT si - - (simodif, sichapeffect, siparteffect,
    sinewpartli, sisalpartli, sidelpartli) >
    <!ATTLIST si
    sinbr NUMBER #REQUIRED >
    <!ELEMENT simodif - - (#PCDATA) >
    <!ELEMENT sichapeffect - - (#PCDATA) >
    <!ELEMENT siparteffect - - (#PCDATA) >
    <!ELEMENT sinewpartli - - (sinewpart+ | isempty) >
    <!ELEMENT sinewpart - - (sinewpartname, sinewpartnbr,
    sinewpartqty, csn) >
    <!ELEMENT sinewpartname - - (#PCDATA) >
    <!ELEMENT sinewpartnbr - - (#PCDATA) >
    <!ELEMENT sinewpartqty - - (#PCDATA) >
    <!ELEMENT sisalpartli - - (sisalpart+ | isempty) >
    <!ELEMENT sisalpart - - (sisalpartname, sisaloldpartnbr,
    sisalnewpartnbr, sisalpartqty, csn) >
    <!ELEMENT sisalpartname - - (#PCDATA) >
    <!ELEMENT sisaloldpartnbr - - (#PCDATA) >
    <!ELEMENT sisalnewpartnbr - - (#PCDATA) >
    <!ELEMENT sisalpartqty - - (#PCDATA) >
    <!ELEMENT sidelpartli - - (sidelpart+ | isempty) >
    <!ELEMENT sidelpart - - (sidelpartname, sidelpartnbr,
    sidelpartqty, csn) >
    <!ELEMENT sidelpartname - - (#PCDATA) >
    <!ELEMENT sidelpartnbr - - (#PCDATA) >
    <!ELEMENT sidelpartqty - - (#PCDATA) >
    <!-- -->
    <!-- ======================================================= -->
    <!-- DISASSEMBLY/ASSEMBLY REFERENCE DOCUMENT -->
    <!-- ====================================================== -->

    <!ELEMENT disassref - - (title?, (componentgroup | componentrep)+) >
    <!ATTLIST disassref
    orient (port | land) #REQUIRED
    nbcols NUMBER "16"
    chapnbr CDATA #REQUIRED
    sectnbr CDATA #REQUIRED
    subjnbr CDATA #REQUIRED
    func CDATA #REQUIRED
    task801 %yesorno; "1"
    task802 %yesorno; "1"
    task803 %yesorno; "1"
    task804 %yesorno; "1"
    task805 %yesorno; "1"
    task806 %yesorno; "1"
    task807 %yesorno; "1"
    task808 %yesorno; "1"
    task809 %yesorno; "1"
    task810 %yesorno; "1"
    task811 %yesorno; "1"
    task812 %yesorno; "1"
    task813 %yesorno; "1"
    task814 %yesorno; "1"
    task815 %yesorno; "1"
    task816 %yesorno; "1"
    task817 %yesorno; "0"
    task818 %yesorno; "0"
    task819 %yesorno; "0"
    task820 %yesorno; "0"
    task821 %yesorno; "0"
    task822 %yesorno; "0"
    task823 %yesorno; "0"
    task824 %yesorno; "0"
    task825 %yesorno; "0"
    task826 %yesorno; "0" >
    <!ELEMENT componentgroup - - (#PCDATA) >
    <!ELEMENT componentrep - - ((componentname | csn), task801?,
    task802?, task803?,
    task804?, task805?, task806?, task807?,
    task808?, task809?, task810?, task811?,
    task812?, task813?, task814?, task815?,
    task816?, task817?, task818?, task819?,
    task820?, task821?, task822?, task823?,
    task824?, task825?, task826?) >
    <!ELEMENT (task801 | task802 | task803 | task804 | task805 |
    task806 | task807 | task808 | task809 | task810 |
    task811 | task812 | task813 | task814 | task815 |
    task816 | task817 | task818 | task819 | task820 |
    task821 | task822 | task823 | task824 | task825 |
    task826) - o EMPTY>
    <!ATTLIST (task801 | task802 | task803 | task804 | task805 |
    task806 | task807 | task808 | task809 | task810 |
    task811 | task812 | task813 | task814 | task815 |
    task816 | task817 | task818 | task819 | task820 |
    task821 | task822 | task823 | task824 | task825 |
    task826)
    taskorder NUMBER #REQUIRED >

    <!-- -->
    <!-- -->
    <!-- ======================================================= -->
    <!-- Structures used in chapter 05 MM -->
    <!-- ====================================================== -->
    <!-- ENGINE LIFE LIMIT VALUES -->
    <!ELEMENT lifelimitli - - (((lifelimit+) | isempty), note*) >
    <!ELEMENT lifelimit - - (componentname, itemref,
    lifelimitcycles, counters) >
    <!ELEMENT componentname - - (#PCDATA) >
    <!ELEMENT itemref - - (#PCDATA) >
    <!ELEMENT lifelimitcycles - - (#PCDATA) >
    <!ELEMENT counters - - (#PCDATA) >
    <!-- DAILY INSPECTIONS -->
    <!ELEMENT dailyinspectli - - (((dailyinspect+) | isempty), note*) >
    <!ELEMENT dailyinspect - - (maintop, reftask) >
    <!ELEMENT maintop - - (#PCDATA) >
    <!-- PERIODIC INSPECTIONS -->
    <!ELEMENT periodinspectli - - (((periodinspect+) | isempty), note*) >
    <!ELEMENT periodinspect - - (periodtol, maintask, reftask, applicond) >
    <!ELEMENT periodtol - - (#PCDATA) >
    <!ELEMENT maintask - - (%text;) >
    <!ELEMENT applicond - - (#PCDATA) >
    <!-- NON PERIODIC INSPECTIONS -->
    <!ELEMENT nonperiodinspectli - - (((nonperiodinspect+) | isempty), note*) >
    <!ELEMENT nonperiodinspect - - (event, (maintask, (reftask|isempty))+) >
    <!ELEMENT event - - (#PCDATA) >
    <!-- NON PERIODIC INSPECTIONS FOLLOWING ENGINE OPERATION -->
    <!-- IN A SPECIFIC ENVIRONNEMENT -->
    <!ELEMENT npifollowuseli - - (((npifollowuse+) | isempty), note*) >
    <!ELEMENT npifollowuse - - (condofuse, (maintask, (reftask|isempty))+) >
    <!ELEMENT condofuse - - (#PCDATA) >
    <!-- NON PERIODIC INSPECTIONS FOLLOWING A MAINTENANCE ACTION -->
    <!ELEMENT npifollowactli - - (((npifollowact+) | isempty), note*) >
    <!ELEMENT npifollowact - - (maintaction, (maintask, (reftask|isempty))+) >
    <!ELEMENT maintaction - - (#PCDATA) >
    <!-- SUMMARY TABLE OF PERIODIC INSPECTIONS -->
    <!ELEMENT tabperiodinspect - - (tbihead, headtbi, inspection+) >
    <!ATTLIST tabperiodinspect
    flow (0|1) "0" >
    <!ELEMENT tbihead - - (visithour, tbipg) >
    <!ELEMENT headtbi - o EMPTY >
    <!ELEMENT inspection - - (tasktype, maintask, enginevar,
    (reftask|tasktxt|isempty), applicond,
    inspectdate, inspectsignature) >
    <!ELEMENT visithour - - (%text;) >
    <!ELEMENT tbipg - - (%text;) >
    <!ELEMENT tasktype - - (#PCDATA) >
    <!ELEMENT enginevar - - (#PCDATA) >
    <!ELEMENT tasktxt - - (%text;) >
    <!ELEMENT inspectdate - - (#PCDATA) >
    <!ELEMENT inspectsignature - - (#PCDATA) >
    <!-- TBO OF MODULE/ENGINE -->
    <!ELEMENT tbomoduleli - - (((tbomodule+) | isempty), note*) >
    <!ELEMENT tbomodule - - (modulename, modifstd,
    maintenancemet, tbocalendar) >
    <!ELEMENT modulename - - (#PCDATA) >
    <!ELEMENT modifstd - - (#PCDATA) >
    <!ELEMENT maintenancemet - - (#PCDATA) >
    <!ELEMENT tbocalendar - - (#PCDATA) >
    <!-- ACCESSORY AND EQUIPMENT TBO -->
    <!ELEMENT tboaccessoryli - - (((tboaccessory+) | isempty), note*) >
    <!ELEMENT tboaccessory - - (accessoryname, tboitem,
    maintenancemet, tbocalendar) >
    <!ELEMENT accessoryname - - (#PCDATA) >
    <!ELEMENT tboitem - - (#PCDATA) >
    <!-- USE LIMITED PARTS -->
    <!ELEMENT uselimitedpartli - - (((uselimitedpart+) | isempty), note*) >
    <!ELEMENT uselimitedpart - - (ulpmodule, ulpnomen,
    ulpreference, ulpuselimit) >
    <!ELEMENT ulpmodule - - (#PCDATA) >
    <!ELEMENT ulpnomen - - (#PCDATA) >
    <!ELEMENT ulpreference - - (#PCDATA) >
    <!ELEMENT ulpuselimit - - (#PCDATA) >
    <!-- ======================================================= -->
    <!-- Tabular data in subtasks -->
    <!-- ====================================================== -->
    <!ELEMENT tabdat - - ((title?, tabgroup,
    ftnote*) | graphic* | %deleted;) -(tabdat) >
    <!ATTLIST tabdat
    formal (F | I) 'I'
    frame (top | bottom | topbot | all | sides | none) #IMPLIED
    colsep %yesorno; #IMPLIED
    rowsep %yesorno; #IMPLIED
    orient (port | land) #IMPLIED
    pgwide %yesorno; #IMPLIED
    id ID #IMPLIED
    alt (C | B) 'B' >
    <!ELEMENT tabgroup - o (colspec*, spanspec*, thead?,
    tfoot?, tabody) >
    <!ATTLIST tabgroup
    cols NUMBER #REQUIRED
    colsep %yesorno; #IMPLIED
    rowsep %yesorno; #IMPLIED
    align (left | right | center | justify | char)
    "left"
    charoff NUTOKEN "50"
    char CDATA #IMPLIED >
    <!-- -->
    <!ELEMENT tabody - o (subtask*, row*)+ >
    <!-- -->
    <!-- ======================================================= -->
    <!-- TABLE (CELLULAR, CALS BASED) -->
    <!-- -->
    <!-- ATTRIBUT FLOW : 1 = a la suite 0 = nouvelle page -->
    <!-- ====================================================== -->
    <!ELEMENT table - - ((title?, tgroup, ftnote*) |
    graphic+) -(table) >
    <!ATTLIST table
    tabstyle NMTOKEN #IMPLIED
    flow (0|1) "1"
    frame (top | bottom | topbot | all |
    sides | none) #IMPLIED
    colsep %yesorno; #IMPLIED
    rowsep %yesorno; #IMPLIED
    orient (port | land) #IMPLIED
    pgwide %yesorno; #IMPLIED
    id ID #IMPLIED
    formal (F | I) 'I' >
    <!ELEMENT tgroup - o (colspec*, spanspec*, thead?, tfoot?,
    tbody) >
    <!ATTLIST tgroup
    cols NUMBER #REQUIRED
    colsep %yesorno; #IMPLIED
    rowsep %yesorno; #IMPLIED
    align (left | right | center | justify | char)
    "left"
    charoff NUTOKEN "50"
    char CDATA "" >
    <!ELEMENT colspec - o EMPTY >
    <!ATTLIST colspec
    colnum NUMBER #IMPLIED
    colname NMTOKEN #IMPLIED
    align (left | right | center | justify | char)
    #IMPLIED
    charoff NUTOKEN #IMPLIED
    char CDATA #IMPLIED
    colwidth CDATA #IMPLIED
    colsep %yesorno; #IMPLIED
    rowsep %yesorno; #IMPLIED >
    <!ELEMENT spanspec - o EMPTY >
    <!ATTLIST spanspec
    namest NMTOKEN #REQUIRED
    nameend NMTOKEN #REQUIRED
    spanname NMTOKEN #IMPLIED
    align (left | right | center | justify | char)
    "center"
    charoff NUTOKEN #IMPLIED
    char CDATA #IMPLIED
    rowsep %yesorno; #IMPLIED
    colsep %yesorno; #IMPLIED >
    <!ELEMENT (thead | tfoot)
    - o (colspec*, row+) >
    <!ELEMENT tbody - o (row+) >
    <!ATTLIST thead
    valign (top | middle | bottom)
    "bottom" >
    <!ATTLIST (tfoot|tbody)
    valign (top | middle | bottom)
    "top" >
    <!ELEMENT row - o (entry+) >
    <!ATTLIST row
    rowsep %yesorno; #IMPLIED >
    <!ELEMENT entry - o (%text; | note)+ >
    <!ATTLIST entry
    colname NMTOKEN #IMPLIED
    namest NMTOKEN #IMPLIED
    nameend NMTOKEN #IMPLIED
    spanname NMTOKEN #IMPLIED
    morerows NUMBER '0'
    colsep %yesorno; #IMPLIED
    rowsep %yesorno; #IMPLIED
    rotate %yesorno; "0"
    valign (top | bottom | middle)
    "top"
    align (left | right | center | justify | char)
    #IMPLIED
    charoff NUTOKEN #IMPLIED
    char CDATA #IMPLIED >
    <!ELEMENT ftnote - - %text; >
    <!ATTLIST ftnote
    ftnoteid ID #REQUIRED >
    <!-- -->
    <!-- -->
    <!-- ======================================================= -->
    <!-- PROCEDURE LIST STRUCTURE (NON-TASKED) -->
    <!-- ======================================================= -->
    <!ELEMENT prclist1 - - (prcitem1+) >
    <!ELEMENT prclist2 - - (prcitem2+) >
    <!ELEMENT prclist3 - - (prcitem3+) >
    <!ELEMENT prclist4 - - (prcitem4+) >
    <!ELEMENT prclist5 - - (prcitem5+) >
    <!ELEMENT prclist6 - - (prcitem6+) >
    <!ELEMENT prclist7 - - (prcitem7+) >
    <!-- -->
    <!ELEMENT prcitem1 - - (prcitem, prclist2?) >
    <!ELEMENT prcitem2 - - (prcitem, prclist3?) >
    <!ELEMENT prcitem3 - - (prcitem, prclist4?) >
    <!ELEMENT prcitem4 - - (prcitem, prclist5?) >
    <!ELEMENT prcitem5 - - (prcitem, prclist6?) >
    <!ELEMENT prcitem6 - - (prcitem, prclist7?) >
    <!ELEMENT prcitem7 - - (prcitem) >
    <!-- -->
    <!ELEMENT prcitem - - (title?, (%text;)) >
    <!-- -->
    <!-- ======================================================= -->
    <!-- STANDARD LISTS -->
    <!-- ======================================================= -->
    <!ELEMENT list1 - - (l1item+) >
    <!ELEMENT list2 - - (l2item+) >
    <!ELEMENT list3 - - (l3item+) >
    <!ELEMENT list4 - - (l4item+) >
    <!ELEMENT list5 - - (l5item+) >
    <!ELEMENT list6 - - (l6item+) >
    <!ELEMENT list7 - - (l7item+) >
    <!-- -->
    <!ATTLIST (list1 | list2 | list3 | list4 | list5 | list6 | list7)
    cont %yesorno; "0" >
    <!-- -->
    <!ELEMENT l1item - - (((%w.c.n;), (%text; | entry)),
    (dailyinspectli |lifelimitli |
    periodinspectli | nonperiodinspectli |
    npifollowuseli | npifollowactli)?,
    note*, (list2, graphic*)?) >
    <!ELEMENT l2item - - (((%w.c.n;), (%text; | entry)), dailyinspectli?,
    note*, (list3, graphic*)?) >
    <!ELEMENT l3item - - (((%w.c.n;), (%text; | entry)),note*, (list4, graphic*)?) >
    <!ELEMENT l4item - - (((%w.c.n;), (%text; | entry)),note*, (list5, graphic*)?) >
    <!ELEMENT l5item - - (((%w.c.n;), (%text; | entry)),note*, (list6, graphic*)?) >
    <!ELEMENT l6item - - (((%w.c.n;), (%text; | entry)),note*, (list7, graphic*)?) >
    <!ELEMENT l7item - - ((%w.c.n;), (%text; | entry*)) >
    <!-- -->
    <!ATTLIST (l1item | l2item | l3item | l4item | l5item | l6item | l7item)
    cont %yesorno "0" >
    <!-- ======================================================= -->
    <!-- GRAPHICS -->
    <!-- ======================================================= -->
    <!-- -->
    <!-- ======================================================= -->
    <!-- seq attribute change from NUMBER to CDATA and all -->
    <!-- attributes changed to #IMPLIED so graphic can be used -->
    <!-- in front matter, where chapnbr, etc. is not applicable. -->
    <!-- ======================================================= -->
    <!-- -->
    <!ELEMENT graphic - - ((chgdesc*, title?, sheet+) | %deleted;)>
    <!ATTLIST graphic
    chapnbr NUMBER #IMPLIED
    sectnbr NUMBER #IMPLIED
    subjnbr NUMBER #IMPLIED
    func CDATA #IMPLIED
    seq CDATA #IMPLIED
    confltr CDATA #IMPLIED
    varnbr NUMBER #IMPLIED
    %revatt; >

    <!-- ATTRIBUT FLOW : 1 = a la suite 0 = nouvelle page -->
    <!-- -->
    <!ELEMENT sheet - - ((chgdesc*, title?, gdesc?) | %deleted;) >
    <!ATTLIST sheet
    gnbr ENTITY #REQUIRED
    fignbr CDATA #REQUIRED
    sheetnbr CDATA #REQUIRED
    sheettotal CDATA #REQUIRED
    flow (0|1) "0"
    %revatt; >
    <!-- -->
    <!ELEMENT gdesc - - (%text;) >
    <!-- -->
    <!-- ======================================================= -->
    <!-- NUMBERED AND UN-NUMBERED LISTS -->
    <!-- ====================================================== -->
    <!-- UNNUMBERED LIST -->
    <!ELEMENT unlist - - (title?, unlitem+) >
    <!ATTLIST unlist
    bulltype (NONE | BULLET | NDASH | MDASH | DIAMOND |
    ASTERISK | DELTA | SQUARE | SYSTEM)
    'SYSTEM' >
    <!ELEMENT unlitem - - (para, (unlist | para)*, table*, note*) >
    <!-- NUMBERED LIST - see ATA spec 2100 -->
    <!ELEMENT numlist - - (numlitem+) >
    <!ATTLIST numlist
    numtype (NNP | AUP | NNB | ALB | NNS | ALS | DBR |
    RUP | RLP | RUR | RLR | NNR | AUR |
    ALR) 'NNP' >
    <!ELEMENT numlitem - - (para+) >
    <!ATTLIST numlitem
    label CDATA #IMPLIED >
    <!-- -->
    <!-- ======================================================= -->
    <!-- DEFLIST (Definition List) -->
    <!-- ======================================================= -->
    <!ELEMENT deflist - - (title?, (term,def)+) >
    <!ATTLIST deflist
    type (simple | unordered | numbered) 'unordered' >
    <!ELEMENT term - O (para)+ >
    <!ATTLIST term
    id ID #IMPLIED >
    <!ELEMENT def - O (para)+ >
    <!-- -->
    <!-- ======================================================= -->
    <!-- PARAGRAPH -->
    <!-- ======================================================= -->
    <!ELEMENT para - - (#PCDATA | csn | pnr | toc | equ |
    grphcref | reffigp | reffigdf |
    refext | reftask | refint | eqinline |
    txtgrphc | sub | super |emphasis)+ >
    <!ATTLIST para
    key ID #IMPLIED >
    <!ELEMENT emphasis - - (#PCDATA | csn | pnr | toc | equ |
    grphcref | reffigp | reffigdf |
    refext | reftask | refint |
    txtgrphc | sub | super)+ >
    <!ATTLIST emphasis
    type (b | u | i | bi | bu | ui) #REQUIRED >
    <!-- -->
    <!-- ======================================================= -->
    <!-- REQUIRED ELEMENTS -->
    <!-- AND PARAGRAPH CONTENTS -->
    <!-- ======================================================= -->
    <!-- CONSUMABLE LIST -->
    <!ELEMENT conli - - (((con+, ncon*) | ncon+ | isempty), note*) >
    <!-- CONSUMABLE -->
    <!ELEMENT con - - (conname, connbr?, conqty) >
    <!ATTLIST con
    key ID #REQUIRED
    chg (N | R | U | D) 'N' >
    <!ELEMENT conname - - (#PCDATA) >
    <!ELEMENT connbr - - (#PCDATA) >
    <!ELEMENT conqty - - (#PCDATA) >
    <!-- NON SPECIFIC CONSUMABLE -->
    <!ELEMENT ncon - - (#PCDATA) >
    <!ATTLIST ncon
    key ID #REQUIRED
    chg (N | R | U | D) 'N' >

    <!-- STANDARD TOOLS AND EQUIPMENT LIST -->
    <!ELEMENT stdli - - (((std+) | isempty), note*) >
    <!-- STANDARD TOOLS AND EQUIPMENT -->
    <!ELEMENT std - - (stdname, stdnbr?, stdqty) >
    <!ATTLIST std
    key ID #REQUIRED
    chg (N | R | U | D) 'N' >
    <!ELEMENT stdname - - (#PCDATA) >
    <!ELEMENT stdnbr - - (#PCDATA) >
    <!ELEMENT stdqty - - (#PCDATA) >

    <!-- SPECIAL TOOLS AND EQUIPMENT LIST -->
    <!ELEMENT tedli - - (((ted+) | isempty), note*) >
    <!-- SPECIAL TOOLS AND EQUIPMENT DESCRIPTION -->
    <!ELEMENT ted - - (toolname, (toolnbr | csn), toolqty) >
    <!ATTLIST ted
    key ID #REQUIRED
    chg (N | R | U | D) 'N' >
    <!ELEMENT toolname - - (#PCDATA) >
    <!ELEMENT toolnbr - - (#PCDATA) >
    <!ELEMENT toolqty - - (#PCDATA) >

    <!-- SYSTEMATIC SPARES LIST -->
    <!ELEMENT sspareli - - (((sspare+) | isempty), note*) >
    <!-- SYSTEMATIC SPARES -->
    <!ELEMENT sspare - - (sspname, (csn | pnr), sspqty) >
    <!ATTLIST sspare
    key ID #REQUIRED
    chg (N | R | U | D) 'N' >
    <!ELEMENT sspname - - (#PCDATA) >
    <!ELEMENT sspqty - - (#PCDATA) >

    <!-- NON SYSTEMATIC SPARES LIST -->
    <!ELEMENT spareli - - (((spare+) | isempty), note*) >
    <!-- NON SYSTEMATIC SPARES -->
    <!ELEMENT spare - - (spaname, (csn | pnr), spaqty) >
    <!ATTLIST spare
    key ID #REQUIRED
    chg (N | R | U | D) 'N' >
    <!ELEMENT spaname - - (#PCDATA) >
    <!ELEMENT spaqty - - (#PCDATA) >
    <!-- CSN - Catalog Sequence Number - EIPC -->
    <!ELEMENT csn - o EMPTY >
    <!ATTLIST csn
    chapnbr CDATA #IMPLIED
    sectnbr CDATA #IMPLIED
    unitnbr CDATA #IMPLIED
    fignbr CDATA #REQUIRED
    itemnbr CDATA #REQUIRED >
    <!-- PART NUMBER -->
    <!ELEMENT pnr - - (#PCDATA) >

    <!-- INDIVIDUAL PROTECTION MATERIAL LIST -->
    <!ELEMENT reqprotectli - - (((reqprotect+) | isempty), note*) >
    <!-- REQUIRED PERSONS -->
    <!ELEMENT reqprotect - - (protectname, protectqty) >
    <!ATTLIST reqprotect
    key ID #REQUIRED
    chg (N | R | U | D) 'N' >
    <!ELEMENT protectname - - (#PCDATA) >
    <!ELEMENT protectqty - - (#PCDATA) >

    <!-- PRE-REQUIRED SUPPORT FROM TASKS -->
    <!ELEMENT reqtaskli - - (((reqtask+) | isempty), note*) >
    <!-- REQUIRED PERSONS -->
    <!ELEMENT reqtask - - (reftask, reqtaskname) >
    <!ELEMENT reqtaskname - - (#PCDATA) >

    <!-- REQUIRED PERSONS LIST -->
    <!ELEMENT reqpersli - - (((reqpers+) | isempty), note*) >
    <!-- REQUIRED PERSONS -->
    <!ELEMENT reqpers - - (perscat, persqual, persnum, perstime?) >
    <!ATTLIST reqpers
    key ID #REQUIRED
    chg (N | R | U | D) 'N' >
    <!ELEMENT perscat - - (#PCDATA) >
    <!ELEMENT persqual - - (#PCDATA) >
    <!ELEMENT persnum - - (#PCDATA) >
    <!ELEMENT perstime - - (#PCDATA) >

    <!ELEMENT equ - - (#PCDATA) >
    <!ATTLIST equ
    key ID #IMPLIED
    chg (N | R | U | D) 'N' >

    <!-- -->
    <!-- SUBSCRIPT -->
    <!ELEMENT sub - - (#PCDATA) >
    <!-- -->
    <!-- SUPSCRIPT -->
    <!ELEMENT super - - (#PCDATA) >
    <!-- -->

    <!-- ======================================================= -->
    <!-- EQUATIONS -->
    <!-- ======================================================= -->
    <!ELEMENT eqinline - - (f*) >

    <!ENTITY % p.emph "b|it|rm">
    <!ENTITY % p.fnt.ph "blkbd|ig|sc|ge|ty|mit">
    <!ENTITY % sp.pos "vmk|vmkr|vsp|hsp|tu">
    <!ENTITY % f-cs "a|%p.emph|%p.fnt.ph|g|bg|%sp.pos">
    <!ENTITY % f-cstxt "#PCDATA|%f-cs">
    <!ENTITY % f-scs "rf|inc|v|dy|fi">
    <!ENTITY % limits "pr|in|sum">
    <!ENTITY % f-bu "fr|rad|lim|ar|stk|cases|eqaln|fen">
    <!ENTITY % f-ph "unl|ovl|unb|ovb|sup|inf">
    <!ENTITY % f-butxt "%f-bu|%limits|%f-cstxt|%f-scs|%f-ph|phr">
    <!ENTITY % f-phtxt "#PCDATA|%p.emph">
    <!ENTITY % f-post "par|sqb|llsqb|rrsqb|cub|ceil|fl|ang
    |sol|vb|uc|dc">
    <!ENTITY % f-style "s|d|t|da|dot|b|bl|n">

    <!ELEMENT fd - - (fl)*>
    <!ELEMENT fl O O (%f-butxt)*>

    <![IGNORE [
    <!ELEMENT fd - - (la?,fl)+>
    <!ELEMENT la - - (%f-cstxt;|%f-ph;)*>
    <!ATTLIST la loc CDATA #IMPLIED>
    ]]>

    <!ELEMENT f - - (%f-butxt)*>

    <!ELEMENT fr - - (nu,de)>
    <!ATTLIST fr shape CDATA #IMPLIED
    align CDATA #IMPLIED
    style CDATA #IMPLIED>
    <!ELEMENT (nu|de) O O (%f-butxt)*>
    <![IGNORE [
    <!ELEMENT lim - - (op,ll,ul,opd?)>
    ]]>
    <!ELEMENT lim - - (op,ll?,ul?,opd?)>
    <!ATTLIST lim align (r|c) #IMPLIED>
    <![IGNORE [
    <!ELEMENT op - - (%f-cstxt|rf|%f-ph) -(tu)>
    ]]>
    <!ELEMENT op - - (%f-cstxt|rf|%f-ph)* -(tu)>
    <!ELEMENT (ll|ul) O O (%f-butxt)*>
    <!ELEMENT opd - O (%f-butxt)*>
    <![IGNORE [
    <!ELEMENT (%limits) - - (ll,ul,opd?)>
    ]]>
    <!ELEMENT (%limits) - - (ll?,ul?,opd?)>
    <!ATTLIST (%limits) align CDATA #IMPLIED>
    <!ELEMENT rad - - (rcd,rdx?)>
    <!ELEMENT rcd O O (%f-butxt)*>
    <!ELEMENT rdx - O (%f-butxt)* -(tu)>
    <![IGNORE [
    <!ELEMENT fen - - ((%f-butxt)*,(cp,(%f-butxt)*)*,rp)>
    ]]>
    <!ELEMENT fen - - (%f-butxt|cp|rp)*>
    <!ATTLIST fen lp (%f-post;) vb
    style (%f-style;) s>
    <!ELEMENT (cp|rp) - O EMPTY>
    <!ATTLIST (cp|rp) post (%f-post;) vb
    style (%f-style;) s>
    <!ELEMENT ar - - (arr+)>
    <!ATTLIST ar cs CDATA #IMPLIED
    rs CDATA #IMPLIED
    ca CDATA #IMPLIED>
    <!ELEMENT arr - O (arc+)>
    <!ELEMENT arc O O (%f-butxt)*>
    <!ATTLIST arc align CDATA #IMPLIED>
    <!ELEMENT cases - - (arr+)>
    <!ELEMENT eqaln - - (eqline+)>
    <!ELEMENT eqline - - (%f-butxt)*>
    <!ELEMENT stk - - (lyr+)>
    <!ELEMENT lyr O O (%f-butxt)* -(tu)>
    <!ATTLIST lyr align CDATA #IMPLIED>
    <!ELEMENT ach - - (%f-butxt)*>
    <!ATTLIST ach atom CDATA #IMPLIED>
    <!ELEMENT (sup|inf) - - (%f-butxt)* -(tu)>
    <!ATTLIST (sup|inf) loc CDATA #IMPLIED>
    <!ELEMENT (unl|ovl) - - (%f-butxt)*>
    <!ATTLIST (unl|ovl) style CDATA #IMPLIED>
    <!ELEMENT (unb|ovb) - - (%f-butxt)*>
    0