This section presents the FSML DTD. The DTD defines the grammar for FSML and provides a means to validate an FSML document's structure and syntax. However, an FSML document that is valid according to the DTD is not necessarily a valid FSML document. The DTD does not, for example, identify parameter references that are made before the value of the referenced parameter is set. It is the responsibility of the FSML processor to perform additional validation on the document.
<!--Header
FSML.dtd (File Specification Markup Language)
File Description: XML DTD for representing a text file's structure
Version: 2.9
Date of Last Revision: February 9, 2004
Contact: Eric Wood(wood@ship.saic.com)
Namespace: none
Notes: This revision provides the ability to set whether
blank values should be ignored or reported as an error
-->
<!ENTITY % FILE_DATA_CM
"
(Integer | Float | String | Array)+
">
<!ENTITY % DATA_CM
"
EMPTY
" >
<!ENTITY % DATA_ATT
"
name ID #REQUIRED
description CDATA #IMPLIED
units CDATA #IMPLIED
group CDATA #IMPLIED
" >
<!ENTITY % FILE_STRUCTURE_CM
"
(Record | Loop | Condition | StaticText)+
">
<!ENTITY % OPS
"
(GT | LT | EQ | NE)
">
<!ENTITY % RECORD_CM
"
SetValue | SetDims | SetSize | AddValue | Loop | Condition | Separator
">
<!ENTITY % OPERATION_ATTS
"
target IDREF #REQUIRED
">
<!ENTITY % MUTATOR_ATTS
"
%OPERATION_ATTS;
">
<!ELEMENT FileTypeSpecification (FileData,FileStructure)>
<!ATTLIST FileTypeSpecification
type CDATA #IMPLIED
description CDATA #IMPLIED
lineCommentStart CDATA #IMPLIED
blockCommentStart CDATA #IMPLIED
blockCommentEnd CDATA #IMPLIED
ignoreBlankLines (true | false) "true"
delimiters CDATA #IMPLIED
ignoreMissingValues (true | false) "false">
<!ELEMENT FileData %FILE_DATA_CM;>
<!ELEMENT Integer %DATA_CM; >
<!ATTLIST Integer %DATA_ATT; >
<!ELEMENT Float %DATA_CM; >
<!ATTLIST Float %DATA_ATT; >
<!ELEMENT String %DATA_CM; >
<!ATTLIST String %DATA_ATT; >
<!ELEMENT Array %DATA_CM; >
<!ATTLIST Array %DATA_ATT;
ndims CDATA #REQUIRED
dims CDATA #REQUIRED
baseType (String | Integer | Float) #REQUIRED >
<!ELEMENT Dim EMPTY >
<!ATTLIST Dim
size CDATA #IMPLIED >
<!ELEMENT FileStructure %FILE_STRUCTURE_CM;>
<!ELEMENT StaticText (#PCDATA) >
<!ELEMENT Record (%RECORD_CM;)+>
<!ATTLIST Record
ignoreOnRead (true | false) #REQUIRED
format CDATA #IMPLIED
ignoreFormatOnRead (true | false) #IMPLIED
>
<!ELEMENT SetValue EMPTY >
<!ATTLIST SetValue
%MUTATOR_ATTS;
>
<!ELEMENT AddValue EMPTY >
<!ATTLIST AddValue
%MUTATOR_ATTS;
>
<!ELEMENT SetDims EMPTY >
<!ATTLIST SetDims
%OPERATION_ATTS;
dims CDATA #REQUIRED
>
<!ELEMENT SetSize EMPTY >
<!ATTLIST SetSize
%OPERATION_ATTS;
dimIndex CDATA #REQUIRED
size CDATA #REQUIRED
>
<!ELEMENT Loop (%RECORD_CM; | Record)+>
<!ATTLIST Loop
loopVariable CDATA #IMPLIED
start CDATA #REQUIRED
end CDATA #REQUIRED
incr CDATA #REQUIRED
check CDATA #IMPLIED
operator %OPS; #IMPLIED
checkValue CDATA #IMPLIED
stopOnEof (true | false) #IMPLIED
doOnce (true | false) #IMPLIED
>
<!ELEMENT Condition (%RECORD_CM; | Record | StaticText)+>
<!ATTLIST Condition
check CDATA #REQUIRED
operator %OPS; #REQUIRED
checkValue CDATA #REQUIRED
>
<!ELEMENT Separator EMPTY>
<!ATTLIST Separator
ignoreOnRead (true | false) #REQUIRED
string CDATA #REQUIRED
repeat CDATA #IMPLIED
>