Information technology — SEDRIS —
Part 3: Transmittal format binary encoding

6 Transmittal content representation

6.1 Introduction

6.1.1 Description

This clause specifies the binary encoding for each non-abstract DRM class that may be represented in a transmittal. Also specified is the encoding of transmittal constructs such as header information. 5 Encoding of data types specifies the encoding of each data type that can be used in a transmittal. In the following text, upper case is used for the names of bit fields while lower case is used to specify the contents of bit fields.

6.1.2 Topics

Table 6.1 lists the topics in this clause.

Table 6.1 — Topics

6 Transmittal content representation

6.1 Introduction

6.1.1 Description

6.1.2 Topics

6.1.3 Notation conventions

6.2 DRM object syntax and encoding

6.2.1 Introduction

6.2.2 <header control>

6.2.3 <field offset>

6.2.4 <aggregate list> and <aggregate count>

6.2.5 <associate list> and <associate count>

6.2.6 <component list> and <component count>

6.2.7 <object field>

6.2.8 Encoding of DRM object reference lists

6.2.8.1 Introduction

6.2.8.2 <local reference>

6.2.8.3 Non-local references

6.2.8.4 <non-local specific reference>

6.2.8.4.1 General form

6.2.8.4.2 <near block reference>

6.2.8.4.3 <far block reference>

6.2.8.4.4 <other file reference>

6.2.8.4.5 <inter-transmittal reference>

6.3 STF-specific constructs

6.3.1 Root file content organization

6.3.1.1 Introduction

6.3.1.2 Root file header

6.3.1.3 Master file list

6.3.1.4 ITR referenced transmittal list

6.3.1.5 ITR referenced DRM object list

6.3.1.6 Published DRM object list

6.3.2 STF object files

6.3.2.1 Overview

6.3.2.2 File header

6.3.2.3 Referenced file list

6.3.2.4 Block list

6.3.2.5 Compressed block list

6.3.3 STF block

6.3.3.1 Overview

6.3.3.2 Block header

6.3.3.3 Object type list

6.3.3.4 Object data

6.3.3.5 Object pointer list

6.3.4 STF bulk data files

6.3.4.1 Overview

6.3.4.2 IMAGE_DATA bulk data object

6.3.4.3 MESH_FACE_TABLE_DATA and MESH_FACE_TABLE_PARAMETER_DATA bulk data objects

6.3.4.4 DATA_TABLE_ROOT_DATA bulk data object

6.3.4.5 DATA_TABLE_BLOCK_DATA bulk data object

6.3.4.6 DATA_TABLE_BLOCK_PARAMETER_DATA bulk data object

6.1.3 Notation conventions

  1. Upper-case monospace strings are terminals.
  2. Lower-case monospace strings are non-terminals.
  3. The metasymbols in Table 6.2 define productions, grouping, and repetitions.
  4. bit string literal values are specified in monospace font enclosed in single straight quotation marks.
  5. Comments are in parentheses in normal text on the line for which the comments apply.

Table 6.2 — Metasymbols

Metasymbol Meaning
::= “becomes” or “is realized as”
<…>* 0 or more occurrences
<…>+ 1 or more occurrences
<…>° 0 or 1 occurrence
<…>n exactly n occurrences where n is a positive integer
<x | y> exactly one of x or y

6.2 DRM object syntax and encoding

6.2.1 Introduction

Each non-abstract DRM class specified in 6.2 DRM class specifications of Part 1 of ISO/IEC 18023 may be instanced to create a DRM object within the transmittal. The abstract syntax of an STF-encoded representation of a DRM object is:

<object instance> ::=
    <object header>
    <object field>*   
(see 6.2.7 <object field>)

<object header> ::=
    <header control>    
(see 6.2.2 <header control>)
    <field offset>0     
(see 6.2.3 <field offset>)
    <aggregate count>0 
(see 6.2.4 <aggregate list> and <aggregate count>)
    <associate count>0 
(see 6.2.5 <associate list> and <associate count>)
    <component count>0 
(see 6.2.6 <component list> and <component count>)
    <aggregate list>0 
  (see 6.2.4 <aggregate list> and <aggregate count>)
    <associate list>0  
(see 6.2.5 <associate list> and <associate count>)
    <component list>0  
(see 6.2.6 <component list> and <component count>)

The non-terminal abstract syntax elements above are expanded into more detailed syntax in the remainder of 6.2. Together these STF abstract syntax elements encode the abstract syntax elements specified in 5.2.9 DRM objects of Part 2 of ISO/IEC 18023.

6.2.2 <header control>

One occurrence of this element and the values of its bit fields determines the number of occurrences of the <field offset>, <aggregate count>, <aggregate list>, <associate count>, <associate list>, <component count>, <component list>, and <object field> elements.

The abstract syntax of the <header control> element is:

<header control> ::= <field flag>
                     <aggregate control>
                     <associate control>
                     <component control>

The <header control> element is encoded in a single octet divided into four fields as specified in Figure 6.1.

7

6

5

4

3

2

1

0

<field flag>

<aggregate control>

<associate control>

<component control>

Figure 6.1 — <header control> element fields

The meanings of the encoded values of each bit field as well as how those values affect the number of occurrences of other elements in the productions specified in 6.2.1 Introduction are:

The <field flag> element determines if the <field offset> element occurs:

'0'  The <field offset> element is not present.

'1'  The <field offset> element is present.

The <aggregate control> element determines if the <aggregate count> and <aggregate list> elements occur:

'00'  The DRM object has no aggregates. The <aggregate count> element and the <aggregate list> elements do not occur.

'01'  The DRM object has one aggregate. The <aggregate count> element does not occur. The <aggregate list> element occurs exactly once and contains exactly one reference.

'10'  The DRM object has two aggregates. The <aggregate count> element does not occur. The <aggregate list> element occurs exactly once and contains exactly two references.

'11'  The DRM object has more than two aggregates. The <aggregate count> element occurs exactly once and specifies the number of references in the <aggregate list>. The <aggregate list> element occurs exactly once and contains the number of references specified in the <aggregate count> element.

