DOCTYPE TECHINFO PUBLIC "-//USA-DOD//DTD Content Data Model Content Specific Layer//EN

<!--  ***************************************************

          IETM CONTENT DATA MODEL       Version 6.1
          Content Specific DTD       1 October 1992

          MIL-D-87269 AMENDMENT 1 - 21 April 1995

          11-20-95 - Changed PARTBASE cage, fsc, partnum
                     and smr attributes from #REQUIRED to
                     #IMPLIED to permit referencing.

          11-20-95 - Changed PARTINFO refdes attribute from
                     NMTOKEN to CDATA to allow reference 
                     designators such as "001,002"
                     to be defined.

          04-18-96 - Added external entity declaration and
                     reference to add EDS Special Symbols.

          06-17-96 - Modified INPUT element definition. Changed
                     PERSON element occurrence indicator REP (*)
                     instead of PLUS (+).

          07-16-96 - Modified PARTINFO element to allow (%graphic;)*
                     to precede (%partinfo;)* sub-element.
 
      ***************************************************  -->

<!--  This document contains a content specific DTD for O-level maintenance. 
The creation of a content specific DTD represents the second layer of the CDM.
It identifies all the content specific elements and their relationships for a
given application.  In this instance, the application happens to be the
display of organizational level data to the technician.

     The DTD employs the characteristics defined by the templates of the
"Generic Layer."   The use of the generic layer primitives means that we do
not have to redefine the text, table, graphic, audio, video, or process
elements within this document.

     This document breaks down O-level data into a hierarchy based upon the
system/subsystem structure of the weapon system. It identifies four different
types of information which may be referenced within the document.  They are;
procedural, descriptive, parts, and fault information.  Each type of
information is referenced by the system where it is most appropriate.

     *********************************************************

                    PUBLIC ENTITY DECLARATIONS

     ********************************************************

<!ENTITY % ietmdbb PUBLIC "-//USA-DOD//DTD Content Data Model Content Specific Layer//EN" "c:\omni\sgml\87269\ietmdbb">  -->

<!ENTITY  % ietmdba PUBLIC "-//USA-DOD//DTD Content Data Model Generic Layer//EN" "c:\omni\sgml\87269\ietmdba">
%ietmdba;

<!--  This entity includes the public identifier for the Generic Layer of the
CDM.  It provides access to the template, primitive, user-interaction, and
filtering elements within the generic layer.  -->

<!-- The following entity adds the EDS special symbols. -->
<!ENTITY % edssymb PUBLIC "-//EDS//ENTITIES EDS Special Symbols//EN" "c:\omni\sgml\87269\edssymb.ent">
%eds-symb;

<!-- The following entities are used to refer to the elements used in this
content specific DTD. They use the node and node-alt templates from the CDM
Generic Layer. These entities are here because of the top down methodology of
SGML.  By defining the entities at the beginning of the DTD, any element below
this point can use the entity declarations.  -->

<!ENTITY % sub-prims  " %text; | %table; | %graphic; | %audio; |
%video; | %process; | %dialog;" >
<!ENTITY  % system      "system | system-alts" >
<!ENTITY  % descinfo    "descinfo | descinfo-alts" >
<!ENTITY  % task        "task | task-alts" >
<!ENTITY  % reqcond     "reqcond | reqcond-alts"  >
<!ENTITY  % input       "input | input-alts"  >
<!ENTITY  % person      "person | person-alts"  >
<!ENTITY  % equip       "equip | equip-alts"  >
<!ENTITY  % refmat      "refmat | refmat-alts"  >
<!ENTITY  % expend      "expend | expend-alts"  >
<!ENTITY  % consum      "consum | consum-alts"  >
<!ENTITY  % alert       "alert | alert-alts" >
<!ENTITY  % step        "step | step-alts" >
<!ENTITY  % follow-on   "follow-on | follow-on-alts"  >
<!ENTITY  % partinfo    "partinfo | partinfo-alts"  >
<!ENTITY  % partbase    "partbase | partbase-alts"  >
<!ENTITY  % connection  "connection | connection-alts" >
<!ENTITY  % attach-part "attach-part | attach-part-alts" >
<!ENTITY  % location    "location | location-alts" >
<!ENTITY  % faultinf    "faultinf | faultinf-alts " >
<!ENTITY  % test        "test | test-alts" >
<!ENTITY  % outcome     "outcome | outcome-alts" >
<!ENTITY  % fltstate    "fltstate | fltstate-alts" >
<!ENTITY  % fault       "fault | fault-alts" >
<!ENTITY  % rect        "rect | rect-alts" >
<!ENTITY  % para        "para | para-alts" >

