<!-- Test Module DTD                              -->
<!-- DTD for test module definition in XML        -->
<!-- Version 1.8                                  -->
<!-- (c) 2007  Vector Informatik GmbH, Stuttgart  -->

<!-- Test Module (Root element) -->

  <!ELEMENT testmodule (description?, variants?, externalref*,
                        (engineer | testsetup | sut | miscinfo | extendedinfo)*,
                        templates?, global?, preparation?, constraints?, conditions?,
                        (testgroup | testcase | capltestcase | templateinstances)*, completion?)>
  <!ATTLIST testmodule title   CDATA #REQUIRED
                       version CDATA #REQUIRED>

<!-- Test Group -->

  <!ELEMENT testgroup (description?, externalref*, (miscinfo | extendedinfo)*,
                       preparation?, constraints?, conditions?,
                       (testgroup | testcase | capltestcase | templateinstances)*, completion?)>
  <!ATTLIST testgroup title    CDATA #REQUIRED
                      variants CDATA #IMPLIED>

<!-- Test case templates -->

  <!ELEMENT templates (testcasetemplate)*>
  
  <!ELEMENT testcasetemplate ( paramdef*, 
                              (description?, externalref*, (miscinfo | extendedinfo)*,
                               preparation?, constraints?, conditions?,
                               (comment | valuecomment | wait | initialize | statecheck | statechange |
                                requestresponse | replay | stimulate_ramp |
                                diagservicecheck | fblocksexistence | netblockcomplete |
                                functionsinfblock | genericfblocktest | isproperty | untilend |
                                testerconfirmation | syscall |
                                canstress_configure | canstress_state | j1939_request_response |
                                j1939_command_response | j1939_request_ACL | j1939_conflict_ACL |
                                j1939_commanded_address)*, 
                               completion?) )>
  <!ATTLIST testcasetemplate name    CDATA #REQUIRED
                             version CDATA #IMPLIED>
  
  <!ELEMENT paramdef EMPTY>
  <!ATTLIST paramdef name     CDATA                   #REQUIRED
                     default  CDATA                   #IMPLIED>
                     
  <!ELEMENT templateinstances (testcaseinstance)*>
  <!ATTLIST templateinstances template CDATA #REQUIRED>
  
  <!ELEMENT testcaseinstance (paramvalue)*>
  <!ATTLIST testcaseinstance ident    CDATA #REQUIRED
                             title    CDATA #REQUIRED
                             variants CDATA #IMPLIED>
                             
  <!ELEMENT paramvalue (#PCDATA)>
  <!ATTLIST paramvalue name CDATA #REQUIRED>
  
<!-- Test Case -->

  <!ELEMENT testcase (description?, externalref*, (miscinfo | extendedinfo)*,
       preparation?, constraints?, conditions?,
       (comment | valuecomment | wait | initialize | statecheck | statechange |
        requestresponse | replay | stimulate_ramp |
        diagservicecheck | fblocksexistence | netblockcomplete |
        functionsinfblock | genericfblocktest | isproperty | untilend |
        testerconfirmation | syscall |
        canstress_configure | canstress_state | j1939_request_response |
        j1939_command_response | j1939_request_ACL | j1939_conflict_ACL |
        j1939_commanded_address)*, 
       completion?) > 
  <!ATTLIST testcase ident    CDATA #REQUIRED
                     title    CDATA #REQUIRED
                     version  CDATA #IMPLIED
                     variants CDATA #IMPLIED>

<!-- Test Case in CAPL -->

  <!ELEMENT capltestcase (externalref*, caplparam*)>
  <!ATTLIST capltestcase name     CDATA #REQUIRED
                         title    CDATA #IMPLIED
                         ident    CDATA #IMPLIED
                         variants CDATA #IMPLIED>

  <!ELEMENT caplparam (#PCDATA | var)*>
  <!ATTLIST caplparam name CDATA                  #REQUIRED
                      type (string | int | float) #REQUIRED>

<!-- Global Section -->

  <!ELEMENT global ANY>

<!-- Preparation Section -->

  <!ELEMENT preparation (comment | valuecomment | vardef | sysvardef | vardef_bytester | wait
                         | initialize | statecheck | statechange
                         | requestresponse | replay | stimulate_ramp
                         | diagservicecheck | fblocksexistence
                         | netblockcomplete | functionsinfblock | isproperty | testerconfirmation
                         | syscall 
                         | canstress_configure | canstress_state| j1939_request_response
                         | j1939_command_response | j1939_request_ACL | j1939_conflict_ACL
                         | j1939_commanded_address)*>

<!-- Completion Section -->

  <!ELEMENT completion (comment | valuecomment | wait | initialize | statecheck | statechange
                        | requestresponse | replay | stimulate_ramp
                        | diagservicecheck | fblocksexistence
                        | netblockcomplete | functionsinfblock | isproperty | testerconfirmation
                        | syscall
                        | canstress_configure | canstress_state| j1939_request_response
                        | j1939_command_response | j1939_request_ACL | j1939_conflict_ACL
                        | j1939_commanded_address)*>

<!-- List of Constraints and Conditions -->

  <!ELEMENT constraints (cycletime_abs | cycletime_rel | distance
                         | value_valid | goessleep | isalive | novaluechange
                         | withintime | messages_known | error_frame_check
                         | dlc_ok | valuedependency | occurrencetime_rel
                         | requestresponsecheck | fallbackcheck | mostpropertyprotocolerror 
                         | mostlightlock | mostnetstate | mosterrormessage
                         | occurrence_count | j1939_request_violation
                         | j1939_cycletime_rel_violation | j1939_cycletime_abs_violation
                         | j1939_BAM_violation | j1939_RTS_CTS_violation | j1939_ACL_violation
                         | j1939_messages_known | j1939_rules_specific)*>
  <!ELEMENT conditions (cycletime_abs | cycletime_rel |  distance
                        | value_valid | goessleep | isalive | novaluechange
                        | withintime | messages_known | error_frame_check
                        | dlc_ok | valuedependency | occurrencetime_rel
                        | requestresponsecheck | fallbackcheck | mostpropertyprotocolerror
                        | mostlightlock | mostnetstate | mosterrormessage 
                        | occurrence_count | j1939_request_violation
                        | j1939_cycletime_rel_violation | j1939_cycletime_abs_violation
                        | j1939_BAM_violation | j1939_RTS_CTS_violation | j1939_ACL_violation
                        | j1939_messages_known | j1939_rules_specific)*>

<!-- Variable Usage -->

  <!ELEMENT vardef (#PCDATA | cansignal | linsignal | flexraysignal | envvar | sysvar | value)*>
  <!ATTLIST vardef name     CDATA                  #REQUIRED
                   type     (string | int | float) #REQUIRED
                   default  CDATA                  #IMPLIED>
                   
  <!ELEMENT vardef_bytester (#PCDATA)*>
  <!ATTLIST vardef_bytester name    CDATA                  #REQUIRED
                            type    (string | int | float) #REQUIRED
                            timeout CDATA                  #IMPLIED
                            default CDATA                  #IMPLIED>                   
                   
  <!ELEMENT sysvardef (#PCDATA | cansignal | linsignal | flexraysignal | envvar)*>
  <!ATTLIST sysvardef name        CDATA                  #REQUIRED
                      type        (string | int | float) #REQUIRED
                      default     CDATA                  #REQUIRED
                      namespace   CDATA                  #IMPLIED>

  <!ELEMENT var EMPTY>
  <!ATTLIST var name CDATA #REQUIRED>
  

<!-- Parameter Target Conditions -->

  <!ELEMENT eq     (#PCDATA | var)*>
  <!ELEMENT ne     (#PCDATA | var)*>
  <!ELEMENT lt     (#PCDATA | var)*>
  <!ELEMENT gt     (#PCDATA | var)*>
  <!ELEMENT le     (#PCDATA | var)*>
  <!ELEMENT ge     (#PCDATA | var)*>
  <!ELEMENT range  (from, to)>
  <!ELEMENT from   (#PCDATA | var)*>
  <!ELEMENT to     (#PCDATA | var)*>
  <!ELEMENT one_of (eq | range)*>  

<!-- Parameter Values and Targets -->

  <!-- Signals -->

  <!ELEMENT cansignal (#PCDATA | eq | ne | lt | gt | le | ge | range | one_of | var)*>
  <!ATTLIST cansignal name     CDATA #REQUIRED
                      msg      CDATA #IMPLIED
                      node     CDATA #IMPLIED
                      bus      CDATA #IMPLIED
                      variants CDATA #IMPLIED>

  <!ELEMENT linsignal (#PCDATA | eq | ne | lt | gt | le | ge | range | one_of | var)*>
  <!ATTLIST linsignal name     CDATA #REQUIRED
                      msg      CDATA #IMPLIED
                      node     CDATA #IMPLIED
                      bus      CDATA #IMPLIED
                      variants CDATA #IMPLIED>

  <!ELEMENT flexraysignal (#PCDATA | eq | ne | lt | gt | le | ge | range | one_of | var)*>
  <!ATTLIST flexraysignal name CDATA #REQUIRED
                      frame    CDATA #IMPLIED
                      node     CDATA #IMPLIED
                      bus      CDATA #IMPLIED
                      variants CDATA #IMPLIED>

  <!-- Environment Variables -->

  <!ELEMENT envvar (#PCDATA | eq | ne | lt | gt | le | ge | range | one_of | var)*>
  <!ATTLIST envvar name     CDATA #REQUIRED
                   variants CDATA #IMPLIED>
  
  <!-- System Variables -->
  <!ELEMENT sysvar (#PCDATA | eq | ne | lt | gt | le | ge | range | one_of | var)*>
  <!ATTLIST sysvar name CDATA #REQUIRED
                   namespace CDATA #REQUIRED
                   variants  CDATA #IMPLIED>

  <!-- Messages -->

  <!ELEMENT canmsg ((byte | byteref)* | (signal | signalref)*)>
  <!ATTLIST canmsg id       CDATA                 #REQUIRED
                   node     CDATA                 #IMPLIED
                   bus      CDATA                 #IMPLIED
                   channel  CDATA                 #IMPLIED
                   dlc      CDATA                 #IMPLIED
                   dir      (rx | tx | txrequest) #IMPLIED
                   rtr      (rtr | nortr)         #IMPLIED
                   type     (std | ext )          #IMPLIED
                   msgflags (nerr | highvoltage)  #IMPLIED
                   variants CDATA                 #IMPLIED>
                   
  <!-- linframe element can be used only within requestresponsecheck and requestrespons -->
  <!ELEMENT linframe ((byte | byteref)* | (signal | signalref)*)>
  <!ATTLIST linframe id         CDATA          #REQUIRED
                     node       CDATA          #IMPLIED
                     bus        CDATA          #IMPLIED
                     channel    CDATA          #IMPLIED
                     dir        (rx | tx)      #IMPLIED>                   

  <!ELEMENT mostmsg ((byte | byteref)* | (param)* ) >
  <!ATTLIST mostmsg fblock   CDATA                 #IMPLIED
                    function CDATA                 #IMPLIED
                    optype   CDATA                 #IMPLIED
                    name     CDATA                 #IMPLIED
                    instance CDATA                 #IMPLIED
                    bus      CDATA                 #IMPLIED
                    channel  CDATA                 #IMPLIED
                    tellen   CDATA                 #IMPLIED
                    telid    CDATA                 #IMPLIED
                    dir      (rx | tx | txrequest) #IMPLIED
                    sa       CDATA                 #IMPLIED
                    da       CDATA                 #IMPLIED
                    ams      (ams | ctrl)          #IMPLIED
                    spy      (spy | node)          #IMPLIED
                    variants CDATA                 #IMPLIED>

  <!ELEMENT mostsysmsg (byte*)>
  <!ATTLIST mostsysmsg rtype    CDATA                 #REQUIRED
                       bus      CDATA                 #IMPLIED
                       channel  CDATA                 #IMPLIED
                       dir      (rx | tx | txrequest) #IMPLIED
                       sa       CDATA                 #IMPLIED
                       da       CDATA                 #IMPLIED
                       variants CDATA                 #IMPLIED>


  <!ELEMENT signal (#PCDATA | eq | ne | lt | gt | le | ge | range | one_of | var)*>
  <!ATTLIST signal name     CDATA #REQUIRED
                   variants CDATA #IMPLIED>

  <!ELEMENT byte (#PCDATA | eq | ne | lt | gt | le | ge | range | one_of | var)*>
  <!ATTLIST byte pos      CDATA   #REQUIRED
                 variants CDATA #IMPLIED>
                 
  <!ELEMENT j1939_pg ((byte | byteref)*, (signal)*)>
  <!ATTLIST j1939_pg id          CDATA #REQUIRED
                     bus         CDATA #IMPLIED
                     channel     CDATA   #IMPLIED
                     dlc         CDATA   #IMPLIED
                     dir         (rx | tx | txrequest) #IMPLIED
                     priority    CDATA   #IMPLIED
                     sendNode    CDATA #IMPLIED
                     receiveNode CDATA #IMPLIED
                     variants    CDATA #IMPLIED>

  <!-- signalref element can be used only within the requestresponsecheck invariant -->
  <!ELEMENT signalref EMPTY>
  <!ATTLIST signalref name CDATA #REQUIRED
                      refname  CDATA #REQUIRED
                      variants CDATA #IMPLIED>

  <!-- byteref element can be used only within the requestresponsecheck invariant -->
  <!ELEMENT byteref EMPTY>
  <!ATTLIST byteref pos      CDATA   #REQUIRED
                    refpos   CDATA   #REQUIRED
                    variants CDATA   #IMPLIED>                      
                    
  <!-- param element can be used only within MOST messages -->
  <!ELEMENT param (#PCDATA | eq | ne | lt | gt | le | ge | range | one_of | var)*>
  <!ATTLIST param name     CDATA #REQUIRED
                  variants CDATA #IMPLIED>

  <!-- Node -->

  <!ELEMENT node EMPTY>
  <!ATTLIST node name     CDATA #REQUIRED
                 bus      CDATA #IMPLIED
                 variants CDATA #IMPLIED>

  <!ELEMENT j1939_node EMPTY>
  <!ATTLIST j1939_node name CDATA #IMPLIED
                       address  CDATA   #IMPLIED
                       aac      CDATA   #IMPLIED
                       ig       CDATA   #IMPLIED
                       sys      CDATA   #IMPLIED
                       sysi     CDATA   #IMPLIED
                       fct      CDATA   #IMPLIED
                       fcti     CDATA   #IMPLIED
                       ecui     CDATA   #IMPLIED
                       mc       CDATA   #IMPLIED
                       in       CDATA   #IMPLIED
                       bus      CDATA   #IMPLIED
                       variants CDATA   #IMPLIED>

  <!-- Advanced MOST Parameters -->

  <!ELEMENT inlist ((fblock)* | (function)*)>
  <!ELEMENT outlist ((fblock)*)>
  <!ELEMENT exceptionlist ((fblock)* | (function)*)>
  
  <!ELEMENT fblock EMPTY>
  <!ATTLIST fblock id       CDATA   #REQUIRED
                   instance CDATA   #IMPLIED>
   
  <!ELEMENT function EMPTY>
  <!ATTLIST function id CDATA #REQUIRED>

  <!-- Additional J1939 Elements -->

  <!ELEMENT sender (j1939_node*)>
  <!ELEMENT receiver (j1939_node*)>
  <!ELEMENT command (j1939_pg?)>

<!-- Checks defined in TSL -->

  <!-- Absolute Cycle Time Supervision -->

  <!ELEMENT cycletime_abs (canmsg)>
  <!ATTLIST cycletime_abs min      CDATA   #IMPLIED
                          max      CDATA   #IMPLIED
                          variants CDATA   #IMPLIED>

  <!-- Relative Cycle Time Supervision -->

  <!ELEMENT cycletime_rel (canmsg | node )>
  <!ATTLIST cycletime_rel min      CDATA   #IMPLIED
                          max      CDATA   #IMPLIED
                          variants CDATA   #IMPLIED>

  <!-- Message Distance Supervision -->

  <!ELEMENT distance (reference, observed)>
  <!ATTLIST distance min      CDATA   #IMPLIED
                     max      CDATA   #IMPLIED
                     variants CDATA   #IMPLIED>

  <!ELEMENT reference (canmsg | mostmsg | linframe)>
  <!ELEMENT observed  (canmsg | mostmsg | linframe)>

  <!-- Signal Value Supervision -->

  <!ELEMENT value_valid (cansignal | linsignal | flexraysignal | envvar | sysvar)>
  <!ATTLIST value_valid variants CDATA #IMPLIED>

  <!-- Node Babbling -->
  
  <!ELEMENT goessleep (node | (canmsg)*)>
  <!ATTLIST goessleep time     CDATA   #REQUIRED
                      variants CDATA   #IMPLIED>

  <!-- Node Dead -->
  
  <!ELEMENT isalive (node | (canmsg)*)>
  <!ATTLIST isalive time     CDATA   #REQUIRED
                    variants CDATA   #IMPLIED>

  <!-- Signal Value Change -->
  
  <!ELEMENT novaluechange (cansignal | linsignal | flexraysignal | envvar | sysvar)>
  <!ATTLIST novaluechange  variants CDATA #IMPLIED>

  <!-- Timeout -->
  
  <!ELEMENT withintime EMPTY>
  <!ATTLIST withintime max      CDATA   #REQUIRED
                       variants CDATA   #IMPLIED>

  <!-- Undefined Message Received -->
  
  <!ELEMENT messages_known EMPTY>
  <!ATTLIST messages_known bus      CDATA #IMPLIED
                           variants CDATA #IMPLIED>

  <!-- Check Error Frame -->	
  
  <!ELEMENT error_frame_check EMPTY>
  <!ATTLIST error_frame_check max      CDATA   #REQUIRED
                              bus      CDATA   #IMPLIED
                              variants CDATA   #IMPLIED>

  <!-- DLC Supervision -->

  <!ELEMENT dlc_ok (canmsg | node )>
  <!ATTLIST dlc_ok dir      (rx|tx) #IMPLIED
                   variants CDATA   #IMPLIED>

  <!-- Value Invariant Supervision -->

  <!ELEMENT valuedependency (while, match)>
  <!ATTLIST valuedependency mintime  CDATA   #IMPLIED
                            timeout  CDATA   #REQUIRED
                            variants CDATA   #IMPLIED>

  <!ELEMENT while (cansignal | linsignal | flexraysignal | envvar | sysvar)>
  <!ELEMENT match (cansignal | linsignal | flexraysignal | envvar | sysvar)>

  <!-- Relative Message Occurrence Supervision -->

  <!ELEMENT occurrencetime_rel (canmsg | node)>
  <!ATTLIST occurrencetime_rel min      CDATA   #IMPLIED
                               max      CDATA   #IMPLIED
                               variants CDATA   #IMPLIED>

  <!-- Message routing observing invariant (e.g. for Gateway-tests) -->

  <!ELEMENT requestresponsecheck (request,response)>
  <!ATTLIST requestresponsecheck mintime     CDATA    #IMPLIED
                                 timeout     CDATA    #REQUIRED
                                 observetime CDATA    #IMPLIED
                                 one2one     (yes|no) #IMPLIED
                                 variants    CDATA    #IMPLIED>

  <!-- Fallback reaction invariant (e.g. for Gateway-tests) -->

  <!ELEMENT fallbackcheck (ondropout,fallback)>
  <!ATTLIST fallbackcheck timeout     CDATA   #REQUIRED
                          observetime CDATA   #IMPLIED
                          variants    CDATA   #IMPLIED>
                                           
  <!ELEMENT ondropout (canmsg | mostmsg | j1939_pg)*>
  <!ATTLIST ondropout time     CDATA     #REQUIRED
                      missing  (all|any) #IMPLIED
                      variants CDATA     #IMPLIED>

  <!ELEMENT fallback (canmsg | mostmsg | envvar | sysvar | j1939_pg)>
  
  <!-- Absence of defined messages -->

  <!ELEMENT occurrence_count (canmsg | j1939_pg)*>
  <!ATTLIST occurrence_count  maxcount CDATA   #IMPLIED
                              variants CDATA   #IMPLIED>  
  
  <!-- MOST: Property protocol error check -->

  <!ELEMENT mostpropertyprotocolerror EMPTY>
  <!ATTLIST mostpropertyprotocolerror property      CDATA    #REQUIRED
                                      instance      CDATA    #IMPLIED
                                      answertimeout CDATA    #IMPLIED
                                      variants      CDATA    #IMPLIED>

  <!-- MOST: Property protocol error check -->

  <!ELEMENT mostlightlock EMPTY>
  <!ATTLIST mostlightlock eventtype ( criticalunlock | shortunlock | lightoff | stablelock ) #IMPLIED
                          variants  CDATA                                                    #IMPLIED>

  <!-- MOST: NetState check -->

  <!ELEMENT mostnetstate EMPTY>
  <!ATTLIST mostnetstate oldstate ( undefined | poweroff | netinterfaceinit | confignotok | configok) #IMPLIED
                         newstate ( undefined | poweroff | netinterfaceinit | confignotok | configok) #IMPLIED
                         variants CDATA                                                               #IMPLIED>

  <!-- MOST: Error message (occurrance) check -->

  <!ELEMENT mosterrormessage EMPTY>
  <!ATTLIST mosterrormessage sa        CDATA   #REQUIRED
                             name      CDATA   #IMPLIED
                             instance  CDATA   #IMPLIED
                             code      CDATA   #IMPLIED
                             variants  CDATA   #IMPLIED>

  <!--J1939: Address claiming violation check -->

  <!ELEMENT j1939_ACL_violation (j1939_node+)>
  <!ATTLIST j1939_ACL_violation timeout                     CDATA   #IMPLIED
                                allowAddressUsageBeforeACL (0 | 1)  #IMPLIED
                                allowNonExpectedACL (0 | 1)         #IMPLIED
                                allowClaimingOfOtherAddress (0 | 1) #IMPLIED
                                variants                    CDATA   #IMPLIED>

  <!--J1939: Request violation check -->

  <!ELEMENT j1939_request_violation (j1939_node? | j1939_pg?)>
  <!ATTLIST j1939_request_violation timeout               CDATA      #IMPLIED
                                    requestInhibitTime    CDATA      #IMPLIED
                                    expect (response | NACK | PACK)  #IMPLIED
                                    allowRequestIfPending (0 | 1)    #IMPLIED
                                    context (inhibitTime | retries | evaluateACK) #IMPLIED
                                    variants              CDATA      #IMPLIED>

  <!--J1939: Broadcast Announce Message (BAM) violation check -->

  <!ELEMENT j1939_BAM_violation (j1939_node?)>
  <!ATTLIST j1939_BAM_violation min      CDATA   #IMPLIED
                                max      CDATA   #IMPLIED
                                variants CDATA   #IMPLIED>

  <!--J1939: Relative cycle time violation check -->

  <!ELEMENT j1939_cycletime_rel_violation (j1939_pg?)>
  <!ATTLIST j1939_cycletime_rel_violation min CDATA   #REQUIRED
                                          max CDATA   #REQUIRED
                                          variants CDATA #IMPLIED>

  <!--J1939: Absolute cycle time violation check -->

  <!ELEMENT j1939_cycletime_abs_violation (j1939_pg?)>
  <!ATTLIST j1939_cycletime_abs_violation min CDATA   #REQUIRED
                                          max CDATA   #REQUIRED
                                          variants CDATA #IMPLIED>

  <!--J1939: Transport Protocol (RTS / CTS) violation check -->

  <!ELEMENT j1939_RTS_CTS_violation (sender? | receiver?)*>
  <!ATTLIST j1939_RTS_CTS_violation t1       CDATA   #IMPLIED
                                    t2       CDATA   #IMPLIED
                                    t3       CDATA   #IMPLIED
                                    t4       CDATA   #IMPLIED
                                    variants CDATA   #IMPLIED>

  <!--J1939: Undefined J1939 PG received check -->

  <!ELEMENT j1939_messages_known (sender?, receiver?, j1939_pg*)>
  <!ATTLIST j1939_messages_known bus      CDATA            #IMPLIED
                                 context  (pgn | dp | edp) #IMPLIED
                                 variants CDATA            #IMPLIED>

  <!--J1939: Domain rules check -->

  <!ELEMENT j1939_rules_specific (sender?, receiver?)>
  <!ATTLIST j1939_rules_specific bus      CDATA                            #IMPLIED
                                 context  (byteOrder | TPDataMinDLC | dlc) #IMPLIED
                                 variants CDATA                            #IMPLIED>

<!-- Test Patterns -->

  <!-- Wait: Wait for specified time -->

  <!ELEMENT wait EMPTY>
  <!ATTLIST wait time     CDATA   #REQUIRED
                 title    CDATA   #REQUIRED
                 variants CDATA   #IMPLIED>

  <!-- Initialize: Initialization Vector - Wait -->

  <!ELEMENT initialize ((cansignal | linsignal | flexraysignal | envvar | sysvar | canmsg | mostmsg | mostsysmsg | j1939_pg)*)>
  <!ATTLIST initialize wait     CDATA   #IMPLIED
                       title    CDATA   #REQUIRED
                       variants CDATA   #IMPLIED>

  <!-- State Change: Input Vector - Wait - Target Vector -->

  <!ELEMENT statechange (in, expected)>
  <!ATTLIST statechange wait     CDATA   #REQUIRED
                        title    CDATA   #REQUIRED
                        variants CDATA   #IMPLIED>

  <!ELEMENT in ((cansignal | linsignal | flexraysignal | envvar | sysvar)*)>

  <!ELEMENT expected ((cansignal | linsignal | flexraysignal | envvar | sysvar)*)>

  <!-- State Check: Wait - Check Target Vector -->

  <!ELEMENT statecheck (expected)>
  <!ATTLIST statecheck wait     CDATA   #REQUIRED
                       title    CDATA   #REQUIRED
                       variants CDATA   #IMPLIED>

  <!-- Request Response: Send Message - Wait for Response -->

  <!ELEMENT requestresponse (request, response)>
  <!ATTLIST requestresponse mintime     CDATA   #IMPLIED
                            timeout     CDATA   #REQUIRED
                            observetime CDATA   #IMPLIED
                            title       CDATA   #REQUIRED
                            variants    CDATA   #IMPLIED>

  <!ELEMENT request ((mostmsg | mostsysmsg | canmsg | linframe | envvar | sysvar | j1939_pg)*)>
  <!ATTLIST request sendinterval CDATA   #IMPLIED
                    variants     CDATA   #IMPLIED>

  <!ELEMENT response ((mostmsg | mostsysmsg | canmsg | linframe | envvar | sysvar | j1939_pg)*)>
  <!ATTLIST response joincondition (and|or) #IMPLIED
                     variants      CDATA    #IMPLIED>

  <!-- Replay: replay a log/macro file -->

  <!ELEMENT replay EMPTY>
  <!ATTLIST replay title    CDATA #REQUIRED
                   file     CDATA #REQUIRED
                   variants CDATA #IMPLIED>

  <!-- Stimulate Ramp: get ramp signal to CAN signal/environment variable -->

  <!ELEMENT stimulate_ramp (cansignal | envvar)>
  <!ATTLIST stimulate_ramp title    CDATA   #REQUIRED
                           cycle    CDATA   #REQUIRED
                           duration CDATA   #REQUIRED
                           timeUp   CDATA   #REQUIRED
                           timeDown CDATA   #REQUIRED
                           timeHigh CDATA   #REQUIRED
                           timeLow  CDATA   #REQUIRED
                           min      CDATA   #IMPLIED
                           max      CDATA   #IMPLIED
                           variants CDATA   #IMPLIED>

  <!-- Diagnostics Service Check: call diagnostics service -->

  <!ELEMENT diagservicecheck (diagvalue*)>
  <!ATTLIST diagservicecheck title    CDATA                   #REQUIRED
                             ecu      CDATA                   #REQUIRED
                             class    CDATA                   #REQUIRED
                             instance CDATA                   #REQUIRED
                             service  CDATA                   #REQUIRED
                             timeout  CDATA                   #IMPLIED
                             result   (positive|negative|any) #IMPLIED
                             variants CDATA                   #IMPLIED>

  <!ELEMENT diagvalue (#PCDATA | eq | ne | lt | gt | le | ge | range | one_of)*>
  <!ATTLIST diagvalue qualifier CDATA #REQUIRED
                      variants  CDATA #IMPLIED>

  <!-- MOST: FBlocks Existence: Verify existence of FBlocks in device -->
  
  <!ELEMENT fblocksexistence (inlist?, outlist?)>
  <!ATTLIST fblocksexistence sut            CDATA    #REQUIRED
                             channel        CDATA    #IMPLIED
                             bus            CDATA    #IMPLIED
                             timeout        CDATA    #REQUIRED
                             title          CDATA    #REQUIRED
                             verifynetblock (yes|no) #REQUIRED
                             variants       CDATA    #IMPLIED>
                             
  <!-- MOST: NetBlock Complete: Check if NetBlock corresponds to FBlocks in device -->
  
  <!ELEMENT netblockcomplete ((exceptionlist)?)>
  <!ATTLIST netblockcomplete sut      CDATA   #REQUIRED
                             channel  CDATA   #IMPLIED
                             bus      CDATA   #IMPLIED
                             timeout  CDATA   #REQUIRED
                             title    CDATA   #REQUIRED
                             variants CDATA   #IMPLIED>
                         
  <!-- MOST: Functions In FBlock: Check given FktIDs for existence in FBlock -->
  
  <!ELEMENT functionsinfblock (inlist?, exceptionlist?)>
  <!ATTLIST functionsinfblock sut         CDATA          #REQUIRED
                              channel     CDATA          #IMPLIED
                              bus         CDATA          #IMPLIED
                              timeout     CDATA          #REQUIRED
                              title       CDATA          #REQUIRED
                              fblock      CDATA          #REQUIRED
                              instance    CDATA          #IMPLIED
                              usefcat     (yes|no)       #IMPLIED
                              match       (exact|subset) #IMPLIED
                              variants    CDATA          #IMPLIED>

  <!-- MOST: GenericFBlockTest: Performs Generic FBlock Test from MOST Compliance Test Spec. V.1.0 -->
  <!ELEMENT genericfblocktest EMPTY>
  <!ATTLIST genericfblocktest sut         CDATA          #REQUIRED
                              channel     CDATA          #IMPLIED
                              bus         CDATA          #IMPLIED
                              title       CDATA          #REQUIRED
                              fblock      CDATA          #REQUIRED
                              variants    CDATA          #IMPLIED>
  
  <!-- Is Property: Verifies the assumption of a given function to be a property -->
  
  <!ELEMENT isproperty EMPTY>
  <!ATTLIST isproperty sut       CDATA   #REQUIRED
                       channel   CDATA   #IMPLIED
                       bus       CDATA   #IMPLIED
                       timeout   CDATA   #REQUIRED
                       title     CDATA   #REQUIRED
                       fblock    CDATA   #REQUIRED
                       instance  CDATA   #IMPLIED
                       function  CDATA   #REQUIRED
                       variants  CDATA   #IMPLIED>

  <!-- Until End: Wait until test case is stopped by user -->
  
  <!ELEMENT untilend EMPTY>
  <!ATTLIST untilend title    CDATA   #REQUIRED
                     wait     CDATA   #IMPLIED
                     variants CDATA   #IMPLIED>

  <!-- Tester Confirmation: Pops up a dialog for tester confirmation with yes or no-->

  <!ELEMENT testerconfirmation (#PCDATA)>
  <!ATTLIST testerconfirmation title         CDATA           #REQUIRED
                               wait          CDATA           #IMPLIED
                               passedbutton  (yes|no)        #IMPLIED
                               timeoutresult (passed|failed) #IMPLIED
                               variants      CDATA           #IMPLIED>

  <!-- Call of external application -->
  
  <!ELEMENT syscall (invoke, expectedexitcode?)>
  <!ATTLIST syscall title    CDATA   #REQUIRED
                    timeout  CDATA   #REQUIRED
                    variants CDATA   #IMPLIED>
  
  <!ELEMENT invoke (#PCDATA)>
  
  <!ELEMENT expectedexitcode (#PCDATA | eq | ne | lt | gt | le | ge | range | one_of | var)*>

  <!-- CANstress Configuration: configure an attached CANstress device -->

  <!ELEMENT canstress_configure (baseconfig, analogconfig?, digitalconfig?, trigger?, disturb?)>
  <!ATTLIST canstress_configure device  CDATA           #IMPLIED
                                state   (active | idle) #IMPLIED
                                title    CDATA          #REQUIRED
                                variants CDATA          #IMPLIED>

  <!ELEMENT baseconfig (#PCDATA)>

  <!ELEMENT analogconfig (resistor*)>
  <!ELEMENT resistor (#PCDATA)>
  <!ATTLIST resistor id (RH | RHL | RL | RSH | RSL) #REQUIRED>

  <!ELEMENT digitalconfig (btr0, btr1)>
  <!ELEMENT btr0 (#PCDATA)>
  <!ELEMENT btr1 (#PCDATA)>

  <!ELEMENT trigger (canmsg | range_msg)>
  <!ELEMENT range_msg (canmsg, canmsg)>

  <!ELEMENT disturb (limited_number | unlimited_number | continuous)>

  <!ELEMENT limited_number (bitsequence?)>
  <!ATTLIST limited_number count      CDATA #REQUIRED
                           cycles     CDATA #IMPLIED
                           cyclepause CDATA #IMPLIED>

  <!ELEMENT unlimited_number (bitsequence?)>

  <!ELEMENT continuous EMPTY>
  <!ATTLIST continuous mode     (while_trigger | until_stop | time_limited) #REQUIRED
                       type     (dominant | recessive | analog)             #REQUIRED
                       duration CDATA                                       #IMPLIED>

  <!ELEMENT bitsequence (#PCDATA)>
  <!ATTLIST bitsequence resolution (Bit | BTL) #IMPLIED>

  <!-- CANstress State: start again last CANstress configuration -->

  <!ELEMENT canstress_state EMPTY>
  <!ATTLIST canstress_state device CDATA           #IMPLIED
                            state  (active | idle) #REQUIRED
                            title  CDATA           #REQUIRED>

  <!-- J1939: Command / Response Pattern -->

  <!ELEMENT j1939_command_response (command?, response?)>
  <!ATTLIST j1939_command_response enableTP (0 | 1)    #IMPLIED
                                   timeout  CDATA      #IMPLIED
                                   title    CDATA      #REQUIRED
                                   variants CDATA      #IMPLIED>

  <!--J1939: Request / Response Pattern-->

  <!ELEMENT j1939_request_response (j1939_pg+)>
  <!ATTLIST j1939_request_response request (specific | global)      #IMPLIED
                                   timeout  CDATA                   #IMPLIED
                                   title    CDATA                   #REQUIRED
                                   expect (response | NACK | PACK)  #IMPLIED
                                   enableTP (0 | 1)                 #IMPLIED
                                   variants CDATA                   #IMPLIED>

  <!--J1939: Request ACL Pattern-->

  <!ELEMENT j1939_request_ACL (j1939_node+)>
  <!ATTLIST j1939_request_ACL timeout                 CDATA               #IMPLIED
                              title                   CDATA               #REQUIRED
                              allowNonConfiguredNodes (0 | 1)             #IMPLIED
                              allowDifferentAddress (0 | 1)               #IMPLIED
                              request (global | specific)                 #IMPLIED
                              requestSA               CDATA               #IMPLIED
                              variants                CDATA               #IMPLIED>

  <!--J1939: Conflict ACL Pattern-->

  <!ELEMENT j1939_conflict_ACL (j1939_node+)>
  <!ATTLIST j1939_conflict_ACL timeout  CDATA            #IMPLIED
                               title    CDATA            #REQUIRED
                               priority (lower | higher) #IMPLIED
                               expectSA CDATA            #IMPLIED
                               variants CDATA            #IMPLIED>

  <!--J1939: Commanded Address Pattern-->

  <!ELEMENT j1939_commanded_address (j1939_node?)>
  <!ATTLIST j1939_commanded_address timeout  CDATA   #IMPLIED
                                    title    CDATA   #REQUIRED
                                    caSA     CDATA   #IMPLIED
                                    newSA    CDATA   #IMPLIED
                                    variants CDATA   #IMPLIED>

<!-- Info Blocks: Test Engineer, Test Setup, System Under Test -->

  <!ELEMENT engineer (info+)>

  <!ELEMENT testsetup (info+)>
  <!ATTLIST testsetup variants CDATA #IMPLIED>

  <!ELEMENT sut (info+)>
  <!ATTLIST sut variants CDATA #IMPLIED>

<!-- Miscellaneous Information Block -->

  <!ELEMENT miscinfo (info+)>
  <!ATTLIST miscinfo title    CDATA #REQUIRED
                     variants CDATA #IMPLIED>
  
<!-- Additional Information in Arbitrary Format -->

  <!ELEMENT extendedinfo ANY>
  <!ATTLIST extendedinfo type     (html | text | other) #REQUIRED
                         variants CDATA                 #IMPLIED>

<!-- Comments -->

  <!ELEMENT comment (#PCDATA)>
  <!ATTLIST comment variants CDATA #IMPLIED>

<!-- Value Comments -->

  <!ELEMENT valuecomment (description, (cansignal | linsignal | flexraysignal | envvar | sysvar))>

<!-- Additional Elements -->

  <!ELEMENT info (name, description)>

  <!ELEMENT name (#PCDATA)>

  <!ELEMENT description (#PCDATA)>
  
  <!ELEMENT variants (variant*)>
  
  <!ELEMENT variant (#PCDATA)>
  <!ATTLIST variant name CDATA #REQUIRED>
  
  <!ELEMENT value (#PCDATA)>  
  <!ATTLIST value variants CDATA #REQUIRED>  
  
  <!ELEMENT externalref (#PCDATA)>
  <!ATTLIST externalref type  (url | doors) #REQUIRED 
                        title CDATA         #IMPLIED>