The <associate control> element determines if the <associate count> and <associate list> elements occur:

'00'  The DRM object has no associations. The <associate count> element and the <associate list> elements do not occur.

'01'  The DRM object has one association. The <associate count> element does not occur. The <associate list> element occurs exactly once and contains exactly one reference.

'10'  The DRM object has two associations. The <associate count> element does not occur. The <associate list> element occurs exactly once and contains exactly two references.

'11'  The DRM object has more than two associations. The <associate count> element occurs exactly once and specifies the number of references in the <associate list>. The <associate list> element occurs exactly once and contains the number of references specified in the <associate count> element.

The <component control> element determines if the <component count> and <component list> elements occur:

'000' The DRM object has no components. The <component count> element and the <component list> elements do not occur.

'001' – '110' The DRM object has the number of components specified by the binary value of the <component control> field when considered as an integer between 1 and 6 inclusive. The <component count> element does not occur. The <component list> element occurs exactly once and contains exactly the number of references (between 1 and 6 inclusive) specified by this field.

'111' The DRM object has more than six components. The <component count> element occurs exactly once and specifies the number of references in the <component list>. The <component list> element occurs exactly once and contains the number of references specified in the <component count> element.

6.2.3 <field_offset>

The <field_offset> specifies the offset in octets from the first octet of the DRM object to the first field. The <field_offset> element is encoded as specified in 5.2.3.2 OCE8_Unsigned.

6.2.4 <aggregate list> and <aggregate count>

If this DRM object is a component of other DRM objects,  the <aggregate list> element represents a list of references (see 6.2.8 Encoding of DRM object reference lists) to all such DRM objects.

The <aggregate count> element determines the number of references in the <aggregate list> when the number of references is greater than two. The <aggregate control> bit field of the <header control> element (see 6.2.2 <header control>) determines the number of references in the <aggregate list> when the number of references is two or less. The <aggregate list> element does not occur when the number of references in the aggregate list is zero.

There is one reference represented in the <aggregate list> of a DRM object A to each DRM object B of which A is an component (that is, B is composed of A).

EXAMPLE  Table 6.3—DRM_Absolute_Time_Interval of Part 1 ISO/IEC 18023 specifies that the <DRM Absolute Time Interval> class is Composed of (two-way) one <DRM Absolute Time> instance. Therefore, the <aggregate list> for the instance of DRM class <DRM Absolute Time> that <DRM Absolute Time Interval> is composed of contains exactly one reference to this DRM object whose DRM class is <DRM Absolute Time Interval>.

6.2.5 <associate list> and <associate count>

If this DRM object has association relationships with other DRM objects, the <association list> element represents a list of references (see 6.2.8 Encoding of DRM object reference lists) to all such DRM objects.

The <associate count> element determines the number of references in the <associate list> when the number of references is greater than two. The <associate control> bit field of the <header control> element (see 6.2.2 <header control>) determines the number of references in the <associate list> when the number of references is two or less. The <associate list> element does not occur when the number of references in the <associate list> is zero.

There is one reference represented in the <associate list> of a DRM object A to each DRM object with which A is associated.

EXAMPLE  Table 6.88—DRM_Geometry_Edge of Part 1 of ISO/IEC 18023 specifies that a DRM object whose DRM Class is <DRM Geometry Edge> is associated with exactly two DRM objects of DRM class<DRM Geometry Node> (and may, in addition, be optionally associated with other DRM objects.) Therefore, the <association list> for an DRM object of DRM class <DRM Geometry Edge> contains at least two references to DRM objects of DRM class <DRM Geometry Node> and may, in addition, contain references to other DRM objects.

6.2.6 <component list> and <component count>

If this DRM object is composed of other DRM objects, the <component list> element represents a list of references (see 6.2.8 Encoding of DRM object reference lists) to all such DRM objects.

The <component count> element determines the number of references in the <component list> when the number of references is greater than six. The <component control> sub-element of the <header control> element (see 6.2.2 <header control>) determines the number of references in the <component list> when the number of references is six or less. The <component list> element does not occur when the number of references in the <component list> is zero.

There is one reference represented in the <component list> of a DRM object A to each DRM object that A is composed of.

EXAMPLE 1    Table 6.3—DRM_Absolute_Time_Interval of Part 1 of ISO/IEC 18023 specifies that a DRM object whose DRM Class is <DRM Absolute Time Interval> is Composed of (two-way) one <DRM Absolute Time> instance. Therefore, the <component list> for an DRM object of DRM class <DRM Absolute Time Interval> contains exactly one reference to the DRM object whose DRM class is <DRM Absolute Time> that it is composed of.

EXAMPLE 2    Table 6.21—DRM_Blend_Directional_Light of Part 1 of ISO/IEC 18023 specifies that a DRM object whose DRM Class is <DRM Absolute Time Interval> is Composed of (two-way) (inherited) one <DRM Lobe Data> instance and one <DRM Location> instance. Therefore, the <component list> for an instance of this DRM class contains exactly two references, one to a DRM object whose DRM class is <DRM Lobe Data> and another to a DRM object whose DRM class is <DRM Location>.

6.2.7 <object field>

For each field of the DRM object (see 6.2 DRM class specifications of Part 1 of ISO/IEC 18023), one occurrence of this element represents the value of that field.

The field data for a DRM object (if needed) shall immediately follow the last reference list item. The fields shall be encoded in the order specified in 6.2  DRM class specifications of Part 1 of ISO/IEC 18023.

Each instance of <object field> shall be encoded as an instance of its data type. The encoding of each data type used in this part of ISO/IEC 18023 is specified in 5 Encoding of data types.

6.2.8 Encoding of DRM object reference lists

6.2.8.1 Introduction

The <aggregate count>, <associate count>, and <component count> elements are each encoded as specified in 5.2.3.2 OCE8_Unsigned.

The abstract syntax of the three list elements is further specified as follows:

<aggregate list> ::= <object reference>+

<association list> ::= <object reference>+

<component list> ::= <object reference>+

<object reference> ::= <local reference> |
                       <non-local reference> |
                       <non-local reference with local link> |
                       <non-local reference with non-local link> 

<local reference> ::= '1'
                      <LOCAL OBJECT INDEX>

<non-local reference> ::= '0'
                          '0'
                          <non-local specific reference>

<non-local reference with local link> ::= '0'
                                          '1'
                                          <non-local specific reference>
                                          <local reference>

<non-local reference with non-local link> ::= '0'
                                              '1'
                                              <non-local specific reference>
                                              <non-local reference>

<non-local specific reference> ::= <near block reference> |
                                   <far block reference> |
                                   <other block reference> |
                                   <inter-transmittal reference>

4.3.3.4 DRM object data and DRM object referencing specifies how each <object reference>  is conceptually composed of  three indices that are together called the FBO of the object. The following subclauses further specify the syntax and encoding of <object reference> in terms of the FBO of the object making the reference.

6.2.8.2 <local reference>

The <local reference> element is encoded in a single eight-bit octet as specified in Figure 6.2.

7

6

5

4

3

2

1

0

'1'

<LOCAL OBJECT INDEX>

Figure 6.2 — <local reference>

 The high order bit shall be '1' indicating that this is a local reference. The low-order seven bits represent the <LOCAL OBJECT INDEX>. The file and block index of the FBO (see 4.3.3.4 DRM object data and DRM object referencing) are not specified and shall be the same file and block as the referencing object. The object index of the FBO is determined from <LOCAL OBJECT INDEX> interpreted as an unsigned integer as follows: 

  1. If the object index of the referencing object is less than 128, the unsigned integer represented in the <local object index> shall be the object index of the referenced object.
  2. If the object index of the referencing object is greater than or equal to 128, the object index of the referenced object shall be equal to 128 plus the <local object index>.

6.2.8.3 Non-local references

There are three forms of non-local reference:

<non-local reference>
<non-local reference with local link>
<non-local reference with non-local link>

The conceptual layout of a non-local reference is as specified in Figure 6.3.

7

6

5

4

3

2

1

0

7

6

5

4

3

2

1

0

7

6

5

4

3

2

1

0

'0'

link flag (L)

reference information

 

   

additional reference information as necessary

 

   

additional reference information as necessary

Figure 6.3 — <non-local reference> general form

All non-local references have the following general information:

  1. Bit 7 always has value '0'.
  2. Bit 6 specifies the link flag which has the following values that apply for all non-local references:
    1.  Value '0' specifies that a <non-local reference> is directly specified (see 6.2.8.1 Introduction).
    2. Value '1' specifies that the non-local reference is through a link (see 6.2.8.4 <non-local specific reference>).

6.2.8.4 <non-local specific reference>

6.2.8.4.1 General form

There are four types of non-local references. This subclause describes the conceptual layout of a non-local specific reference. Each type of reference is individually defined in subsequent subclauses. However, the overall form is as specified in Figure 6.4.

7

6

5

4

3

2

1

0

 

7

6

5

4

3

2

1

0

 

7

6

5

4

3

2

1

0

'0'

L

reference type

reference-specific information

 

index octet 1

 

index octet 2

Figure 6.4 — <non-local specific reference> general form

In each of the <non-local specific reference> types, the meanings of the encoded value that represent the four bit fields that comprise the first octet of a <non-local reference> element as well as how those values affect the number of occurrences of other elements in the production are specified as:

The reference-specific information specified in bits 0-3 varies depending on the value of reference type specified in bits 4 and 5. The bit sequences below represent bits 4 and 5 (reference type) and described the meaning of bits 0-3 (reference-specific information) for the respective value:

'00'  The reference is a <near block reference> and the value of bits 0-3 shall be interpreted as described in 6.2.8.4.2 <near block reference>.

'01'  The reference is a <far block reference> and the value of bits 0-3 shall be interpreted as described in 6.2.8.4.3 <far block reference>.

'10' The reference is an <other file reference> and the value of bits 0-3 shall be interpreted as described in 6.2.8.4.4 <other file reference>.

'11' The reference is an <inter-transmittal reference> and the value of bits 0-3 shall be interpreted as described in 6.2.8.4.5 <inter-transmittal reference>.

The existence and meaning of the index 1 and index 2 octets depend on the value of bits 4 and 5 of the first octet.

The detailed encoding for each non-local reference type is specified in the remainder of 6.2.8.4 <non-local specific reference>.

6.2.8.4.2 <near block reference>

The syntax of the <near block reference> element as illustrated in Figure 6.5 is:

<near block reference> ::= '00' <NEAR BLOCK INDEX>
                                <OBJECT INDEX>

7

6

5

4

3

2

1

0

 

7

6

5

4

3

2

1

0

'0'

l

'00'

<NEAR BLOCK INDEX>

 

<OBJECT INDEX>

Figure 6.5 — <near-block reference>

The values of the file index and block index (see 4.3.3.4 DRM object data and DRM object referencing) for the referenced object are specified as follows:

  1. The file index of the referenced object shall be the same as the file index of the referencing object.
  2. The block index of the referenced object shall be computed by the following process:
    1. interpret the <NEAR BLOCK INDEX> in bits 0-3 of the first octet  as an unsigned integer V,
    2. add V to the block index of the referencing object, and
    3. subtract 7.

For a near-block reference, <OBJECT INDEX> is represented by index octet 1 of the general form (see 6.2.8.4.1 General form). Index octet 2 does not occur.

6.2.8.4.3 <far block reference>

The syntax of the <far block reference> element as illustrated in Figure 6.6 is:

<far block reference> ::= '01' <HIGH ORDER BLOCK INDEX>
                               <LOW ORDER BLOCK INDEX>
                               <OBJECT INDEX>

7

6

5

4

3

2

1

0

 

7

6

5

4

3

2

1

0

 

7

6

5

4

3

2

1

0