<!--  ****************************************************

                     Techinfo Declaration

      ****************************************************  -->

<!ELEMENT techinfo   - O   ( version+, (%system;)+ )  >
<!ATTLIST techinfo
          %a.node;
          %a.root;   >

<!--  This element declaration represents the top layer of the information
contained in the DTD.  The content model contains the top level system, such
as "F-15", "M-1" or "F/A-18".  The hierarchy begins at this level.  -->

<!--  ****************************************************

                        System Declaration

      ****************************************************  -->

<!--  The system element defines the vehicle/system/subsystem/ subassembly
hierarchy for the weapon system.  A system element must be created for any
component (ie., vehicle, system, subsystem, subassembly) which has associated
technical information (ie., descriptive, procedural, fault, or part
information). -->

<!ELEMENT system  - O  ( precond*, (%link;)*, (%system;)*,
                       (%descinfo;)*, (%task;)*, (%partinfo;)*,
                       (%faultinf;)*  )  >
<!ATTLIST system
          %a.node;
          version        IDREF          #REQUIRED
          status         ( u | a )      'a'  >

<!--  The system element employs the 'NODE' template from the generic layer. 
A "system" contains a list of preconditions which define the elements
applicability, relational links to other elements, sub-system elements and
descriptive, task, part, and fault information about the system.  -->

<!ELEMENT system-alts  - O  ( system )+  >
<!ATTLIST system-alts
          %a.node-alts; >

<!--  This element employs the 'NODE-ALTS' template from the generic layer to
facilitate the context filtering at the system level.  -->

<!--  ***************************************************

                     Version Declaration

      ***************************************************  -->

<!--  The following declaration is an attempt at controlling different
versions of technical information in the database.  A more robust description
of how the version element will work is to follow.  -->

<!ELEMENT  version    - o      ( %text; )?  >
<!ATTLIST  version
           %a.node;
           revision      NMTOKEN        #REQUIRED
           revdate       NUMBERS        #REQUIRED
           changeno      NUMBER         #REQUIRED
           chgdate       NUMBERS        #REQUIRED
           deleted       NMTOKENS       #IMPLIED   >

<!--  ***************************************************

               Descriptive Information  Declaration

      ***************************************************  -->

<!--  The element "descinfo" is used to define general purpose,
non-procedural, narrative information such as theory of operation, schematics,
etc which are associated with a system component.  "Descinfo" is  very
flexible.  It can be used to describe any arbitrary, hierarchical
hypertext-like node containing sub-paragraphs ("para-seq"), ("text", "table",
"graphic", "audio", "video", "process"), user interaction instructions
("dialog"), and postcondition properties ("postcond") which are asserted
whenever the "descinfo" is read.   -->

<!ELEMENT descinfo     - O  ( precond*, (%link;)*, para-seq,
                              postcond*  ) >
<!ATTLIST descinfo
          %a.node;
          version        IDREF          #REQUIRED
          status         ( u | a )      'a' >

<!--  The descinfo element employs the 'NODE' template from the generic layer.
"Descinfo" contains a list of preconditions which define the element's
applicability, relational links to other elements, paragraph sequences, and a
list of postconditions which may change the state of the system.   -->

<!ELEMENT descinfo-alts  - O  ( descinfo )+  >
<!ATTLIST descinfo-alts
          %a.node-alts; >

<!--  This element employs the 'NODE-ALTS' template from the generic layer to
facilitate the context filtering of descriptive information.  -->

<!--  ***************************************************

                        Para Declaration

      ***************************************************  -->

<!ELEMENT  para   - O  ( precond*, (%link;)*, (%sub-prims;)+, para-seq?,
                         postcond* ) >
<!ATTLIST  para
          %a.node;
          version        IDREF          #REQUIRED
          status         ( u | a )      'a' >

<!--  The "para" element employs the NODE template.  It defines the
information which may be contained within the descriptive information as any
primitive element defined in the generic layer.  -->

