Chapter 3
From a
syntactical point of view, we can speak of two different
DLIS Logical Record structures for storing information -- namely:
- an Explicitly Formatted Logical Record
- an Indirectly Formatted Logical Record
An EFLR
has a variable-length Logical Record Body (LRB). The format of
the LRB is derived from an analysis of the record itself. An EFLR
is defined in such a general way that it can be used to contain
a wide variety of information related to logging data.
The syntax of an EFLR permits the system or
the application program that is reading DLIS to interpret unambiguously
the information that is contained in the EFLR. The Logical Record
Type in the Logical Record Segment Header permits quick scanning
of Logical Records to locate certain key types of information.
The structures within the EFLR can then be interpreted hierarchically
to get detailed attributes of the information.
Each EFLR
encapsulates a table of information. The rows of the table represent
Objects, and the columns of the table represent
Attributes of the Objects.
At the beginning of the table there is a Template
that defines the columns. The table can be viewed in another way
as a Set of Objects, all of the same Type, defined
by the Template of the Set. Figure 3-1 illustrates a typical EFLR.
Figure 3-1. Illustration of EFLR Structure
Each EFLR
contains one and only one Set. A Set is interposed between the
EFLR and the Objects in the Set to provide a structure that can
be named, that represents a specific collection of Objects of a
given subtype of the EFLR's Type, and that can be accessed with
the same syntactical machinery that is used to access Objects.
Although an EFLR may contain only one Set, that Set may be one
of several different types implied by the Logical Record Type of
the EFLR.
Formally, a Set consists of one or more Objects
of the same type, preceded by a Template. Each Object has one
or more Attributes. Sets, Objects and Attributes have certain
Characteristics which serve to distinguish one from another.
Templates do not have intrinsic Characteristics. Rather, Templates
are used to specify the presence, order, and default Characteristics
of the Attributes of the Objects in the Set. This permits the
number of explicitly present Characteristics of Attributes in the
Object rows to be reduced -- to zero in some cases.
The basic
syntactic unit of an EFLR is the Component. Components
are used for structural purposes and to carry information describing
the entities, i.e., Set, Objects, and Attributes, that make up
an EFLR.
The following notational conventions are used
in describing Components:
- 1. The notation n‘a..x denotes a value represented
in IDENT or ASCII form (see Appendix B) and consisting of the n
characters a..x preceded by the length n. Examples are
5‘Hello
6‘Origin
24‘This is a string of text
- 2. The notation k&j&n‘a..x denotes
a value represented in OBNAME form (see Appendix B) and consisting
of the Origin reference k followed by a Copy Number j followed
by an Identifier. Examples are
1&0&5‘Depth
(Origin = 1, Copy Number = 0, Object Identifier = Depth)
0&1&8‘Porosity
(Origin = 0, Copy Number = 1, Object Identifier = Porosity)
- 3. The word "null" denotes a value
comprising all bits zero in the minimum number of bytes permitted
by a given Representation Code. Since the equivalent of a null
value depends on its Representation Code, the word "null"
is used when a Representation Code is not explicitly stated.
- 4. The notation 0‘ denotes the null ASCII
or IDENT value, i.e., a zero-length string represented as a single
byte containing the value zero.
- 5. When a bit is specified to be "reserved",
then it must be recorded as a zero bit (not set).
The first
byte of every Component is its Descriptor. A Descriptor
has two parts:
- The Component Role. The Role indicates
what type of entity is described by the Component.
-
The Component Role is defined in Figure 3-2.
The symbolic names in the Role column of Figure 3-2 are used
in illustrations later in this specification.
- The Component Format as defined
in Figures 3-3, 3-4, and 3-5.
-
The Format indicates which Characteristics
of the entity represented by the Component are explicitly present
in the remainder of the Component and the order in which they appear.
Any Characteristic that is not explicitly present assumes a default
value. A Characteristic is explicitly present in a Component if,
and only if, the corresponding bit is set in the Component Format
field. Characteristics appear in a Component in the same order
in which they are defined in the Component Format field. That
is, if bit 4 defines Characteristic A and bit 5 defines Characteristic
-
The Component Format is defined for Set,
Redundant Set, and Replacement Set Components in Figure 3-3, for
Object Components in Figure 3-4, and for Attribute and Invariant
Attribute Components in Figure 3-5. The Absent Attribute has no
Characteristics. Its Component Format field has all bits clear
(not set).
-
The symbolic names in the Symbol column
of the figures are used in illustrations later in this specification.
Except for the Value Characteristic (Figure 3-5), all Characteristics
have fixed Representation Codes. That is, when a given Characteristic
is present in a Component, it is always represented in the same
way. These representations are specified in the figures. Characteristics
may have global default values, also specified in the figures.
The global default value is always assumed when no explicit or
local default value (see §3.2.2.2) is provided.
It is possible for a Component to consist entirely
of its Descriptor, in which case all Characteristics assume default
values.
Bits 1-3
| Role
| Type of Component
000
| ABSATR
| Absent Attribute
|
001
| ATTRIB
| Attribute
|
010
| INVATR
| Invariant Attribute
|
011
| OBJECT
| Object
|
100
| reserved
| -
|
101
| RDSET
| Redundant Set
|
110
| RSET
| Replacement Set
|
111
| SET
| Set
Figure 3-2. Definition of Component Role
| |
Figure 3-3. Definition of Characteristics and Component Format
for Set, Redundant Set, and Replacement Set Components
Comments:
- 1.
The Type Characteristic is a dictionary-controlled
name that identifies the type of Objects contained in the Set (see
Chapter 7). A Set's Type Characteristic is used to categorize
the set of Attributes that apply to the Objects in the Set. A
Set’s Type Characteristic must be non-null and must always be explicitly
present in the Set Component. There is no global default.
All Sets have the same structure, and Sets
do not have "types" that distinguish one from another
in that sense. Nevertheless, the phrase "Set Type" is
used in this specification. It is a brief way to say "Set
of Objects of Type ...". The phrase "Object Type"
is also used in this specification. Objects do have types which
distinguish one structure from another (i.e., available list of
Attributes). The Type of an Object is specified by the
Type Characteristic of the Set to which the Object belongs.
- 2.
The Name Characteristic is a user-supplied
name that identifies the Set. The phrases "Set Name"
and "Set Name Characteristic" are used interchangeably.
Figure 3-4.
Definition of Characteristics and Component Format for Object Components
Comments:
- 1.
The Name Characteristic identifies
the Object. For certain Object Types, the Identifier Subfield
of this name is dictionary-controlled. For other Object Types
it is arbitrary. The phrases "Object Name" and "Object
Name Characteristic" are used interchangeably.
This Characteristic must always be present
and must contain a non-null Identifier, so there is no global default
value. That is, every Object has a non-null Name.
Figure 3-5.
Definition of Characteristics and Component Format for Attribute
and Invariant Attribute Components
Comments:
- 1.
The Label Characteristic is a dictionary-controlled
name that identifies the Attribute. The phrases "Attribute
Label", "Attribute Name", and "Attribute Label
Characteristic" are used interchangeably for both Attribute
Components and Invariant Attribute Components.
- 2.
The Count, Representation Code,
Units,; and Value Characteristics are closely related.
A Value consists of zero or more ordered Elements. Each
Element has the same Representation Code, specified by the value
of the Representation Code Characteristic, and the same physical
units of measurement, specified by the Units Characteristic. The
number of Elements that make up the Value is specified by the Count
Characteristic.
The Count Characteristic may be zero. In
this case, the Value Characteristic is undefined, i.e., it is an
Absent Value.
Note that although the Representation Code
Characteristic is always represented in a Component as a USHORT
(one-byte unsigned integer), the global default value for this
Characteristic is the numeric code denoted by the symbol IDENT
(see Appendix B).
The phrases "Attribute Count"
and "Attribute Count Characteristic" are used
interchangeably, as are "Attribute Value" and
"Attribute Value Characteristic",
as are "Attribute Representation Code" and "Attribute
Representation Code Characteristic", as are "Attribute
Units" and "Attribute Units Characteristic".
This paragraph
defines the usage of Components. Illustrations of how Components
can be combined to form a Set are provided in later sections.
A Set Component defines the beginning
of a Set and must be the first Component in the EFLR. The Set
Component contains the Set Type, which is not optional and must
not be null, and the Set Name, which is optional.
A Set consists of one or more Objects, preceded
by a Template. The Objects in a Set share a common set of Attributes.
The order and default Characteristics for these Attributes are
defined in the Template. The Template immediately follows the
Set Component and is terminated by an Object Component. A Template
consists of a collection of Attribute Components and/or Invariant
Attribute Components, mixed in any fashion. These Components define
the structure of the Objects in the Set.
An Object Component defines the beginning
of a new Object. The Object Component contains the Object Name,
which is mandatory. Following the Object Component are a sequence
of Attribute Components and possibly some Absent Attribute Components.
An Object's Attribute Components are terminated by the end of
the Logical Record or by the occurrence of another Object Component.
All Components in the Template must have distinct,
non-null Labels. Attribute Components in the Template specify
local default Characteristics for all Objects in the Set.
Characteristics
not present in Template Attribute Components assume the global
default values defined in Figure 3-5. Invariant Attribute Components,
which may only appear in the Template, represent Invariant
Attributes, i.e., Attributes that are invariant in all
Characteristics for all Objects in the Set.
Therefore, Attribute Components corresponding
to these Invariant Attributes need not and must not appear after
Object Components.
All Attributes in the same "column"
of a Set must have the same Attribute Label, namely, the one specified
in the Template Attribute Component. Therefore, Attribute Components
that follow Object Components must not have Attribute Labels.
The remaining Characteristics may be freely specified by an Object's
Attribute Components. Any Characteristic not present assumes the
local default value as specified in the corresponding Attribute
Component in the Template.
Missing Attribute Components imply that local
defaults should be used for the Characteristics of the corresponding
Attribute. Since Attribute order is important within a Set, only
trailing Attribute Components can be omitted.
An Attribute is considered to be Absent
for an Object when its Attribute Component is replaced by an Absent
Attribute Component. An Absent Attribute is one for
which no information is provided, not even default meaning.
A Redundant Set is an identical copy of some
Set written previously in the same Logical File, including the
Set Name and Type. If a Redundant Set is has a null Name, then
the Set of which it is a copy must be the only Set in the same
Logical File of the same Type, excluding other Redundant Sets,
preceding the given Redundant Set.
A Replacement Set has the same Type and (non-null)
Name, the same Template, and the same Objects (none added, none
deleted) in the same order as a Set written previously in the same
Logical File. However, the Attributes of the Replacement Set reflect
all updates that may have been applied since the original Set was
written. A Replacement Set can be written anywhere in a Logical
File following the original Set that it replaces. There may be
any number of Replacement Sets for a given original Set.
Two views
are used to illustrate EFLRs: symbolic and syntactic. In a symbolic
illustration, the EFLR is represented by a Logical Record Segment
Header symbol followed by a stream of Component symbols followed
by a Logical Record Segment Trailer symbol. The symbols used in
these illustrations are defined in Figure 3-6.
Figure 3-6. Symbolic Representation of Components
A syntactic
illustration shows Component details,
including explicit Characteristics
and their values. The Component Descriptor is represented in the
form R:F, where R is the Role, defined in Figure
3-2, and F is the concatenation of those symbols, defined
in Figures 3-3 through 3-5, specifying which Format bits are set.
Figure 3-7 illustrates an EFLR,
segmented into three Logical Record Segments.
The segmentation is purely arbitrary and is done this way for
illustrative purposes. Although the illustration shows segmentation
on Component and Object boundaries, for example, this is not a
requirement. Logical Record Segmentation may occur at any byte.
The Order in which the Components are illustrated is from left
to right, then top to bottom.
There are seven Attributes specified in the
Template. One of these is an Invariant Attribute, so the column
underneath it is left blank to indicate that no corresponding Attribute
Components appear following the Object Components. The row for
Object 3 contains an Absent Attribute Component, which means that
the third Object has only six Attributes. For the second Object,
on the other hand, the last three Attribute Components have been
left out. This Object still has seven Attributes, but the last
three are identical to the defaults defined in the Template.
Figure 3-7. Symbolic Illustration of an EFLR
Figure 3-8 is a syntactic illustration of an EFLR. It illustrates a
Set that spans three Logical Record Segments. This is a Set of
Channel Objects (see Chapter 5). Detailed explanation of the entries
in the figure is given in the comments that follow. To make the
comments less awkward and more illustrative, some allusions are
made to the semantic meanings of the Attributes shown in the example
and of other entities. These comments are not intended to define
any semantic meaning, since that is done in later chapters.
Also note that Attributes in the illustration
appear in a different order from that used in Chapter 5 to define
Channel Objects and not all Attributes are used. This emphasizes
the fact that the order in which Attributes appear in the Template
is arbitrary.
Figure 3-8. Syntactic Illustration of an EFLR
Figure 3-8 (cont). Syntactic Illustration of an EFLR
Figure 3-8 (cont). Syntactic Illustration of an EFLR
Comments:
- 1. Each EFLR begins with a length, which
includes the LRSH, the LRB, and the LRST.
- 2. The Logical Record Segment Attribute bits
for Segment #1 indicate an EFLR structure (bit 1), no predecessor
segment (bit 2), a successor segment (bit 3), no encryption (bit
4), no Encryption Packet (bit 5), a checksum (bit 6), a Trailing
Length (bit 7), and no Padding (bit 8).
- 2a. The Logical Record Segment Attribute
bits for Segment #2 indicate an EFLR structure (bit 1), a predecessor
segment (bit 2), a successor segment (bit 3), no encryption (bit
4), no Encryption Packet (bit 5), a checksum (bit 6), a Trailing
Length (bit 7), and no Padding (bit 8).
- 2b. The Logical Record Segment Attribute
bits for Segment #3 indicate an EFLR structure (bit 1), a predecessor
segment (bit 2), no successor segment (bit 3), no encryption (bit
4), no Encryption Packet (bit 5), a checksum (bit 6), a Trailing
Length (bit 7), and Padding (bit 8).
- 3. All Segments specify the same Logical
Record Type, denoted by the term CHANNL. The numeric value (03)
is obtained from Appendix A
- 4. The Set Component indicates presence of
a Type and a Name.
- 5. The Object Type is CHANNEL (see Chapter
5).
- 6. The Set Name is "0".
- 7. Template Component #1 specifies the Attribute
labelled Long-Name and its local default Representation Code =
OBNAME. The remaining defaults (Count = 1, Units = 0‘, and Value
= null) are taken from the global defaults specified in Figure
3-5.
- 8. Template Component #2 specifies the Attribute
labelled Element-Limit, its local default Representation Code =
UVARI, and its local default Value = 1. The global default Count
= 1 is assumed. Thus, the local defaults indicate a scalar sample.
- 9. Template Component #3 specifies the Attribute
labelled Representation-Code and its local default Representation
Code = USHORT and Value = FSINGL. Note that the Value of this
Attribute is a Representation Code, which semantically is applied
to some other entity, in this case to the sample elements of some
Channel.
- 10. Template Component #4 specifies the Attribute
labelled Units. It does not explicitly specify any other Characteristics,
so global defaults apply.
- 11. Template Component #5 specifies the Attribute
labelled Dimension and its local default Representation Code =
UVARI and Value = 1. The global default Count = 1 is assumed.
- 12. The Object Component for Object #1 precedes
its own Attribute Components and terminates the Template. The
Object Component for Object #2 precedes its own Attribute Components
and terminates the Attribute Components of Object #1. The Object
Component for Object #3 precedes its own Attribute Components and
terminates the Attribute Components for Object #2.
These Objects are named, respectively, "Time"
(with Origin 0, Copy Number 0), "Pressure" (with Origin
1, Copy Number 0), and "Pad-Array" (with Origin 0, Copy
Number 1).
- 13. The Long-Name Attribute for Object #1
references the Object named "1" from Origin 0 with Copy
Number 0. The Type of the referenced Object (namely, Long-Name)
is specified by definition for this Attribute.
- 13a. The Long-Name Attribute for Object #2
references the Object named "2" from Origin 0 with Copy
Number 0.
- 13b. The Long-Name Attribute for Object #3
references the Object named "3" from Origin 0 with Copy
Number 0.
- 14. Each Logical Record Segment Trailer contains
a two-byte checksum.
- 15. Each Logical Record Segment Trailer contains
a Trailing Length, which has a value equal to the Logical Record
Segment Length in the LRSH.
- 16. The Element-Limit Attribute for Object
#1 assumes all the local default Characteristics.
- 16a. The Element-Limit Attribute for Object
#2 assumes all the local default Characteristics.
- 16b. The Element-Limit Attribute for Object
#3 has Count = 2 and Value = {8 20}. This indicates that the corresponding
sample value may be 1 or 2-dimensional, may have up to 8 array
elements along the first dimension and up to 20 array elements
along the second dimension.
- 17. The Representation-Code Attribute for
Object #1 assumes all the local default Characteristics.
- 17a. The Representation-Code Attribute for
Object #2 has the Value FDOUBL.
- 17b. The Representation-Code Attribute for
Object #3 has the Value UNORM.
- 18. The Units Attribute for Object #1 has
the Value s (second).
- 18a. The Units Attribute for Object #2 has
the Value psi (pound per square inch).
- 18b. The Absent Attribute Component for Object
#3 indicates that no Units Attribute is specified for this Object.
- 19. Padding is required in the third Logical
Record Segment to make its length come out even. In this case,
only one Padding Byte, the Pad Count, is required.
- 20. There is no Attribute Component for Object
#1 for the Dimension Attribute. Therefore the Dimension Attribute
assumes all the local default Characteristics.
- 20a. There is no Attribute Component for
Object #2 for the Dimension Attribute. Therefore the Dimension
Attribute assumes all the local default Characteristics.
- 20b. The Dimension Attribute for Object #3
has Count = 2 and Value = {8 10}, i.e., a two-Element Value. The
first Element is the integer 8 and the second Element is the integer
10. Semantically (as is specified in Chapter 5), this indicates
that the samples of Channel Pad-Array (Copy 1) are 2-dimensional
arrays with 8 elements in the first dimension and 10 in the second
for a total of 80 elements.
The format
of the Logical Record Body of an Indirectly Formatted Logical Record
cannot be interpreted from an analysis of the record itself. Instead,
it is defined by the contents of associated EFLRs.
Typically, a stream of data is encapsulated
in a sequence of IFLRs. There can be several multiplexed sequences
of IFLRs in a single Logical File. A referencing mechanism is
used to sort them out. This characteristic is particularly useful
for recording log data, which is acquired as a sequence of identically-formatted
packets, the number of which is unknown by the system when acquisition
begins.
Figure
3-9 defines the structure of the Logical Record Body of an Indirectly
Formatted Logical Record.
Figure 3-9. Structure of an Indirectly Formatted Logical Record
Comments:
- 1. The Data Descriptor Reference is
the Name of an Object in an EFLR. The Logical Record Type in the
Logical Record Segment Header must determine uniquely the Type
of the Object that is referenced.
The referenced Object and all other Objects
that are used to define the format of the Indirectly Formatted
Data must be in the same Logical File as this IFLR and must
precede this IFLR.
- 2. The Indirectly Formatted Data is
a set of 8-bit bytes, extending to the end of the Logical Record
Body. This set contains the data. The specific format of this
data is defined by the Object named in the Data Descriptor Reference
and by any other Objects that are associated with that Object.