'0'

l

'01'

<HIGH ORDER BLOCK INDEX>

 

<LOW ORDER BLOCK INDEX>

 

<OBJECT INDEX>

Figure 6.6 — <far block reference>

The <HIGH ORDER BLOCK INDEX> is encoded in bits 0-3 of the first octet. The <LOW ORDER BLOCK INDEX> element is encoded in index octet 1 (see 6.2.8.4.1 General form). The values of the file index and block index (see 4.3.3.4 DRM object data and DRM object referencing) for the referenced object are specified as follows:

  1. The file index of the referenced object shall be the same as the file index of the referencing object.
  2. The block index of the referenced object shall be computed by the following process:
    1. the value of the <HIGH ORDER BLOCK INDEX> is interpreted as the high order 4 bits 'abcd' of a 12-bit unsigned integer V,
    2. the value of the <LOW ORDER BLOCK INDEX> is interpreted as the low order 8 bits 'efghijkl'of a 12 bit unsigned integer V,
    3. the block index is the value of V = 'abcdefghijkl'.

For a far-block reference, <OBJECT INDEX> is represented by index octet 2 of the general form.

6.2.8.4.4 <other file reference>

The syntax of the <other file reference> element as illustrated in Figure 6.7 is:

<other file reference> ::= '10' <HIGH ORDER BLOCK INDEX>
                                <LOW ORDER BLOCK INDEX>
                                <OBJECT INDEX>
                                <REFERENCED FILE INDEX>

7

6

5

4

3

2

1

0

 

7

6

5

4

3

2

1

0

 

7

6

5

4

3

2

1

0

 

 

'0'

l

'10'

<HIGH ORDER BLOCK INDEX>

 

<LOW ORDER BLOCK INDEX>

 

<OBJECT INDEX>

 

<REFERENCED FILE INDEX>

Figure 6.7 — <other file reference>

The <HIGH ORDER BLOCK INDEX> is encoded in bits 0-3 of the first octet. The <LOW ORDER BLOCK INDEX> element is encoded in index octet 1 (see 6.2.8.4.1 General form). The <OBJECT INDEX> is encoded in index octet 2. The <REFERENCED FILE INDEX> element is encoded as specified in 5.2.3.2 OCE8_Unsigned following index octet 2. The values of the file index and block index (see 4.3.3.4 DRM object data and DRM object referencing) for the referenced object are specified as follows:

  1. The value of the block index (see 4.3.3.4 DRM object data and DRM object referencing) for the referenced object is the same as the block index for a <far block reference> as specified in 6.2.8.4.3 <far block reference>.
  2. A file index for the referenced object shall be determined by:
    1. the value encoded in the <REFERENCED FILE INDEX> element shall be interpreted as an index into the referenced file table (see 4.3.3.1 STF object file structure) of the file of the referencing object,
    2. the indexed value in the referenced file table is an index into the master file table (see 4.3.3.4 DRM object data and DRM object referencing),
    3. the indexed value in the master file table shall be the file index for the referenced object.
6.2.8.4.5 <inter-transmittal reference>

The syntax of the <inter-transmittal reference> element as illustrated in Figure 6.8 is:

<inter-transmittal reference> ::=
    '11' <padding>
    <ITR REFERENCED DRM OBJECTS LIST INDEX>

7

6

5

4

3

2

1

0

 

 

'0'

l

'11'

padding

 

<ITR REFERENCED DRM OBJECTS LIST INDEX>

Figure 6.8 — <inter-transmittal reference>

Bits 0-3 of the first octet (padding) are not used and may be encoded with any value. The <ITR REFERENCED DRM OBJECTS LIST INDEX> element is encoded as specified in 5.2.3.2 OCE8_Unsigned. The referenced DRM object is located by resolving the inter-transmittal reference by the following process:

  1. The <object reference table index> element is an index into the ITR referenced DRM object list of the transmittal root file (see 4.3.2 STF root file).
  2. The indexed entry in the ITR referenced DRM object list contains both the published DRM object label of the referenced DRM object and an index into the ITR referenced transmittal list (see 4.3.2 STF root file).
  3. The indexed entry in the ITR referenced transmittal list is the transmittal name (URN) of the transmittal containing the referenced DRM object.
  4. The referenced transmittal is opened and the referenced DRM object in that transmittal is located.

6.3 STF-specific constructs

6.3.1 Root file content organization

6.3.1.1 Introduction

The abstract syntax of an STF-encoded root file is:

<STF root file> ::=
    <root file header>                
(see 6.3.1.2 Root file header)
    <master file list>                
(see 6.3.1.3 Master file list)
    <ITR referenced transmittal list>0 (see 6.3.1.4 ITR referenced transmittal list)
    <ITR referenced DRM object list>0 
(see 6.3.1.5 ITR referenced DRM object list)
    <Published DRM object list>0      
(see 6.3.1.6 Published DRM object list)

<root file header> ::=  (see 6.3.1.2 Root file header)
    <STF ROOT FILE MAGIC NUMBER>
    <ENDIANNESS>
    <FILE MAJOR VERSION>
    <FILE MINOR VERSION>
    <SOFTWARE VERSION>
    <ROOT STF OBJECT FILE FBO>
    <MASTER FILE LIST SIZE>
    <MASTER FILE LIST OFFSET>
    <ITR REFERENCED TRANSMITTAL LIST SIZE>
    <ITR REFERENCED TRANSMITTAL LIST OFFSET>
    <ITR REFERENCED DRM OBJECT LIST SIZE>
    <ITR REFERENCED DRM OBJECT LIST OFFSET>
    <PUBLISHED DRM OBJECT LIST SIZE>
    <PUBLISHED DRM OBJECT LIST OFFSET>
    <UNIQUE TRANSMITTAL IDENTIFIER>
    <TRANSMITTAL NAME>
    <ROOT FILE NAME>

<master file list> ::=  (see 6.3.1.3 Master file list)
    <MASTER FILE LIST ENTRY>+