<!ELEMENT  para-alts - O  ( para )+  >
<!ATTLIST  para-alts
           %a.node-alts;    >

<!--  This element employs the 'NODE-ALTS' template from the generic layer to
facilitate the context filtering of paragraph information.  -->

<!ELEMENT  para-seq   - O  ( %descinfo; | para | para-alts |
                             if-para | loop-para )+ >
<!ATTLIST  para-seq
           %a.node-seq;   >

<!--  This element employs the 'NODE-SEQ' template from the generic layer.  It
provides the capability to create sequences of paras.  -->

<!ELEMENT if-para      - O  ( expression, para-seq, para-seq? ) >
<!ATTLIST if-para
          %a.if-node;   >

<!--  This element employs the 'IF-NODE' template from the generic layer.  It
allows conditional selection of paras depending on a precondition.  -->

<!ELEMENT loop-para   - O   ( assertion?, expression, assertion?,
                              para-seq ) >
<!ATTLIST loop-para
          %a.loop-node;  >

<!--  This element employs the 'LOOP-NODE' template from the generic layer. 
It provides the capability of looping through a sequence of paras.  -->

<!--  ************************************************

                    Task Declaration

      ************************************************  -->

<!--  The element "task" defines a maintenance procedure, such as a removal,
repair, replacement, test, adjustment, etc. associated with a "system"
component.  -->

<!ELEMENT task     - O  ( precond*, (%link;)*, (%input;)*,
                          step-seq, (%follow-on;)*, postcond* ) >
<!ATTLIST task
          %a.node;
          version        IDREF                      #REQUIRED
          status         ( u | a )                    'a'
          esttime        NUTOKEN                    #IMPLIED
          operability    CDATA                      #IMPLIED
          servicedes     CDATA                      #IMPLIED  >

<!--  The "task" element employs the 'NODE' template from the generic layer. 
A "task" element contains a list of preconditions which define the task's
applicability, relational links to other information elements and input
conditions for beginning the task, precautionary messages ( i.e., warnings,
cautions and notes), a sequence of procedural steps, a list of follow-on
conditions which must be accomplished sometime following the completion of the
task, and a list of postconditions which define any state changes to be made
after the task is accomplished.  -->

<!ELEMENT task-alts  - O  ( task )+  >
<!ATTLIST task-alts
          %a.node-alts; >

<!--  This element employs the 'NODE-ALTS' template from the generic layer to
facilitate the context filtering of tasks.  -->

<!--  ****************************************************

                        Input Declaration

      ****************************************************  -->

<!--  The input element identifies all the set-up conditions which must be met
prior to beginning a task.  -->

<!ELEMENT input   - O  ( precond*, (%link;)*, (%alert;)*,
                       (%reqcond;)*, (%person;)*, (%refmat;)*,
                       (%equip;)*, (%expend;)*, (%consum;)* ) >
<!ATTLIST input
          %a.node;
          version        IDREF          #REQUIRED
          status         ( u | a )      'a' >

<!--  The "input" element employs the 'NODE' template from the generic layer. 
An "input" contains applicability preconditons, relational links to other
elements, and the personnel, consumables, equipment and required conditions
for accomplishing the task. -->

<!ELEMENT input-alts       - O     ( input )+ >
<!ATTLIST input-alts
          %a.node-alts; >

<!--  This element employs the 'NODE-ALTS' template from the generic layer to
facilitate the context filtering of input conditions.  -->

<!--  ****************************************************

                   Required Condition Declaration

      ****************************************************  -->

<!--  A required condition (RECOND) identifies a maintenance condition (eg.,
Aircraft Safe For Maintenance ), which must be satisfied before beginning a
task.  It also identifies the task(s) or step(s) which accomplish the required
condition if it is not satisfied. -->

<!ELEMENT reqcond     - O  ( precond*, (%link;)*, (%text;)?,
                           ( expression, ( %task; | %step; ),
                             assertion* ), postcond* ) >
<!ATTLIST reqcond
          %a.node;
          version        IDREF          #REQUIRED
          status         ( u | a)       'a' >

