The `TypeKind`

s of “Set”, “String”, “VariableArray” and “FixedArray” all represent “collections” of items.

The recommendation is to ignore `TypeQualifiers`

when reading / processing “collections” Types entries. This is because:

- the value of
`TypeQualifiers`

is fixed for each of these`TypeKind`

s so communicates no additional information - the definitions of the possible “qualifiers” values are problematic and in some cases ambiguous
- the properties described by the “qualifiers” are often implementation dependent (so, for example, may be different between MXF implementations and AAF implementations) – therefore, the
`TypeQualifiers`

may be misleading

## “Set”

An instance of a Type with a `TypeKind`

of “Set” is a collection of items where each item is identified by the item itself (or at least a part of it) – this means that each item must be unique within the collection and the order of items is not significant.

`TypeSize`

can be:

- Zero: this means that the collection can contain any number of items
- Greater than zero: this means that the collection must contain exactly the specified number of items

`BaseType`

must give the UL of a Type which has fixed size (that is, all instances of the referenced Type must be of the same size).

Some implementation notes:

- In MXF a “Set” is implemented using the compound data type called a “batch”.
- In Reg-XML it is not possible to restrict the number of items in a “Set”.
- AAF and MXF place further restrictions on the
`BaseType`

. Reg-XML does not have these restrictions.

## “String”

An instance of a Type with a `TypeKind`

of “String” is an ordered collection of characters or integers.

`TypeSize`

can be:

- Zero: this means that the collection can contain any number of items
- Greater than zero: this means that the collection must contain exactly the specified number of items

`BaseType`

must give the UL of a Type which has a `TypeKind`

of either “Character” or “Integer”.

Some implementation notes:

- In MXF a “String” may, or may not, be zero-terminated.

## “VariableArray”

An instance of a Type with a `TypeKind`

of “VariableArray” is an ordered collection of items.

`TypeSize`

must be zero: this means that the collection can contain any number of items.

`BaseType`

must give the UL of a Type which has fixed size (that is, all instances of the referenced Type must be of the same size).

Some implementation notes:

- In MXF a “VariableArray” is implemented using the compound data type called an “array”.

## “FixedArray”

An instance of a Type with a `TypeKind`

of “FixedArray” is an ordered collection of items.

`TypeSize`

must be greater than zero: this means that the collection must contain exactly the specified number of items.

`BaseType`

must give the UL of a Type which has fixed size (that is, all instances of the referenced Type must be of the same size).

Some implementation notes:

- In MXF a “FixedArray” is implemented in the same way as a Type with a
`TypeKind`

of “Record”.