<ITR referenced transmittal list> ::=  (see 6.3.1.4 ITR referenced transmittal list)
    <ITR REFERENCED TRANSMITTAL LIST ENTRY>0

<ITR referenced DRM object list> ::=   (see 6.3.1.5 ITR referenced DRM object list)
    <ITR referenced DRM object list entry>0

<ITR referenced DRM object list entry> ::=  (see 6.3.1.5 ITR referenced DRM object list)
    <ITR REFERENCED DRM OBJECT INDEX>
    <ITR REFERENCED DRM OBJECT LABEL>

<Published DRM object list> ::=        (see 6.3.1.6 Published DRM object list)
    <Published DRM object list entry>0

<Published DRM object list entry> ::=  (see 6.3.1.6 Published DRM object list)
    <PUBLISHED DRM OBJECT LABEL>
    <REFERENCE TO PUBLISHED DRM OBJECT>

The non-terminal abstract syntax elements above are expanded into more detailed syntax in the remainder of 6.3. Together these STF abstract syntax elements encode the abstract syntax elements specified in 5.2 Abstract syntax of a transmittal of Part 2 of ISO/IEC 18023 as referenced in each of the following subclauses.

6.3.1.2 Root file header

An STF root file encodes the production rule specified in 5.2.4 Transmittal root file grammar of Part 2 of ISO/IEC 18023.

The fields in the root file header shall be as specified below. All offsets shall be specified in octets from the beginning of the file. An offset is a specification of the number of octets to skip from the beginning of the file.

<STF ROOT FILE MAGIC NUMBER> : STF_Octet

7

6

5

4

3

2

1

0

0

1

0

1

0

1

0

1

<ENDIANNESS> : STF_Octet

7

6

5

4

3

2

1

0

0

0

0

0

0

0

0

E

where:

E indicates the endianness of the encoding of the entire transmittal:

0 The entire transmittal is encoded big endian.

1 The entire transmittal is encoded little endian.

<FILE MAJOR VERSION> : STF_Byte_Unsigned

7

6

5

4

3

2

1

0

<FILE MAJOR VERSION> = 4

<FILE MINOR VERSION> : STF_Byte_Unsigned

7

6

5

4

3

2

1

0

<FILE MINOR VERSION> = 1

<SOFTWARE VERSION> : STF_Characters1

<ROOT DRM OBJECT> : STF_FBO

<MASTER FILE LIST SIZE> : STF_Integer_Unsigned (range: 1..65535)

<MASTER FILE LIST OFFSET> : STF_Integer_Unsigned

<ITR REFERENCED TRANSMITTAL LIST SIZE> : STF_Integer_Unsigned

<ITR REFERENCED TRANSMITTAL LIST OFFSET> : STF_Integer_Unsigned

<ITR REFERENCED DRM OBJECT LIST SIZE> : STF_Integer_Unsigned

<ITR REFERENCED DRM OBJECT LIST OFFSET> : STF_Integer_Unsigned

<PUBLISHED DRM OBJECT LIST SIZE> : STF_Integer_Unsigned

<PUBLISHED DRM OBJECT LIST OFFSET> : STF_Integer_Unsigned

<UNIQUE TRANSMITTAL IDENTIFIER> : STF_Octet[20]

<TRANSMITTAL NAME> : STF_Characters2

<ROOT FILE NAME> : STF_Characters3

1Field <SOFTWARE VERSION> is 64 octets in length. The value is left-justified in the field and octets beyond the initial NULL shall also have the value NULL. This field specifies the version of the implementation.

2Field <TRANSMITTAL NAME> is 256 octets in length. The value is left-justified in the field and octets beyond the initial NULL shall also have the value NULL.

3Field <ROOT FILE NAME> is 256 octets in length. The value is left-justified in the field and octets beyond the initial NULL shall also have the value NULL.

6.3.1.3 Master file list

The master file list shall start at the offset specified by master_file_list_offset. The master file list shall contain the list of STF object and STF block data files that comprise the transmittal. Each <MASTER FILE LIST ENTRY> in this list shall be a file name of data type STF_Characters. An index into the master file list shall be used to identify in which file an object is stored. The ‘F’ in an FBO object reference is an index into the master file list. Files referenced by the master file list include both DRM object and bulk data object files. There may be 1 to 65536 of these content files.

NOTE  File names in the <master file list> are of variable length and consist solely of the characters of the file name and the one trailing NULL character.

6.3.1.4 ITR referenced transmittal list

The ITR referenced transmittal list shall start at the offset specified by ITR_referenced_transmittals_list_offset. The ITR referenced transmittal list shall be used to implement ITR references. Each <ITR REFERENCED TRANSMITTAL LIST ENTRY> shall be a transmittal name of data type URN of a transmittal that is referenced by this transmittal.

6.3.1.5 ITR referenced DRM object list

The ITR referenced DRM object list shall start at the offset specified by ITR_referenced_DRM_objects_list_offset. The ITR referenced DRM object list shall be used to implement ITR references. The table shall contain an entry for each ITR reference in this transmittal. Each <ITR referenced DRM object list entry> shall consist of an index into the ITR referenced transmittal list (the <ITR REFERENCED DRM OBJECT INDEX>) specified as a OCE8_Unsigned number and a DRM object label (the <ITR REFERENCED DRM OBJECT LABEL>) of data type STF_Characters that shall match the published label of an DRM object in the referenced transmittal. The DRM object label shall start immediately following the <ITR REFERENCED DRM OBJECT INDEX>.

NOTE  <ITR REFERENCED DRM OBJECT LABEL>s in the <ITR referenced DRM object list> are of variable length and consist solely of the characters of the label and the one trailing NULL character.

6.3.1.6 Published DRM object list

The published DRM object list shall start at the offset specified by published_objects_list_offset. The published DRM object list shall list all the DRM objects in this transmittal that are allowed to be referenced by other transmittals. The number of octets in the published DRM object list is specified by published_objects_list_size (see 6.3.1.2 Root file header).

