Files
JIMRI/xml/DTD/decoder-config.dtd
T
2026-06-17 14:00:51 +02:00

439 lines
25 KiB
DTD

<!-- Defines XML documenting a type or types of DCC decoder as -->
<!-- a component, esp. information on how to program it. -->
<!-- This DTD is part of JMRI. Copyright 2001-2007. -->
<!-- -->
<!-- JMRI is free software; you can redistribute it and/or modify it under -->
<!-- the terms of version 2 of the GNU General Public License as published -->
<!-- by the Free Software Foundation. See the "COPYING" file for a copy -->
<!-- of this license. -->
<!-- -->
<!-- JMRI is distributed in the hope that it will be useful, but WITHOUT -->
<!-- ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -->
<!-- FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -->
<!-- for more details. -->
<!ELEMENT decoder-config (version*, decoder, pane*)>
<!-- Each decoder configuration XML file (decoder-config) consists of information -->
<!-- about the file itself (version element), about the decoder (decoder element) -->
<!-- and optional recommendations about how to display it to the user (pane element(s)) -->
<!ATTLIST decoder-config xmlns:xi CDATA #FIXED "http://www.w3.org/2001/XInclude">
<!-- Suppress panes with no variables? -->
<!ATTLIST decoder-config showEmptyPanes (yes | no | default ) "default">
<!-- The version element identifies the status of the contents of a specific file. -->
<!-- Note that the attributes do not enforce any particular format at this time. -->
<!-- Similar clauses appear in other DTD files; check consistency. -->
<!ELEMENT version EMPTY>
<!ATTLIST version author CDATA #IMPLIED>
<!ATTLIST version version CDATA #IMPLIED>
<!ATTLIST version lastUpdated CDATA #IMPLIED>
<!ATTLIST version comment CDATA #IMPLIED>
<!-- The decoder element defines the decoder itself-->
<!ELEMENT decoder (family, programming, variables, resets*)>
<!-- The decoder definition (decoder element) consists of information on the -->
<!-- family and models being defined (family element), on available programming -->
<!-- methods (programming element), on the variables that can be configured in -->
<!-- decoder (variables element), and the methods for resetting the decoder -->
<!-- (resets element) -->
<!-- The family element identifies the decoder. It must be kept consistent -->
<!-- with the family & decoder elements in the decoderIndex-config.dtd; -->
<!-- DecoderPro does this automatically via the "recreate decoder index" tool -->
<!ELEMENT family (productIDalgorithm*, model*, functionlabels?) >
<!ATTLIST family name CDATA #REQUIRED> <!-- family name used for identification to user -->
<!ATTLIST family mfg CDATA #REQUIRED> <!-- manufacturer name used for identification to user -->
<!-- for reliable identification, the mfg name should match one of -->
<!-- the conventional ones in the common list, normally in decoderIndex.xml -->
<!ATTLIST family type ( stationary | locomotive ) "locomotive">
<!ATTLIST family comment CDATA #IMPLIED>
<!-- lowVersionID, highVersionID define an inclusive range, with both endpoints included, -->
<!-- for matching with CV7 to identify the decoder family -->
<!-- If only one is specified, only that single value is acceptable -->
<!-- Note that these are defaults for the 'model' attributes of same name, not an override -->
<!ATTLIST family lowVersionID CDATA #IMPLIED > <!-- CV07 value, default blank means any -->
<!ATTLIST family highVersionID CDATA #IMPLIED > <!-- CV07 value, default blank means any -->
<!-- The productIDalgorithm element defines additional ways to identify one of the decoders defined here -->
<!ELEMENT productIDalgorithm (none | simple | simpleIndexed | pairedMethodA | indexedPairMethodA) >
<!-- "none": productID is not used to match this decoder -->
<!ELEMENT none EMPTY >
<!-- "simple": read the productID from additional CV to identify this decoder -->
<!ELEMENT simple EMPTY >
<!ATTLIST simple CV CDATA #REQUIRED >
<!-- "simpleIndexed": read the productID from an indexed CV to identify this decoder -->
<!ELEMENT simpleIndexed (indexedProductID) >
<!-- "pairedMethodA": read the product ID from two additional CVs to identify this decoder -->
<!ELEMENT pairedMethodA EMPTY >
<!ATTLIST pairedMethodA CV1 CDATA #REQUIRED >
<!ATTLIST pairedMethodA CV2 CDATA #REQUIRED >
<!-- "indexedPairMethodA": read the productID from two indexed CVs to identify this decoder -->
<!ELEMENT indexedPairMethodA (indexedProductID, indexedProductID) >
<!-- The indexedProductID is used by the simpleIndexed and indexedPairMethodA -->
<!-- identification methods to represent the process of writing one or two index -->
<!-- CV values, then reading a productID -->
<!ELEMENT indexedProductID EMPTY >
<!ATTLIST indexedProductID use (1|2|3|4) "1" >
<!ATTLIST indexedProductID PICV CDATA #REQUIRED >
<!ATTLIST indexedProductID PIval CDATA #REQUIRED >
<!ATTLIST indexedProductID SICV CDATA #IMPLIED >
<!ATTLIST indexedProductID SIval CDATA #IMPLIED >
<!ATTLIST indexedProductID prodIdCV CDATA #REQUIRED >
<!-- Multiple models can exist within a family, each defining slightly different decoders -->
<!ELEMENT model (versionCV*, output*, size?)* >
<!ATTLIST model model CDATA #REQUIRED> <!-- model name used for identification -->
<!ATTLIST model options CDATA #IMPLIED> <!-- comma-sep list of included options, but default is all on -->
<!ATTLIST model comment CDATA #IMPLIED>
<!-- numFns and numOuts interact with the minFn and minOut attributes in a decoder file -->
<!-- to customize the decoder file to a specific decoder package within the family. Note -->
<!-- that output leads, e.g. hardware, are the usual thing to vary; that's represented by -->
<!-- numOut. The number of cab functions is more of a software thing, and varies more -->
<!-- rarely; its represented by numFns -->
<!ATTLIST model numFns CDATA #IMPLIED> <!-- number of cab functions, default is all -->
<!ATTLIST model numOuts CDATA #IMPLIED> <!-- number of output leads, default is all -->
<!-- lowVersionID, highVersionID define an inclusive range, with both endpoints included. -->
<!-- If only one is specified, only that single value is acceptable -->
<!ATTLIST model lowVersionID CDATA #IMPLIED > <!-- CV07 value, default blank means any -->
<!ATTLIST model highVersionID CDATA #IMPLIED > <!-- CV07 value, default blank means any -->
<!ATTLIST model productID CDATA #IMPLIED > <!-- default blank means any -->
<!-- Physical specifications -->
<!ATTLIST model maxInputVolts CDATA #IMPLIED > <!-- default blank means NMRA spec -->
<!ATTLIST model maxMotorCurrent CDATA #IMPLIED > <!-- motor only -->
<!ATTLIST model maxTotalCurrent CDATA #IMPLIED > <!-- motor plus functions -->
<!ATTLIST model formFactor CDATA #IMPLIED > <!-- mfg name for specific shape, etc -->
<!-- NMRA Conformance status -->
<!ATTLIST model nmraWarrant (yes|no) "no" >
<!ATTLIST model nmraWarrantStart CDATA #IMPLIED > <!-- issue date of current warrant, if known -->
<!ATTLIST model nmraWarrantEnd CDATA #IMPLIED > <!-- end date of current warrant, if any -->
<!-- wiring specification -->
<!ATTLIST model connector ( unspecified | NMRAsmall | 9pin | NMRAmedium | NMRAlarge | 21MTC | PluX8 |
PluX12 | PluX16 | PluX22 | NEM651 | NEM652 | 16pin | 21pin | other ) "unspecified" >
<!-- type of extended function packets accepted (not all combinations valid) -->
<!ATTLIST model extFnsNmraF13 ( no | yes ) "no" > <!-- RP packets for F13-F20 -->
<!ATTLIST model extFnsNmraBSC ( no | yes ) "no" > <!-- "Binary State Control" -->
<!ATTLIST model extFnsMRC ( no | yes ) "no" > <!-- Model Rectifier Corp "extension" -->
<!ELEMENT versionCV EMPTY >
<!-- lowVersionID, highVersionID define an inclusive range, with both endpoints included. -->
<!-- If only one is specified, only that single value is acceptable -->
<!ATTLIST versionCV lowVersionID CDATA #IMPLIED > <!-- CV07 value, default blank means any -->
<!ATTLIST versionCV highVersionID CDATA #IMPLIED > <!-- CV07 value, default blank means any -->
<!ATTLIST versionCV comment CDATA #IMPLIED>
<!-- Define an output connection -->
<!-- In some definitions, it's convenient to define a 'virtual' output such as a sound generator -->
<!ELEMENT output EMPTY >
<!ATTLIST output name CDATA #REQUIRED> <!-- output name used for identification -->
<!ATTLIST output label CDATA #IMPLIED> <!-- optional label, e.g. wire color -->
<!ATTLIST output comment CDATA #IMPLIED>
<!ATTLIST output maxcurrent CDATA #IMPLIED>
<!ATTLIST output connection ( plug | solder | wire | other | unspecified ) "unspecified" >
<!-- Define the physical size of the decoder -->
<!ELEMENT size EMPTY>
<!ATTLIST size length CDATA #IMPLIED >
<!ATTLIST size width CDATA #IMPLIED >
<!ATTLIST size height CDATA #IMPLIED >
<!ATTLIST size units ( inches | cm | mm ) #REQUIRED >
<!ATTLIST size comment CDATA #IMPLIED >
<!-- The programming element describes the decoders programming capabilities -->
<!ELEMENT programming EMPTY>
<!ATTLIST programming direct ( no | yes | bitOnly | byteOnly ) "no" > <!-- direct mode support -->
<!ATTLIST programming paged ( no | yes ) "no" > <!-- paged mode support -->
<!ATTLIST programming register ( no | yes ) "no" > <!-- register mode support -->
<!ATTLIST programming ops ( no | yes ) "no" > <!-- operation mode write support -->
<!ATTLIST programming transpRead ( no | yes ) "no" > <!-- ops mode readback using Digitrax transponding -->
<!ATTLIST programming bidirRead ( no | yes ) "no" > <!-- ops mode readback using NMRA bidirectional -->
<!ATTLIST programming opsaccbasic ( no | yes ) "no" > <!-- accessory ops mode write using basic mode-->
<!ATTLIST programming opsaccextended ( no | yes ) "no" > <!-- accessory ops mode write using extended mode -->
<!ATTLIST programming opsacclegacy ( no | yes ) "no" > <!-- accessory ops mode write using legacy mode -->
<!ATTLIST programming sv ( no | yes ) "no" > <!-- SV Protocol support -->
<!ATTLIST programming comment CDATA #IMPLIED>
<!-- The variables (note plural) element defines the list of identified variables -->
<!-- and how they are encoded into CVs -->
<!-- XInclude can be used to include these as nested variables elements -->
<!ELEMENT variables (variable | constant | ivariable | xi:include | variables)*>
<!-- Each variable element defines one item that the user will want to configure -->
<!ELEMENT variable (enumVal | decVal | hexVal | speedTableVal |
longAddressVal | shortAddressVal | splitVal | compositeVal) >
<!ATTLIST variable label CDATA #REQUIRED> <!-- name manufacturer used to identify this feature -->
<!ATTLIST variable CV CDATA #IMPLIED> <!-- CV number containing value, if single CV -->
<!ATTLIST variable mask CDATA "VVVVVVVV"> <!-- mask of bits within CV -->
<!-- mask is up to 16 characters long, each -->
<!-- representing one bit in the result -->
<!-- valid chars: -->
<!-- X bit not used -->
<!-- V bit used -->
<!ATTLIST variable readOnly (yes | no) "no"> <!-- value is read only, do not try to write -->
<!ATTLIST variable infoOnly (yes | no) "no"> <!-- value doesn't really exist in decoder, for info only -->
<!ATTLIST variable opsOnly (yes | no) "no"> <!-- only available in ops mode, not on service track -->
<!ATTLIST variable writeOnly (yes | no) "no"> <!-- value is write only, do not try to read -->
<!ATTLIST variable default CDATA #IMPLIED > <!-- default value when decoder reset -->
<!ATTLIST variable comment CDATA #IMPLIED >
<!ATTLIST variable item CDATA #IMPLIED > <!-- item name for this function if different -->
<!ATTLIST variable minFn CDATA #IMPLIED > <!-- min number of fns in decoder for this to be valid -->
<!ATTLIST variable minOut CDATA #IMPLIED > <!-- min number of outputs in decoder for this to be valid -->
<!ATTLIST variable inOptions CDATA #IMPLIED > <!-- variable present if any of the options are present -->
<!ATTLIST variable tooltip CDATA #IMPLIED > <!-- variable-specific tooltip, see also programmer DTD -->
<!ATTLIST variable include CDATA #IMPLIED > <!-- comma-sep list of models that include this; must be empty or match for variable to be used -->
<!ATTLIST variable exclude CDATA #IMPLIED > <!-- comma-sep list of models that exclude this; must be empty or not for variable to be used -->
<!-- variables come in a number of forms: -->
<!-- decVal: a decimal value is used, subject to mask and limit requirements -->
<!-- hexVal: a hexadecimal value is used, subject to mask and limit requirements -->
<!-- enumVal: a fixed set of choices is defined, each corresponding to a specific value -->
<!-- splitVal: a decimal value, but stored across two CVs using some simple calculations -->
<!-- shortAddressVal: NMRA short address, including its unique behaviors -->
<!-- longAddressVal: NMRA long address, including its unique behaviors -->
<!-- speedTableVal: NMRA speed table -->
<!-- ivariable elements involve indexed access to the underlying data, -->
<!-- but are otherwise similar to variable elements -->
<!ELEMENT ivariable (ienumVal | indexedVal | indexedPairVal) >
<!ATTLIST ivariable label CDATA #REQUIRED> <!-- manufacturer's name used for identification -->
<!ATTLIST ivariable CVname CDATA #REQUIRED> <!-- CV name of an indexed value -->
<!ATTLIST ivariable CV CDATA #REQUIRED> <!-- CV number containing value -->
<!ATTLIST ivariable PI CDATA #REQUIRED> <!-- index value for PI -->
<!ATTLIST ivariable SI CDATA #IMPLIED > <!-- index value for SI -->
<!ATTLIST ivariable mask CDATA "VVVVVVVV"> <!-- mask of bits within CV -->
<!-- mask is up to 16 characters long, each -->
<!-- representing one bit in the result -->
<!-- valid chars: -->
<!-- X not used -->
<!-- V used bits -->
<!ATTLIST ivariable readOnly (yes | no) "no">
<!ATTLIST ivariable infoOnly (yes | no) "no">
<!ATTLIST ivariable opsOnly (yes | no) "no">
<!ATTLIST ivariable writeOnly (yes | no) "no">
<!ATTLIST ivariable default CDATA #IMPLIED >
<!ATTLIST ivariable comment CDATA #IMPLIED >
<!ATTLIST ivariable item CDATA #IMPLIED > <!-- item name for this function if different -->
<!ATTLIST ivariable minFn CDATA #IMPLIED > <!-- min number of fns in decoder for this to be valid -->
<!ATTLIST ivariable minOut CDATA #IMPLIED > <!-- min number of fns in decoder for this to be valid -->
<!ATTLIST ivariable inOptions CDATA #IMPLIED > <!-- variable present if any of the options are present -->
<!ATTLIST ivariable tooltip CDATA #IMPLIED > <!-- variable-specific tooltip, see also programmer DTD -->
<!ATTLIST ivariable include CDATA #IMPLIED > <!-- comma-sep list of models that include this; must be empty or match for variable to be used -->
<!ATTLIST ivariable exclude CDATA #IMPLIED > <!-- comma-sep list of models that exclude this; must be empty or not for variable to be used -->
<!-- enumVal, decVal, hexval, speedTableVal, longAddressVal are constraints -->
<!-- on both the possible values and the preferred way to present them -->
<!ELEMENT decVal EMPTY>
<!ATTLIST decVal min CDATA "0" > <!-- smallest acceptable value -->
<!ATTLIST decVal max CDATA "255" > <!-- largest acceptable value -->
<!ATTLIST decVal comment CDATA #IMPLIED>
<!ELEMENT hexVal EMPTY>
<!ATTLIST hexVal min CDATA "0" > <!-- smallest acceptable value -->
<!ATTLIST hexVal max CDATA "ff" > <!-- largest acceptable value -->
<!ATTLIST hexVal comment CDATA #IMPLIED>
<!ELEMENT enumVal (enumChoice*) >
<!ATTLIST enumVal comment CDATA #IMPLIED>
<!-- an enumVal variable can take on any of a number of specific choices, with -->
<!-- each choice defined by a user-readable name, and a value -->
<!ELEMENT enumChoice EMPTY>
<!ATTLIST enumChoice choice CDATA #REQUIRED > <!-- name of this choice -->
<!ATTLIST enumChoice value CDATA #IMPLIED > <!-- if present, must be numeric -->
<!-- if not present, use 1 more than last one -->
<!ATTLIST enumChoice comment CDATA #IMPLIED >
<!ELEMENT ienumVal (ienumChoice*) >
<!ATTLIST ienumVal comment CDATA #IMPLIED>
<!ELEMENT ienumChoice EMPTY>
<!ATTLIST ienumChoice choice CDATA #REQUIRED >
<!ATTLIST ienumChoice value CDATA #IMPLIED > <!-- if present, must be numeric -->
<!ATTLIST ienumChoice include CDATA #IMPLIED > <!-- comma-sep list of models that include this; must be empty or match for variable to be used -->
<!ATTLIST ienumChoice exclude CDATA #IMPLIED > <!-- comma-sep list of models that exclude this; must be empty or not for variable to be used -->
<!ATTLIST ienumChoice comment CDATA #IMPLIED >
<!ELEMENT compositeVal (compositeChoice*) >
<!ATTLIST compositeVal comment CDATA #IMPLIED>
<!-- an compositeChoiceVal variable can take on any of a number of specific choices, with -->
<!-- each choice defined by a user-readable name, and a set of values for other vars -->
<!ELEMENT compositeChoice (compositeSetting*)>
<!ATTLIST compositeChoice choice CDATA #REQUIRED > <!-- name of this choice -->
<!ATTLIST compositeChoice comment CDATA #IMPLIED >
<!ELEMENT compositeSetting EMPTY>
<!ATTLIST compositeSetting label CDATA #REQUIRED > <!-- label of the variable to set -->
<!ATTLIST compositeSetting value CDATA #REQUIRED > <!-- numerical value to set -->
<!ELEMENT speedTableVal (speedTableEntry*) >
<!ATTLIST speedTableVal entries CDATA "28"> <!-- number of entries/CVs in table -->
<!ATTLIST speedTableVal comment CDATA #IMPLIED>
<!ATTLIST speedTableVal min CDATA "0" > <!-- smallest acceptable value -->
<!ATTLIST speedTableVal max CDATA "255" > <!-- largest acceptable value -->
<!ELEMENT speedTableEntry EMPTY>
<!ATTLIST speedTableEntry step CDATA #REQUIRED >
<!ATTLIST speedTableEntry value CDATA #REQUIRED >
<!ATTLIST speedTableEntry comment CDATA #IMPLIED>
<!ELEMENT longAddressVal EMPTY >
<!ATTLIST longAddressVal comment CDATA #IMPLIED>
<!ELEMENT shortAddressVal (shortAddressChanges*)>
<!ATTLIST shortAddressVal comment CDATA #IMPLIED>
<!-- The shortAddressChanges element(s) define which CVs are reset -->
<!-- when the short address CV is changed. (This is an NMRA-defined -->
<!-- behavior, but not all decoders implement it the same) -->
<!ELEMENT shortAddressChanges EMPTY>
<!ATTLIST shortAddressChanges cv CDATA #REQUIRED>
<!ELEMENT splitVal EMPTY >
<!ATTLIST splitVal highCV CDATA #REQUIRED> <!-- CV to hold high-order bits -->
<!ATTLIST splitVal min CDATA "0" > <!-- smallest acceptable value -->
<!ATTLIST splitVal max CDATA "255" >
<!ATTLIST splitVal default CDATA #IMPLIED>
<!ATTLIST splitVal factor CDATA "1"> <!-- cv*factor+offset is variable value -->
<!ATTLIST splitVal offset CDATA "0">
<!ATTLIST splitVal comment CDATA #IMPLIED>
<!ATTLIST splitVal upperMask CDATA "VVVVVVVV"> <!-- mask of bits within upper CV -->
<!ELEMENT indexedVal EMPTY >
<!ATTLIST indexedVal min CDATA "0" > <!-- smallest acceptable value -->
<!ATTLIST indexedVal max CDATA "255" > <!-- largest acceptable value -->
<!ATTLIST indexedVal comment CDATA #IMPLIED>
<!ELEMENT indexedPairVal EMPTY >
<!ATTLIST indexedPairVal highCVname CDATA #REQUIRED> <!-- CV name of an indexed value -->
<!ATTLIST indexedPairVal min CDATA "0" > <!-- smallest acceptable value -->
<!ATTLIST indexedPairVal max CDATA "255" >
<!ATTLIST indexedPairVal default CDATA #IMPLIED>
<!ATTLIST indexedPairVal factor CDATA "1"> <!-- cv*factor+offset is variable value -->
<!ATTLIST indexedPairVal offset CDATA "0">
<!ATTLIST indexedPairVal comment CDATA #IMPLIED>
<!ATTLIST indexedPairVal upperMask CDATA "VVVVVVVV"> <!-- mask of bits within upper CV -->
<!-- A constant represents a fixed value, but is treated -->
<!-- much like a variable at runtime -->
<!ELEMENT constant EMPTY >
<!ATTLIST constant label CDATA #REQUIRED> <!-- Mfg's label, generally displayed at the item label -->
<!ATTLIST constant default CDATA #IMPLIED>
<!ATTLIST constant comment CDATA #IMPLIED>
<!ATTLIST constant item CDATA #IMPLIED> <!-- item name for this function if different from label -->
<!ATTLIST constant minFn CDATA #IMPLIED> <!-- min number of fns in decoder for this to be valid -->
<!ATTLIST constant minOut CDATA #IMPLIED> <!-- min number of fns in decoder for this to be valid -->
<!ATTLIST constant inOptions CDATA #IMPLIED> <!-- variable present if any of the options are present -->
<!-- An index constant represents a fixed value, but is treated -->
<!-- much like a variable at runtime -->
<!ELEMENT iconstant EMPTY >
<!ATTLIST iconstant label CDATA #REQUIRED> <!-- Mfg's label, generally displayed at the item label -->
<!ATTLIST iconstant default CDATA #IMPLIED>
<!ATTLIST iconstant comment CDATA #IMPLIED>
<!ATTLIST iconstant item CDATA #IMPLIED> <!-- item name for this function if different from label -->
<!ATTLIST iconstant minFn CDATA #IMPLIED> <!-- min number of fns in decoder for this to be valid -->
<!ATTLIST iconstant minOut CDATA #IMPLIED> <!-- min number of fns in decoder for this to be valid -->
<!ATTLIST iconstant inOptions CDATA #IMPLIED> <!-- variable present if any of the options are present -->
<!-- The resets element defines the way that the decoder can be reset to factory conditions -->
<!ELEMENT resets (factReset*, ifactReset*)>
<!ELEMENT factReset EMPTY >
<!ATTLIST factReset label CDATA #REQUIRED> <!-- manufacturer's name used for identification -->
<!ATTLIST factReset CV CDATA #REQUIRED> <!-- CV number containing value -->
<!ATTLIST factReset default CDATA #REQUIRED>
<!ATTLIST factReset comment CDATA #IMPLIED >
<!ATTLIST factReset item CDATA #IMPLIED > <!-- item name for this function if different -->
<!ELEMENT ifactReset EMPTY >
<!ATTLIST ifactReset label CDATA #REQUIRED> <!-- manufacturer's name used for identification -->
<!ATTLIST ifactReset CVname CDATA #REQUIRED> <!-- CV name of an indexed value -->
<!ATTLIST ifactReset CV CDATA #REQUIRED> <!-- CV number containing value -->
<!ATTLIST ifactReset PI CDATA #REQUIRED> <!-- index value for PI -->
<!ATTLIST ifactReset SI CDATA #IMPLIED > <!-- index value for SI -->
<!ATTLIST ifactReset default CDATA #REQUIRED>
<!ATTLIST ifactReset comment CDATA #IMPLIED >
<!ATTLIST ifactReset item CDATA #IMPLIED > <!-- item name for this function if different -->
<!-- The pane elements define the presentation of groups of variables -->
<!-- This is present so that the person writing the decoder definition -->
<!-- can also express preferences about how the information should be displayed -->
<!-- to the user. -->
<!ELEMENT pane ((column | display | label | separator )*)>
<!ATTLIST pane name CDATA #REQUIRED> <!-- Name used for identification -->
<!ATTLIST pane nameFmt (label | item) "label"> <!-- Specify which variable attribute to show in GUI -->
<!ATTLIST pane comment CDATA #IMPLIED >
<!-- The column element describes each column in the pane -->
<!ELEMENT column ((row | display | label | separator | cvtable | fnmapping | dccaddress )*)>
<!-- The row element describes each row in the pane -->
<!ELEMENT row ((column | display | label | separator | cvtable | fnmapping | dccaddress )*)>
<!-- Insert a separator line -->
<!ELEMENT separator EMPTY>
<!-- Insert a cv table -->
<!ELEMENT cvtable EMPTY>
<!-- Insert a function mapping display/edit panel -->
<!ELEMENT fnmapping EMPTY>
<!-- Insert a variable that handles long & short dcc addresses -->
<!ELEMENT dccaddress EMPTY>
<!-- The label items describes an arbitrary text string -->
<!ELEMENT label EMPTY >
<!ATTLIST label label CDATA #REQUIRED>
<!ATTLIST label comment CDATA #IMPLIED >
<!-- These display attributes define each identified variables -->
<!-- in the column and how they are displayed -->
<!ELEMENT display EMPTY >
<!ATTLIST display item CDATA #REQUIRED> <!-- Name used for identification -->
<!ATTLIST display label CDATA #IMPLIED> <!-- optional, default is from name -->
<!ATTLIST display tooltip CDATA #IMPLIED> <!-- optional, default is from variable tooltip -->
<!ATTLIST display layout ( left | above | below | right ) "left" > <!-- label position -->
<!ATTLIST display format ( default | vslider | hslider | hslider-percent | radiobuttons | checkbox |
onradiobutton | offradiobutton) "default" >
<!ATTLIST display comment CDATA #IMPLIED >
<!ELEMENT functionlabels (functionlabel*) >
<!ELEMENT functionlabel (#PCDATA) >
<!ATTLIST functionlabel num CDATA #REQUIRED>
<!ATTLIST functionlabel lockable (true | false) "true">
<!-- Define XInclude element -->
<!ELEMENT xi:include (xi:fallback?) >
<!ATTLIST xi:include
xmlns:xi CDATA #FIXED "http://www.w3.org/2001/XInclude"
href CDATA #IMPLIED
parse (xml|text) "xml"
xpointer CDATA #IMPLIED
encoding CDATA #IMPLIED
accept CDATA #IMPLIED
accept-language CDATA #IMPLIED >
<!ELEMENT xi:fallback ANY>
<!ATTLIST xi:fallback
xmlns:xi CDATA #FIXED "http://www.w3.org/2001/XInclude" >