<!--  The "reqcond" element employs the 'NODE' template from the generic
layer.  A "reqcond" contains a set of preconditions which define the required
maintenance condition's applicability, relational links, an optional text
element which describes the maintenance condition, a list of task(s) or
step(s) which provide instructions for accomplishing the maintenance
condition, and a set of postconditions which define the state changes to be
made once the maintenance condition is accomplished.   -->

<!ELEMENT reqcond-alts - O     ( reqcond )+ >
<!ATTLIST reqcond-alts
          %a.node-alts;   >

<!--  This element employs the 'NODE-ALTS' template from the generic layer to
facilitate the context filtering of required conditions.  -->

<!--  ****************************************************

                   Refmat and Expend Declarations

      ****************************************************  -->

<!--  The following elements identify reference material and expendables for a
task.  -->

<!ELEMENT  refmat  - O  ( precond*, (%link;)*, (%text;)? ) >
<!ATTLIST  refmat
        %a.node;
        version     IDREF          #REQUIRED
        status      ( u | a )      'a'
        desig       CDATA          #REQUIRED >

<!ELEMENT  refmat-alts   - O     ( refmat )+ >
<!ATTLIST  refmat-alts
           %a.node-alts;   >

<!ELEMENT  expend  - O  ( precond*, (%link;)*, (%partbase;)?,
                        (%expend;)* ) >
<!ATTLIST  expend
           %a.node;
           version       IDREF          #REQUIRED
           status        ( u | a )      'a'
           quantity      NUTOKEN        #REQUIRED >

<!ELEMENT  expend-alts    - O    ( expend )+  >
<!ATTLIST  expend-alts
           %a.node-alts;    >

<!--  ****************************************************

                       Person Declaration

      ****************************************************  -->

<!--  This element is used to identify the personnel requirements for a given
task.  The 'type' attribute will be used to identify the kind of technician
required.  The 'quantity' attribute identifies the number of that type of
technician required for the task.  -->


<!ELEMENT person     - O    ( precond*, (%link;)*, (%text;)? )  >
<!ATTLIST person
          %a.node;
          version        IDREF          #REQUIRED
          status         ( u | a )      'a'
          quantity       NUTOKEN        #IMPLIED  >

<!--  The person element employs the 'NODE' template from the generic layer.  
-->

<!ELEMENT person-alts       - O     ( person )+ >
<!ATTLIST person-alts
          %a.node-alts; >

<!--  This element employs the 'NODE-ALTS' template from the generic layer to
facilitate the context filtering of person elements.  -->

<!--  ****************************************************

                       Equipment Declaration

      ****************************************************  -->

<!--  This element identifies all the support equipment required for the
completion of the task.  -->

<!ELEMENT equip   - O  ( precond*, (%link;)*, (%equip;)*,
                       (%text;)?, (%partbase;)? ) >
<!ATTLIST equip
          %a.node;
          version        IDREF          #REQUIRED
          status         ( u | a )      'a'
          quantity       NUTOKEN        #IMPLIED  >

<!--  The equip element employs the 'NODE' template from the generic layer. 
An "equip" contains applicability preconditons, relational links to other
elements, and any alternate equipment. The quantity attribute identifies the
number of equipment items required to complete the task.  -->

<!ELEMENT equip-alts       - O     ( equip )+ >
<!ATTLIST equip-alts
          %a.node-alts;   >

<!--  This element employs the 'NODE-ALTS' template from the generic layer to
facilitate the context filtering of equipment elements.  -->

<!--  ****************************************************

                       Consumable Declaration

      ****************************************************  -->

<!--  This element identifies all the consumables required for the completion
of the task.  -->

<!ELEMENT consum   - O  ( precond*, (%link;)*, (%partbase;)?,
                        (%consum;)* )  >
<!ATTLIST consum
          %a.node;
          version          IDREF     #REQUIRED
          status           ( u | a ) 'a'
          govstd           CDATA     #IMPLIED
          mfgcode          CDATA     #IMPLIED
          milspec          CDATA     #IMPLIED
          quantity         NUTOKEN   #REQUIRED
          unit-of-measure  NMTOKEN   #IMPLIED  >

<!--  The consum element employs the 'NODE' template from the generic layer. 
A "consum" contains applicability preconditons and relational links to other
elements.  The "consum" element contains many attributes which identify what
the consumable is (govstd, mfgcode, milspec), and the amount required
(quantity, unit-of- measure) for accomplishing the task.  -->