Each <Published DRM object list entry> corresponds to a single published DRM object and consists of:

<PUBLISHED DRM OBJECT LABEL> : STF_Characters

<REFERENCE TO PUBLISHED DRM OBJECT> : STF_FBO

NOTE  <PUBLISHED DRM OBJECT LABEL>s in the <Published DRM object list> are of variable length and consist solely of the characters of the label and the one trailing NULL character.

6.3.2 STF object files

6.3.2.1 Overview

The abstract syntax of an STF-encoded STF object file is:

<STF object file> ::=
    <file header>             
(see 6.3.2.2 File header)
    <referenced file list>    
(see 6.3.2.3 Referenced file list)
    <block list>              (see 6.3.2.4 Block list)
    <compressed block list>  
(see 6.3.2.5 Compressed block list)

<file header> ::=  (see 6.3.2.2 File header)
    <STF OBJECT FILE MAGIC NUMBER>
    <FILE MAJOR VERSION>
    <FILE MINOR VERSION>
    <REFERENCED FILE COUNT>
    <REFERENCED FILE TABLE OFFSET>
    <BLOCK COUNT>
    <BLOCK LIST OFFSET>
    <COMPRESSED BLOCK COUNT>
    <COMPRESSED BLOCK LIST OFFSET>
    <ROOT FILE NAME>

<referenced file list> ::=  (see 6.3.2.3 Referenced file list)
    <REFERENCED FILE INDEX>0

<block list> ::=  (see 6.3.2.4 Block list)
    <block list entry>+

<block list entry> ::=  (see 6.3.2.4 Block list)
    <BLOCK SIZE>
    <BLOCK OFFSET>

<compressed block list> ::=  (see 6.3.2.5 Compressed block list)
    <UNCOMPRESSED BLOCK SIZE>0

Each STF Object file shall contain no more than 4096 blocks.

The STF object file encodes the production rules specified in 5.2.5 Transmittal object file grammar of Part 2 of ISO/IEC 18023.

6.3.2.2 File header

The fields of the file header are specified below. All offsets shall be specified in bytes from the beginning of the file.

<STF OBJECT FILE MAGIC NUMBER> : STF_Octet

7

6

5

4

3

2

1

0

0

1

1

1

0

1

1

1

<FILE MAJOR VERSION> : STF_Byte_Unsigned

7

6

5

4

3

2

1

0

<FILE MAJOR VERSION> = 4

<FILE MINOR VERSION> : STF_Byte_Unsigned

7

6

5

4

3

2

1

0

<FILE MINOR VERSION> = 1

<REFERENCED FILE COUNT> : STF_Short_Integer_Unsigned

<REFERENCED FILE LIST OFFSET> : STF_Integer_Unsigned

<BLOCK COUNT> : STF_Short_Integer_Unsigned

<BLOCK LIST OFFSET> : STF_Integer_Unsigned

<COMPRESSED BLOCK COUNT> : STF_Short_Integer_Unsigned
(either 0 or same as block count)

<COMPRESSED BLOCK LIST OFFSET> : STF_Integer_Unsigned

<ROOT FILE NAME> : STF_Characters1

1Field <ROOT FILE NAME> is 256 octets in length. The value is left-justified in the field and octets beyond the initial NULL will also have the value NULL.

6.3.2.3 Referenced file list

The <referenced file list> shall contain the indices into the <master file list> for all files that this STF object file references. A <REFERENCED FILE INDEX> entry of the following form shall be provided for each referenced file in the table.

<REFERENCED FILE INDEX> : STF_Short_Integer_Unsigned

6.3.2.4 Block list

The <BLOCK LIST> is an array of <BLOCK LIST ENTRY>, each of which consists of a <BLOCK SIZE> and a <BLOCK OFFSET> as specified below. The values of the <BLOCK OFFSET> need not be monotonically increasing. The number of entries is specified by the <BLOCK COUNT> field of the file header (see 6.3.2.2 File header). The block_index of the FBO (see 4.3.3.4 DRM object data and DRM object referencing) selects an entry in this table. Each <block list entry> is specified as follows:

<BLOCK SIZE> : STF_Integer_Unsigned

<BLOCK OFFSET> : STF_Integer_Unsigned

6.3.2.5 Compressed block list

The <compressed block list> specifies the uncompressed sizes for each block. The size of this table shall be either 0 or the same size as the block table depending on whether there are any compressed blocks in the file. If a block has been compressed, the block’s entry in the <block list> shall specify the compressed size and the value in the <compressed block list> shall specify the uncompressed size. For blocks that are uncompressed, the <UNCOMPRESSED BLOCK SIZE> shall be zero.

<UNCOMPRESSED BLOCK SIZE> : STF_Integer_Unsigned

6.3.3 STF block

6.3.3.1 Overview

The abstract syntax of an STF-encoded STF block is:

<STF block> ::=
    <block header>         
(see 6.3.3.2 Block header)
    <object type list>     
(see 6.3.3.3 Object type list)
    <OBJECT DATA>           (see 6.3.3.4 Object data)
    <object pointer list>  
(see 6.3.3.5 Object pointer list)

<block header> ::=          (see 6.3.3.2 Block header)
    <OBJECT POINTER TABLE OFFSET>
    <LAST OBJECT INDEX>

<object pointer list> ::=   (see 6.3.3.5 Object pointer list)
    <OBJECT POINTER>0

The following STF block format specifies offsets and sizes based on an uncompressed block. Whether a block is compressed or not shall be determined from its entry in the compressed block table as described above.

Each STF block shall contain no more than 256 objects.

6.3.3.2 Block header

The block header shall consist of two fields.

The first field is of type STF_Integer_Unsigned and shall specify the offset in octets from the beginning of the block to the object pointer list at the end of the block:

<OBJECT POINTER TABLE OFFSET> : STF_Integer_Unsigned

The second field is of type STF_Byte_Unsigned and shall specify the <LAST OBJECT INDEX>. This shall be the highest object index used in the block:

7

6

5

4

3

2

