Bug in FIXML 4.4 DTD - currency code and MIC attributes

Imported from previous forum

I have discovered a bug in the 18 June DTD associated with the way attributes are defined for Currency Codes and Market Identifier Codes.

The problem is with the definition of the fields containing these codes as attributes. e.g. the Ccy attribute list is defined like this:

<!ATTLIST Ccy
FIXTag CDATA #FIXED '15’
DataType CDATA #FIXED 'Currency’
FullName CDATA #FIXED 'Currency’
ComponentType CDATA #FIXED 'Field’
Value ( %isoCurrencyCode; ) #REQUIRED >

The problem here is that entity isoCurrencyCode is defined
<!ENTITY % isoCountryCode "%nmtoken;">
and nmtoken
<!ENTITY % nmtoken "CDATA">

This makes the CCy attribute list look like this:

<!ATTLIST Ccy
FIXTag CDATA #FIXED '15’
DataType CDATA #FIXED 'Currency’
FullName CDATA #FIXED 'Currency’
ComponentType CDATA #FIXED 'Field’
Value ( CDATA ) #REQUIRED >

Which means that the value attribute of Ccy must only contain the string "CDATA" and causes valid FIXML to be invalidated. Instead, the attribute definition should look something like this:

<!ATTLIST Ccy
FIXTag CDATA #FIXED '15’
DataType CDATA #FIXED 'Currency’
FullName CDATA #FIXED 'Currency’
ComponentType CDATA #FIXED 'Field’
Value CDATA #REQUIRED >

The most obvious fix would be to remove the brackets around the isoCurrencyCode entity reference:

<!ATTLIST Ccy
FIXTag CDATA #FIXED '15’
DataType CDATA #FIXED 'Currency’
FullName CDATA #FIXED 'Currency’
ComponentType CDATA #FIXED 'Field’
Value %isoCurrencyCode; #REQUIRED >

Then if someone wants to explicitly validate against a currency list they need only change the entity from this:
<!ENTITY % isoCountryCode "%nmtoken;">
to something like this:
<!ENTITY % isoCountryCode "(USD | GBP | EUR | JPY)">

This problem affects all attribute declarations containing isoCurrencyCode or isoMICCode.