<!ELEMENT consum-alts       - O     ( consum )+ >
<!ATTLIST consum-alts
          %a.node-alts; >

<!--  This element employs the 'NODE-ALTS' template from the generic layer to
facilitate the context filtering of equipment elements.  -->

<!--  ****************************************************

                         Alert Declaration

      ****************************************************  -->

<!--  This element identifies an alert that may accompany a task or step.  The
'type' attribute will identify the kind of alert, either Warning, Caution,
Note.  -->

<!ELEMENT alert   - O  ( precond*, (%link;)*, (%text;)+,
                       (%graphic;)* ) >
<!ATTLIST alert
          %a.node;
       version      IDREF          #REQUIRED
       status       ( u | a )      'a' >

<!--  The alert element employs the 'NODE' template from the generic layer. 
An "alert" contains applicability preconditions, relational links, text
elements which make up the content of the alert message, and optional
"graphic" icons to be displayed.  -->

<!ELEMENT alert-alts       - O     ( alert )+ >
<!ATTLIST alert-alts
          %a.node-alts;   >

<!--  This element employs the 'NODE-ALTS' template from the generic layer to
facilitate the context filtering of alerts.  -->

<!--  ****************************************************

                        Step Declaration

      ****************************************************  -->

<!--  Steps are the primary component of a maintenance procedure. They
describe the actions to be performed in order to successfully complete the
task.   -->

<!ELEMENT step     - O  ( precond*, (%link;)*, (%alert;)*,
                        (%sub-prims;)*, step-seq?, postcond* ) >
<!ATTLIST step
          %a.node;
          version        IDREF          #REQUIRED
          status         ( u | a )      'a'
          esttime        NUTOKEN        #IMPLIED  >

<!--  The step element employs the 'NODE' template from the generic layer.  A
"step" contains a list of preconditions which delimit the step's
applicability, relational links, precautionary alerts, an optional sequence of
substeps, and a list of postconditions which define the state changes to be
made after the step is accomplished. -->

<!ELEMENT step-alts       - O     ( step )+ >
<!ATTLIST step-alts
          %a.node-alts;     >

<!--  This element employs the 'NODE-ALTS' template from the generic layer to
facilitate the context filtering of steps.  -->

<!ELEMENT step-seq  - O  ( step | step-alts | if-step |
                           loop-step | task | task-alts )+ >
<!ATTLIST step-seq
          %a.node-seq;     >

<!--  This element employs the 'NODE-SEQ' template from the generic layer.  It
provides the capability to create sequences of steps.  -->

<!ELEMENT if-step  - O  ( expression, step-seq, step-seq? ) >
<!ATTLIST if-step
           %a.if-node;   >

<!--  This element employs the 'IF-NODE' template from the generic layer.  It
allows conditional selection of steps depending on a precondition.  -->

<!ELEMENT loop-step  - O  ( assertion?, expression, assertion?,
                            step-seq ) >
<!ATTLIST loop-step
          %a.loop-node;    >

<!--  This element employs the 'LOOP-NODE' template from the generic layer. 
It provides the capability of looping through a sequence of steps.  -->

<!--  *************************************************

                   Follow-on Declaration

      *************************************************  -->

<!--    A follow-on condition (follow-on) is a maintenance condition which
must be accomplished sometime following the completion of a task to clean-up
or undo actions performed during the task.  For example, in order to fix a
component a task might require that an access panel be removed.  The panel
would then need to be replaced as a follow-on action.  This task might be
performed sometime after the repair task is completed, but not immediately
after the repair task.  Other maintenance tasks might be performed in the same
area before the follow-on task is accomplished. -->

<!ELEMENT follow-on    - O  ( precond*, (%link;)*, (%text;)?,
                            ( expression, ( %task; | %step; ),
                              assertion* ), postcond* ) >
<!ATTLIST follow-on
          %a.node;
          version        IDREF          #REQUIRED
          status         ( u | a )      'a' >

<!--  The "follow-on" element employs the 'NODE' template from the generic
layer.  A "follow-on" element contains a set of preconditions which define the
follow-on maintenance condition which must be satisfied, relational links, an
optional text element which describes the follow-on condition, a list of
task(s)/step(s) which provide instructions for accomplishing the follow-on
condition, and a set of postconditions which define the state changes to be
made once the follow-on condition is accomplished. -->