1

0

<LAST OBJECT INDEX>

The number of objects in the block shall be:

<LAST OBJECT INDEX> + 1

NOTE  Some of the objects may have been deleted.

6.3.3.3 Object type list

The block header shall be followed by a list of STF_Object_Type values encoded in nine-bit fields representing the object types of each of the objects in the block. This list shall always contain 256 entries (288 octets) regardless of the number of objects in the block. For objects past the <LAST OBJECT INDEX>, the object type shall be set to NO_OBJECT.

6.3.3.4 Object data

<OBJECT DATA> shall consist of no more than 256 STF objects, the offsets of which are specified in the object pointer table as described in 6.3.3.5 Object pointer list. For STF object files, <OBJECT DATA> shall represent DRM objects and their relationships (see 6.2 DRM object syntax and encoding).

6.3.3.5 Object pointer list

The object pointer list shall contain an <OBJECT POINTER> for each object in the block. These objects shall have indexes in the range 0..<LAST OBJECT INDEX>. Each <OBJECT POINTER> shall be encoded as specified in 5.2.3.2 OCE8_Unsigned. The <OBJECT POINTER> shall either be an offset or a sentinel value of 1. The offset specifies the location of the STF object data in the block. The offset shall be specified as a number of octets and shall be relative to the beginning of the uncompressed block. The offsets are not required to be in increasing order. An object’s size shall be determined by subtracting the object’s offset from the smallest object offset that is larger than the object’s own offset. The size of the last object shall be determined from its offset and the size of the block. The sentinel value 1 shall be reserved as an object pointer value to indicate objects that have been deleted from the transmittal and that this object index may not be reused.

6.3.4 STF bulk data files

6.3.4.1 Overview

DRM_Image, DRM_Mesh_Face_Table  and DRM_Data_Table DRM objects represent potentially very large sets of data. Such data is stored in STF bulk data files that are encoded in the same manner as STF object files except that the object types in the STF block’s object type table (see 6.3.3.3 Object type list) do not represent DRM classes. Instead, they specify the type of an STF bulk object as specified in Table 6.2.

Table 6.2 — Bulk data objects

Bulk data object Object type value
IMAGE_DATA

511

MESH_FACE_TABLE_DATA

510

MESH_FACE_TABLE_PARAMETER_DATA

509

DATA_TABLE_ROOT_DATA

508

DATA_TABLE_BLOCK_DATA

507

DATA_TABLE_BLOCK_PARAMETER_DATA

506

DRM_Image, DRM_Mesh_Face_Table  and DRM_Data_Table objects reference their data using component object references to IMAGE_DATA, MESH_FACE_TABLE_DATA, or DATA_TABLE_ROOT_DATA bulk data objects respectively. These component object references are encoded as specified in 6.2 DRM object syntax and encoding but do not represent actual DRM component relationships.

6.3.4.2 IMAGE_DATA bulk data object

The abstract syntax of an STF-encoded <IMAGE_DATA bulk data> object is:

<IMAGE_DATA bulk data> ::= <IMAGE_DATA>

This bulk data object shall specify the image data for one mip level of a DRM_Image DRM object. Each DRM_Image DRM object shall have component references to all <IMAGE_DATA bulk data> containing image data for the DRM_Image DRM object. These references are not DRM-specified aggregation relationships since the <IMAGE_DATA bulk data> object is not a DRM object. However, STF shall use the same encoding method as is used for DRM relationships. This encoding shall be as specified in 6.2 DRM object syntax and encoding.  These component references shall be ordered according to the mip level number from smallest to largest.

There shall be no references from <IMAGE_DATA bulk data> objects to other DRM or bulk data objects; hence, there shall be no object header similar to STF object headers. Each mip level of the data is encoded as specified in 5.3.7.12 Image_Data:

<IMAGE_DATA> : Image_Data

An STF bulk data file containing image data encodes the production rules specified in 5.2.6 Transmittal image file grammar of Part 2 of ISO/IEC 18023.

6.3.4.3 MESH_FACE_TABLE_DATA and MESH_FACE_TABLE_PARAMETER_DATA bulk data objects

The abstract syntax of an STF-encoded <MESH_FACE_TABLE_DATA bulk data> and <MESH_FACE_TABLE_PARAMETER DATA bulk data> objects is:

<MESH_FACE_TABLE_PARAMETER DATA bulk data> ::=
    <ADJACENT FACE TABLE DATA FLAG>
    <START MESH FACE>

    <NUMBER MESH FACES>

<MESH_FACE_TABLE_DATA bulk data> ::=
    <MESH FACE TABLE>
    <ADJACENT FACE TABLE>0

The DRM_Mesh_Face_Table DRM object has one or more component references to <MESH_FACE_TABLE_DATA bulk data> objects with each reference having a link object reference to a <MESH_FACE_TABLE_PARAMETER DATA bulk data> object. These <MESH_FACE_TABLE_DATA bulk data> and <MESH_FACE_TABLE_PARAMETER DATA bulk data> objects encode the mesh face table and optional adjacent face table associated with a DRM_Mesh_Face_Table DRM object.

These tables have dimensions specified by DRM_Mesh_Face_Table DRM object fields mesh_face_count (rows) and maximum_vertices_per_face (columns). The table values are Integer_Positive values. Since these tables may be very large, the mesh face table and adjacent face data tables are partitioned such that each <MESH_FACE_TABLE_DATA bulk data> object may encode a subset of the rows for the mesh face table or for the adjacent face table. The corresponding <MESH_FACE_TABLE_PARAMETER DATA bulk data> object specifies the rows encoded and whether the table is a mesh face table or the adjacent face table.

The following encodes the fields of a <MESH_FACE_TABLE_PARAMETER DATA bulk data> object:

<ADJACENT FACE TABLE DATA FLAG> : Boolean

<START MESH FACE> : Integer_Positive

<NUMBER MESH FACES> : Integer_positive

