This is the RFML DTD. Note that the version is 4.0. The RFML DTD resides in the jt400.jar file (com/ibm/as400/data/rfml.dtd).
<!--
Record Format Markup Language (RFML) Document Type Definition.
RFML is an XML language. Typical usage:
<?xml version="1.0"?>
<!DOCTYPE rfml SYSTEM "rfml.dtd">
<rfml version="4.0">
...
</rfml>
(C) Copyright IBM Corporation, 2001,2002
All rights reserved. Licensed Materials Property of IBM
US Government Users Restricted Rights
Use, duplication or disclosure restricted by
GSA ADP Schedule Contract with IBM Corp.
-->
<!-- Convenience entities -->
<!ENTITY % string "CDATA"> <!-- a string of length 0 or greater -->
<!ENTITY % nonNegativeInteger "CDATA"> <!-- a non-negative integer -->
<!ENTITY % binary2 "CDATA"> <!-- an integer in range 0-65535 -->
<!ENTITY % boolean "(true|false)">
<!ENTITY % datatype "(char | int | packed | zoned | float | byte | struct)">
<!ENTITY % biditype "(ST4 | ST5 | ST6 | ST7 | ST8 | ST9 | ST10 | ST11 | DEFAULT)">
<!-- The document root element -->
<!ELEMENT rfml (struct | recordformat)+>
<!ATTLIST rfml
version %string; #FIXED "4.0"
ccsid %binary2; #IMPLIED
>
<!-- Note: The ccsid is the default value that will be used for -->
<!-- any contained <data type="char"> elements that do not specify a ccsid. -->
<!-- Note: RFML does not support nested struct declarations. -->
<!-- All struct elements are direct children of the root node. -->
<!ELEMENT struct (data)+>
<!ATTLIST struct
name ID #REQUIRED
>
<!-- <!ELEMENT recordformat (data | struct)*> -->
<!ELEMENT recordformat (data)*>
<!ATTLIST recordformat
name ID #REQUIRED
description %string; #IMPLIED
>
<!-- Note: On the server, the Record "text description" field is limited to 50 bytes. -->
<!ELEMENT data EMPTY>
<!ATTLIST data
name %string; #REQUIRED
count %nonNegativeInteger; #IMPLIED
type %datatype; #REQUIRED
length %nonNegativeInteger; #IMPLIED
precision %nonNegativeInteger; #IMPLIED
ccsid %binary2; #IMPLIED
init CDATA #IMPLIED
struct IDREF #IMPLIED
bidistringtype %biditype; #IMPLIED
>
<!-- Note: The 'name' attribute must be unique within a given recordformat. -->
<!-- Note: On the server, the length of Record field names is limited to 10 bytes. -->
<!-- Note: The 'length' attribute is required, except when type="struct". -->
<!-- Note: If type="struct", then the 'struct' attribute is required. -->
<!-- Note: The 'ccsid' and 'bidistringtype' attributes are valid only when type="char". -->
<!-- Note: The 'precision' attribute is valid only for types "int", "packed", and "zoned". -->
<!-- The standard predefined character entities -->
<!ENTITY quot """> <!-- quotation mark -->
<!ENTITY amp "&#38;"> <!-- ampersand -->
<!ENTITY apos "'"> <!-- apostrophe -->
<!ENTITY lt "&#60;"> <!-- less than -->
<!ENTITY gt ">"> <!-- greater than -->
<!ENTITY nbsp " "> <!-- non-breaking space -->
<!ENTITY shy "­"> <!-- soft hyphen (discretionary hyphen) -->
<!ENTITY mdash "&#x2014;">
<!ENTITY ldquo "&#x201C;">
<!ENTITY rdquo "&#x201D;">