<!ELEMENT follow-on-alts       - O     ( follow-on )+ >
<!ATTLIST follow-on-alts
          %a.node-alts;  >

<!--  This element employs the 'NODE-ALTS' template from the generic layer to
facilitate the context filtering of follow-on elements.  -->

<!--  ************************************************

                    Parts Information

      *************************************************  -->

<!--  "Partinfo" describes the maintainer's view of the part information. Each
"partinfo" element is related to a "partbase." However, several "partinfo"
items could be related to the same "partbase."  -->

<!ELEMENT partinfo   - O  ( precond*, (%link;)*, (%graphic;)*,(%partinfo;)*,
                          (%partbase;)+, (%connection;)*,
                          (%attach-part;)*, (%text;)?,
                          (%graphic;)*, (%location;)* ) >
<!ATTLIST partinfo
          %a.node;
          version        IDREF     #REQUIRED
          status         ( u | a ) 'a'
          indexnum       NUTOKENS  #IMPLIED
          lru            NUTOKEN   #IMPLIED
          mtbf           CDATA     #IMPLIED
          refdes         CDATA     #IMPLIED
          replvl         CDATA     #IMPLIED
          unitsper       NUTOKEN   #IMPLIED
          usablon        NUTOKENS  #IMPLIED  >

<!--  The "partinfo" element employs the 'NODE' template.  A "partinfo"
element contains a list of preconditions, relational links, and alternate
parts information ( the "partinfo" in the content model).  "Partinfo" also
identifies the components of the part (partbase), any connecting parts
(connection), attaching parts (attach-part), a formal name for the part
(text), a picture of the part (graphic), and the location of the part in
reference to the weapon system (location).   -->

<!ELEMENT partinfo-alts       - O     ( partinfo )+ >
<!ATTLIST partinfo-alts
          %a.node-alts;   >

<!--  This element employs the 'NODE-ALTS' template from the generic layer to
facilitate the context filtering of part information elements.  -->

<!--  ****************************************************

                         Partbase Declaration

      ****************************************************  -->

<!--  "Partbase" describes the supply system's view of the part information. 
It describes the item in terms of its part number ('partnum').  -->

<!ELEMENT partbase     - O  ( precond*, (%link;)*, (%partbase;)*,
                            (%text;)?, (%location;)* ) >
<!ATTLIST partbase
          %a.node;
          version        IDREF     #REQUIRED
          status         ( u | a ) 'a'
          cage           NUTOKENS  #IMPLIED
          fsc            CDATA     #IMPLIED
          partnum        CDATA     #IMPLIED
          smr            CDATA     #IMPLIED
          nsn            CDATA     #IMPLIED
          pmic           CDATA     #IMPLIED
          cac            NUTOKEN   #IMPLIED
          qpei           NUTOKEN   #IMPLIED
          hci            (Y1|N1)   "N1"
          lox            (Y2|N2)   "N2"
          esds           (Y3|N3)   "N3"
          qec            (Y4|N4)   "N4"
          magnetic       (Y5|N5)   "N5"
          procure        (Y6|N6)   "N6"  >

<!--  The "partbase" element employs the 'NODE' template from the generic
layer.  It allows for the declaration of preconditions for partbase
information and relational linking to other information from the partbase
element.  -->

<!ELEMENT partbase-alts       - O     ( partbase )+ >
<!ATTLIST partbase-alts
          %a.node-alts;   >

<!--  This element employs the 'NODE-ALTS' template from the generic layer to
facilitate the context filtering of part base elements.  -->

<!--  ******************************************************

           Connecting and Attaching Parts Declaration

      ******************************************************  -->

<!ELEMENT connection    - O  ( precond*, (%link;)*, (%partinfo;)+ ) >
<!ATTLIST connection
          %a.node;
          version        IDREF          #REQUIRED
          status         ( u | a)       'a' >

<!--  The connection element employs the 'NODE' template.  It defines a
connection between two "partinfo" elements.  -->

<!ELEMENT connection-alts       - O     ( connection )+ >
<!ATTLIST connection-alts
          %a.node-alts;   >

<!--  This element employs the 'NODE-ALTS' template from the generic layer to
facilitate the context filtering of connection elements.  -->