The <MESH_FACE_TABLE_DATA bulk data> objects encode the actual values of a mesh face table or adjacent face table. This is a two-dimensional array of Integer_Positive values with the first dimension given by the number_mesh_faces field of the corresponding <MESH_FACE_TABLE_PARAMETER DATA bulk data> object and the second dimension given by the maximum_vertices_per_face field of the DRM_Mesh_Face_Table DRM object.

An STF bulk data file containing mesh face table data encodes the production rules specified in 5.2.7 Transmittal mesh face table data file grammar of Part 2 of ISO/IEC 18023.

6.3.4.4 DATA_TABLE_ROOT_DATA bulk data object

The abstract syntax of an STF-encoded <DATA_TABLE_ROOT_DATA bulk data> objects is:

<DATA_TABLE_ROOT_DATA bulk data> ::=
    <object header>   
(see 6.2.1 Introduction)
    <component list>  
(see 6.2.6 <component list> and <component count>)

A <DATA_TABLE_ROOT_DATA bulk data> object represents all of the cell values for a single element for a DRM_Data_Table DRM object as specified by the corresponding DRM_Table_Property_Description DRM object. Each DRM_Data_Table DRM object shall have one component reference to a <DATA_TABLE_ROOT_DATA bulk data> object for each element in the DRM_Data_Table DRM object. These references are not DRM-specified aggregation relationships since the <DATA_TABLE_ROOT_DATA bulk data> object is not a DRM object. However, the same encoding method as is used for DRM relationships as specified in 6.2 DRM object syntax and encoding shall be used.  These <DATA_TABLE_ROOT_DATA bulk data> objects shall be ordered in the same order as the DRM_Table_Property_Description DRM objects for the DRM_Data_Table DRM object.

The <DATA_TABLE_ROOT_DATA bulk data> object shall have the structure specified in Table 6.3:

Table 6.3 — <DATA_TABLE_ROOT_DATA bulk data> object structure

<object header>

<component list>

The <DATA_TABLE_ROOT_DATA bulk data> object does not store the data table data directly, but rather serves to organize the <DATA_TABLE_BLOCK_DATA bulk data> objects that do. It shall have one or more component references to <DATA_TABLE_BLOCK_DATA bulk data> objects with a component link reference to a <DATA_TABLE_BLOCK_PARAMETER_DATA bulk data> object. These component with link references shall be stored using the same encoding as STF objects as is described in 6.2 DRM object syntax and encoding. However, the fields offset, aggregate count and associate count bit fields in the object header shall all be set to zero since they do not apply to <DATA_TABLE_ROOT_DATA bulk data> objects.

The object header is as described in 6.2.2 <header control>.

The component list shall consist of a list of object references all of which shall contain link object references. The format of this reference list shall be identical to the reference lists of DRM objects as specified in 6.2.8 Encoding of DRM object reference lists.

6.3.4.5 DATA_TABLE_BLOCK_DATA bulk data object

The abstract syntax of an STF-encoded <DATA_TABLE_BLOCK_DATA bulk data> objects is:

<DATA_TABLE_BLOCK_DATA bulk data> ::=
    <BLOCK DATA ARRAY SIZE>
    <BLOCK DATA ARRAY>

The value of <BLOCK DATA ARRAY SIZE> specifies the size in octets of the <BLOCK DATA ARRAY> stored in the block. Immediately following this shall be an array of STF_Octet values representing the block data. The meaning and format of this block data array shall be as described in 4.3.4.2 Data table data storage.

The <DATA_TABLE_BLOCK_DATA bulk data> object shall have the following layout:

<BLOCK DATA ARRAY> : STF_Octet[<BLOCK DATA ARRAY SIZE> : Integer_Unsigned]

An STF bulk data file containing data table data encodes the production rules specified in 5.2.8 Transmittal data table data file grammar of Part 2 of ISO/IEC 18023.

6.3.4.6 DATA_TABLE_BLOCK_PARAMETER_DATA bulk data object

The abstract syntax of an STF-encoded <DATA_TABLE_BLOCK_PARAMETER_DATA bulk data> object is:

<DATA_TABLE_BLOCK_PARAMETER_DATA bulk data> ::=
    <MEANING>
    <VALUE UNIT>

    <VALUE SCALE>
    <VALUE TYPE>
    <COMPONENT DATA TABLE ECC>
    <SUB_EXTENTS>
    <DATA PACKED FLAG>
    <BASE DATA VALUE>
    <MAXIMUM VALUE>
    <SCALE_FACTOR>
    <PACKED ELEMENT SIZE>
    <SENTINEL COUNT>
    <SENTINEL VALUES>
    <TOLERANCE>

The <DATA_TABLE_BLOCK_PARAMETER_DATA bulk data> object shall contain information needed to describe the meaning and format of the <DATA_TABLE_BLOCK_DATA bulk data> object.

The layout of the <DATA_TABLE_BLOCK_PARAMETER_DATA bulk data> object shall be as follows. The first five fields shall contain the values of the fields of the corresponding DRM_Table_Property_Description DRM object as described in Table 6.271—DRM_Table_Property_Description of Part 1 of ISO/IEC 18023.

<MEANING> : Element_Type

<VALUE UNIT> : EDCS_Unit_Code

<VALUE SCALE> : EDCS_Unit_Scale_Code

<VALUE TYPE> : Data_Table_Data_Value_Type

<COMPONENT DATA TABLE ECC> : EDCS_Classification_Code

<SUB_EXTENTS> : STF_Data_Table_Extents

<DATA PACKED FLAG> : Boolean

<BASE DATA VALUE> : Single_Value

<MAXIMUM VALUE> : Single_Value

<SCALE_FACTOR> : Byte_Unsigned

<PACKED ELEMENT SIZE> : Byte_Unsigned

<SENTINEL VALUES> : STF_Data_Table_Sentinel_Type[<SENTINEL COUNT> : Byte_Unsigned]

<TOLERANCE> : Long_Float

http://standards.iso.org/ittf/PubliclyAvailableStandards/ISO_IEC_18023-3_Ed1.html