<!ELEMENT DataType (Identification?, VersionInfo+, CompilerInfo?, ASN1Tag?, (DirectlyDerivedType | EnumeratedType | SubrangeType | ArrayType | StructuredType))>
<!ATTLIST DataType
 Name CDATA #REQUIRED
 Comment CDATA #IMPLIED>
<!ELEMENT Identification EMPTY>
<!ATTLIST Identification
 Standard CDATA #IMPLIED
 Classification CDATA #IMPLIED
 ApplicationDomain CDATA #IMPLIED
 Function CDATA #IMPLIED
 Type CDATA #IMPLIED
 Description CDATA #IMPLIED>
<!ELEMENT VersionInfo EMPTY>
<!ATTLIST VersionInfo
 Organization CDATA #REQUIRED
 Version CDATA #REQUIRED
 Author CDATA #REQUIRED
 Date CDATA #REQUIRED
 Remarks CDATA #IMPLIED>
<!ELEMENT ASN1Tag EMPTY>
<!ATTLIST ASN1Tag
 Class (UNIVERSAL | APPLICATION | CONTEXT | PRIVATE) #IMPLIED
 Number CDATA #REQUIRED>
<!ELEMENT CompilerInfo (Compiler*, Import*)>
<!ATTLIST CompilerInfo
  packageName CDATA #IMPLIED
  header CDATA #IMPLIED
  classdef CDATA #IMPLIED>
<!ELEMENT Compiler EMPTY>
<!ATTLIST Compiler
 Language (Java | Cpp | C | Other) #REQUIRED
 Vendor CDATA #REQUIRED
 Product CDATA #REQUIRED
 Version CDATA #REQUIRED>
 <!ELEMENT Import EMPTY>
<!ATTLIST Import
  declaration CDATA #IMPLIED>
<!ELEMENT DirectlyDerivedType EMPTY>
<!ATTLIST DirectlyDerivedType
 BaseType (BOOL | SINT | INT | DINT | LINT | USINT | UINT | UDINT | ULINT | REAL | LREAL | TIME | DATE | TIME_OF_DAY | TOD | DATE_AND_TIME | DT | STRING | BYTE |WORD | DWORD |LWORD | WSTRING) #REQUIRED
 InitialValue CDATA #IMPLIED
 Comment CDATA #IMPLIED>
<!ELEMENT EnumeratedType (EnumeratedValue+)>
<!ATTLIST EnumeratedType
 InitialValue CDATA #IMPLIED
 Comment CDATA #IMPLIED>
<!ELEMENT EnumeratedValue EMPTY>
<!ATTLIST EnumeratedValue
 Name CDATA #REQUIRED
 Comment CDATA #IMPLIED>
<!ELEMENT SubrangeType (Subrange)>
<!ATTLIST SubrangeType
 BaseType (SINT|INT|DINT|LINT|USINT|UINT|UDINT|ULINT) #REQUIRED
 InitialValue CDATA #IMPLIED
 Comment CDATA #IMPLIED>
<!ELEMENT Subrange EMPTY>
<!ATTLIST Subrange
 LowerLimit CDATA #REQUIRED
 UpperLimit CDATA #REQUIRED>
<!ELEMENT ArrayType (Subrange+)>
<!ATTLIST ArrayType
 BaseType CDATA #REQUIRED
 InitialValues CDATA #IMPLIED
 Comment CDATA #IMPLIED>
<!ELEMENT StructuredType (VarDeclaration|SubrangeVarDeclaration)+>
<!ATTLIST StructuredType
 Comment CDATA #IMPLIED>
<!ELEMENT VarDeclaration EMPTY >
<!ATTLIST VarDeclaration
 Name CDATA #REQUIRED
 Type CDATA #REQUIRED
 ArraySize CDATA #IMPLIED
 InitialValue CDATA #IMPLIED
 Comment CDATA #IMPLIED>
<!ELEMENT SubrangeVarDeclaration (Subrange+) >
<!ATTLIST SubrangeVarDeclaration
 Name CDATA #REQUIRED
 Type (SINT|INT|DINT|LINT|USINT|UINT|UDINT|ULINT) #REQUIRED
 InitialValue CDATA #IMPLIED
 Comment CDATA #IMPLIED>