<!ELEMENT attach-part  - O    ( precond*, (%link;)*, (%partinfo;)+ ) >
<!ATTLIST attach-part
          %a.node;
          version        IDREF          #REQUIRED
          status         ( u | a )      'a' >

<!--  The attaching part element employs the 'NODE' template.  It defines the
attaching parts for a "partinfo" element.  -->

<!ELEMENT attach-part-alts       - O     ( attach-part )+ >
<!ATTLIST attach-part-alts
          %a.node-alts;   >

<!--  This element employs the 'NODE-ALTS' template from the generic layer to
facilitate the context filtering of attach-part elements.  -->

<!--  ******************************************************

                      Location Declaration

      ******************************************************  -->

<!--  The location element provides information for physical assessment. It
will contain x, y, z location(s) for a system with respect to the x, Fuselage
Station (FS), y, Buttock Line (BL), and z, Water Line (WL) reference system.
Where appropriate BL may be replaced by Wing Station (WS).  -->

<!ELEMENT location       - O  ( precond*, (%link;)* ) >

<!ATTLIST location
          %a.node;
          version        IDREF          #REQUIRED
          status         ( u | a )      'a'
          location-x     NUTOKENS       #IMPLIED
          location-y     NUTOKENS       #IMPLIED
          location-z     NUTOKENS       #IMPLIED >

<!--  The location element employs the 'NODE' template from the generic layer.
It allows for the declaration of preconditions for a physical location and
relational linking to other information from the location element.  -->

<!ELEMENT location-alts    - O     ( location )+ >
<!ATTLIST location-alts
          %a.node-alts;       >

<!--  This element employs the 'NODE-ALTS' template from the generic layer to
facilitate the context filtering of location elements.  -->

<!--  ****************************************************

                   Fault Information Declaration

      ****************************************************  -->

<!--  The "faultinf" element identifies all the fault isolation information
associated with a system.  "Faultinf" can be used to support dynamic
troubleshooting models or static troubleshooting trees.  -->


<!ELEMENT faultinf  - O  ( precond*, (%link;)*, (%test;)+,
                         (%fault;)* ) >
<!ATTLIST faultinf
          %a.node;
          version        IDREF          #REQUIRED
          status         ( u | a )      'a' >

<!--  The faultinf element employs the 'NODE' template.  It contains a list of
preconditions, relational links to other elements, and lists of tests and
faults associated with a system.  -->

<!ELEMENT faultinf-alts    - O    ( faultinf )+  >
<!ATTLIST faultinf-alts
          %a.node-alts; >

<!--  This element employs the 'NODE-ALTS' template from the generic layer to
facilitate the context filtering of fault information elements.  -->

<!--  ******************************************************

                        Test Declaration

      ******************************************************  -->

<!--  The "test" element identifies a prescribed task to perform and is the
usual way of entering the troubleshooting process. The result of a test is an
outcome; a test will have two or more outcomes.  -->


<!ELEMENT test        - O  ( precond*, (%link;)*, (%task;),
                           (%outcome;)+ ) >
<!ATTLIST test
          %a.node;
          version        IDREF          #REQUIRED
          status         ( u | a )      'a'
          agent          CDATA          #IMPLIED
          range          CDATA          #IMPLIED  >

<!--  This element identifies the task needed to complete the test and all the
possible outcomes as a result of the test.  -->

<!--  The test element employs the 'NODE' template.  It contains a list of
preconditions and relational links to other information.  A "test" element
identifies the task which will accomplish the test.  All the possible outcomes
are contained within the test.  -->

<!ELEMENT test-alts    - O    ( test )+  >
<!ATTLIST test-alts
          %a.node-alts;  >

<!--  This element employs the 'NODE-ALTS' template from the generic layer to
facilitate the context filtering of tests.  -->

<!--  ******************************************************

                       Outcome Declaration

      ******************************************************  -->

<!--  This element identifies a result of a test.  The precondition list is
evaluated against the result of the test, and the appropriate outcome is
selected.  In a dynamic troubleshooting model, the outcome will contain a
faultstate that identifies an implicated or exculpated set of faults.  In a
static troubleshooting model, the outcome will contain another test or a
fault.  The outcome will contain the information necessary for both models,
but it will be up to the diagnostic software to choose the correct path to
follow for its logic.  -->

