# Dictionaries

Dictionaries are used by the D3 system to describe, define,
locate, and, in general, operate on data within the files to which
they point.

Many dictionary items perform operations that process
the data in associated files at the system level instead of in each
program that uses the data. Moving the operation into the data dictionary
enhances overall system performance and programmer productivity.

Some of these operations include the definition of relationships
between and within files, and using bridge, index or translate processing
codes. Features such as processing codes provide the ability to cruise
and zoom through the database.

MultiValue relationships within
files are expressed through the structure controlling attribute (attribute
4) of an attribute-defining item.

Each data file in the system
has one dictionary. A dictionary can have several files associated
with it. Dictionaries associated with data files contain items such
as attribute-defining items, file-defining items, synonym-defining
items, and pointers to compiled FlashBASIC programs.

The dictionary
code attribute (attribute 1) identifies the item type:

- If the attribute contains an a, s, or x, it is an attribute-defining item.

- If the first character of the attribute is d, it is a file-defining item.

- If the attribute contains a q, it is a synonym-defining item.

There are three types of dictionaries:

| System | Only one per system. Items within the system dictionary (mds) point to account master dictionaries. The mds file can only be accessed on the dm account. |
| --- | --- |
| Master | Only one per account. Items within master dictionaries point to file dictionaries. The following types of items are contained in master dictionaries: Attribute-defining items File-defining items Synonym-defining items Macros Menus Commands Connectives Cataloged FlashBASIC program pointers PROCs |
| File | Multiple, distributed among various accounts. Items within file dictionaries point to data files. File-defining items, synonym-defining items, and attribute-defining items are also present in file dictionaries. Pointers to compiled FlashBASIC programs are only present in file dictionaries. |

## Dictionaries as Operators

The D3 dictionary
is a file consisting of items that contain up to 30 attributes. Each
dictionary item can be considered as a vector operator of 30 elements,
some of which contain operations to be performed on the specified
attribute in the associated file. The element that identifies the
attribute within the associated file is the operand.

There are
two types of dictionary entries:

| file-defining items | Operate specifically on attribute 0 of the associated file and contain system information specific to the associated file. |
| --- | --- |
| attribute-defining items | Operate on any attribute within the associated data file or dictionary. Functions (or programs) defined at the system level (or by the user) can be assigned to the appropriate attributes of the attribute-defining item. |
In many cases, the generation of complex programs in a
high level language can be avoided, and this vector provides a shorthand
language for generating programs.

Data can be entered via the
Update processor or a FlashBASIC program that passes data through
the specified attribute-defining item within the data file dictionary
for modification and stores the data in the specified attribute of
the data file.

When the data is viewed using the Update processor
or retrieved using AQL or FlashBASIC, it passes from the attribute
in the data file through the data file dictionary for modification
prior to output. Secondary files may be involved if the operation
specified in the dictionary item is a translation.

## See also

- [Attribute](https://d3codex.com/definitions/attribute/)
- [AQL command categories](https://d3codex.com/access/aql-command-categories/)
- [Binary files (glossary)](https://d3codex.com/definitions/binary-files-glossary/)
- [mds file](https://d3codex.com/systemfiles/mds-file/)
- [Update processor overview](https://d3codex.com/updateprocessor/update-processor-overview/)
- [paint command](https://d3codex.com/tcl/paint-command/)
- [update command](https://d3codex.com/tcl/update-command/)

---
Source: https://d3codex.com/definitions/dictionaries/ - part of the D3Codex reference.
