XFD Files

The ACUCOBOL-GT compiler is capable of generating data dictionaries that store a map of COBOL record structures. These dictionaries are also called extended file descriptors (XFDs) because they're based on the standard COBOL file descriptors (FDs).

XFDs are used by Acu4GL to interface to database management systems and by AcuXML to interact with data in XML files. They are also used by alfred, Acucorp's record editor, and by AcuXDBC, Acucorp's database management system for Vision. In addition, they are used to help guide the mapping of international character sets between machines that use different underlying character codes.

The compiler creates an XFD for each indexed file in the compiled program when you specify the -Fx compile-time option. The -Fa option generates XFD files for all indexed, relative, and sequential files in the compiled program. Ordinarily, XFDs are generated in flat text file format. Use the -Fe option to generate XFD files in XML format instead. See File Options for details on these compiler options.

Acu4GL, AcuXDBC, and alfred can all read the XFD files in either format. XFDs are fully portable, and thus no recompilation is necessary if you change hardware.

BKUSUSFILE01-low.gif

The effects of all compile-time options, COPY REPLACING, and source-code control lines are reflected correctly in the XFDs.

Understanding how the XFD File is Formed

Micro Focus's data dictionaries (XFDs) enable the Acu4GL and AcuXML interfaces to create a table (or access an existing one) in a database for each indexed, relative, or sequential file. Each column in the table contains the values for one field. The column names are essentially the field names.

XFDs also allow the alfred record editor to display and accept data in an indexed file at the field level, instead of character-by-character. If an XFD is available to alfred, it has enough information to display fields on the screen, instead of just groups of characters. This makes the screen easier to read, and helps make editing more efficient.

Each XFD file is based on the largest record in the COBOL file, and contains the fields from that record, plus any key fields (key fields are those which are named in KEY IS phrases of SELECT verbs in the File-Control section). This ensures that data from all COBOL records will fit within database tables, and simplifies the storage and retrieval process. If you were to examine the XFD file, only the fields from the largest record, and the key fields, would appear.

Note: If the field named in the KEY IS phrase is a group item, it will not be named as a field in the XFD file. This means it will not be used as a column in a database table, if you are using an Acu4GL interface, and it will not appear on the screen if you use the alfred editor. Instead, all elementary items subordinate to the named group item will be named in the XFD. You can force the group item to be a named field by using the USE GROUP directive, See USE GROUP Directive for more information.

With multiple record formats (level 01), not all COBOL fields are named in the XFD file, but all fields are storable and retrievable. The data dictionary maps fields from all records of a file to the corresponding locations in the master (largest) record of the file. Since Acu4GL and alfred have access to the data dictionary, they know where the data from a given COBOL record fits. This activity is invisible to the COBOL application.

For example, if your program has one file with the three records shown below, the underlined fields will be included as fields in the XFD file by default (this example assumes that ar-codes-key is named in a KEY IS phrase). Some fields will not appear by name in the file, but will be mapped to the master field names. The interface thus will eliminate redundancies and give you optimum performance.

01  ar-codes-record.
  03  ar-codes-key.
    05  ar-code-type      pic x.
    05  ar-code-num       pic 999.

01  ship-code-record.
  03  filler              pic x(4).
  03  ship-weight         pic s999v9.
  03  ship-instruct       pic x(15).

01  terms-code-record.
  03  filler              pic x(4).
  03  terms-rate-1        pic s9v999.
  03  terms-days-1        pic 9(3).
  03  terms-rate-2        pic s9v999.
  03  terms-descript      pic x(15).

The following diagram shows how Acu4GL creates database columns for some of the fields in the COBOL record, while other fields are mapped to those columns by the data dictionary; this means that all the fields are accessible to the COBOL program.

BKUSUSFILE03-low.gif