<!ELEMENT outcome - O  ( precond*, (%link;)*, expression,
                         ( (%fltstate;) | ( ( %test; | %fault; ),
                         (%fltstate;)? ) ) ) >
<!ATTLIST outcome
          %a.node;
          version        IDREF          #REQUIRED
          status         ( u | a )      'a' >

<!--  The outcome element employs the 'NODE' template.  It contains a list of
preconditions, and relational links to other information.  The faultstate
element will identify the implicated or exculpated faults for the outcome. 
The test and fault elements identify the next step in a static fault tree. 
-->

<!ELEMENT outcome-alts    - O    ( outcome )+  >
<!ATTLIST outcome-alts
          %a.node-alts;   >

<!--  This element employs the 'NODE-ALTS' template from the generic layer to
facilitate the context filtering of outcomes. -->

<!--  ******************************************************

                     Faultstate Declaration

      ******************************************************  -->

<!--  The "fltstate" element identifies a set of implicated or exculpated
faults.  Implicated faults are faults suspected of being bad; exculpated
faults are faults known to be good.  Each implicated fault will have an
associated weight based on its likelihood of causing the discrepancy.  -->

<!ELEMENT fltstate  - O  ( precond*, (%link;)*, (%fault;)+ ) >
<!ATTLIST fltstate
          %a.node;
          version        IDREF          #REQUIRED
          status         ( u | a )      'a'
          weight         NUTOKENS        #IMPLIED >

<!--  The fltstate element employs the 'NODE' template.  It contains a list of
preconditions, and relational links to other appropriate information.  The
'type' attribute will designate whether the list of faults are "implicated" or
"exculpated." -->

<!ELEMENT fltstate-alts    - O    ( fltstate )+  >
<!ATTLIST fltstate-alts
          %a.node-alts; >

<!--  This element employs the 'NODE-ALTS' template from the generic layer to
facilitate the context filtering of fault states.  -->

<!--  ******************************************************

                        Fault Declaration

      ******************************************************  -->

<!--  The "fault" element identifies the cause of a discrepancy on the weapon
system.  The fault will identify the appropriate rectification to correct the
discrepancy.  When transitioning between maintenance levels the fltstate
element is used.  -->

<!ELEMENT fault   - O  ( precond*, (%link;)*, ( %rect; | %fltstate; )+,
                         (%system;)+ ) >
<!ATTLIST fault
          %a.node;
          version        IDREF          #REQUIRED
          status         ( u | a )      'a'
          mtbf           CDATA          #IMPLIED  >

<!--  The fault element employs the 'NODE' template.  It contains a list of
preconditions, and relational links to other appropriate information.  The
rectifications contain tasks which will correct the discrepancy.  The system
and part information elements will create a back-link to the part that has
failed. The "fltstate" represents the system at the next level of maintenance.
-->

<!ELEMENT fault-alts    - O    ( fault )+  >
<!ATTLIST fault-alts
          %a.node-alts;  >

<!--  This element employs the 'NODE-ALTS' template from the generic layer to
facilitate the context filtering of faults.  -->

<!--  ******************************************************
                    Rectification Declaration

      ******************************************************  -->

<!--  The "rect" element identifies the prescribed task that will repair the
fault causing the discrepancy and all other faults that could be fixed by the
rectification.  Upon completion of the task, a test is performed to verify the
effect of the rectification. -->

<!ELEMENT rect    - O  ( precond*, (%link;)*, (%task;)+, (%fault;)+,
                         (%system;),  (%test;)* ) >
<!ATTLIST rect
          %a.node;
          version        IDREF               #REQUIRED
          status         ( u | a )           'a'
          action         ( swap | maint )    #REQUIRED
          agent          CDATA               #IMPLIED  >

<!--  The rect element employs the 'NODE' template.  It contains a list of
preconditions, and relational links to other appropriate information.  The
"system" element provides a reference to the system which will be repaired by
the rectification.  The test element identifies all check-out tests required
before completing the maintenance session.  -->

<!ELEMENT rect-alts    - O    ( rect )+  >
<!ATTLIST rect-alts
          %a.node-alts;    >

<!--  This element employs the 'NODE-ALTS' template from the generic layer to
facilitate the context filtering of rectifications.  -->

<!-- ] -->

